在Android中存储密钥

时间:2016-11-23 21:40:50

标签: android security keystore android-keystore android-security

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

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

并且有一个标题为:

的部分
  

在钥匙串或Android密钥库提供商之间进行选择

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

请帮帮我。

1 个答案:

答案 0 :(得分:5)

如页面所示:

  

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

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

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

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

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