OWASP 类别: MASVS-CRYPTO: 密码学
概述
尽管密码学被广泛用于保护数据机密性和完整性,但当开发者无意中实现弱或过时的加密算法时,就会出现重大风险。这种漏洞源于这些算法固有的弱点,这些弱点可能会被拥有必要计算能力或知识的恶意攻击者利用。此类利用的后果可能非常严重,可能导致未经授权的访问、数据泄露和敏感信息的操纵。
影响
敏感数据可能会被泄露、修改或伪造。破损或有风险的加密算法可能导致漏洞,并可被滥用于解密敏感信息、篡改数据或冒充合法实体。利用此类漏洞的影响范围从数据泄露和经济损失到声誉受损和用户信任丧失。
风险:弱或破损的加密哈希函数
使用弱或破损的加密哈希函数(如 MD5
或 SHA1
)会对数据的安全性和完整性构成重大风险。哈希函数旨在为输入数据创建唯一的固定长度指纹(哈希值),这使得它们在各种用途(包括数据完整性验证、密码存储和数字签名)中非常有用。但是,当使用弱或已损坏的哈希函数时,可能会出现一些漏洞。
- 碰撞攻击:弱哈希函数容易受到碰撞攻击,攻击者可以在其中找到两个产生相同哈希值的不同输入。这允许他们将恶意数据替换为合法数据而不被发现,从而损害数据完整性。
- 数据泄露:如果密码使用弱算法进行哈希处理,则成功入侵系统会导致用户凭据泄露。攻击者随后可以使用彩虹表或其他技术破解密码,从而获得对帐户的未经授权的访问。
- 数字签名的抵赖:数字签名中使用的弱哈希函数可以被利用来创建伪造的签名,从而难以确定文档或消息的真实性和完整性。
缓解措施
为了减轻这些风险,至关重要的是要使用强大的、经过良好验证的加密哈希函数,如 SHA-2
或 SHA-3
,并在发现新漏洞时对其进行更新。此外,采用安全实践(如对密码加盐和使用特定于密码的哈希算法,如 bcrypt
或 Argon2
)可以进一步增强数据保护。
风险:弱或破损的加密加密函数
使用弱或破损的加密加密函数(如 DES
或 RC4
)会对敏感数据的机密性构成严重风险。加密旨在通过将信息转换为不可读格式来保护信息,但如果加密算法存在缺陷,则可以绕过这些保护措施。
- **数据泄露:** 弱加密算法容易受到各种攻击,包括暴力破解攻击、已知明文攻击和密码分析技术。如果攻击成功,这些攻击可能会暴露加密数据,允许未经授权访问敏感信息,例如个人信息、财务记录或机密商业数据。
- **数据篡改:** 即使攻击者无法完全解密数据,他们也可能仍然能够在加密算法较弱的情况下,在未被检测到的情况下操纵数据。这会导致对数据的未经授权的修改,可能导致欺诈、虚假陈述或其他恶意活动。
缓解措施
在加密功能中使用强大的加密算法
为了降低这些风险,使用强大的经过验证的加密算法以及遵循密钥管理和加密实施的最佳实践至关重要。定期更新加密算法并及时了解新出现的威胁也是维护强大数据安全的关键。
一些推荐的默认算法
使用密码库中的安全原语来减少常见陷阱
选择合适的加密算法固然重要,但为了真正减少安全漏洞,请考虑使用提供简化 API 并强调安全默认配置的密码库。这种方法不仅增强了应用程序的安全性,而且还大大降低了通过编码错误引入漏洞的可能性。例如,Tink 通过提供两种不同的选项来简化加密选择:AEAD
和 Hybrid
加密,使开发人员更容易做出明智的安全决策。
风险:弱或损坏的加密签名函数
使用弱或损坏的加密签名函数(例如 RSA-PKCS#1 v1.5
,或基于弱哈希函数的函数)对数据的完整性和通信的完整性构成严重风险。数字签名旨在提供身份验证、不可否认性和数据完整性,确保消息或文档来自特定发件人,并且未被篡改。但是,当底层签名算法存在缺陷时,这些保证可能会受到损害。
- **伪造签名:** 弱签名算法可能容易受到攻击,攻击者可以创建伪造的签名。这意味着他们可以冒充合法实体,伪造文件或篡改消息而不被发现。
- **签名拒绝:** 如果签名算法被破解,签名者可能会虚假地声称他们没有签署文件,从而破坏不可否认性原则,并造成法律和后勤方面的挑战。
- **数据操纵和篡改:** 在使用签名保护数据完整性的情况下,弱算法可能允许攻击者修改数据而不使签名失效,从而导致未被检测到的篡改和关键信息的潜在泄露。
缓解措施
使用强大的加密签名算法
为了降低这些风险,使用强大的经过验证的加密签名算法至关重要。
使用密码库中的安全原语来减少常见陷阱
选择正确的签名算法至关重要,但为了真正减少安全漏洞,请考虑使用默认情况下提供强大安全保障的密码库。例如,Tink 通过提供 ECDSA
以及安全曲线作为默认选项来简化签名选择,所有这些都在一个简单而全面的 API 中。这种方法不仅增强了安全性,而且还通过消除对复杂配置或决策的需要来简化开发。
资源
- Tink 密码库
- Android 应用质量:密码学
- Tink 数字签名
- Tink 混合加密
- Tink 认证加密
- 弱或损坏的加密哈希和加密函数 Android 安全 lint
- CWE-327:使用损坏或有风险的加密算法
- CWE-328:使用弱哈希
- CWE-780:在没有 OAEP 的情况下使用 RSA 算法
- NIST 关于批准的哈希函数的页面
- 高级加密标准 (Wikipedia)
- 安全哈希算法 2 (Wikipedia)
- 安全哈希算法 3 (Wikipedia)
- RSA 密码系统 (Wikipedia)
- 椭圆曲线数字签名算法 (Wikipedia)
- 流密码 ChaCha (Wikipedia)
- 密码加盐 (Wikipedia)
- 混合密码系统 (Wikipedia)
- 认证加密