OpenCyber Academy
Bachelor's · Chapter 22 · English
Course code: OCA-113Chapter 22: OCA-113-C022

Chapter 22 — Quantum and post-quantum security: data and dependencies

Open, free learning for anyone who wants to protect people and technology. No account is required to read this text or its worked answers.

Lesson map

Lesson 22 published. Map, example, EX043.

flowchart TD
  N0["Learning outcomes"]
  N1["22.1 Inventory sources"]
  N2["22.2 Practical activity — Lab I"]
  N3["22.3 Dependencies"]
  N4["Synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Worked example"]
  EX --> Q["Exercise EX043"]

Logical drawing

flowchart LR
  N0["Learning outcomes"]
  N1["22.1 Inventory sources"]
  N2["22.2 Practical activity — Lab I"]
  N3["22.3 Dependencies"]
  N4["Synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX043"]
[Learning outcomes]
    |
    v
[22.1 Inventory sources]
    |
    v
[22.2 Practical activity — Lab I]
    |
    v
[22.3 Dependencies]
    |
    v
[Synthesis]
    |
    v
[Worked example] --> [Exercise EX043]

Learning outcomes

You will (1) explain what a cryptographic bill of materials (CBOM) is; (2) combine evidence sources into an inventory; (3) compute coverage and unknown shares; and (4) trace dependencies through libraries, vendors and partners.

22.1 Inventory sources

No single method finds all cryptography. Passive network observation sees negotiated algorithms on the wire; configuration review reads what services are set to offer; code and binary scanning finds library calls and embedded constants; vendor statements describe closed products; certificate stores reveal signature algorithms and validity. A CBOM records, for each asset and function, the algorithm, parameters, implementation and evidence source, analogous to a software bill of materials for components.

Each method has blind spots, so HCU combines them and records the source for every entry.

22.2 Practical activity — Lab I

# Lab I (ch 22): aggregate a synthetic cryptographic bill of materials (CBOM) and measure coverage.
records = [  # (asset, function, algorithm, source)
    ("web-gateway", "key-exchange", "X25519MLKEM768", "passive"), ("web-gateway", "signature", "RSA-2048", "config"),
    ("atm-controller", "key-exchange", "ECDHE-P256", "passive"), ("atm-controller", "signature", "ECDSA-P256", "code"),
    ("core-banking", "key-exchange", "RSA-kex", "config"), ("billing", "data-at-rest", "AES-256-GCM", "code"),
    ("card-terminal", "unknown", "unknown", "none"), ("branch-vpn", "key-exchange", "ECDHE-P384", "config")]
VULN = {"RSA-2048", "ECDHE-P256", "ECDSA-P256", "RSA-kex", "ECDHE-P384"}
assets = {r[0] for r in records}
unknown = {r[0] for r in records if r[2] == "unknown"}
vuln = [r for r in records if r[2] in VULN]
print(f"assets {len(assets)}, unknown {len(unknown)} ({100*len(unknown)/len(assets):.0f}%)")
print(f"quantum-vulnerable uses {len(vuln)}:", ", ".join(f"{a}/{f}" for a, f, _, _ in vuln))
print("hybrid key exchange present on:", [r[0] for r in records if "MLKEM" in r[2]])

Expected output:

assets 6, unknown 1 (17%)
quantum-vulnerable uses 5: web-gateway/signature, atm-controller/key-exchange, atm-controller/signature, core-banking/key-exchange, branch-vpn/key-exchange
hybrid key exchange present on: ['web-gateway']

Six synthetic assets yield five quantum-vulnerable uses and one asset (17 %) whose cryptography is unknown. The unknown card terminal needs a vendor inquiry before it can be planned.

The lab combines evidence from more than one source for each asset and prints a summary with the share of unknowns. Each row keeps its source, so a reader can see which findings rest on observation and which on vendor statements. Running the same script on next quarter's data will show whether the unknown share is falling, which is itself a useful progress indicator for the migration.

22.3 Dependencies

Cryptography is inherited. An application uses a framework that uses a TLS library that uses the OS provider; a SaaS vendor terminates TLS on a CDN that HCU does not control; a partner's API dictates which algorithms HCU's client must support. Draw dependency chains for high-priority flows and identify the controlling party for each link — the one that must act for the algorithm to change. A migration is complete for a flow only when every link has moved.

Links HCU does not control need roadmaps from their owners.

22.4 Worked example

HCU's mobile banking flow depends on: the phone OS TLS stack (platform vendor), the app's networking library (HCU developers), a CDN terminating TLS (CDN provider), the web gateway (HCU network team) and the core banking API (core vendor). Hybrid key exchange from phone to CDN depends on platform and CDN support; from CDN to gateway on CDN and HCU; from gateway to core on HCU and the core vendor. Three segments, four controlling parties and four different timelines.

The flow is recorded as migrated only when all three segments have moved, and HCU follows up each party separately.

22.5 Common errors and limits

Each source misses something: network sensors miss certificates in TLS 1.3, configuration may differ from behaviour, vendor statements may be out of date. Combining them, with each row labelled, gives a fuller and more honest picture. A flow is migrated only when every party in its chain has changed, so record the state of each link separately rather than marking the flow complete when HCU's part is done.

Exercises

Synthesis

A CBOM fuses multiple evidence sources with provenance; coverage and unknown shares show what the inventory cannot yet see, and dependency chains reveal who must act.

Continue studying — chapter 22 of 40

← Chapter 21 (draft) · Course chapter index · Chapter 23 (draft) →

Worked answers

EX043. Eight assets, three unknown: 3/8 = 37.5 % ≈ 38 %.

EX044. HCU controls the gateway configuration and its app networking library choices; phone OS support, CDN support and core vendor support depend on others, so every segment also needs another party: phone→CDN (platform and CDN provider), CDN→gateway (CDN provider) and gateway→core (core vendor).