使用密钥大小不足的加密算法¶
ID: java/insufficient-key-size
Kind: path-problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-326
Query suites:
- java-code-scanning.qls
- java-security-extended.qls
- java-security-and-quality.qls
现代加密依赖于在没有密钥的情况下破译密码和解码其消息的计算不可行性。随着计算能力的提高,破译密码的能力也在增长,因此密钥大小需要随之增加。使用密钥大小过小的加密算法容易受到暴力攻击,这会导致敏感数据泄露。
建议¶
使用推荐大小或更大的密钥。密钥大小对于 AES 加密至少应为 128 位,对于椭圆曲线密码学 (ECC) 至少应为 256 位,对于 RSA、DSA 或 DH 加密至少应为 2048 位。
示例¶
以下代码使用密钥大小不足的加密算法。
KeyPairGenerator keyPairGen1 = KeyPairGenerator.getInstance("RSA");
keyPairGen1.initialize(1024); // BAD: Key size is less than 2048
KeyPairGenerator keyPairGen2 = KeyPairGenerator.getInstance("DSA");
keyPairGen2.initialize(1024); // BAD: Key size is less than 2048
KeyPairGenerator keyPairGen3 = KeyPairGenerator.getInstance("DH");
keyPairGen3.initialize(1024); // BAD: Key size is less than 2048
KeyPairGenerator keyPairGen4 = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp112r1"); // BAD: Key size is less than 256
keyPairGen4.initialize(ecSpec);
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(64); // BAD: Key size is less than 128
要修复代码,请将密钥大小更改为每种算法的推荐大小或更大。