我目前正在研究在Android应用程序中存储/使用机密密钥的可能性.我发现Nikolay Elenkov的博客对这个主题非常有帮助,我学到了很多关于Android密钥库和一些基于硬件的实现的知识.
我仍然对安全性和用户体验方面有一些疑问.
根据我的理解,在这种配置中,从用户密码(加上盐以防止彩虹表攻击)导出(使用PBKDF2)主密钥并用于加密秘密.据我所知,密码是用于锁定屏幕的密码.
在非root用户手机上,只有用户'keystore'能够读/写加密文件,每当应用程序想要访问文件时,都必须调用keystore守护进程,该守护进程检查其UID是否有权访问该文件(授权存储在sqlite数据库中).
但仍有一些我无法弄清楚的细节:
至于基于硬件的实现,SoC制造商似乎提供符合[Global Platform TEE][2](可信执行环境)的嵌入式受信任应用程序和API的解决方案,使Google能够提供其密钥库的硬件支持实现.因此,可以在TEE中存储密钥,在TEE内部请求创建RSA密钥对,并使用存储在TEE内的密钥来签名或检查数据.这样,人们就可以使用密钥进行基本的加密操作,而无需离开TEE.
如果我做对了,那么Google密钥库守护程序使用与软件实现中相同的机制来提供对这些密钥的访问控制.唯一的区别是使用了对存储在TEE中的密钥的引用而不是加密密钥本身.
如果之前说明的所有内容都是正确的,我想在root用户手机上可以修改权限数据库,以便具有任意UID的应用程序可以使用存储在TEE中的任何密钥签署数据.我对吗 ?
谢谢你的时间!