跳转至

Cryptographic Vulnerability: Weak Hashing Algorithm

密码学漏洞:弱哈希算法

描述

哈希函数是一种用于编码数据并返回固定大小哈希值的函数,其目的是将碰撞的可能性(两个不同输入具有完全相同哈希值的机会非常小)降至最低,这些函数可用于验证消息或文件的完整性、识别文件或数据、或检查密码或口令。

常见哈希算法:

  • MD5:消息摘要算法(MD5)于1991年设计,旨在替代MD4。在2005年3月, 发现了两个具有相同MD5哈希值的不同文件。一年后,发布了一种能够在一分钟内找到碰撞的算法。 对于哈希算法,找到具有相同哈希值的两个不同输入在计算上应该是不可行的,MD5在这一要求上遭遇了灾难性的失败,2008年软件工程研究所得出结论,MD5“在密码学上已被破解且不适合进一步使用”。
  • SHA1:安全哈希算法1(SHA1)由NSA设计。与MD5一样,SHA1容易受到碰撞攻击。到2005年,SHA1被认为是不安全的,2011年国家标准与技术研究院(NIST)正式弃用了它。
  • SHA2:也是由NSA设计的一组哈希算法,SHA-2与SHA1有很大不同,被认为是高度安全的。
  • SHA-256:是SHA-2集合的成员。后缀256代表256位,这是生成的哈希值的长度。SHA-256是一种安全且值得信赖的行业标准,发生碰撞的机会几乎不可能(2^256)。
  • SHA3:SHA3是NIST在2015年发布的安全哈希算法标准系列的最新成员。尽管属于同一系列标准,但SHA3在内部不同于SHA1和SHA2的类MD5结构,并且也被认为是高度安全的。
  • Argon2:是2015年密码哈希竞赛的获胜者。现在它被认为是可用的最安全的密码哈希算法之一。它已被许多安全和加密标准采用,包括互联网工程任务组(IETF)、密码哈希竞赛(PHC)和开放Web应用程序安全项目(OWASP)。
  • Bcrypt:Bcrypt引入于1999年,是一种慢速自适应算法,旨在高度抵御暴力破解。它的适应性在于它赋予用户控制计算成本的能力,这意味着它可以随着硬件随时间的演变而进行调整。 Bcrypt也被许多安全标准采用,包括开放Web应用程序安全项目(OWASP)和支付卡行业数据安全标准(PCI DSS)。
  • HMAC:基于哈希的消息验证代码不是一种哈希算法,而是一种使用哈希算法与密钥结合的加密身份验证技术,HMAC的强度取决于底层的哈希算法,因此不应与已弃用和较弱的哈希算法一起使用。

MD5SHA-1 是不安全的,绝不能使用,即使与HMAC一起使用也不行。

建议

为了减轻使用弱哈希算法的风险,请考虑以下事项:

  • 避免使用MD5和SHA-1,因为这些算法不安全且容易发生碰撞。它们不应被用于任何目的,包括HMAC。

  • 对于哈希和签名验证,选择SHA-256或SHA-3。它们提供高安全性并且是广泛接受的行业标准。

  • 对于敏感数据(PII、PHI...)的哈希处理,考虑使用Argon2或Bcrypt。它们旨在抵御暴力攻击,并且是安全标准推荐的。

  • 在使用HMAC进行消息验证时,确保它与安全的哈希算法(如SHA-256或SHA-3)结合使用,以保持强大的安全性。

链接

标准

  • OWASP_MASVS_L1:
    • MSTG_CRYPTO_2
    • MSTG_CRYPTO_3
    • MSTG_CRYPTO_4
  • OWASP_MASVS_L2:
    • MSTG_CRYPTO_2
    • MSTG_CRYPTO_3
    • MSTG_CRYPTO_4
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_3_6
    • REQ_3_7
    • REQ_6_2
  • OWASP_MASVS_v2_1:
    • MASVS_CRYPTO_1
    • MASVS_CRYPTO_2
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_6_7
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5
  • CNIL_FOR_DEVELOPERS:
    • DEVELOPERS_4_1_4