是的,这是一个非常普遍的问题,但我正在试图找到一种最好的方法来处理触及基础的应用程序,该应用程序将敏感数据分发到应用程序.任何链接,一般信息建议等..将不胜感激.
由于应用程序将存储从数据库中恢复的持久数据一段时间......所有内容都变得有些敏感.
Fel*_*lix 101
这在很大程度上取决于您的受众.通常,Android操作系统禁止应用程序通过经过验证的Linux文件权限访问彼此的文件(即数据库,首选项文件,存储在应用程序私有目录中的常规文件).但是,在有根设备上,应用程序可以获取root访问权限并读取所有内容.一些要考虑的事情:
总而言之,如果您的信息不是超级敏感的(例如信用卡信息),我建议您坚持使用Android提供的默认安全性(即以纯文本保存所有内容,知道其他应用无法访问它).
否则,加密是可行的方法.这不是100%安全(黑客可以解组你的应用程序并弄清楚如何解密数据),但这是一个很大的痛苦,破解并将阻止大多数黑客.特别是如果你用ProGuard之类的东西混淆你的代码.
你有几个选择.首先,始终使用HTTPS.启用HTTPS后,我建议采取两种额外的安全措施:
time=1321802432&key=[generated-key]generated-key是从所生成的time参数.例如:md5(time + salt).当服务器收到此请求时,它可以做两件事:
key确实等于md5(time + salt)(注意只有客户端和服务器知道salt,并且它可以与上面的API密钥类似地进行模糊处理),并且time过去不是太远了(例如,如果过去超过1-2分钟,请认为请求无效).如果您还在进行纯HTTP请求,则第二种方法更有用,每个人都可以看到正在发送的参数.而且,从反编译代码中找出它要困难得多.特别是如果您将键计算逻辑分布在多个类中.
但请注意,没有什么能够破解你的应用程序.您可以根据需要进行模糊处理,如果黑客真的决心获取您的数据,他将能够通过反编译您的应用程序并花费许多不眠之夜通过您的代码并弄清楚请求是如何形成的.保护数据的唯一真正方法是向用户提供密码,除了完成我上面写的所有工作.您无法从反编译代码中获取仅存在于某人(用户)头部的密码.
Joe*_*nte 13
(来自Google搜索)
我最近一直在研究这个问题,感谢Google和Bing的搜索,这个页面已经出现了很多.用于安全地在设备上存储数据的广泛接受的过程是使用诸如AES的强加密算法.更难的问题是"AES需要一个安全的密钥.你用钥匙做什么?"
谷歌最近发布了针对应用程序的基于云的存储解决方案,因此如果情况允许,您可以考虑将密钥存储在那里.否则,它似乎在服务器之外获取密钥更好.如果您可以让用户打入PIN,那实际上效果最好.您可以进行密码派生以存储密码,您可以重做派生以验证密码
没有"用户在PIN中打孔"部分,我没有找到很多这个问题的好答案.但是,如果您必须使用APP存储一个,请不要使用密钥.至少,使用安全密码生成器和/或类似PBKDF2(基于密码的派生函数2)的派生函数生成密钥.
如果我正确阅读帖子,谷歌确实说过一种方法是在应用程序第一次启动时生成密钥,通过MODE_PRIVATE标志将密钥存储到许多文件I/O操作中,并将其用作密钥.您还可以基于该主密钥导出其他密钥,而NIST实际上也会根据这些内容提出建议.
无论是否信任主密钥方法,我都会留给您.此密钥将在root设备上公开.我也承认我还在研究这个问题