卸载应用程序时,KeyStore条目是否会丢失?

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)

ped*_*ofb 6

存储在Android Keystore 中的密钥是不可提取的。这是一种安全措施

安全功能

Android Keystore 系统保护密钥材料免遭未经授权的使用。首先,Android 密钥库通过防止从应用程序进程和整个 Android 设备中提取密钥材料,减少了在 Android 设备之外未经授权使用密钥材料。其次,Android KeyStore 通过让应用程序指定其密钥的授权使用,然后在应用程序的进程之外强制执行这些限制,来减少对 Android 设备上的密钥材料的未经授权的使用

这意味着密钥不能以任何方式成为 Android 备份服务的一部分。它允许在卸载应用程序后将应用程序数据存储在云上。请参阅备份方法

私钥可能会被提取并存储在云中,甚至在卸载应用程序后仍然存储在设备中,这将是一个严重的安全风险

如果您需要使用不依赖于重新安装的加密密钥,您可以使用密钥派生算法从用户密码生成对称密钥