1

如果您将 webapp2 与 Google App Engine 一起使用,您会看到只有一种方法可以使用“create_user”方法创建用户 [auth/models.py line:364]

但是该方法调用“security.generate_password_hash”方法,其中不可能使用 SHA 512

Q1:我想知道使用 webapp2 和 App Engine Python 创建 SHA 512 密码的最佳方法是什么?

Q2:使用 SHA 512 代替 webapp2 (SHA1) 提供的加密是个好主意,还是足够了?

4

1 回答 1

2

正如您所观察到的,默认的 User 模型不提供任何方法来自定义正在使用的散列函数。您可以对其进行子类化并重新定义有问题的方法以获取哈希参数,或者向 webapp2 项目提交功能请求。

不过,Webapp2 的密码散列有更大的问题,因为它不进行密码拉伸。虽然它可以选择(!)对哈希进行加盐,但它不会对其进行迭代,这使得蛮力攻击比攻击者应该更实用。它应该实现正确的密码原语,例如 PBKDF2、SCrypt 或 BCrypt。

为了回答您关于哈希函数相对优势的问题,虽然 SHA1 显示出一些弱点,但没有人成功地产生了碰撞,更不用说原像了。此外,HMAC 结构可以产生安全的 HMAC,即使哈希函数对冲突攻击很弱;可以说,甚至 MD5 也可以在这里工作。

当然,攻击只会变得更好,永远不会更糟,所以为未来做准备是个好主意。但是,如果您担心安全性,那么您应该更关注缺乏拉伸而不是哈希函数的选择。如果您真的关心安全性,您不应该自己进行身份验证 - 您应该使用用户 API 或 OAuth,这样其他人就可以安全地存储密码。

于 2012-05-28T06:43:59.870 回答