Abstract
This document defines a post-quantum public key algorithm extension for the OpenPGP protocol, extending RFC 9580.
Given the generally assumed threat of a cryptographical
Status of This Memo
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
https://
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://
1. Introduction
The OpenPGP protocol [RFC9580] supports various traditional public key algorithms based on the factoring or discrete logarithm problem.
As the security of algorithms based on these mathematical problems is endangered by the advent of quantum computers, there is a need to extend OpenPGP with algorithms that remain secure in the presence of a Cryptographical
Such cryptographic algorithms are referred to as "Post-Quantum Cryptography" (or "PQC"). The algorithms defined in this extension were chosen for standardization by the US National Institute of Standards and Technology (NIST) in mid-2022 [NISTIR-8413] as the result of the NIST Post-Quantum Cryptography Standardization process initiated in 2016 [NIST-PQC]. ML-KEM [FIPS-203] was selected as a Key Encapsulation Mechanism (KEM). A KEM is a modern building block for public key encryption. ML-DSA [FIPS-204] and SLH-DSA [FIPS-205] were selected as signature schemes.¶
For the ML-KEM and ML-DSA schemes, this document follows the conservative strategy to deploy post-quantum in combination with traditional schemes such that the security is retained even if all schemes but one in the combination are broken.
Such combinations are referred to as "multi
This document extends [RFC9580] by adding KEM and signature algorithms specified in Sections 4, 5, and 6 and specifies the conventions for interoperabilit
1.1. Conventions Used In This Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
In wire format descriptions, the operator "||" is used to indicate concatenation of groups of octets.¶
1.1.1. Terminology for Multi-Algorithm Schemes
The terminology in this document is oriented towards the definitions in [RFC9794].
Specifically, the terms "multi
1.2. Post-Quantum Cryptography
This section describes the individual post-quantum cryptographic schemes. All schemes listed here are designed to provide security in the presence of a CRQC. However, the mathematical problems on which the two ML-* schemes and SLH-DSA are based are fundamentally different, and, accordingly, the level of trust commonly placed in them as well as their performance characteristics vary.¶
1.2.1. ML-KEM
ML-KEM [FIPS-203] is based on the hardness of solving the Module Learning with Errors (MLWE) problem. The scheme is believed to provide security against cryptanalytic attacks based on classical as well as quantum algorithms. This specification defines ML-KEM only in composite combination with Elliptic Curve Diffie-Hellman (ECDH) encryption schemes in order to provide a pre-quantum security fallback.¶
1.2.2. ML-DSA
ML-DSA [FIPS-204] is a signature scheme that, like ML-KEM, is based on the hardness of solving the MLWE problem and a variant of the Short Integer Solution problem in module lattices (MLWE and Self
1.2.3. SLH-DSA
SLH-DSA [FIPS-205] is a stateless hash-based signature scheme. Its security relies on the hardness of finding preimages for cryptographic hash functions. This feature is generally considered to be a high security guarantee. Therefore, this specification defines SLH-DSA as a standalone signature scheme.¶
In deployments, the performance characteristics of SLH-DSA should be taken into account. The performance characteristics of this scheme are discussed in Section 10.1.¶
1.3. Elliptic Curve Cryptography
ECDH encryption is defined here as a KEM via X25519 and X448, which are defined in [RFC7748]. EdDSA as defined in [RFC8032] is used as the elliptic curve-based digital signature scheme.¶
1.4. Standalone and Multi-Algorithm Schemes
This section provides a categorization of the new algorithms and their combinations.¶
1.4.1. Standalone and Composite Multi-Algorithm Schemes
This specification introduces new cryptographic schemes, which can be categorized as follows:¶
-
PQ/T multi-algorithm public key encryption, namely a composite combination of ML-KEM with ECDH,¶
-
PQ/T multi-algorithm digital signature, namely composite combinations of ML-DSA with EdDSA, and¶
-
PQ digital signature, namely SLH-DSA as a standalone cryptographic algorithm.¶
For each of the composite schemes, this specification mandates that the consuming party successfully perform the cryptographic algorithms for each of the component schemes used in a cryptographic message, for the message to be deciphered and considered as valid. This means that all component signatures must be verified successfully to achieve a successful verification of the composite signature. In the case of the composite public key decryption, each of the component KEM decapsulation operations must succeed.¶
1.4.2. Non-Composite Algorithm Combinations
As the OpenPGP protocol [RFC9580] allows for multiple signatures to be applied to a single message, it is also possible to realize non-composite combinations of signatures. Furthermore, multiple OpenPGP signatures may be combined on the application layer. These latter two cases realize non-composite combinations of signatures. Section 3.3 specifies how implementations should handle the verification of such combinations of signatures.¶
Furthermore, the OpenPGP protocol also allows parallel encryption to different keys by using multiple Public Key Encrypted Session Key (PKESK) packets, thus realizing non-composite multi-algorithm public key encryption.¶
2. Supported Public Key Algorithms
This section specifies the composite ML-KEM + ECDH and ML-DSA + EdDSA schemes as well as the standalone SLH-DSA signature scheme. All of these schemes are fully specified via their algorithm ID, that is, they are not parameterized.¶
2.1. Algorithm Specifications
For signatures, the following (composite) signature schemes are specified:¶
For encryption, the following composite KEM schemes are specified:¶
A conformant implementation MUST implement ML
The specified algorithm IDs offer two security levels for each scheme, for a trade-off between security and performance.
The SLH-DSA algorithms offer an additional performance trade-off between signature generation time ("128f" is faster) and signature size ("128s" is smaller) at the lower of the two SLH-DSA security levels.
The larger parameter sets of ML-DSA and ML-KEM (algorithm IDs 31 and 36) are recommended to support interoperabilit
For SLH
3. Algorithm Combinations
3.1. Composite KEMs
The ML-KEM + ECDH public key encryption involves both the ML-KEM and an ECDH KEM in an a priori inseparable manner.
This is achieved via KEM combination, that is, both key encapsulations
As explained in Section 1.4.2, the OpenPGP protocol inherently supports parallel encryption to different keys. Note that the confidentiality of a message is not post-quantum secure when encrypting to different keys unless all keys support PQ(/T) encryption schemes.¶
3.2. Composite Signatures
The ML-DSA + EdDSA signature consists of independent ML-DSA and EdDSA signatures, and an implementation MUST successfully validate both signatures to state that the ML-DSA + EdDSA signature is valid.¶
3.3. Multiple Signatures
The OpenPGP message format allows multiple signatures of a message, that is, the attachment of multiple signature packets.¶
An implementation MAY sign a message with a traditional key and a PQ(/T) key from the same sender. This ensures backwards compatibility due to Section 5.2.5 of [RFC9580], since a legacy implementation without PQ(/T) support can fall back on the traditional signature.¶
Newer implementations with PQ(/T) support MAY ignore the traditional signature(s) during validation.¶
Implementations SHOULD consider the message correctly signed if at least one of the non-ignored signatures validates successfully. This is consistent with Section 5.2.5 of [RFC9580].¶
3.4. ECC Requirements
Even though the zero point, also called the point at infinity, may occur as a result of arithmetic operations on points of an elliptic curve, it MUST NOT appear in any ECC data structure defined in this document. An implementation MAY signal an error if this condition is encountered.¶
Furthermore, when performing the explicitly listed operations in Sections 4.1.1.1 or 4.1.1.2, it is REQUIRED to follow the specification and security advisory mandated from the respective elliptic curve specification [RFC7748].¶
3.5. Key Version Binding
All PQ(/T) asymmetric algorithms are to be used only in v6 (and newer) keys and certificates, with the single exception of ML
4. Composite KEM Schemes
4.1. Building Blocks
4.1.1. ECDH KEM
In this section, the encryption, decryption, and data formats for the ECDH component of the composite algorithms are defined.¶
Table 3 describes the ECDH KEM parameters and artifact lengths. The artifacts in Table 3 follow the encodings described in [RFC7748].¶
The various procedures to perform the operations of an ECDH KEM are defined in the following subsections. Specifically, each of these subsections defines the instances of the following operations:¶
and¶
To instantiate ECDH-KEM, one must select a parameter set from Table 3.¶
4.1.1.1. X25519-KEM
The encapsulation and decapsulation operations of X25519-KEM are described using the function X25519() and encodings defined in [RFC7748].
The ecdhSecretKey is denoted as r and the ecdhPublicKey as R; they are subject to the equation R = X25519(r, U(P)).
Here, U(P) denotes the u-coordinate of the base point of Curve25519.¶
The operation X25519 is defined as follows:¶
-
Generate an ephemeral key pair {
v,V} viaV = X25519(v,U(P))wherevis a randomly generated octet string with a length of 32 octets¶ -
Compute the shared coordinate
X = X25519(v, R)whereRis the recipient's public keyecdhPublicKey¶ -
Set the output
ecdhCipherTexttoV¶ -
Set the output
ecdhKeySharetoX¶
The operation X25519 is defined as follows:¶
4.1.1.2. X448-KEM
The encapsulation and decapsulation operations of X448-KEM are described using the function X448() and encodings defined in [RFC7748].
The ecdhSecretKey is denoted as r and the ecdhPublicKey as R; they are subject to the equation R = X448(r, U(P)).
Here, U(P) denotes the u-coordinate of the base point of Curve448.¶
The operation X448 is defined as follows:¶
-
Generate an ephemeral key pair {
v,V} viaV = X448(v,U(P))wherevis a randomly generated octet string with a length of 56 octets¶ -
Compute the shared coordinate
X = X448(v, R)whereRis the recipient's public keyecdhPublicKey¶ -
Set the output
ecdhCipherTexttoV¶ -
Set the output
ecdhKeySharetoX¶
The operation X448 is defined as follows:¶
4.1.2. ML-KEM
ML-KEM features the following operations:¶
and¶
The above are the operations ML-KEM.Encaps and ML-KEM.Decaps defined in [FIPS-203].
Note that mlkemPublicKey is the encapsulation and mlkemSecretKey is the decapsulation key.¶
ML-KEM has the parameterizatio
To instantiate ML-KEM, one must select a parameter set from the column "ML-KEM" of Table 4.¶
4.2. Composite Encryption Schemes with ML-KEM
Table 2 specifies the following ML-KEM + ECDH composite public key encryption schemes:¶
The ML-KEM + ECDH composite public key encryption schemes are built according to the following principal design:¶
-
The ML-KEM encapsulation algorithm is invoked to create an ML-KEM ciphertext together with an ML-KEM symmetric key share.¶
-
The encapsulation algorithm of an ECDH KEM, namely X25519-KEM or X448-KEM, is invoked to create an ECDH ciphertext together with an ECDH symmetric key share.¶
-
A Key Encryption Key (KEK) is computed as the output of a key combiner that receives as input both of the above created symmetric key shares, the ECDH ciphertext, the ECDH public key, and the protocol binding information.¶
-
The session key for content encryption, generated as specified in [RFC9580], is then wrapped as described in [RFC3394] using AES-256 as the algorithm and the KEK as the key.¶
-
The PKESK packet's algorithm
-specific parts are made up of the ML-KEM ciphertext, the ECDH ciphertext, and the wrapped session key.¶
4.2.1. Key Combiner
For the composite KEM schemes defined in Table 2, the following procedure MUST be used to compute the KEK that wraps a session key.
The construction is a key derivation function compliant with the QSF/X-Wing construction in [BCD_KEK that is used to wrap (that is, encrypt) the session key.¶
The value domSep is a constant set to the UTF-8 encoding of the string "Open
Here, len(domSep) is the single octet with the value equal to the octet-length of domSep, that is, decimal 21.¶
4.2.2. Key Generation Procedure
The implementation MUST generate the ML-KEM and the ECDH component keys independently. ML-KEM key generation follows the specification in [FIPS-203], and the artifacts are encoded as fixed-length octet strings whose sizes are listed in Section 4.1.2. ECDH key generation follows the specification in [RFC7748], and the artifacts are encoded as fixed-length octet strings whose sizes are listed in Table 3.¶
4.2.3. Encryption Procedure
The procedure to perform public key encryption with an ML-KEM + ECDH composite scheme is as follows:¶
-
Take the recipient's authenticated public key packet
pkCompositeandsessionKeyas input¶ -
Parse the algorithm ID from
pkCompositeand set it asalgId¶ -
Extract the
ecdhPublicKeyandmlkemPublicKeycomponents from the algorithm-specific data encoded in pkCompositewith the format specified in Section 4.3.2¶ -
Instantiate the ECDH-KEM and the ML-KEM depending on the algorithm ID according to Table 5¶
-
Compute
(ecdh¶Cipher Text, ecdhKeyShare) = ECDH -KEM .Encaps (ecdh Public Key ) -
Compute
(mlkem¶Cipher Text, mlkemKeyShare) = ML -KEM .Encaps (mlkem Public Key ) -
Compute
KEK = multias defined in Section 4.2.1¶Key Combine (mlkem Key Share, ecdhKeyShare, ecdh Cipher Text, ecdhPublicKey, algId) -
Compute
C = AESKeywith AES-256 as per [RFC3394] that includes a 64-bit integrity check¶Wrap (KEK, sessionKey) -
Output the algorithm
-specific part of the PKESK as ecdhCipherText || mlkem, where bothCipher Text || len(C, symAlgId) (|| symAlgId) || C symAlgIdandlen(C, symAlgId)are single-octet fields,symAlgIddenotes the symmetric algorithm ID used and is present only for a v3 PKESK, andlen(C, symAlgId)denotes the combined octet length of the fields specified as the arguments.¶
4.2.4. Decryption Procedure
The procedure to perform public key decryption with an ML-KEM + ECDH composite scheme is as follows:¶
-
Take the matching PKESK and own secret key packet as input¶
-
From the PKESK, extract the algorithm ID as
algIdand the wrapped session key asencryptedKey¶ -
Check that the own and the extracted algorithm ID match¶
-
Parse the
ecdhSecretKeyandmlkemSecretKeyfrom the algorithm-specific data of the own secret key encoded in the format specified in Section 4.3.2¶ -
Instantiate the ECDH-KEM and the ML-KEM depending on the algorithm ID according to Table 5¶
-
Parse
ecdhCipherText,mlkemCipherText, andCfromencryptedKeyencoded asecdhCipherText || mlkemas specified in Section 4.3.1, whereCipher Text || len(C, symAlgId) (|| symAlgId) || C symAlgIdis present only in the case of a v3 PKESK¶ -
Compute
(ecdhKeyShare) = ECDH¶-KEM .Decaps (ecdh Cipher Text, ecdhSecretKey) -
Compute
(mlkemKeyShare) = ML¶-KEM .Decaps (mlkem Cipher Text, mlkem Secret Key ) -
Compute
KEK = multias defined in Section 4.2.1¶Key Combine (mlkem Key Share, ecdhKeyShare, ecdh Cipher Text, ecdhPublicKey, algId) -
Compute
sessionKey = AESKeywith AES-256 as per [RFC3394], aborting if the 64-bit integrity check fails¶Unwrap (KEK, C) -
Output
sessionKey¶
4.3. Packet Specifications
4.3.1. Public Key Encrypted Session Key Packets (Packet Type ID 1)
The algorithm
-
A fixed-length octet string representing an ECDH ephemeral public key in the format associated with the curve as specified in Section 4.1.1.¶
-
A fixed-length octet string of the ML-KEM ciphertext whose length depends on the algorithm ID as specified in Table 4.¶
-
A one-octet size of the following fields.¶
-
(Only in the case of a v3 PKESK packet) a one-octet symmetric algorithm identifier.¶
-
The wrapped session key represented as an octet string.¶
Note that, for the ML-KEM composite schemes, in the case of a v3 PKESK packet, the symmetric algorithm identifier is not encrypted. This follows the construction of X25519 and X448 specified in [RFC9580]. Instead, it is prepended to the wrapped session key in plaintext and its length is included in the preceding length field. In the case of v3 PKESK packets for ML-KEM composite schemes, the symmetric algorithm used MUST be AES-128, AES-192 or AES-256 (algorithm IDs 7, 8, or 9).¶
In the case of a v3 PKESK, a receiving implementation MUST check if the length of the unwrapped symmetric key matches the symmetric algorithm ID and abort if this is not the case.¶
Implementations MUST NOT use the obsolete Symmetrically Encrypted Data packet (Packet Type ID 9) to encrypt data protected with the algorithms described in this document.¶
4.3.2. Key Material Packets
The composite ML-KEM-768 + X25519 (algorithm ID 35) MUST be used only with v4 or v6 keys, as defined in [RFC9580], or newer versions defined by updates of that document.¶
The composite ML-KEM-1024 + X448 (algorithm ID 36) MUST be used only with v6 keys, as defined in [RFC9580], or newer versions defined by updates of that document.¶
4.3.2.1. Public Key Packets (Packet Type IDs 6 and 14)
The algorithm
-
A fixed-length octet string representing an ECC public key, in the point format associated with the curve specified in Section 4.1.1.¶
-
A fixed-length octet string containing the ML-KEM public key whose length depends on the algorithm ID as specified in Table 4.¶
4.3.2.2. Secret Key Packets (Packet Type IDs 5 and 7)
The algorithm
-
A fixed-length octet string of the encoded ECDH secret key whose encoding and length depend on the algorithm ID as specified in Section 4.1.1.¶
-
A fixed-length octet string containing the ML-KEM secret key in seed format whose length is 64 octets (compare Table 4). The seed format is defined in accordance with Section 3.3 of [FIPS-203]. Namely, the secret key is given by the concatenation of the values of
dandz, generated in steps 1 and 2 ofML-KEM.KeyGen[FIPS-203], each of a length of 32 octets. Upon parsing the secret key format, or before using the secret key, for the expansion of the key, the functionML[FIPS-203] has to be invoked with the parsed values of-KEM .Key Gen_ internal dandzas input.¶
5. Composite Signature Schemes
5.1. Building Blocks
5.1.1. EdDSA-Based Signatures
Throughout this specification, "EdDSA" refers to the PureEdDSA variant defined in [RFC8032]. The context is always empty.¶
To sign and verify with EdDSA, the following operations are defined:¶
and¶
The public and secret key, as well as the signature, MUST be encoded according to [RFC8032] as fixed-length octet strings. The following table describes the EdDSA parameters and artifact lengths:¶
5.1.2. ML-DSA Signatures
Throughout this specification, "ML-DSA" refers to the default pure and hedged version of ML-DSA defined in [FIPS-204].¶
ML-DSA signature generation is performed using the default hedged version of the ML-DSA.Sign algorithm, as specified in [FIPS-204], with an empty context string ctx.
That is, to sign with ML-DSA, the following operation is defined:¶
ML-DSA signature verification is performed using the ML-DSA.Verify algorithm, as specified in [FIPS-204], with an empty context string ctx.
That is, to verify with ML-DSA, the following operation is defined:¶
ML-DSA has the parameterizatio
5.2. Composite Signature Schemes with ML-DSA
5.2.1. Key Generation Procedure
The implementation MUST generate the ML-DSA and the EdDSA component keys independently. ML-DSA key generation follows the specification in [FIPS-204], and the artifacts are encoded as fixed-length octet strings whose sizes are listed in Section 5.1.2. EdDSA key generation follows the specification in [RFC8032], and the artifacts are encoded as fixed-length octet strings whose sizes are listed in Section 5.1.1.¶
5.2.2. Signature Generation
To sign a message M with ML-DSA + EdDSA, the following sequence of operations has to be performed:¶
-
Generate
dataDigestaccording to Section 5.2.4 of [RFC9580]¶ -
Create the EdDSA signature over
dataDigestwithEdDSA.Sign()from Section 5.1.1¶ -
Create the ML-DSA signature over
dataDigestwithML-DSA.Sign()from Section 5.1.2¶ -
Encode the EdDSA and ML-DSA signatures according to the packet structure given in Section 5.3.1¶
5.2.3. Signature Verification
To verify an ML-DSA + EdDSA signature, the following sequence of operations has to be performed:¶
-
Verify the EdDSA signature with
EdDSA.Verify()from Section 5.1.1¶ -
Verify the ML-DSA signature with
ML-DSA.Verify()from Section 5.1.2¶
As specified in Section 5, an implementation MUST validate both signatures, that is, EdDSA and ML-DSA, successfully to state that a composite ML-DSA + EdDSA signature is valid.¶
5.3. Packet Specifications
5.3.1. Signature Packet (Packet Type ID 2)
The composite ML-DSA + EdDSA schemes MUST be used only with v6 signatures, as defined in [RFC9580], or newer versions defined by updates of that document.¶
The algorithm
-
A fixed-length octet string representing the EdDSA signature whose length depends on the algorithm ID as specified in Table 6.¶
-
A fixed-length octet string of the ML-DSA signature value whose length depends on the algorithm ID as specified in Table 7.¶
A composite ML-DSA + EdDSA signature MUST use a hash algorithm with a digest size of at least 256 bits for the computation of the message digest. A verifying implementation MUST reject any composite ML-DSA + EdDSA signature that uses a hash algorithm with a smaller digest size.¶
5.3.2. Key Material Packets
The composite ML-DSA + EdDSA schemes MUST be used only with v6 keys, as defined in [RFC9580], or newer versions defined by updates of that document.¶
5.3.2.1. Public Key Packets (Packet Type IDs 6 and 14)
The algorithm
5.3.2.2. Secret Key Packets (Packet Type IDs 5 and 7)
The algorithm
-
A fixed-length octet string representing the EdDSA secret key whose length depends on the algorithm ID as specified in Table 6.¶
-
A fixed-length octet string containing the ML-DSA secret key in seed format whose length is 32 octets (compare Table 7). The seed format is defined in accordance with Section 3.6.3 of [FIPS-204]. Namely, the secret key is given by the value
xigenerated in step 1 ofML-DSA.KeyGen[FIPS-204]. Upon parsing the secret key format, or before using the secret key, for the expansion of the key, the functionML[FIPS-204] has to be invoked with the parsed value of-DSA .Key Gen_ internal xias input.¶
6. SLH-DSA
Throughout this specification, "SLH-DSA" refers to the default pure and hedged version of SLH-DSA defined in [FIPS-205].¶
6.1. The SLH-DSA Algorithms
The following table lists the group of algorithm code points for the SLH-DSA signature scheme and the corresponding artifact lengths. This group of algorithms is henceforth referred to as "SLH-DSA code points".¶
6.1.1. Key Generation
SLH-DSA key generation is performed via the algorithm slh_ as specified in [FIPS-205], and the artifacts are encoded as fixed-length octet strings whose sizes are listed in Section 6.1.¶
6.1.2. Signature Generation
SLH-DSA signature generation is performed using the default hedged version of the slh_ algorithm, as specified in [FIPS-205], with an empty context string ctx.¶
6.1.3. Signature Verification
SLH-DSA signature verification is performed using the slh_ algorithm, as specified in [FIPS-205], with an empty context string ctx.¶
6.2. Packet Specifications
6.2.1. Signature Packet (Packet Type ID 2)
The SLH-DSA algorithms MUST be used only with v6 signatures, as defined in Section 5.2.3 of [RFC9580].¶
The algorithm
-
A fixed-length octet string of the SLH-DSA signature value whose length depends on the algorithm ID in the format specified in Table 8.¶
An SLH-DSA signature MUST use a hash algorithm with a digest size of at least 256 bits for the computation of the message digest. A verifying implementation MUST reject any SLH-DSA signature that uses a hash algorithm with a smaller digest size.¶
6.2.2. Key Material Packets
The SLH-DSA code points MUST be used only with v6 keys, as defined in [RFC9580], or newer versions defined by updates of that document.¶
6.2.2.1. Public Key Packets (Packet Type IDs 6 and 14)
The algorithm
6.2.2.2. Secret Key Packets (Packet Type IDs 5 and 7)
The algorithm
7. Notes on Algorithms
7.1. Symmetric Algorithms for SEIPD Packets
Implementations MUST implement AES-256.
An implementation SHOULD use AES-256 in the case of a v1 Symmetrically Encrypted Integrity Protected Data (SEIPD) packet or AES-256 with any available Authenticated Encryption with Associated Data (AEAD) mode in the case of a v2 SEIPD packet, if all recipient certificates indicate support for it (explicitly or implicitly).
This requirement is not specified as a MUST because it would render messages not using AES-256 invalid and subject to rejection upon decryption; however, a receiving implementation may not have access to all recipient certificates and, therefore, cannot reliably enforce such a requirement.¶
A certificate that contains a PQ(/T) key SHOULD include AES-256 in the "Preferred Symmetric Ciphers for v1 SEIPD" subpacket and SHOULD include the pair AES-256 with OCB in the "Preferred AEAD Ciphersuites" subpacket to make support for AES-256 and AES-256 with OCB explicit.¶
If AES-256 is not explicitly in the list of the "Preferred Symmetric Ciphers for v1 SEIPD" subpacket, and if the certificate contains a PQ(/T) key, it is implicitly at the end of the list.
This is justified since AES-256 is mandatory to implement.
If AES-128 is also implicitly added to the list, it is added after AES-256.¶
If the pair of AES-256 and OCB is not explicitly in the list of the "Preferred AEAD Ciphersuites" subpacket, and if the certificate contains a PQ(/T) key, it is implicitly at the end of the list.
This is justified since AES-256 and OCB are mandatory to implement.
If the pair of AES-128 and OCB is also implicitly added to the list, it is added after the pair of AES-256 and OCB.¶
7.2. Hash Algorithms for Key Binding Signatures
Subkey binding signatures (Signature Type 0x18) over algorithms described in this document MUST NOT be made with MD5, SHA-1, or RIPEMD-160.
A receiving implementation MUST treat such a signature as invalid.¶
8. Migration Considerations
The post-quantum KEM algorithms defined in Table 2 and the signature algorithms defined in Table 1 are a set of new public key algorithms that extend the algorithm selection of [RFC9580]. During the transition period, the post-quantum algorithms will not be supported by all clients. Therefore, various migration considerations must be taken into account, particularly backwards compatibility to existing implementations that have not yet been updated to support the post-quantum algorithms.¶
8.1. Encrypting to Traditional and PQ(/T) Keys
During the transition to post-quantum cryptography, an implementation MAY, by default, encrypt messages to both PQ(/T) and traditional keys to avoid disruption to communications, optionally displaying a warning. As noted in Section 3.1, the confidentiality of a message is not post-quantum secure when using multiple PKESKs unless all of them use PQ(/T) encryption schemes.¶
8.2. Signing with Traditional and PQ(/T) Keys
The OpenPGP specification [RFC9580] allows signing a message with multiple signatures. This implies the possibility of signing with both a PQ(/T) and a traditional key as described in Section 3.3. Note that signing with only PQ(/T) key material is not backwards compatible.¶
8.3. Verifying with Traditional and PQ(/T) Keys
When verifying, an implementation MAY be willing to accept signatures both from PQ(/T) keys and from traditional keys.
A verifier concerned with a cryptographical
8.4. Generating PQ(/T) Keys
It is RECOMMENDED to generate fresh secrets when generating PQ(/T) keys. Note that reusing key material from existing ECC keys in PQ(/T) keys does not provide backwards compatibility.¶
9. Security Considerations
9.1. Security Aspects of Composite Signatures
When multiple signatures are applied to a message, the question of the protocol's resistance against signature
An attacker cannot generate a fresh valid signature for a message that has already been signed twice with the composite algorithm; being able to do so would violate Strong Unforgeability under Chosen Message Attack (SUF-CMA). Specifically, an attacker might try to construct a new signature by remixing the component parts of two legitimate composite signatures. That is impossible because each v6 signature embeds a random salt at the start of its hashed metadata. The two legitimate signatures use different salts, so their components are not interchangeable and cannot be recombined into a valid signature.¶
9.1.1. Preventing Signature Cross-Protocol Attacks
Signature cross-protocol attacks exploit the reuse of signatures across different protocols or contexts, allowing attackers to maliciously repurpose valid signatures in unintended ways.
ML-DSA [FIPS-204], SLH-DSA [FIPS-205], and EdDSA [RFC8032] support an optional context string parameter ctx that can be incorporated into the algorithm's internal message preprocessing step before signing and verification.
In principle, this context parameter can contribute to the prevention of cross-protocol attacks.
Nevertheless, this specification defines all these algorithms to use an empty context string, which is in accordance with the previous use of EdDSA in OpenPGP and maximizes interoperabilit
9.2. Key Combiner
A central security notion of a key combiner is IND
Note that the inclusion of the ECC public key in the key combiner also accounts for multi-target attacks against X25519 and X448.¶
9.2.1. Domain Separation and Context Binding
The domSep information defined in Section 4.2.1 provides the domain separation for the key-combiner construction.
This ensures that the input keying material is used to generate a KEK for a specific purpose.
Appending the length octet ensures that no collisions can result across different domains, which might be defined in the future.
This is because domSep || len(domSep) is guaranteed to result in a suffix-free set of octet strings even if further values should be defined for domSep.
The term "suffix-free" applied to a set of words indicates that no word is the suffix of another.
Thus, this property ensures unambiguous parsing of a word from the rear of a string.
Unambiguous parsability, in turn, ensures that no collisions can happen on the space of input strings to the key combiner.¶
The algorithm ID, passed as the algID parameter to multiKeyCombine, binds the derived KEK to the chosen algorithm.
The algorithm ID unequivocally identifies the algorithm, the parameters for its instantiation, and the length of all artifacts, including the derived key.¶
9.3. ML-DSA and SLH-DSA Hedged Variants
This specification makes use of the default "hedged" variants of ML-DSA and SLH-DSA, which mix fresh randomness into the respective signature
9.4. Minimum Digest Size for PQ(/T) Signatures
This specification requires that all PQ(/T) signatures defined in this document are made on message digests computed with a hash algorithm with at least 256 bits of digest size. Since all signature algorithms defined in this document require version 6 (or newer) signature packets, which currently include a leading random salt value in the hashed data, the required property is not collision but (second) preimage resistance. Therefore, a hash algorithm with a digest size of at least 256 bits is sufficient to match the targeted security levels of all PQ(/T) algorithms defined in this document.¶
9.5. Symmetric Algorithms for SEIPD Packets
This specification mandates support for AES-256 for two reasons.
First, AES-KeyWrap with AES-256 is already part of the composite KEM construction.
Second, some of the PQ(/T) algorithms target the security level of AES-256.¶
For the same reasons, this specification further recommends the use of AES-256 if it is supported by all recipient certificates, regardless of what the implementation would otherwise choose based on the recipients' preferences.
This recommendation should be understood as a clear and simple rule for the selection of AES-256 for encryption.
Implementations may also make more nuanced decisions.¶
9.6. Key Generation
When generating keys, this specification requires component keys to be generated independently and recommends not reusing existing keys for any of the components.
Note that reusing a key across different protocols may lead to signature confusion vulnerabilities that formally classify as signature forgeries.
Generally, reusing a key for different purposes may lead to subtle vulnerabilities
9.7. Random Number Generation and Seeding
As mandated by Section 13.10 of [RFC9580], all random data must be generated using a Cryptographical
10. Additional Considerations
10.1. Performance Considerations for SLH-DSA
This specification introduces both ML-DSA + EdDSA and SLH-DSA as PQ(/T) signature schemes.¶
Generally, ML-DSA + EdDSA provides a performance in terms of execution time requirements that is close to that of traditional ECC signature schemes. Regarding the size of signatures and public keys, though, ML-DSA has far greater requirements than traditional schemes like ECC-based or even RSA signature schemes.¶
Implementers may want to offer SLH-DSA for applications where the weaker security assumptions of a hash-based signature scheme are required -- namely only the second preimage resistance of a hash function; thus, a potentially higher degree of trust in the long-term security of signatures is achieved. However, SLH-DSA has performance characteristics in terms of execution time of the signature generation as well as space requirements for the signature that are even greater than those of ML-DSA + EdDSA signature schemes.¶
Pertaining to the execution time, the particularly costly operation in SLH-DSA is the signature generation.
Depending on the parameter set, it can range from approximately one hundred to more than two thousand times that of ML-DSA-87.
These numbers are based on the performance measurements published in the NIST submissions for SLH-DSA and ML-DSA.
In order to achieve fast signature generation times, the algorithm SLH
In order to minimize the space requirements of an SLH-DSA signature, an algorithm ID with the name ending in "s" for "small" should be chosen.
This comes at the expense of a longer signature generation time.
In particular, SLH
Unlike the signature generation time, the signature verification time of SLH-DSA is not that much larger than that of other PQC schemes. Based on the performance measurements published in the NIST submissions for SLH-DSA and ML-DSA, the verification time of SLH-DSA is, for the parameters covered by this specification, larger than that of ML-DSA-87 by a factor ranging from four (for -128s) over nine (for -256s) to twelve (for -128f).¶
11. IANA Considerations
IANA has added the algorithm IDs listed below to the "OpenPGP Public Key Algorithms" registry at [IANA-OPENPGP].¶
- ID:
- 30¶
- Algorithm:
- ML
-DSA -65+Ed25519¶ - Public Key Format:
- 32-octet Ed25519 public key (Table 6), 1952-octet ML-DSA-65 public key (Table 7)¶
- Secret Key Format:
- 32-octet Ed25519 secret key (Table 6), 32-octet ML-DSA-65 secret key (Table 7)¶
- Signature Format:
- 64-octet Ed25519 signature (Table 6), 3309-octet ML-DSA-65 signature (Table 7)¶
- PKESK Format:
- N/A¶
- Reference:
- Section 5¶
- ID:
- 31¶
- Algorithm:
- ML-DSA-87+Ed448¶
- Public Key Format:
- 57-octet Ed448 public key (Table 6), 2592-octet ML-DSA-87 public key (Table 7)¶
- Secret Key Format:
- 57-octet Ed448 secret key (Table 6), 32-octet ML-DSA-87 secret key (Table 7)¶
- Signature Format:
- 114-octet Ed448 signature (Table 6), 4627-octet ML-DSA-87 signature (Table 7)¶
- PKESK Format:
- N/A¶
- Reference:
- Section 5¶
- ID:
- 32¶
- Algorithm:
- SLH
-DSA -SHAKE -128s¶ - Public Key Format:
- 32-octet public key (Table 8)¶
- Secret Key Format:
- 64-octet secret key (Table 8)¶
- Signature Format:
- 7856-octet signature (Table 8)¶
- PKESK Format:
- N/A¶
- Reference:
- Section 6.1¶
- ID:
- 33¶
- Algorithm:
- SLH
-DSA -SHAKE -128f¶ - Public Key Format:
- 32-octet public key (Table 8)¶
- Secret Key Format:
- 64-octet secret key (Table 8)¶
- Signature Format:
- 17088-octet signature (Table 8)¶
- PKESK Format:
- N/A¶
- Reference:
- Section 6.1¶
- ID:
- 34¶
- Algorithm:
- SLH
-DSA -SHAKE -256s¶ - Public Key Format:
- 64-octet public key (Table 8)¶
- Secret Key Format:
- 128-octet secret key (Table 8)¶
- Signature Format:
- 29792-octet signature (Table 8)¶
- PKESK Format:
- N/A¶
- Reference:
- Section 6.1¶
- ID:
- 35¶
- Algorithm:
- ML
-KEM -768+X25519¶ - Public Key Format:
- 32-octet X25519 public key (Table 3), 1184-octet ML-KEM-768 public key (Table 4)¶
- Secret Key Format:
- 32-octet X25519 secret key (Table 3), 64-octet ML-KEM-768 secret key (Table 4)¶
- Signature Format:
- N/A¶
- PKESK Format:
- 32-octet X25519 ciphertext, 1088-octet ML-KEM-768 ciphertext,
1 octet remaining length, [1-octet algorithm ID in the case of v3 PKESK,]
noctets wrapped session key (Section 4.3.1)¶ - Reference:
- Section 4¶
- ID:
- 36¶
- Algorithm:
- ML-KEM-1024+X448¶
- Public Key Format:
- 56-octet X448 public key (Table 3), 1568-octet ML-KEM-1024 public key (Table 4)¶
- Secret Key Format:
- 56-octet X448 secret key (Table 3), 64-octet ML-KEM-1024 secret key (Table 4)¶
- Signature Format:
- N/A¶
- PKESK Format:
- 56-octet X448 ciphertext, 1568-octet ML-KEM-1024 ciphertext,
1 octet remaining length, [1-octet algorithm ID in the case of v3 PKESK,]
noctets wrapped session key (Section 4.3.1)¶ - Reference:
- Section 4¶
IANA has added the following note to this registry:¶
The field specifications enclosed in square brackets for PKESK Format represent fields that may or may not be present, depending on the PKESK version.¶
12. References
12.1. Normative References
- [FIPS-203]
-
, "Module
-Lattice , NIST FIPS 203, DOI 10-Based Key -Encapsulation Mechanism Standard" .6028 , , <https:///NIST .FIPS .203 nvlpubs >..nist .gov /nistpubs /FIPS /NIST .FIPS .203 .pdf - [FIPS-204]
-
NIST, "Module
-Lattice , NIST FIPS 204, DOI 10-Based Digital Signature Standard" .6028 , , <https:///NIST .FIPS .204 nvlpubs >..nist .gov /nistpubs /FIPS /NIST .FIPS .204 .pdf - [FIPS-205]
-
NIST, "Stateless Hash-Based Digital Signature Standard", NIST FIPS 205, DOI 10
.6028 , , <https:///NIST .FIPS .205 nvlpubs >..nist .gov /nistpubs /FIPS /NIST .FIPS .205 .pdf - [IANA-OPENPGP]
-
IANA, "OpenPGP Public Key Algorithms", <https://
www >..iana .org /assignments /openpgp - [RFC2119]
-
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10
.17487 , , <https:///RFC2119 www >..rfc -editor .org /info /rfc2119 - [RFC3394]
-
Schaad, J. and R. Housley, "Advanced Encryption Standard (AES) Key Wrap Algorithm", RFC 3394, DOI 10
.17487 , , <https:///RFC3394 www >..rfc -editor .org /info /rfc3394 - [RFC7748]
-
Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves for Security", RFC 7748, DOI 10
.17487 , , <https:///RFC7748 www >..rfc -editor .org /info /rfc7748 - [RFC8032]
-
Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital Signature Algorithm (EdDSA)", RFC 8032, DOI 10
.17487 , , <https:///RFC8032 www >..rfc -editor .org /info /rfc8032 - [RFC8174]
-
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10
.17487 , , <https:///RFC8174 www >..rfc -editor .org /info /rfc8174 - [RFC9580]
-
Wouters, P., Ed., Huigens, D., Winter, J., and Y. Niibe, "OpenPGP", RFC 9580, DOI 10
.17487 , , <https:///RFC9580 www >..rfc -editor .org /info /rfc9580
12.2. Informative References
- [ABH_
21] -
Alwen, J., Blanchet, B., Hauck, E., Kiltz, E., Lipp, B., and D. Riepel, "Analysing the HPKE Standard", Advances in Cryptology - EUROCRYPT 2021, Lecture Notes in Computer Science, Vol. 12696, pp. 87-116, , <https://
doi >..org /10 .1007 /978 -3 -030 -77870 -5_ 4 - [BCD_
24] -
Barbosa, M., Connolly, D., Duarte, J. D., Kaiser, A., Schwabe, P., Varner, K., and B. Westerbaan, "X-Wing The Hybrid KEM You've Been Looking For", IACR Communications in Cryptology, vol. 1, no. 1, , <https://
doi >..org /10 .62056 /a3qj89n4e - [CHHKM]
-
Connolly, D., Hövelmanns, K., Hülsing, A., Kousidis, S., and M. Meijers, "Starfighters - On the General Applicability of X-Wing", Cryptology ePrint Archive, Paper 2025/1397, , <https://
eprint >..iacr .org /2025 /1397 - [NIST-PQC]
-
NIST, "Post-Quantum Cryptography Standardization
" , , <https://csrc >..nist .gov /projects /post -quantum -cryptography /post -quantum -cryptography -standardization - [NISTIR-8413]
-
Alagic, G., Apon, D., Cooper, D., Dang, Q., Dang, T., Kelsey, J., Lichtinger, J., Liu, Y., Miller, C., Moody, D., Peralta, R., Perlner, R., Robinson, A., and D. Smith-Tone, "Status Report on the Third Round of the NIST Post-Quantum Cryptography Standardization Process", NIST IR 8413-upd1, , <https://
doi >..org /10 .6028 /NIST .IR .8413 -upd1 - [RFC9794]
-
Driscoll, F., Parsons, M., and B. Hale, "Terminology for Post-Quantum Traditional Hybrid Schemes", RFC 9794, DOI 10
.17487 , , <https:///RFC9794 www >..rfc -editor .org /info /rfc9794
Appendix A. Test Vectors
To help with implementing this specification, a set of non-normative examples follow.¶
A.1. Sample v6 Ed25519 with ML-KEM-768+X25519 Data
A.1.1. Transferable Secret Key
Here is a Transferable Secret Key consisting of:¶
-
A v6 Ed25519 Private Key packet¶
-
A v6 direct key self-signature¶
-
A User ID packet¶
-
A v6 positive certification self-signature¶
-
A v6 ML
-KEM -768+X25519 Private Subkey packet¶ -
A v6 subkey binding signature¶
The primary key has the fingerprint c789e17d9dbdca7b.¶
The subkey has the fingerprint dafe0eebb2675ecf.¶
A.1.2. Transferable Public Key
Here is the corresponding Transferable Public Key for Appendix A.1.1 consisting of:¶
A.1.3. Encrypted and Signed Message
Here is a signed message "Testing\n" encrypted to the certificate Appendix A.1.2 and signed by the secret key Appendix A.1.1:¶
The hex-encoded mlkemKeyShare input to multiKeyCombine is b0e45408d8c713f3.¶
The hex-encoded ecdhKeyShare input to multiKeyCombine is 9d994741e0db5eac.¶
The hex-encoded output of multiKeyCombine is 5bf078bf7977109d.¶
The hex-encoded session key is 94a3b8c9784463bb.¶
A.2. Sample v4 Ed25519 with ML-KEM-768+X25519 Data
A.2.1. Transferable Secret Key
Here is a Transferable Secret Key consisting of:¶
-
A v4 Ed25519 Private Key packet¶
-
A User ID packet¶
-
A v4 positive certification self-signature¶
-
A v4 ML
-KEM -768+X25519 Private Subkey packet¶ -
A v4 subkey binding signature¶
The primary key has the fingerprint 342e5db2de345215.¶
The subkey has the fingerprint e51dbfea51936988.¶
A.2.2. Transferable Public Key
Here is the corresponding Transferable Public Key for Appendix A.2.1 consisting of:¶
A.2.3. Encrypted and Signed SEIPD v1 Message
Here is a signed message "Testing\n" encrypted to the certificate Appendix A.2.2 and signed by the secret key Appendix A.2.1:¶
The hex-encoded mlkemKeyShare input to multiKeyCombine is 16f2aea8ec1ca277.¶
The hex-encoded ecdhKeyShare input to multiKeyCombine is 2fc0c8fcace9636c.¶
The hex-encoded output of multiKeyCombine is c1591d7511f9f021.¶
The hex-encoded session key is b4dc7197e1519822.¶
A.2.4. Encrypted and Signed SEIPD v2 Message
Here is a signed message "Testing\n" encrypted to the certificate Appendix A.2.2 and signed by the secret key Appendix A.2.1:¶
The hex-encoded mlkemKeyShare input to multiKeyCombine is 16a22adbeced91ad.¶
The hex-encoded ecdhKeyShare input to multiKeyCombine is 5ac67eab192f25ac.¶
The hex-encoded output of multiKeyCombine is 5c5652a690b55d1e.¶
The hex-encoded session key is 160867d96032b640.¶
A.3. Sample ML-DSA-65+Ed25519 with ML-KEM-768+X25519 Data
A.3.1. Transferable Secret Key
Here is a Transferable Secret Key consisting of:¶
-
A v6 ML
-DSA -65+Ed25519 Private Key packet¶ -
A v6 direct key self-signature¶
-
A User ID packet¶
-
A v6 positive certification self-signature¶
-
A v6 ML
-KEM -768+X25519 Private Subkey packet¶ -
A v6 subkey binding signature¶
The primary key has the fingerprint a3e2e14b6a493ff9.¶
The subkey has the fingerprint 7dae8fbce2302260.¶
A.3.2. Transferable Public Key
Here is the corresponding Transferable Public Key for Appendix A.3.1 consisting of:¶
A.3.3. Encrypted and Signed Message
Here is a signed message "Testing\n" encrypted to the certificate Appendix A.3.2 and signed by the secret key Appendix A.3.1:¶
The hex-encoded mlkemKeyShare input to multiKeyCombine is 0987fe72ad5ea58e.¶
The hex-encoded ecdhKeyShare input to multiKeyCombine is 88f3e9a8de191712.¶
The hex-encoded output of multiKeyCombine is a4904982f7caa9c9.¶
The hex-encoded session key is adee68618b302d4b.¶
A.3.4. Detached Signature
Here is a detached signature for the message "Testing\n" made by the secret key in Appendix A.3.1:¶
-
A v6 signature packet¶
A.4. Sample ML-DSA-87+Ed448 with ML-KEM-1024+X448 Data
A.4.1. Transferable Secret Key
Here is a Transferable Secret Key consisting of:¶
-
A v6 ML-DSA-87+Ed448 Private Key packet¶
-
A v6 direct key self-signature¶
-
A User ID packet¶
-
A v6 positive certification self-signature¶
-
A v6 ML
-KEM -1024+X448 Private Subkey packet¶ -
A v6 subkey binding signature¶
The primary key has the fingerprint 0d7a8be1410cd68e.¶
The subkey has the fingerprint 65090e147a8116ab.¶
A.4.2. Transferable Public Key
Here is the corresponding Transferable Public Key for Appendix A.4.1 consisting of:¶
A.4.3. Encrypted and Signed Message
Here is a signed message "Testing\n" encrypted to the certificate Appendix A.4.2 and signed by the secret key Appendix A.4.1:¶
The hex-encoded mlkemKeyShare input to multiKeyCombine is f18f161e617b8ce5.¶
The hex-encoded ecdhKeyShare input to multiKeyCombine is 732860c8114ae84a.¶
The hex-encoded output of multiKeyCombine is ef1e32906f67d39b.¶
The hex-encoded session key is 0588ce40b038aac3.¶
A.4.4. Detached Signature
Here is a detached signature for the message "Testing\n" made by the secret key Appendix A.4.1:¶
-
A v6 signature packet¶
A.5. Sample SLH-DSA-SHAKE-128s with ML-KEM-768+X25519 Data
A.5.1. Transferable Secret Key
Here is a Transferable Secret Key consisting of:¶
-
A v6 SLH-DSA-128s Private Key packet¶
-
A v6 direct key self-signature¶
-
A User ID packet¶
-
A v6 positive certification self-signature¶
-
A v6 ML
-KEM -768+X25519 Private Subkey packet¶ -
A v6 subkey binding signature¶
The primary key has the fingerprint eed4d13fc36c78e4.¶
The subkey has the fingerprint 3e8745a4bb488779.¶
A.5.2. Transferable Public Key
Here is the corresponding Transferable Public Key for Appendix A.5.1 consisting of:¶
A.5.3. Encrypted and Signed Message
Here is a signed message "Testing\n" encrypted to the certificate Appendix A.5.2 and signed by the secret key Appendix A.5.1:¶
The hex-encoded mlkemKeyShare input to multiKeyCombine is 5dc60150f5f965dd.¶
The hex-encoded ecdhKeyShare input to multiKeyCombine is 9dbd0f9bde7fef09.¶
The hex-encoded output of multiKeyCombine is ae8ab57801911c04.¶
The hex-encoded session key is e87567cad8fee573.¶
A.5.4. Detached Signature
Here is a detached signature for the message "Testing\n" made by the secret key Appendix A.5.1:¶
-
A v6 signature packet¶
A.6. Sample SLH-DSA-SHAKE-128f with ML-KEM-768+X25519 Data
A.6.1. Transferable Secret Key
Here is a Transferable Secret Key consisting of:¶
-
A v6 SLH-DSA-128f Private Key packet¶
-
A v6 direct key self-signature¶
-
A User ID packet¶
-
A v6 positive certification self-signature¶
-
A v6 ML
-KEM -768+X25519 Private Subkey packet¶ -
A v6 subkey binding signature¶
The primary key has the fingerprint d54e0307021169f7.¶
The subkey has the fingerprint d8875664256c382d.¶
A.6.2. Transferable Public Key
Here is the corresponding Transferable Public Key for Appendix A.6.1 consisting of:¶
A.6.3. Detached Signature
Here is a detached signature for the message "Testing\n" made by the secret key Appendix A.6.1:¶
-
A v6 signature packet¶
A.7. Sample SLH-DSA-SHAKE-256s with ML-KEM-1024+X448 Data
A.7.1. Transferable Secret Key
Here is a Transferable Secret Key consisting of:¶
-
A v6 SLH-DSA-256s Private Key packet¶
-
A v6 direct key self-signature¶
-
A User ID packet¶
-
A v6 positive certification self-signature¶
-
A v6 ML
-KEM -1024+X448 Private Subkey packet¶ -
A v6 subkey binding signature¶
The primary key has the fingerprint 72fff84863aeba67.¶
The subkey has the fingerprint 570a5bbab9316987.¶
A.7.2. Transferable Public Key
Here is the corresponding Transferable Public Key for Appendix A.7.1 consisting of:¶
A.7.3. Detached Signature
Here is a detached signature for the message "Testing\n" made by the secret key Appendix A.7.1:¶
-
A v6 signature packet¶
Acknowledgments
Thanks to Daniel Kahn Gillmor, Justus Winter, Daniel Huigens, Evangelos Karatsiolis, and early implementers of the document for their reviews and feedback.¶
Contributors
Stephan Ehlen
BSI
Carl-Daniel Hailfinger
BSI
Andreas Huelsing
TU Eindhoven