Repository navigation
Conversation
Generate the TLS 1.3 composition and a new x509 entry from per-protocol worksheets (tools/src/main/resources/protocol-worksheets) with tools/src/main/python/protocolRegistryGeneration.py. - TLS 1.3: every codepoint of the IANA Supported Groups, SignatureScheme and Cipher Suites registries is accounted for, with a citation; names follow the variant patterns of the algorithm registry; based on RFC 9846. - x509 3: the certificate signature algorithms of RFC 5280 and its algorithm RFCs. TLS references it for the certificate chain instead of repeating the list. - protocolFamiliesEnum: add x509. Signed-off-by: Basil Hess <bhe@zurich.ibm.com>
| "algorithmSet": [ | ||
| "x25519", | ||
| "x448", | ||
| "ECDHE-secp256r1", |
There was a problem hiding this comment.
Single-algorithm members carry only the registry name, not the protocol's own identifier. Cipher suites and hybrid groups are named bundles with the IANA name, but single groups and all signature schemes are plain strings (ECDHE-secp256r1, not secp256r1; ECDSA-secp256r1-SHA-256, not ecdsa_secp256r1_sha256).
With #1213 a BOM writes { "name": "secp256r1", "algorithms": ["ECDHE-secp256r1"] }. For cipher suites and hybrids a checker can verify that pair against this entry. For single groups and signature schemes it cannot, because the registry has no secp256r1. A BOM stating { "name": "secp256r1", "algorithms": ["ECDHE-secp384r1"] } would go unnoticed, and a consumer assessing algorithms would be judging something other than what is on the wire.
The six IANA codepoints rsa_pss_rsae_* and rsa_pss_pss_* also collapse into three names here.
Suggestion: use named bundles for single members too, so every member carries the IANA identifier.
| ] | ||
| }, | ||
| { | ||
| "role": "cert-chain-signature", |
There was a problem hiding this comment.
Referencing x509 v3 as a whole makes this slot broader than TLS 1.3 permits. The x509 entry includes RSA-PKCS1-1.5-MD5, and RFC 9846 section 4.5.1.3 says: "Any endpoint receiving any certificate which it would need to validate using any signature algorithm using an MD5 hash MUST abort the handshake". MD2, DSA, XMSS and HashSLH-DSA are also in the list and have no TLS SignatureScheme codepoint, so they cannot be offered in signature_algorithms_cert.
This departs from the Method rule in the description (registered and valid for the version). A consumer reading this entry as "what a conforming TLS 1.3 implementation can use" would accept an MD5-signed chain. (Trust anchor self-signatures are not validated, but that does not cover the chain.)
There is also a naming gap: x509 names omit the curve (ECDSA-SHA-256), while the TLS example in 1213 uses ECDSA-secp256r1-SHA-256 in this slot, which does not resolve against x509 .
Could the slot keep a TLS-valid subset, or restrict the reference ?
#1213 (generic composition)
| "tls", | ||
| "wpa" | ||
| "wpa", | ||
| "x509" |
There was a problem hiding this comment.
Adding x509 to this enum also changes what a BOM accepts. protocolProperties.type in the 2.0 cryptography module references protocolFamiliesEnum, so a protocol asset with "type": "x509" becomes valid. The PR description says the BOM side is unchanged.
Is a protocol asset of type x509 intended? Certificates are modelled as certificate assets, so two ways to describe the same thing would exist. If it is meant for registry references only, could the description say so?
|
Thank you for this. A populated TLS 1.3 entry will help consumers a great deal. One request on scope. The inclusion rule (registered with IANA and valid for the version) works well for describing the protocol. It would help to state that the entry describes registered codepoints, rather than limiting what a CBOM may record. Production services and interoperability testing also negotiate groups on codepoints outside the IANA registry, for example pure and hybrid groups with HQC, BIKE or FrodoKEM. If a checker treats this entry as the complete set, those groups will read as unknown or invalid, although they are exactly what an inventory should capture. Two small additions would cover it. First, a rule for members that are not in the entry: recorded and reported as unregistered, not rejected. Second, an optional codepoint on each member. For groups outside the IANA registry it is the only stable identifier, since their names can differ between implementations and change between releases. This connects to #1214: such groups can only be named once their algorithm families are in the registry. |
Summary
Populates the protocol registry with TLS 1.3 (RFC 9846) and adds
x509as a registry entry. The TLS 1.3 placeholder from #1010 is replaced by an entry that covers every IANA TLS codepoint valid for TLS 1.3; all names follow the algorithm registry's variant patterns.What's changed
protocolFamiliesEnum: addsx509. That is the only schema change.x509. The version'sstandardlists every document that registers an included codepoint.{ "role": "cert-chain-signature", "selection": "all-of", "selectedBy": "protocol-fixed", "algorithmSet": [{ "protocol": "x509", "version": "3" }] }Method
AES-128-GCM-128-96,ECDHE-secp256r1.Challenges
x509entry.curveSM2MLKEM768).Backwards compatibility
The change is additive, and the BOM side is unchanged. IKEv2 and IPsec follow in a separate PR.