如何在安卓系统中安全地存储加密密钥?
我想知道如何在安卓系统中安全地存储加密密钥?保护加密和密钥的秘密的最佳方案是什么?
我想知道如何在安卓系统中安全地存储加密密钥?保护加密和密钥的秘密的最佳方案是什么?
从您的评论中,您需要使用当前Android版本和旧版本的本地密钥加密数据
Android 密钥库旨在生成和保护您的密钥。但它不适用于低于 18 的 API 级别,并且在 API 级别 23 之前有一些限制。
您将需要一个随机对称加密密钥,例如 AES。AES 密钥用于加密和解密数据。我将总结您的选项,以根据Android API级别安全地生成和存储它。
API 级别< 18:Android 密钥库不存在。向用户请求密码,从密码派生加密密钥,缺点是需要在应用程序启动时提示输入密码。加密密钥它不存储在设备中。每次使用密码启动应用程序时都会计算它
API 级别 >=18 <23:Android 密钥库可用,不支持 AES。使用默认加密提供程序(不使用 AndroidKeystore)生成随机 AES 密钥。在 Android 密钥库中生成 RSA 密钥对,并使用 RSA 公钥加密 AES 密钥。将加密的 AES 密钥存储到 Android 共享首选项中。当应用程序启动时,使用 RSA 私钥解密 AES 密钥
API 级别 >=23:提供 AES 支持的 Android 密钥库。生成一个随机的AES密钥,用于Android密钥库。您可以直接使用它。
要加密以可以使用算法。它还需要一个随机初始化向量(IV)来加密数据,但它可以是公开的。AES/CBC/PKCS7Padding
选择:
API 级别 >14:Android Key Chain:KeyChain 是一个系统范围的凭据存储。您可以使用可供应用程序使用的私钥安装证书。使用预安装的密钥来加密/解密您的 AES 密钥,如上面的第二种情况所示。
外部令牌:受保护的密钥不存储在设备中。您可以使用包含私钥/公钥对的外部令牌,该令牌允许您加密 AES 密钥。可以使用蓝牙或NFC访问令牌
您无法将加密密钥放在apk文件中。您可能希望将其保存在远程服务器中并使用服务器进行解密。或者,您可以通过对密钥进行编码并将其保存在不明显的地方来使其他人感到困难。但是没有防弹解决方案。