[英]Best way to secure Android app sensitive Data?
是的,这是一个非常普遍的问题,但我正在试图找到一种最好的方法来处理触及基础的应用程序,该应用程序将敏感数据分发到应用程序。 任何链接,一般信息建议等..将不胜感激。
由于应用程序将存储从数据库中恢复的持久数据一段时间......所有内容都变得有些敏感。
这在很大程度上取决于您的受众。 通常,Android OS禁止应用程序通过经过验证的Linux文件权限访问彼此的文件(即数据库,首选项文件,存储在应用程序私有目录中的常规文件)。 但是,在有根设备上,应用程序可以获取root访问权限并读取所有内容。 一些要考虑的事情:
总而言之,如果您的信息不是超级敏感的(例如信用卡信息),我建议您坚持使用Android提供的默认安全性(即以纯文本保存所有内容,知道其他应用无法访问它)。
否则,加密是可行的方法。 这不是100%安全(黑客可以解组你的应用程序并弄清楚如何解密数据),但这是一个很大的痛苦,破解并将阻止大多数黑客。 特别是如果你用ProGuard之类的东西混淆你的代码。
你有几个选择。 首先,始终使用HTTPS。 启用HTTPS后,我建议采取两种额外的安全措施:
time=1321802432&key=[generated-key]
generated-key
是从time
参数生成的。 例如: md5(time + salt)
。 当服务器收到此请求时,它可以做两件事:
key
是否确实等于md5(time + salt)
(请注意,只有客户端和服务器知道盐,并且它可以与上面的API密钥类似地进行模糊处理),并且 time
不是太远(例如,如果过去的时间超过1-2分钟,请考虑请求无效)。 如果您还在进行纯HTTP请求,那么第二种方法会更有用,每个人都可以看到正在发送的参数。 而且,从反编译代码中找出它要困难得多。 特别是如果您将键计算逻辑分布在多个类中。
但请注意, 没有什么能够破解你的应用程序。 您可以根据需要进行模糊处理,如果黑客真的决心获取您的数据,他将能够通过反编译您的应用程序并花费许多不眠之夜通过您的代码并弄清楚请求是如何形成的。 保护数据的唯一真正方法是向用户提供密码,除了完成我上面写的所有工作。 您无法从反编译代码中获取仅存在于某人(用户)头部的密码。
(来自Google搜索)
我最近一直在研究这个问题,感谢Google和Bing的搜索,这个页面已经出现了很多。 用于安全地在设备上存储数据的广泛接受的过程是使用诸如AES的强加密算法。 更难的问题是“AES需要一个安全的密钥。你用钥匙做什么?”
谷歌最近发布了针对应用程序的基于云的存储解决方案,因此如果情况允许,您可以考虑将密钥存储在那里。 否则,它似乎在服务器之外获取密钥更好。 如果您可以让用户打入PIN,那实际上效果最好。 您可以进行密码派生以存储密码,您可以重做派生以验证密码
没有“用户在PIN中打孔”部分,我没有找到很多这个问题的好答案。 但是,如果您必须使用APP存储一个,请不要使用密钥。 至少,使用安全密码生成器和/或类似PBKDF2(基于密码的派生函数2)的派生函数生成密钥。
如果我正确阅读帖子,谷歌确实说过一种方法是在应用程序第一次启动时生成密钥,通过MODE_PRIVATE标志将密钥存储到许多文件I / O操作中,并将其用作密钥。 您还可以基于该主密钥导出其他密钥,而NIST实际上也会根据这些内容提出建议。
无论是否信任主密钥方法,我都会留给您。 此密钥将在root设备上公开。 我也承认我还在研究这个问题
Android上的每个应用程序都在安全的沙箱环境中运行,因此如果没有正确的握手,系统上的其他进程将无法访问您的代码或私有数据。 但是,由于应用程序设计不佳,仍然存在许多漏洞。 来自Android开发者网站的链接建议您提供一些安全性方面的好建议 - https://developer.android.com/training/articles/security-tips.html
如果您想要确保用户除了查看您的应用程序之外无法查看数据,那么加密确实是唯一的方法。 如果设备已植根,则用户甚至可以访问“受保护”存储。 即使加密也不是完全安全的,因为您需要在某个时刻解密数据才能显示它。 你会劝阻休闲浏览器,但不会劝阻黑客。
在HTTPS上使用SSL来传输数据而不是HTTP,您需要在Web服务器上设置证书,而不是非常确定它是如何工作的。
如果您真的关心数据,那么在发送数据之前,请使用独特的算法对其进行进一步加密,然后在到达应用程序时对其进行解密。 我想这就是它的全部......除非你需要一些非常强大的东西,然后根据TCP和/或使用另一个端口开发自己的协议..也许这会有所帮助
http://en.wikipedia.org/wiki/Secure_Sockets_Layer http://developer.android.com/reference/javax/net/ssl/package-summary.html http://blog.synyx.de/2010/06/机器人和自签署的SSL-证书/
至于在应用程序中存储数据,您可以在存储之前加密数据,或者您可以使用除SQLite之外的其他格式以提高安全性,因为您可以非常轻松地使用浏览器查看sqlite数据库。
除非电话根植,否则不应该从中提取数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.