【问题标题】:SHA 512 Password with webapp2 and App Engine?webapp2 和 App Engine 的 SHA 512 密码?
【发布时间】:2012-05-27 05:55:44
【问题描述】:

如果您将 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) 提供的加密是个好主意,还是足够了?

【问题讨论】:

    标签: python google-app-engine webapp2


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢尼克,因为我正在做一个样板来推广 App Engine,展示如何创建自己的帐户(没有 yahoo、google、linkedin、twitter、facebook 等的用户)以及使用第三方登录网站 (OAuth) 我应该自己进行身份验证。顺便说一句,很好的答案,我会继承它。这是项目appengine.protoboard.clSmart Sparrow 祝你好运
    • Nick 的建议与此相反:首先,密码最常落入针对弱密码的字典攻击和社会工程学。蛮力 SHA1 是您需要担心的事情列表的方式。其次,您自己添加的机制会增加引入其他错误的风险。
    猜你喜欢
    • 2014-05-12
    • 2019-02-25
    • 2014-08-15
    • 2012-04-19
    • 2011-10-10
    • 1970-01-01
    • 2015-07-13
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多