Use of a cryptographic algorithm with insufficient key size¶
ID: java/insufficient-key-sizeKind: path-problemSecurity severity: 7.5Severity: warningPrecision: highTags: - security - external/cwe/cwe-326Query suites: - java-code-scanning.qls - java-security-extended.qls - java-security-and-quality.qls
Click to see the query in the CodeQL repository
Modern encryption relies on the computational infeasibility of breaking a cipher and decoding its message without the key. As computational power increases, the ability to break ciphers grows, and key sizes need to become larger as a result. Cryptographic algorithms that use too small of a key size are vulnerable to brute force attacks, which can reveal sensitive data.
Recommendation¶
Use a key of the recommended size or larger. The key size should be at least 128 bits for AES encryption, 256 bits for elliptic-curve cryptography (ECC), and 2048 bits for RSA, DSA, or DH encryption.
Example¶
The following code uses cryptographic algorithms with insufficient key sizes.
KeyPairGeneratorkeyPairGen1=KeyPairGenerator.getInstance("RSA");keyPairGen1.initialize(1024);// BAD: Key size is less than 2048KeyPairGeneratorkeyPairGen2=KeyPairGenerator.getInstance("DSA");keyPairGen2.initialize(1024);// BAD: Key size is less than 2048KeyPairGeneratorkeyPairGen3=KeyPairGenerator.getInstance("DH");keyPairGen3.initialize(1024);// BAD: Key size is less than 2048KeyPairGeneratorkeyPairGen4=KeyPairGenerator.getInstance("EC");ECGenParameterSpececSpec=newECGenParameterSpec("secp112r1");// BAD: Key size is less than 256keyPairGen4.initialize(ecSpec);KeyGeneratorkeyGen=KeyGenerator.getInstance("AES");keyGen.init(64);// BAD: Key size is less than 128
To fix the code, change the key sizes to be the recommended size or larger for each algorithm.
References¶
Wikipedia:Key size.
Wikipedia:Strong cryptography.
OWASP: Testing for Weak Encryption.
NIST: Transitioning the Use of Cryptographic Algorithms and Key Lengths.
Common Weakness Enumeration:CWE-326.