4

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

有人可以告诉我解决此漏洞的更好方法是什么吗?

4

2 回答 2

6

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

  • 氩2
  • bcrypt
  • 加密
  • PBKDF2

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

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

于 2019-01-29T23:17:21.253 回答
6

根据OWASP 密码存储备忘单,建议是:

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

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

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

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

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

再次来自同一个 OWASP 源:

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

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

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

盐有两个目的:

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

第二个旨在使对个人凭证的预先计算的查找攻击和对人群的基于时间的攻击变得难以处理

于 2019-01-30T07:19:50.317 回答