Skip to content

Commit 3667365

Browse files
committed
Crypto: Weak asymmetric key gen size fixes and test.
1 parent 758759a commit 3667365

File tree

6 files changed

+58
-24
lines changed

6 files changed

+58
-24
lines changed

java/ql/lib/experimental/quantum/JCA.qll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ module JCAModel {
110110
predicate signature_names(string name) {
111111
name.toUpperCase().splitAt("WITH", 1).matches(["RSA%", "ECDSA%", "DSA%"])
112112
or
113-
name.toUpperCase().matches(["RSASSA-PSS", "ED25519", "ED448", "EDDSA", "ML-DSA%", "HSS/LMS"])
113+
name.toUpperCase()
114+
.matches(["RSASSA-PSS", "ED25519", "ED448", "EDDSA", "ML-DSA%", "HSS/LMS", "DSA"])
114115
}
115116

116117
bindingset[name]
@@ -257,6 +258,8 @@ module JCAModel {
257258
name.toUpperCase().matches("ML-DSA%") and type = KeyOpAlg::TSignature(KeyOpAlg::DSA())
258259
or
259260
name.toUpperCase() = "HSS/LMS" and type = KeyOpAlg::TSignature(KeyOpAlg::HSS_LMS())
261+
or
262+
name.toUpperCase() = "DSA" and type = KeyOpAlg::TSignature(KeyOpAlg::DSA())
260263
}
261264

262265
bindingset[name]
@@ -1019,7 +1022,8 @@ module JCAModel {
10191022
}
10201023

10211024
class KeyGenerationAlgorithmValueConsumer extends CipherAlgorithmValueConsumer,
1022-
KeyAgreementAlgorithmValueConsumer, EllipticCurveAlgorithmValueConsumer instanceof Expr
1025+
KeyAgreementAlgorithmValueConsumer, EllipticCurveAlgorithmValueConsumer,
1026+
SignatureAlgorithmValueConsumer instanceof Expr
10231027
{
10241028
KeyGeneratorGetInstanceCall instantiationCall;
10251029

java/ql/src/experimental/quantum/Examples/WeakAsymmetric.ql

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @name Weak Asymmetric Key Size
3+
* @id java/quantum/weak-asymmetric-key-gen-size
4+
* @description An asymmetric key of known size is less than 2048 bits for any non-elliptic curve key operation.
5+
* @kind problem
6+
* @problem.severity error
7+
* @precision high
8+
* @tags quantum
9+
* experimental
10+
*/
11+
12+
import java
13+
import experimental.quantum.Language
14+
15+
from Crypto::KeyArtifactNode key, int keySize, Crypto::AlgorithmNode alg
16+
where
17+
key.getCreatingOperation().getAKeySizeSource().asElement().(Literal).getValue().toInt() = keySize and
18+
alg = key.getAKnownAlgorithm() and // NOTE: if algorithm is not known (doesn't bind) we need a separate query
19+
not alg instanceof Crypto::EllipticCurveNode and // Elliptic curve sizes are handled separately and are more tied directly to the algorithm
20+
keySize < 2048
21+
select key, "Use of weak asymmetric key size (" + keySize.toString() + " bits) for algorithm $@",
22+
alg, alg.getAlgorithmName()
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.security.*;
2+
public class InsufficientAsymmetricKeySize{
3+
public static void test() throws Exception{
4+
KeyPairGenerator keyPairGen1 = KeyPairGenerator.getInstance("RSA");
5+
keyPairGen1.initialize(1024); // $Alert[java/quantum/weak-asymmetric-key-gen-size]
6+
keyPairGen1.generateKeyPair();
7+
8+
KeyPairGenerator keyPairGen2 = KeyPairGenerator.getInstance("DSA");
9+
keyPairGen2.initialize(1024); // $Alert[java/quantum/weak-asymmetric-key-gen-size]
10+
keyPairGen2.generateKeyPair();
11+
12+
KeyPairGenerator keyPairGen3 = KeyPairGenerator.getInstance("DH");
13+
keyPairGen3.initialize(1024); // $Alert[java/quantum/weak-asymmetric-key-gen-size]
14+
keyPairGen3.generateKeyPair();
15+
16+
KeyPairGenerator keyPairGen4 = KeyPairGenerator.getInstance("RSA");
17+
keyPairGen4.initialize(2048); // GOOD
18+
keyPairGen4.generateKeyPair();
19+
20+
KeyPairGenerator keyPairGen5 = KeyPairGenerator.getInstance("DSA");
21+
keyPairGen5.initialize(2048); // GOOD
22+
keyPairGen5.generateKeyPair();
23+
24+
KeyPairGenerator keyPairGen6 = KeyPairGenerator.getInstance("DH");
25+
keyPairGen6.initialize(2048); // GOOD
26+
keyPairGen6.generateKeyPair();
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
experimental/quantum/Examples/WeakAsymmetricKeyGenSize.ql

0 commit comments

Comments
 (0)