| rfc9935v1.txt | rfc9935.txt | |||
|---|---|---|---|---|
| skipping to change at line 17 ¶ | skipping to change at line 17 ¶ | |||
| B. E. Westerbaan | B. E. Westerbaan | |||
| Cloudflare | Cloudflare | |||
| February 2026 | February 2026 | |||
| Internet X.509 Public Key Infrastructure - Algorithm Identifiers for the | Internet X.509 Public Key Infrastructure - Algorithm Identifiers for the | |||
| Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) | Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) | |||
| Abstract | Abstract | |||
| The Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) is a | The Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) is a | |||
| quantum-resistant Key Encapsulation Mechanism (KEM). This document | quantum-resistant Key Encapsulation Mechanism. This document | |||
| specifies the conventions for using the ML-KEM in X.509 Public Key | specifies the conventions for using the ML-KEM in X.509 Public Key | |||
| Infrastructure. The conventions for the subject public keys and | Infrastructure. The conventions for the subject public keys and | |||
| private keys are also specified. | private keys are also specified. | |||
| Status of This Memo | Status of This Memo | |||
| This is an Internet Standards Track document. | This is an Internet Standards Track document. | |||
| This document is a product of the Internet Engineering Task Force | This document is a product of the Internet Engineering Task Force | |||
| (IETF). It represents the consensus of the IETF community. It has | (IETF). It represents the consensus of the IETF community. It has | |||
| skipping to change at line 327 ¶ | skipping to change at line 327 ¶ | |||
| allowing for interoperability; some may want to use and retain the | allowing for interoperability; some may want to use and retain the | |||
| seed and others may only support expanded private keys. | seed and others may only support expanded private keys. | |||
| The privateKeyAlgorithm field uses the AlgorithmIdentifier structure | The privateKeyAlgorithm field uses the AlgorithmIdentifier structure | |||
| with the appropriate OID as defined in Section 3. | with the appropriate OID as defined in Section 3. | |||
| The publicKey field contains the byte stream of the public key. If | The publicKey field contains the byte stream of the public key. If | |||
| present, the publicKey field will hold the encoded public key as | present, the publicKey field will hold the encoded public key as | |||
| defined in Section 4. | defined in Section 4. | |||
| NOTE: While the private key can be stored in multiple formats, the | Note that while the private key can be stored in multiple formats, | |||
| seed-only format is RECOMMENDED, as it is the most compact | the seed-only format is RECOMMENDED, as it is the most compact | |||
| representation. Both the expanded private key and the public key can | representation. Both the expanded private key and the public key can | |||
| be deterministically derived from the seed using ML- | be deterministically derived from the seed using ML- | |||
| KEM.KeyGen_internal(d,z) (algorithm 16) using the first 32 octets as | KEM.KeyGen_internal(d,z) (algorithm 16) using the first 32 octets as | |||
| _d_ and the remaining 32 octets as _z_. Alternatively, the public | _d_ and the remaining 32 octets as _z_. Alternatively, the public | |||
| key can be extracted from the expanded private key. While the | key can be extracted from the expanded private key. While the | |||
| publicKey field and expandedKey format are technically redundant when | publicKey field and expandedKey format are technically redundant when | |||
| using the seed-only format, they MAY be included to enable key pair | using the seed-only format, they MAY be included to enable key pair | |||
| consistency checks during import operations. | consistency checks during import operations. | |||
| When parsing the private key, the ASN.1 tag explicitly indicates | When parsing the private key, the ASN.1 tag explicitly indicates | |||
| skipping to change at line 667 ¶ | skipping to change at line 667 ¶ | |||
| ML-KEM-768-PublicKey ::= OCTET STRING (SIZE (1184)) | ML-KEM-768-PublicKey ::= OCTET STRING (SIZE (1184)) | |||
| ML-KEM-1024-PublicKey ::= OCTET STRING (SIZE (1568)) | ML-KEM-1024-PublicKey ::= OCTET STRING (SIZE (1568)) | |||
| END | END | |||
| <CODE ENDS> | <CODE ENDS> | |||
| Appendix B. Parameter Set Security and Sizes | Appendix B. Parameter Set Security and Sizes | |||
| Instead of defining the strength of a quantum algorithm in a | Instead of defining the strength of a quantum algorithm in a typical | |||
| traditional manner using the imprecise notion of bits of security, | manner using the imprecise notion of bits of security, NIST has | |||
| NIST has defined security levels by picking a reference scheme, which | defined security levels by picking a reference scheme, which is | |||
| is expected to offer notable levels of resistance to both quantum and | expected to offer notable levels of resistance to both quantum and | |||
| classical attacks. To wit, a KEM algorithm that achieves NIST PQC | classical attacks. To wit, a KEM algorithm that achieves NIST PQC | |||
| security must require computational resources to break IND-CCA | security must require computational resources to break IND-CCA | |||
| security comparable or greater than that required for key search on | security comparable or greater than that required for key search on | |||
| AES-128, AES-192, and AES-256 for Levels 1, 3, and 5, respectively. | AES-128, AES-192, and AES-256 for Levels 1, 3, and 5, respectively. | |||
| Levels 2 and 4 use collision search for SHA-256 and SHA-384 as | Levels 2 and 4 use collision search for SHA-256 and SHA-384 as | |||
| reference. | reference. | |||
| +=======+===============+========+========+============+========+ | +=======+===============+========+========+============+========+ | |||
| | Level | Parameter Set | Encap. | Decap. | Ciphertext | Secret | | | Level | Parameter Set | Encap. | Decap. | Ciphertext | Secret | | |||
| | | | Key | Key | | | | | | | Key | Key | | | | |||
| skipping to change at line 705 ¶ | skipping to change at line 705 ¶ | |||
| certificates, and inconsistent seed and expanded private keys. | certificates, and inconsistent seed and expanded private keys. | |||
| C.1. Example Private Keys | C.1. Example Private Keys | |||
| The following examples show ML-KEM private keys in different formats, | The following examples show ML-KEM private keys in different formats, | |||
| all derived from the same seed 000102...1e1f. For each security | all derived from the same seed 000102...1e1f. For each security | |||
| level, we show the seed-only format (using a context-specific [0] | level, we show the seed-only format (using a context-specific [0] | |||
| primitive tag with an implicit encoding of OCTET STRING), the | primitive tag with an implicit encoding of OCTET STRING), the | |||
| expanded format, and both formats together. | expanded format, and both formats together. | |||
| NOTE: All examples use the same seed value, showing how the same seed | | NOTE: All examples use the same seed value, showing how the | |||
| produces different expanded private keys for each security level. | | same seed produces different expanded private keys for each | |||
| | security level. | ||||
| C.1.1. ML-KEM-512 Private Key Examples | C.1.1. ML-KEM-512 Private Key Examples | |||
| Each of the examples includes the textual encoding [RFC7468] followed | Each of the examples includes the textual encoding [RFC7468] followed | |||
| by the so-called "pretty print"; the private keys are the same. | by the so-called "pretty print"; the private keys are the same. | |||
| C.1.1.1. Seed Format | C.1.1.1. Seed Format | |||
| -----BEGIN PRIVATE KEY----- | -----BEGIN PRIVATE KEY----- | |||
| MFQCAQAwCwYJYIZIAWUDBAQBBEKAQAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ | MFQCAQAwCwYJYIZIAWUDBAQBBEKAQAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ | |||
| End of changes. 4 change blocks. | ||||
| 9 lines changed or deleted | 10 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||