Skip to content

CBOM: add protocol registry schema - #1010

Open
bhess wants to merge 1 commit into
CycloneDX:2.0-devfrom
bhess:bhe-protocol-registry
Open

CBOM: add protocol registry schema#1010
bhess wants to merge 1 commit into
CycloneDX:2.0-devfrom
bhess:bhe-protocol-registry

Conversation

@bhess

@bhess bhess commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

This adds a protocol registry to cryptography-defs, alongside the existing algorithm families and elliptic curves. Protocols are defined per family and version, each with its algorithm composition, so tools can answer questions like "can this protocol version negotiate a post-quantum key exchange?" without every CBOM re-describing the protocol.

The TLS 1.3 entry is illustrative for now; the list will be populated further (TLS 1.2, SSH, IKEv2, ...).

What's added

A new top-level protocols array. Each protocol version carries a composition: a list of functional slots that all apply together.

  • role: what the slot does (key-exchange, signature, ...); open string with examples, like variant.primitive.
  • selection: how many algorithms of the set are used at runtime: all-of, any-of, or one-of.
  • selectedBy: how that choice is made: negotiation, configuration, server-selected, ...
  • algorithmSet: algorithm names matching the variant patterns of the algorithm registry, or named bundles {name, algorithms[]} for cipher suites and hybrid key exchange groups.

Example, TLS 1.3 key exchange:

{
  "role": "key-exchange",
  "selection": "one-of",
  "selectedBy": "negotiation",
  "algorithmSet": [
    "x25519",
    { "name": "X25519MLKEM768", "algorithms": ["x25519", "ML-KEM-768"] }
  ]
}

Backwards compatibility

No breaking changes, protocols is optional. protocolFamiliesEnum uses the same tokens as protocolProperties.type, so a BOM references a registry entry via protocolProperties.type plus version.. no new field in the core schema needed.

Defines protocols by family and version, alongside the existing
algorithm families and elliptic curves. Each version carries a
composition: a list of functional slots that all apply. A slot holds
an algorithm set; "selection" states whether all, one or more, or
exactly one of the set are used at runtime, and "selectedBy" how that
choice is made (negotiation, configuration, ...). Set members are
algorithm names that resolve against the variant patterns of the
algorithm registry, or named bundles of such names (cipher suites,
hybrid key exchange groups).

The TLS 1.3 entry is illustrative for now; the list will be populated
further.

Signed-off-by: Basil Hess <bhe@zurich.ibm.com>
@bhess
bhess requested a review from a team as a code owner August 7, 2026 13:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant