使用破损或有风险的加密算法¶
ID: java/weak-cryptographic-algorithm
Kind: path-problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-327
- external/cwe/cwe-328
Query suites:
- java-code-scanning.qls
- 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.