应用程序密码和SQLite安全性

Bry*_*yan 6 database sqlite security passwords privacy

我一直在google上搜索有关应用程序密码和SQLite安全性的信息已有一段时间了,我发现的任何内容都没有真正回答我的问题.

这是我想弄清楚的:

1)我的应用程序将具有可选的密码活动,该活动将在首次打开应用程序时调用.我的问题是a)如果我通过android偏好或SQLite数据库存储密码,我如何确保密码的安全性和隐私,以及b)如何处理密码恢复?

关于b)从上面开始,我考虑过在启用密码功能时需要电子邮件地址,以及在请求密码恢复时使用的密码提示问题.成功回答提示问题后,密码将通过电子邮件发送到提交的电子邮件地址.我对电子邮件方法的安全性和隐私性并不完全有信心,特别是如果在用户连接到开放的公共无线网络时发送电子邮件.

2)我的应用程序将使用SQLite数据库,如果用户有数据库,它将存储在SD卡上.无论是存储在手机还是SD卡上,我都有哪些选项可用于数据加密,以及它如何影响应用程序性能?

提前感谢您回答这些问题所花费的时间.我认为可能还有其他开发商正在努力解决同样的问题.

roo*_*ook 3

1) 密码恢复是危险的。问题的答案会削弱密码的强度,这是最薄弱环节的原理。 由于这个(非常)不安全的功能,萨拉·佩林(Sara Palin)的电子邮件黑客攻击成为可能。此外,如果您以“可恢复格式”存储密码,如 AES 等分组密码或 RC4 等流密码或 RSA 等非对称密码,那么您显然违反了CWE-257。如果你真的需要这个功能,你必须要求用户重置他们的密码,如果他们不知道,那你为什么需要告诉他们呢?

密码必须始终使用安全消息摘要进行哈希处理。目前许多消息摘要函数都是不安全的,md4、md5、sha0 和 sha1 都非常脆弱,永远不应该用于密码。目前 sha2 家族的任何成员都是最好使用的函数,我推荐 SHA-256。NIST 目前正在举办 sha3 竞赛,直到 2012 年某个时候才会最终确定。

密码还必须使用较大的随机值进行“加盐”。这可能是数据库中的另一列,然后将其附加到纯文本密码,然后将其传递到消息摘要函数。这使得字典攻击不可能发生,除非攻击者能够获得盐,这也使得预先计算的攻击要成功进行需要消耗更多的资源。尽管众所周知,加盐并不能阻止彩虹表,它只是意味着您需要一组更大的彩虹表。

2)您要将加密数据库的密钥放在哪里?Sqlite 只是一个文件,您可以对其进行加密,然后在应用程序启动时对其进行解密,这只会增加一些加载时间,但在运行时它会同样快。真正的问题是,设备上绝对没有任何地方可以放置攻击者无法获取的秘密。攻击者比你对设备有更多的控制权,攻击者可以越狱设备并为所欲为。即使密钥在运行时传输,仍然可以通过查看设备的内存来获取。任何加密数据库的努力都可能被破坏,这可能会使加密变得更加困难,但它不会阻止熟练的黑客。