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

时间:2018-01-18 13:02:41

标签: 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();

1 个答案:

答案 0 :(得分:2)

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

  

安全功能

     

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

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

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

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