|
10 | 10 | { |
11 | 11 | "bom-ref": "perspective-pqc-readiness", |
12 | 12 | "name": "PQC Readiness", |
13 | | - "description": "Defines the data elements needed to assess a product's readiness for the post-quantum migration, and the structural assertions that determine readiness. Organized along three dimensions inspired by the PQCA readiness-tracking working group: inventory (is the cryptography recorded and classifiable), algorithm (is the cryptography in use quantum-resistant, split into a confidentiality/HNDL facet and an authentication facet), and agility (can vulnerable cryptography be replaced without code changes). Mappings carrying an 'expectation' are hard checks; mappings without one are descriptive and feed a graded readiness score. This perspective assumes the 'expectation' field on perspective mappings (see perspective-expectation-rationale.md).", |
| 13 | + "description": "Defines the data elements needed to assess a product's readiness for the post-quantum migration, and the structural assertions that determine readiness. Organized along three dimensions inspired by the PQCA readiness-tracking working group: inventory (is the cryptography recorded and classifiable), algorithm (is the cryptography in use quantum-resistant, split into a confidentiality/HNDL facet and an authentication facet), and agility (can vulnerable cryptography be replaced without code changes). Mappings carrying an 'expectation' are hard checks; mappings without one are descriptive and feed a graded readiness score. This perspective assumes two proposed extensions: an 'expectation' field on perspective mappings, and the component-level 'agility' properties proposed in CycloneDX/specification#947, which the agility mappings reference.", |
14 | 14 | "domains": [ |
15 | 15 | "cryptographic-security", |
16 | 16 | { |
|
29 | 29 | "rationale": "Inventory dimension. PQC readiness cannot be assessed unless the cryptography in use is inventoried." |
30 | 30 | }, |
31 | 31 | { |
32 | | - "expression": "$.components[?(@.cryptoProperties.assetType=='algorithm' && !@.cryptoProperties.algorithmProperties.primitive)]", |
| 32 | + "expression": "$.components[?(@.cryptoProperties.assetType=='algorithm' && (!@.cryptoProperties.algorithmProperties.primitive || @.cryptoProperties.algorithmProperties.primitive=='unknown'))]", |
33 | 33 | "nativeName": "Unclassified algorithm", |
34 | | - "nativeDescription": "An algorithm asset that does not declare its primitive.", |
| 34 | + "nativeDescription": "An algorithm asset that does not declare its primitive or declares it as unknown.", |
35 | 35 | "relevance": "required", |
36 | 36 | "expectation": "absent", |
37 | 37 | "weight": 0.8, |
38 | | - "rationale": "Inventory dimension. Every algorithm must declare its primitive so the confidentiality and authentication facets can be evaluated." |
| 38 | + "rationale": "Inventory dimension. Every algorithm must declare a known primitive so the confidentiality and authentication facets can be evaluated." |
39 | 39 | }, |
40 | 40 | { |
41 | 41 | "expression": "$.components[?((@.cryptoProperties.algorithmProperties.primitive=='kem' || @.cryptoProperties.algorithmProperties.primitive=='key-agree' || @.cryptoProperties.algorithmProperties.primitive=='pke' || @.cryptoProperties.algorithmProperties.primitive=='signature') && !@.cryptoProperties.algorithmProperties.nistQuantumSecurityLevel)]", |
|
81 | 81 | "rationale": "Protocol dimension. A protocol's readiness follows from the cipher suites and key exchange it negotiates." |
82 | 82 | }, |
83 | 83 | { |
84 | | - "expression": "$..cryptoProperties.agility", |
| 84 | + "expression": "$.components[?(@.type=='cryptographic-asset')].agility", |
85 | 85 | "nativeName": "Cryptographic agility", |
86 | 86 | "nativeDescription": "How an asset's cryptographic configuration was determined and how a change to it can be applied.", |
87 | 87 | "relevance": "recommended", |
88 | 88 | "weight": 0.5, |
89 | 89 | "rationale": "Agility dimension. Informs migration effort, not the readiness verdict." |
90 | 90 | }, |
91 | 91 | { |
92 | | - "expression": "$..cryptoProperties.agility.changeMechanism", |
| 92 | + "expression": "$.components[?(@.type=='cryptographic-asset')].agility.changeMechanism", |
93 | 93 | "nativeName": "Change mechanism", |
94 | | - "nativeDescription": "How a change to the cryptographic configuration is applied.", |
| 94 | + "nativeDescription": "The step or steps required to apply a change to the cryptographic configuration.", |
95 | 95 | "relevance": "recommended", |
96 | 96 | "weight": 0.4, |
97 | | - "rationale": "Agility dimension. A value of runtime-config or restart-required indicates low-effort migration, while firmware-update or hardware-replacement indicates higher effort." |
| 97 | + "rationale": "Agility dimension. All listed steps are required, so the most disruptive step in the set gives a rough indication of migration effort: a set containing only runtime-config typically suggests low-effort migration, while sets including firmware-update or hardware-replacement tend to involve more effort; not-possible indicates no agility." |
98 | 98 | }, |
99 | 99 | { |
100 | 100 | "expression": "$.components[?(@.cryptoProperties.assetType=='related-crypto-material')].cryptoProperties.relatedCryptoMaterialProperties.rotation", |
|
0 commit comments