如何安全地在Android中存储密钥?

ram*_*ral 2 security android cryptography android-ndk

我正在阅读关于存储密钥(加密/解密数据)的内容,似乎没有办法实现这一点.人们只能增加攻击者实现这一目标的难度.

它真的像那样?

到目前为止我得到了什么:

存储在共享首选项(私人模式) - Root电话将能够检索它.

NDK C/C++本机代码,创建.so文件 - 难以反编译,但可以调用此.so文件并检索它.

用于存储密钥的Web服务器看起来毫无用处,如果必须发送凭据,则恶意软件可以记录密钥.

我太偏执了吗?

ped*_*ofb 8

为什么不使用Android Keystore?它是为此目的而设计的 https://developer.android.com/training/articles/keystore.html

Android Keystore系统允许您将加密密钥存储在容器中,从而使从设备中提取更加困难

与共享首选项或私有文件(如提取防护或密钥使用授权)相比,它具有相当大的优势.我不考虑在服务器上存储私钥

安全功能

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

在一些具有专用硬件的设备中,它在其上实现.作为程序员,您可以知道密钥是硬件保护的

这个概念类似于iOS KeyChain,但是IOS KeyChain可以存储密码,生成和导入加密密钥,Android KeyStore只允许应用程序生成加密密钥(没有导入功能)

还可以保护密钥,要求用户解锁设备和/或呈现指纹

例如,为了保护密码,可以生成受指纹保护的密码密钥,并使用它来加密可以存储在首选项中的用户凭证