Android KeyStore安全密钥导入- get KM_ERROR_UNKNOWN_ERROR



我最近一直在围绕Android的Secure Key Import功能开发一个解决方案,并遇到了一个问题。

我遵循文档中的程序。在最后一步,当调用keyStore.setEntry(...)时,我会抛出代码-1000的错误,这是KM_ERROR_UNKNOWN_ERROR(错误代码)。我真的不知道该怎么做。你知道问题出在哪里吗?

相关代码:

// (app)    send attestation challenge request to server
// (server) generate and send challenge to the app
// (app)    use challenge to generate a PURPOSE_WRAP_KEY key pair
// (app)    get certificate and send to server
// (server) do wrap operations and return a blob (ASN.1 sequence as required in docs)
// (app) code below
byte[] wrappedKeySequence = response.body().getSequenceAsBytes();
AlgorithmParameterSpec spec = new KeyGenParameterSpec.Builder(WRAP_KEY_ALIAS, KeyProperties.PURPOSE_WRAP_KEY)
.setDigests(KeyProperties.DIGEST_SHA256)
.build();
KeyStore.Entry wrappedKeyEntry = new WrappedKeyEntry(wrappedKeySequence, WRAP_KEY_ALIAS, WRAP_ALGORITHM, spec);
String keyAlias = "SECRET_KEY";
keyStore.setEntry(keyAlias, wrappedKeyEntry, null);

更多随机细节:

  • 我正在尝试导入AES128密钥
  • 只用于加密数据
  • 针对API 28及以上版本,根据文档
  • 的要求

再次感谢您的帮助。

谢谢,g .

更新:

我已经找到了这个特定错误的原因,但又发现了另一个错误。

也就是说,我使用了定义MIN_SECONDS_BETWEEN_OPS的标记403。它在types.hal文件中,人们会期望它在任何地方都能实现/有效,但似乎情况并非如此。但是,我只在一款三星手机上进行了测试,所以它可能会被其他制造商实现,甚至在其他三星手机上。

无论如何,下一个错误是INVALID_ARGUMENT(-38),与名称不同,它和这个错误一样神秘。文档说它应该发生在RSA的东西(我试图导入一个AES密钥),所以传奇继续。

如果我有其他发现,我会更新这个答案。

更新2:关于INVALID_ARGUMENT错误,我没有任何好消息。即使当我执行未编辑的CTS测试代码时,我也会得到它,因为制造商在离开工厂之前使用CTS测试来验证设备是否工作。

现在我已经暂停了这个功能的工作,如果我回来的话,我会在必要的时候更新。

相关内容

  • 没有找到相关文章

最新更新