Android KeyStore 安全密钥导入 - 正在获取 KM_ERROR_UNKNOWN_ERROR
Android KeyStore secure key import - getting KM_ERROR_UNKNOWN_ERROR
我最近一直在围绕 Android (info here) 的 Secure Key Import
功能开发一个解决方案,并且 运行 遇到了问题。
我按照记录的程序进行操作。在最后一步,当调用 keyStore.setEntry(...)
时,我得到一个错误,代码 -1000
是 KM_ERROR_UNKNOWN_ERROR
(error codes)。我真的不知道如何从这里开始。关于问题可能出在哪里的任何想法?
部分相关代码:
// (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
文件中,人们会期望它到处都是 implemented/valid,但似乎并非如此。但是,我只在一台三星 phone 上进行测试,因此它可能会被其他制造商实现,甚至可能会在其他三星 phone 上实现。
无论如何,下一个错误是 INVALID_ARGUMENT (-38),与名称不同,它与这个错误一样神秘。文档说它应该发生在 RSA 的东西上(我正在尝试导入 AES 密钥),所以传奇还在继续。
如果我发现其他问题,我会更新这个答案。
更新二:
关于 INVALID_ARGUMENT 错误,我没有任何好消息。我什至在执行未经编辑的 CTS 测试代码时也得到了它,它应该可以工作,因为制造商使用 CTS 测试来验证设备在出厂前是否工作。
现在我已经暂停了该功能的工作,如果我回来使用它,我会根据需要进行更新。
我最近一直在围绕 Android (info here) 的 Secure Key Import
功能开发一个解决方案,并且 运行 遇到了问题。
我按照记录的程序进行操作。在最后一步,当调用 keyStore.setEntry(...)
时,我得到一个错误,代码 -1000
是 KM_ERROR_UNKNOWN_ERROR
(error codes)。我真的不知道如何从这里开始。关于问题可能出在哪里的任何想法?
部分相关代码:
// (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
文件中,人们会期望它到处都是 implemented/valid,但似乎并非如此。但是,我只在一台三星 phone 上进行测试,因此它可能会被其他制造商实现,甚至可能会在其他三星 phone 上实现。
无论如何,下一个错误是 INVALID_ARGUMENT (-38),与名称不同,它与这个错误一样神秘。文档说它应该发生在 RSA 的东西上(我正在尝试导入 AES 密钥),所以传奇还在继续。
如果我发现其他问题,我会更新这个答案。
更新二: 关于 INVALID_ARGUMENT 错误,我没有任何好消息。我什至在执行未经编辑的 CTS 测试代码时也得到了它,它应该可以工作,因为制造商使用 CTS 测试来验证设备在出厂前是否工作。
现在我已经暂停了该功能的工作,如果我回来使用它,我会根据需要进行更新。