【问题标题】:Is still valid password hashing using md5 or sha1?使用 md5 或 sha1 的密码散列仍然有效吗?
【发布时间】:2019-06-23 04:04:11
【问题描述】:

刚才我在做一个金融项目。在这里,团队正在考虑将MD5 用于password hashing。 但是,今天很容易复制SHA1MD5 密码来解密,如果它们是复杂密码,则包括: My$uper$ecur3PAS$word+448,您可以使用在线页面解密它,就可以了。 中小型开发人员(包括我)使用那些hashing methods,但我认为不足以提供数据库的安全性。 (不包括firewallsnetwork securityiptables等)。

谁能告诉我解决此漏洞的更好方法是什么?

【问题讨论】:

    标签: cryptography md5 sha1 password-hash cryptographic-hash-function


    【解决方案1】:

    您的想法是正确的,MD5 和 SHA1 永远不应该用于密码散列。我会按优先顺序推荐以下内容:

    • 氩气2
    • bcrypt
    • 加密
    • PBKDF2

    如果您使用您使用的语言/框架标记您的问题,我可以推荐特定的库或方法。

    另外请注意,加密 不是在这里使用的正确词。这些是密​​码散列算法,而不是加密算法。

    【讨论】:

    • 嗯,这是一个普遍的问题。基本上 node/Js、python、c# 和 php 对于大多数堆栈溢出用户来说都是受欢迎和有用的
    • 优先顺序是您的偏好还是安全专家的偏好(或两者兼而有之)?
    • 我想说两个,但公平地说,意见各不相同。一般认为 (argon2, bcrypt, scrypt) > (PBKDF2)。但在那个领先的括号中,意见往往会有所不同。我认为,实际上,argon2、bcrypt 或 scrypt 中的任何一个都非常好。
    【解决方案2】:

    根据OWASP Password Storage Cheat Sheet,建议是:

    • Argon2 是密码哈希竞赛的获胜者,应该被视为您新应用程序的首选;
    • 需要 FIPS 认证或许多平台上的企业支持时的 PBKDF2;
    • scrypt 需要抵御任何/所有硬件加速攻击,但不需要支持。
    • bcrypt,其中 PBKDF2 或 scrypt 支持不可用。

    对于大多数与安全相关的用例,MD5 和 SHA1 不受保护,因为可能会发现与这些算法的冲突。换句话说,给定一个输入及其哈希值,就可以推导出另一个具有相同哈希值的输入。

    SHA-2 散列算法组在许多安全用例中都是安全的,但对于密码散列却不是,因为与上述算法相比,它们的速度非常快。并且性能是我们不希望密码散列的东西,因为这会使攻击者更容易通过在短时间内尝试各种密码来执行暴力攻击。

    因此,上述 4 种算法在内存、计算能力和时间方面都是昂贵的。这些值通常是参数化的,以便随着新技术随着时间的推移提高计算能力,它们可以调整到一个较高的值。因此,在使用这些算法时,正确选择工作因子值非常重要。设置一个非常低的估值可能会达到目的。

    除此之外,还应该使用盐。

    再次来自同一个 OWASP 来源:

    • 在创建每个存储的凭据时生成唯一的盐(不仅仅是每个用户或系统范围);

    • 使用加密性强的随机数据;

    • 在存储允许的情况下,使用 32 字节或 64 字节的盐(实际大小取决于保护功能);
    • 方案安全性不依赖于隐藏、拆分或以其他方式隐藏盐。

    盐有两个用途:

    • 防止受保护的表单泄露两个相同的凭据和
    • 在不依赖凭证复杂性的情况下将增强熵馈送到保护功能。

    第二个目标是使对单个凭据的预先计算的查找攻击和对群体的基于时间的攻击变得难以处理

    【讨论】:

    • 在散列密码时,冲突实际上不是问题,而是速度,正如你所提到的。只是为了更清楚一点,使用 GPU 每秒可以计算高达 200 Giga MD5。
    猜你喜欢
    • 2013-04-24
    • 2011-05-18
    • 2021-07-03
    • 2015-05-03
    • 2011-06-08
    • 2011-08-11
    • 2012-04-19
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多