在安卓设备中存储密钥

7

我正在为Android编写应用程序,需要存储两个密钥,以便加密/解密一些消息。(我需要存储私钥RSA)。我已经阅读了:

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

有一部分标题为:

选择钥匙串或Android密钥库提供程序

但是,我仍然不确定我应该选择哪个才能获得最安全的解决方案。

请帮助我。

1个回答

5
如此页面所述:
使用 KeyChain API 时,您需要系统范围的凭据
KeyChain API 的目的是使用用户名 / 密码凭据获取此应用程序(以及潜在的其他应用程序)可以使用的“令牌”。 KeyChain 在后台也经常用于同步私有信息(例如邮件)。
但在您的情况下,听起来您只想存储私有 RSA 密钥。在这种情况下,密钥库是更好的解决方案。请注意,密钥库仅适用于设备 4.3+,这是因为它使用硬件支持的安全存储(例如 ARM Trustzone 和其他安全执行环境)来存储其私有密钥(如果存在硬件模块)。此功能已添加到 Android 4.3 中。
要使用密钥库,您需要使用公钥生成证书,并将其与私钥一起保存在密钥库中。密钥库使用用户的锁屏图案 / PIN 码等来加密私钥。请注意,这有时会导致一个令人恼火的事实,即用户在用户不清除其证书存储或删除该应用程序之前无法禁用其锁屏(在 Android <= 5 下),因此请确保在不再需要密钥时删除证书。密钥库将在硬件模块中保存私钥(如果存在),因此更难以提取私钥,或让其他应用程序使用私钥加密数据。但它仍然不是 100% 完美的,因为会发现新的漏洞,而 root 可以规避(在某种程度上)这个额外的保护层。但与将您的私钥保存在文件中相比,它仍然更好。
此外,如果您想深入了解所有这些“底层”工作的工作原理,我建议阅读本文,该文对 Android 中的密钥库和其他安全机制进行了详细介绍。

非常好的帖子,谢谢!我有一个问题,因为引用的论文涉及到Lollipop版本中的更改:你知道安卓的后续版本是否改进了密钥库的加密吗?我找到的可用信息在这一点上并不是很清楚。 - Frank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接