Skip to content

Commit c40b482

Browse files
committed
Partial update to NCSC 2025
1 parent ac3edcc commit c40b482

File tree

1 file changed

+55
-59
lines changed

1 file changed

+55
-59
lines changed

checks/tasks/tls/tls_constants.py

Lines changed: 55 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from sslyze import TlsVersionEnum
66

77

8-
# NCSC guideline B3-2 / table 2 and 3
8+
# NCSC 3.3.2 / 3.3.5
99
CERT_SIGALG_GOOD = [
1010
SignatureAlgorithmOID.RSA_WITH_SHA256,
1111
SignatureAlgorithmOID.RSA_WITH_SHA384,
@@ -20,17 +20,28 @@
2020
CERT_RSA_DSA_MIN_KEY_SIZE = 2048
2121
CERT_CURVE_MIN_KEY_SIZE = 224
2222

23-
# NCSC table 9
23+
# NCSC 3.3.2.1
2424
CERT_CURVES_GOOD = [x25519.X25519PublicKey, x448.X448PublicKey]
25-
CERT_EC_CURVES_GOOD = [ec.SECP384R1, ec.SECP256R1]
25+
CERT_EC_CURVES_GOOD = [
26+
ec.SECP521R1,
27+
ec.SECP384R1,
28+
ec.SECP256R1,
29+
ec.BrainpoolP512R1,
30+
ec.BrainpoolP384R1,
31+
ec.BrainpoolP256R1,
32+
]
2633
CERT_EC_CURVES_PHASE_OUT = [ec.SECP224R1]
2734
FS_ECDH_MIN_KEY_SIZE = 224
2835
FS_DH_MIN_KEY_SIZE = 2048
2936

37+
# NCSC 3.3.2.1
3038
FS_EC_GOOD = [
3139
OpenSslEcNidEnum.SECP521R1,
3240
OpenSslEcNidEnum.SECP384R1,
3341
OpenSslEcNidEnum.SECP256R1,
42+
OpenSslEcNidEnum.brainpoolP512r1,
43+
OpenSslEcNidEnum.brainpoolP384r1,
44+
OpenSslEcNidEnum.brainpoolP256r1,
3445
OpenSslEcNidEnum.X25519,
3546
OpenSslEcNidEnum.X448,
3647
]
@@ -39,87 +50,72 @@
3950
]
4051

4152

42-
# NCSC appendix C, derived from table 2, 6 and 7
43-
# Anything not in these lists, is insufficient.
53+
# NCSC appendix B, derived from 3.3.3, 3.3.4
54+
# PQC not yet supported by us
55+
# Anything not in these lists is insufficient.
4456
CIPHERS_GOOD = [
4557
"TLS_AES_256_GCM_SHA384",
4658
"TLS_CHACHA20_POLY1305_SHA256",
59+
]
60+
CIPHERS_SUFFICIENT = [
4761
"TLS_AES_128_GCM_SHA256",
48-
# NCSC appendix C lists these as sufficient, but read
49-
# footnote 52 carefully. As we test TLS version separate
50-
# from cipher list, we consider them good.
51-
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
62+
"TLS_AES_128_CCM_SHA256",
5263
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
64+
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
65+
"TLS_ECDHE_ECDSA_WITH_AES_256_CCM",
5366
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
54-
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
67+
"TLS_ECDHE_ECDSA_WITH_AES_128_CCM",
5568
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
69+
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
5670
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
57-
# CCM is not in appendix C, but footnote 31 makes it Good (CCM_8 is insufficient)
58-
"TLS_AES_128_CCM_SHA256", # TLS 1.3 notation
59-
"TLS_ECDHE_ECDSA_WITH_AES_128_CCM",
60-
"TLS_ECDHE_ECDSA_WITH_AES_256_CCM",
6171
]
62-
CIPHERS_SUFFICIENT = [
72+
CIPHERS_PHASE_OUT = [
73+
"TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384",
74+
"TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384",
75+
"TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256",
76+
"TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256",
77+
"TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384",
78+
"TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384",
79+
"TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256",
80+
"TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256",
6381
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
64-
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
6582
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
66-
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
83+
"TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384",
84+
"TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384",
85+
"TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256",
86+
"TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256",
87+
"TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384",
88+
"TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384",
89+
"TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256",
90+
"TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256",
6791
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
68-
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
6992
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
70-
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
71-
"TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
7293
"TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
73-
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
74-
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
75-
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
76-
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
77-
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
78-
# CAMELLIA is not in appendix C but is sufficient (footnote 31)
79-
"TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA",
80-
"TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256",
81-
"TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA",
94+
"TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384",
8295
"TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256",
83-
"TLS_RSA_WITH_CAMELLIA_128_CBC_SHA",
84-
"TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256",
85-
"TLS_RSA_WITH_CAMELLIA_256_CBC_SHA",
86-
"TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256",
87-
"TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256",
88-
"TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384",
89-
"TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256",
90-
"TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384",
91-
# CCM is not in appendix C, but footnote 31 makes it Good (on its own)
92-
"TLS_DHE_RSA_WITH_AES_128_CCM",
96+
"TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256",
97+
"TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256",
98+
"TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384",
99+
"TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384",
100+
"TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256",
101+
"TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256",
102+
"TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
93103
"TLS_DHE_RSA_WITH_AES_256_CCM",
94-
]
95-
CIPHERS_PHASE_OUT = [
96-
"TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
97-
"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
98-
"TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
99-
"TLS_RSA_WITH_AES_256_GCM_SHA384",
100-
"TLS_RSA_WITH_AES_128_GCM_SHA256",
101-
"TLS_RSA_WITH_AES_256_CBC_SHA256",
102-
"TLS_RSA_WITH_AES_256_CBC_SHA",
103-
"TLS_RSA_WITH_AES_128_CBC_SHA256",
104-
"TLS_RSA_WITH_AES_128_CBC_SHA",
105-
"TLS_RSA_WITH_3DES_EDE_CBC_SHA",
106-
# CCM is not in appendix C, but footnote 31 makes it Good (on its own)
107-
"TLS_RSA_WITH_AES_128_CCM",
108-
"TLS_RSA_WITH_AES_256_CCM",
104+
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
105+
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
106+
"TLS_DHE_RSA_WITH_AES_128_CCM",
107+
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
109108
]
110109

111-
# NCSC table 1
110+
# NCSC 3.3.1
112111
PROTOCOLS_GOOD = [
113112
TlsVersionEnum.TLS_1_3,
114113
]
115114

116115
PROTOCOLS_SUFFICIENT = [
117116
TlsVersionEnum.TLS_1_2,
118117
]
119-
PROTOCOLS_PHASE_OUT = [
120-
TlsVersionEnum.TLS_1_1,
121-
TlsVersionEnum.TLS_1_0,
122-
]
118+
PROTOCOLS_PHASE_OUT = []
123119

124120
# NCSC table 5
125121
# This is eventually passed to openssl's SSL_set1_sigalgs,

0 commit comments

Comments
 (0)