android:检查密钥是否在安全硬件中

cunj1qz1  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(697)

对于我的应用程序,我创建了一个aes密钥,并希望检查该密钥是否存储在安全硬件中。我在google上找到了一个rsa的例子,但我觉得这不重要。下面是我发现的rsa示例:

final KeyGenerator keyGenerator = KeyGenerator
        .getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");

final KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder("key_alias",
        KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
        .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
        .build();

keyGenerator.init(keyGenParameterSpec);
final SecretKey secretKey = keyGenerator.generateKey();

final Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);

KeyFactory keyFactory = KeyFactory.getInstance(secretKey.getAlgorithm(), "AndroidKeyStore");
KeyInfo keyInfo = keyFactory.getKeySpec(secretKey, KeyInfo.class);
keyInfo.isInsideSecureHardware();

但是,第一行返回 no such algorithm: AES for provider AndroidKeyStore 例外。但是,难道不能检查aes密钥是否也在aes的安全硬件中吗?
理论上我可以使用非对称加密,因为这只是一个小片段的数据,我想en/解密,但我仍然希望如果我可以使用对称加密。
你们有办法吗?
编辑:添加了进一步的实现细节。

u4dcyp6a

u4dcyp6a1#

要获取对称密钥的keyinfo,需要以下代码:

SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(secretKey.getAlgorithm(), "AndroidKeyStore");
KeyInfo keyInfo = (KeyInfo) secretKeyFactory.getKeySpec(secretKey, KeyInfo.class);

相关问题