使用可能已损坏或存在安全风险的加密算法¶
ID: java/potentially-weak-cryptographic-algorithm
Kind: path-problem
Security severity: 7.5
Severity: warning
Precision: medium
Tags:
- security
- external/cwe/cwe-327
- external/cwe/cwe-328
Query suites:
- java-security-extended.qls
- java-security-and-quality.qls
使用已损坏或薄弱的加密算法会导致数据容易被解密。
加密库提供的许多加密算法已知是薄弱的或有缺陷的。使用此类算法意味着攻击者可以轻松解密加密数据。
建议¶
确保使用强大的现代加密算法。至少使用 AES-128 或 RSA-2048。不要使用 ECB 加密模式,因为它容易受到重放攻击和其他攻击。
示例¶
以下代码展示了使用 java Cipher
加密某些数据的示例。创建 Cipher
实例时,必须指定要使用的加密算法。第一个示例使用 DES,它是一种旧的算法,现在被认为是薄弱的。第二个示例使用 AES,它是一种强大的现代算法。
// BAD: DES is a weak algorithm
Cipher des = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encrypted = cipher.doFinal(input.getBytes("UTF-8"));
// ...
// GOOD: AES is a strong algorithm
Cipher aes = Cipher.getInstance("AES");
// ...
参考¶
NIST,FIPS 140 附录 a: Approved Security Functions.
NIST,SP 800-131A: Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths.
常见漏洞枚举:CWE-327.
常见漏洞枚举:CWE-328.