在Android中存储密钥

我正在为Android编写应用程序,我必须存储两个密钥,我将使用它来加密/解密某些消息。 (我必须存储私钥RSA)。 我读了:

https://developer.android.com/training/articles/keystore.html#WhichShouldIUse

还有一节标题为:

在Keychain或Android Keystore Provider之间进行选择

但是,我不确定我应该选择什么来获得最安全的解决方案。

请帮帮我 。

正如页面所说:

如果需要系统范围的凭据,请使用KeyChain API

KeyChain API的目的是使用用户名/密码凭据来获取此应用(以及潜在的其他应用)可以使用的“令牌”。 KeyChain还用于在后台同步私人信息(如邮件)。

但在您的情况下,您只想存储一个私有RSA密钥。 在这种情况下,Keystore是一个更好的解决方案。 请注意,密钥库仅适用于4.3+设备,这是因为它使用硬件支持的安全存储(如ARM Trustzone和其他安全执行环境)来存储其私钥(如果存在硬件模块)。 此function已在Android 4.3中添加。

要使用密钥库,您需要使用公钥生成证书,并使用私钥在密钥库中保存。 Keystore使用用户锁屏模式/ pin / etc。 (如果存在)加密私钥。 请注意,这有时会导致令人恼火的事实,即只要用户没有擦除它的证书存储区或删除应用程序(在Android <= 5下),用户就无法再禁用其锁定屏幕,因此请务必删除证书当不再需要钥匙时。 密钥库将私钥保存在硬件模块中(如果存在),因此提取私钥或其他应用程序使用私钥加密数据要困难得多。 仍然不是100%万无一失,因为发现了新的漏洞 ,root可以绕过(以某种方式)这个额外的保护层。 但它仍然比将私钥保存在文件中更好。

此外,如果您想要更深入地了解这一切是如何工作的,我会建议您阅读本文 ,其中详细介绍了Android中的密钥库和其他安全机制。