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的强度取决于底层的哈希算法,因此不应与已弃用和较弱的哈希算法一起使用。
MD5 和 SHA-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