Hit*_*ath 7 android cryptography encryption-asymmetric
我在Android密钥库中生成一个非对称密钥对,如下所示:我使用公钥进行对称密钥包装并将包装密钥存储到文件中.当我尝试使用私钥解包对称密钥时,我可以在该实例中执行此操作.重新安装我的应用程序后,我无法获得带别名的密钥库条目.请帮忙?
KeyPairGenerator kpg = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
kpg.initialize(new KeyGenParameterSpec.Builder(
Constants.KEY_STORE_ALIAS_NAME,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setKeySize(Constants.ASYMMETRIC_KEY_LENGTH)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.build());
keyPair = kpg.generateKeyPair();
// Code for accessing the key store entry to un wrap the symmetric key
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
KeyStore.Entry entry = ks.getEntry(Constants.KEY_STORE_ALIAS_NAME, null);
PrivateKey privateKey = ((KeyStore.PrivateKeyEntry) entry).getPrivateKey();
Run Code Online (Sandbox Code Playgroud)
存储在Android Keystore 中的密钥是不可提取的。这是一种安全措施
安全功能
Android Keystore 系统保护密钥材料免遭未经授权的使用。首先,Android 密钥库通过防止从应用程序进程和整个 Android 设备中提取密钥材料,减少了在 Android 设备之外未经授权使用密钥材料。其次,Android KeyStore 通过让应用程序指定其密钥的授权使用,然后在应用程序的进程之外强制执行这些限制,来减少对 Android 设备上的密钥材料的未经授权的使用
这意味着密钥不能以任何方式成为 Android 备份服务的一部分。它允许在卸载应用程序后将应用程序数据存储在云上。请参阅备份方法。
私钥可能会被提取并存储在云中,甚至在卸载应用程序后仍然存储在设备中,这将是一个严重的安全风险
如果您需要使用不依赖于重新安装的加密密钥,您可以使用密钥派生算法从用户密码生成对称密钥