我在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();
答案 0 :(得分:2)
Android Keystore中存储的密钥不可提取。这是一项安全措施
安全功能
Android Keystore系统可保护密钥材料免遭未经授权的使用。首先,Android Keystore通过阻止从应用程序进程和整个Android设备中提取密钥材料,减少了对Android设备外部密钥材料的未授权使用。其次,Android KeyStore通过使应用程序指定其密钥的授权使用,然后在应用程序之外强制执行这些限制来减轻Android设备上未授权使用密钥材料的速度。过程
这意味着密钥不能以任何方式成为Android备份服务的一部分。它允许在卸载应用程序后将应用程序数据存储在云上。请参阅HowBackupWorks。
私钥可以被提取并存储在云中,甚至在卸载应用程序时它们仍然存储在设备中,这将是一个严重的安全风险
如果您需要使用不依赖于重新安装的加密密钥,则可以使用密钥派生算法从用户密码生成对称密钥