我正在阅读关于存储密钥(加密/解密数据)的内容,似乎没有办法实现这一点。只能增加攻击者完成此任务的难度。
真的很喜欢吗?
到目前为止我得到了什么:
以共享首选项(私人模式)存储 - 有根电话将能够检索它。
NDK C / C ++本机代码,创建.so文件 - 难以反编译,但可以调用此.so文件并检索它。
存储密钥的网络服务器看起来没用,如果必须发送凭据,恶意软件可以记录密钥点击。
我太偏执了吗?
答案 0 :(得分: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只允许应用程序生成加密密钥(无导入功能)
也可以保护密钥,要求用户解锁设备和/或显示指纹
例如,为了保护密码,可以生成受指纹保护的密码密钥,并使用它来加密可以存储在首选项中的用户凭据
答案 1 :(得分:1)
你是对的。大多数安全专家会告诉你,没有一个绝对安全的系统。考虑它的正确方法是攻击者必须使用的资源水平来打破你的系统。
然后,您可以在数据价值与其他考虑因素(如解决方案的复杂性和其他成本)之间平衡安全措施。
要详细说明您的示例,假设您并不担心手机的合法所有者/用户是攻击者,您可以按如下方式进行评估:
您应该考虑使用"安全元素"的可能性。有关一些好的信息,请参阅安全性Stack Exchange上的this post。