rfc9814.original | rfc9814.txt | |||
---|---|---|---|---|
Network Working Group R. Housley | Internet Engineering Task Force (IETF) R. Housley | |||
Internet-Draft Vigil Security | Request for Comments: 9814 Vigil Security | |||
Intended status: Standards Track S. Fluhrer | Category: Standards Track S. Fluhrer | |||
Expires: 17 July 2025 Cisco Systems | ISSN: 2070-1721 Cisco Systems | |||
P. Kampanakis | P. Kampanakis | |||
Amazon Web Services | Amazon Web Services | |||
B. Westerbaan | B. Westerbaan | |||
Cloudflare | Cloudflare | |||
13 January 2025 | July 2025 | |||
Use of the SLH-DSA Signature Algorithm in the Cryptographic Message | Use of the SLH-DSA Signature Algorithm in the Cryptographic Message | |||
Syntax (CMS) | Syntax (CMS) | |||
draft-ietf-lamps-cms-sphincs-plus-19 | ||||
Abstract | Abstract | |||
SLH-DSA is a stateless hash-based signature scheme. This document | SLH-DSA is a stateless hash-based signature scheme. This document | |||
specifies the conventions for using the SLH-DSA signature algorithm | specifies the conventions for using the SLH-DSA signature algorithm | |||
with the Cryptographic Message Syntax (CMS). In addition, the | with the Cryptographic Message Syntax (CMS). In addition, the | |||
algorithm identifier and public key syntax are provided. | algorithm identifier and public key syntax are provided. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 17 July 2025. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9814. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. ASN.1 . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. ASN.1 | |||
1.2. Motivation . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Motivation | |||
1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.3. Terminology | |||
2. SLH-DSA Hash-based Signature Algorithm Overview . . . . . . . 3 | 2. SLH-DSA Hash-Based Signature Algorithm Overview | |||
3. SLH-DSA Public Key Identifier . . . . . . . . . . . . . . . . 4 | 3. SLH-DSA Public Key Identifier | |||
4. Signed-data Conventions . . . . . . . . . . . . . . . . . . . 7 | 4. Signed-Data Conventions | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 5. Security Considerations | |||
6. Operational Considerations . . . . . . . . . . . . . . . . . 10 | 6. Operational Considerations | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 7. IANA Considerations | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 8. References | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 11 | 8.1. Normative References | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 12 | 8.2. Informative References | |||
Appendix A. ASN.1 Module . . . . . . . . . . . . . . . . . . . . 13 | Appendix A. ASN.1 Module | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 19 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
This document specifies the conventions for using the SLH-DSA hash- | This document specifies the conventions for using the SLH-DSA hash- | |||
based signature algorithm [FIPS205] with the Cryptographic Message | based signature algorithm [FIPS205] with the Cryptographic Message | |||
Syntax (CMS) [RFC5652] signed-data content type. | Syntax (CMS) [RFC5652] signed-data content type. | |||
SLH-DSA offers two signature modes: pure mode and pre-hash mode. | SLH-DSA offers two signature modes: pure mode and pre-hash mode. | |||
SLH-DSA signature operations include a context string as input. The | SLH-DSA signature operations include a context string as input. The | |||
context string has a maximum length of 255 bytes. By default, the | context string has a maximum length of 255 bytes. By default, the | |||
skipping to change at page 2, line 48 ¶ | skipping to change at line 90 ¶ | |||
use of pure mode with an empty context string for the CMS signed-data | use of pure mode with an empty context string for the CMS signed-data | |||
content type. | content type. | |||
SLH-DSA offers three security levels. The parameters for each of the | SLH-DSA offers three security levels. The parameters for each of the | |||
security levels were chosen to provide 128 bits of security, 192 bits | security levels were chosen to provide 128 bits of security, 192 bits | |||
of security, and 256 bits of security. Separate algorithm | of security, and 256 bits of security. Separate algorithm | |||
identifiers have been assigned for SLH-DSA at each of these security | identifiers have been assigned for SLH-DSA at each of these security | |||
levels. | levels. | |||
SLH-DSA is a stateless hash-based signature algorithm. Other hash- | SLH-DSA is a stateless hash-based signature algorithm. Other hash- | |||
based signature algorithms are stateful, including HSS/LMS [RFC8554] | based signature algorithms are stateful, including Hierarchical | |||
and XMSS [RFC8391]. Without the need for state kept by the signer, | Signature System (HSS) / Leighton-Micali Signatures (LMS) [RFC8554] | |||
SLH-DSA is much less fragile than the stateful hash-based signature | and eXtended Merkle Signature Scheme (XMSS) [RFC8391]. Without the | |||
algorithms. | need for state kept by the signer, SLH-DSA is much less fragile than | |||
the stateful hash-based signature algorithms. | ||||
1.1. ASN.1 | 1.1. ASN.1 | |||
CMS values are generated using ASN.1 [X680], using the Basic Encoding | CMS values are generated using ASN.1 [X680], using the Basic Encoding | |||
Rules (BER) and the Distinguished Encoding Rules (DER) [X690]. | Rules (BER) and the Distinguished Encoding Rules (DER) [X690]. | |||
1.2. Motivation | 1.2. Motivation | |||
There have been recent advances in cryptanalysis and advances in the | There have been recent advances in cryptanalysis and advances in the | |||
development of quantum computers. Each of these advances pose a | development of quantum computers. Each of these advances pose a | |||
threat to widely deployed digital signature algorithms. | threat to widely deployed digital signature algorithms. | |||
If cryptographically relevant quantum computers (CRQC) are ever | If Cryptographically Relevant Quantum Computers (CRQCs) are ever | |||
built, they will be able to break many of the public-key | built, they will be able to break many of the public key | |||
cryptosystems currently in use, including RSA, DSA, ECDSA, and EdDSA. | cryptosystems currently in use, including RSA, DSA, Elliptic Curve | |||
A post-quantum cryptosystem (PQC) is secure against quantum computers | Digital Signature Algorithm (ECDSA), and Edwards-curve Digital | |||
that have more than a trivial number of quantum bits (qu-bits). It | Signature Algorithm (EdDSA). A Post-Quantum Cryptosystem (PQC) is | |||
is open to conjecture when it will be feasible to build such quantum | secure against quantum computers that have more than a trivial number | |||
computers; however, it is prudent to use cryptographic algorithms | of quantum bits (qu-bits). It is open to conjecture when it will be | |||
that remain secure if a CRQC is invented. SLH-DSA is a PQC signature | feasible to build such quantum computers; however, it is prudent to | |||
algorithm. | use cryptographic algorithms that remain secure if a CRQC is | |||
invented. SLH-DSA is a PQC signature algorithm. | ||||
1.3. Terminology | 1.3. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. SLH-DSA Hash-based Signature Algorithm Overview | 2. SLH-DSA Hash-Based Signature Algorithm Overview | |||
SLH-DSA is a hash-based signature scheme. SLH-DSA makes use of a few | SLH-DSA is a hash-based signature scheme. SLH-DSA makes use of a few | |||
time signature construction, namely Forest of Random Subsets (FORS) | time signature constructions, namely Forest of Random Subsets (FORS) | |||
and a hypertree. FORS signs a message with a private key. The | and a hypertree. FORS signs a message with a private key. The | |||
corresponding FORS public keys are the leaves in k binary trees. The | corresponding FORS public keys are the leaves in k binary trees. The | |||
roots of these trees are hashed together to form a FORS root. SLH- | roots of these trees are hashed together to form a FORS root. SLH- | |||
DSA uses a one-time signature scheme called WOTS+. The FORS tree | DSA uses a one-time signature scheme called Winternitz One-Time | |||
roots are signed by a WOTS+ one-time signature private key. The | Signature Plus (WOTS+). The FORS tree roots are signed by a WOTS+ | |||
corresponding WOTS+ public keys form the leaves in d-layers of Merkle | one-time signature private key. The corresponding WOTS+ public keys | |||
subtrees in the SLH-DSA hypertree. The bottom layer of that | form the leaves in d-layers of Merkle subtrees in the SLH-DSA | |||
hypertree signs the FORS roots with WOTS+. The root of the bottom | hypertree. The bottom layer of that hypertree signs the FORS roots | |||
Merkle subtrees are then signed with WOTS+ and the corresponding | with WOTS+. The roots of the bottom Merkle subtrees are then signed | |||
WOTS+ public keys form the leaves of the next level up subtree. | with WOTS+ and the corresponding WOTS+ public keys form the leaves of | |||
Subtree roots are consequently signed by their corresponding subtree | the next-level-up subtree. Subtree roots are consequently signed by | |||
layers until the top subtree is reached. The top layer subtree forms | their corresponding subtree layers until the top subtree is reached. | |||
the hypertree root which is trusted at the verifier. | The top-layer subtree forms the hypertree root, which is trusted at | |||
the verifier. | ||||
A SLH-DSA signature consists of the randomization string, the FORS | An SLH-DSA signature consists of the randomization string, the FORS | |||
signature, the WOTS+ signature in each layer, and the path to the | signature, the WOTS+ signature in each layer, and the path to the | |||
root of each subtree until the root of the hypertree is reached. | root of each subtree until the root of the hypertree is reached. | |||
A SLH-DSA signature is verified by verifying the FORS signature, the | An SLH-DSA signature is verified using the FORS signature, the WOTS+ | |||
WOTS+ signatures and the path to the root of each subtree. When | signatures, and the path to the root of each subtree. When reaching | |||
reaching the root of the hypertree, the signature verifies only if it | the root of the hypertree, the signature verifies only if it hashes | |||
hashes to the pre-trusted root of the SLH-DSA hypertree. | to the pre-trusted root of the SLH-DSA hypertree. | |||
SLH-DSA is a stateless hash-based signature algorithm. Stateful | SLH-DSA is a stateless hash-based signature algorithm. Stateful | |||
hash-based signature schemes require that the WOTS+ private key | hash-based signature schemes require that the WOTS+ private key | |||
(generated by using a state index) is never reused or the scheme | (generated by using a state index) never be reused or the scheme | |||
loses it security. Although its security decreases, FORS which is | loses its security. Although its security decreases, FORS, which is | |||
used at the bottom of the SLH-DSA hypertree does not collapse if the | used at the bottom of the SLH-DSA hypertree, does not collapse if the | |||
same private key used to sign two or more different messages like in | same private key used to sign two or more different messages like in | |||
stateful hash-based signature schemes. Without the need for state | stateful hash-based signature schemes. Without the need for state | |||
kept by the signer to ensure it is not reused, SLH-DSA is much less | kept by the signer to ensure it is not reused, SLH-DSA is much less | |||
fragile. | fragile. | |||
SLH-DSA was designed to sign up to 2^64 messages and offers three | SLH-DSA was designed to sign up to 2^64 messages and offers three | |||
security levels. The parameters of the SLH-DSA hypertree include the | security levels. The parameters of the SLH-DSA hypertree include the | |||
security parameter, the hash function, the tree height, the number of | security parameter, the hash function, the tree height, the number of | |||
layers of subtrees, the Winternitz parameter of WOTS+, the number of | layers of subtrees, the Winternitz parameter of WOTS+, and the number | |||
FORS trees and leaves in each. The parameters for each of the | of FORS trees and leaves in each. The parameters for each of the | |||
security levels were chosen to at least as secure as a generic block | security levels were chosen to be at least as secure as a generic | |||
cipher of 128, 192, or 256 bits. | block cipher of 128, 192, or 256 bits. | |||
3. SLH-DSA Public Key Identifier | 3. SLH-DSA Public Key Identifier | |||
The AlgorithmIdentifier for a SLH-DSA public key MUST use one of the | The AlgorithmIdentifier for an SLH-DSA public key MUST use one of the | |||
twelve id-slh-dsa object identifiers listed below, based on the | twelve id-slh-dsa object identifiers listed below, based on the | |||
security level used to generate the SLH-DSA hypertree, the small or | security level used to generate the SLH-DSA hypertree, the small or | |||
fast version of the algorithm, and the use of SHA2 [FIPS180] or SHAKE | fast version of the algorithm, and the use of SHA2 [FIPS180] or SHAKE | |||
[FIPS202]. For example, id-slh-dsa-shake-256s represents the 256-bit | [FIPS202]. For example, id-slh-dsa-shake-256s represents the 256-bit | |||
security level, the small version of the algorithm, and the use of | security level, the small version of the algorithm, and the use of | |||
SHAKE256. The parameters field of the AlgorithmIdentifier for the | SHAKE256. The parameters field of the AlgorithmIdentifier for the | |||
SLH-DSA public key MUST be absent. | SLH-DSA public key MUST be absent. | |||
nistAlgorithms OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | nistAlgorithms OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | |||
country(16) us(840) organization(1) gov(101) csor(3) 4 } | country(16) us(840) organization(1) gov(101) csor(3) 4 } | |||
skipping to change at page 7, line 37 ¶ | skipping to change at line 313 ¶ | |||
SLH-DSA-PrivateKey ::= OCTET STRING (SIZE (64 | 96 | 128)) | SLH-DSA-PrivateKey ::= OCTET STRING (SIZE (64 | 96 | 128)) | |||
No additional encoding of the SLH-DSA public key is applied in the | No additional encoding of the SLH-DSA public key is applied in the | |||
SubjectPublicKeyInfo field of an X.509 certificate [RFC5280]. | SubjectPublicKeyInfo field of an X.509 certificate [RFC5280]. | |||
No additional encoding of the SLH-DSA private key is applied in the | No additional encoding of the SLH-DSA private key is applied in the | |||
PrivateKeyInfo field of the privateKey field of the OneAsymmetricKey | PrivateKeyInfo field of the privateKey field of the OneAsymmetricKey | |||
type of an Asymmetric Key Package [RFC5958]. | type of an Asymmetric Key Package [RFC5958]. | |||
When a SLH-DSA public key appears outside of a SubjectPublicKeyInfo | When an SLH-DSA public key appears outside of a SubjectPublicKeyInfo | |||
type in an environment that uses ASN.1 encoding, the SLH-DSA public | type in an environment that uses ASN.1 encoding, the SLH-DSA public | |||
key can be encoded as an OCTET STRING by using the SLH-DSA-PublicKey | key can be encoded as an OCTET STRING by using the SLH-DSA-PublicKey | |||
type. | type. | |||
When a SLH-DSA private key appears outside of an Asymmetric Key | When an SLH-DSA private key appears outside of an Asymmetric Key | |||
Package in an environment that uses ASN.1 encoding, the SLH-DSA | Package in an environment that uses ASN.1 encoding, the SLH-DSA | |||
private key can be encoded as an OCTET STRING by using the SLH-DSA- | private key can be encoded as an OCTET STRING by using the SLH-DSA- | |||
PrivateKey type. | PrivateKey type. | |||
4. Signed-data Conventions | 4. Signed-Data Conventions | |||
As specified in CMS [RFC5652], the digital signature is produced from | As specified in CMS [RFC5652], the digital signature is produced from | |||
the message digest and the signer's private key. The signature is | the message digest and the signer's private key. The signature is | |||
computed over different values depending on whether signed attributes | computed over different values depending on whether signed attributes | |||
are absent or present. | are absent or present. | |||
When signed attributes are absent, the SLH-DSA (pure mode) signature | When signed attributes are absent, the SLH-DSA (pure mode) signature | |||
is computed over the content. When signed attributes are present, a | is computed over the content. When signed attributes are present, a | |||
hash MUST be computed over the content using the same hash function | hash MUST be computed over the content using the same hash function | |||
that is used in the SLH-DSA tree. The signed attributes MUST include | that is used in the SLH-DSA tree. The signed attributes MUST include | |||
a content-type attribute and a message-digest attribute. The | a content-type attribute and a message-digest attribute. The | |||
message-digest attribute contains the hash value of the content. The | message-digest attribute contains the hash value of the content. The | |||
SLH-DSA signature is computed over the DER encoding of the set of | SLH-DSA signature is computed over the DER encoding of the set of | |||
signed attributes. The SLH-DSA signature generation operation is | signed attributes. The SLH-DSA signature-generation operation is | |||
called slh_sign; see Section 10.2.1 of [FIPS205]. In summary: | called slh_sign; see Section 10.2.1 of [FIPS205]. In summary: | |||
IF (signed attributes are absent) | IF (signed attributes are absent) | |||
THEN slh_sign(content) | THEN slh_sign(content) | |||
ELSE message-digest attribute = Hash(content); | ELSE message-digest attribute = Hash(content); | |||
slh_sign(DER(SignedAttributes)) | slh_sign(DER(SignedAttributes)) | |||
In some implementations, performance may be significantly improved by | In some implementations, performance may be significantly improved by | |||
signing and verifying DER(SignedAttributes) when the content is | signing and verifying DER(SignedAttributes) when the content is | |||
large. That is, passing an entire large message content to the | large. That is, passing an entire large message content to the | |||
signing function or the signature validation function can have an | signing function or the signature validation function can have an | |||
impact on performance. When the signed attributes are present, | impact on performance. When the signed attributes are present, | |||
Section 5.3 of [RFC5652] requires the inclusion of the content-type | Section 5.3 of [RFC5652] requires the inclusion of the content-type | |||
attribute and the message-digest attribute. Other attributes can | attribute and the message-digest attribute. Other attributes can | |||
also be included. | also be included. | |||
When using SLH-DSA and signed attributes are present in the | When using SLH-DSA and signed attributes are present in the | |||
SignerInfo, the digestAlgorithms field in the SignedData MUST include | SignerInfo, the digestAlgorithm field in the SignedData MUST include | |||
the identifier for the one-way hash function used to compute the | the identifier for the one-way hash function used to compute the | |||
message digest. | message digest. | |||
When using SLH-DSA, the fields in the SignerInfo are used as follows: | When using SLH-DSA, the fields in the SignerInfo are used as follows: | |||
digestAlgorithm: | digestAlgorithm: | |||
The digestAlgorithm MUST identify a one-way hash function. When | The digestAlgorithm MUST identify a one-way hash function. When | |||
signed attributes are absent, the digestAlgorithm identifier MUST | signed attributes are absent, the digestAlgorithm identifier MUST | |||
match the hash function used in the SLH-DSA tree (as shown in the | match the hash function used in the SLH-DSA tree (as shown in the | |||
list below). When signed attributes are present, to ensure | list below). When signed attributes are present, to ensure | |||
collision resistance, the identified hash function MUST produce a | collision resistance, the identified hash function MUST produce a | |||
hash value that is at least twice the size of the hash function | hash value that is at least twice the size of the hash function | |||
used in the SLH-DSA tree. The hash functions defined in [FIPS180] | used in the SLH-DSA tree. The hash functions defined in [FIPS180] | |||
and [FIPS202] MUST be supported for use with the variants of SLH- | and [FIPS202] MUST be supported for use with the variants of SLH- | |||
DSA as shown below: | DSA as shown below: | |||
id-slh-dsa-sha2-128s: SHA-256 | id-slh-dsa-sha2-128s: SHA-256 | |||
id-slh-dsa-sha2-128f: SHA-256 | id-slh-dsa-sha2-128f: SHA-256 | |||
id-slh-dsa-sha2-192s: SHA-512 | id-slh-dsa-sha2-192s: SHA-512 | |||
id-slh-dsa-sha2-192f: SHA-512 | id-slh-dsa-sha2-192f: SHA-512 | |||
id-slh-dsa-sha2-256s: SHA-512 | id-slh-dsa-sha2-256s: SHA-512 | |||
id-slh-dsa-sha2-256f: SHA-512 | id-slh-dsa-sha2-256f: SHA-512 | |||
id-slh-dsa-shake-128s: SHAKE128 with 256 bit output | id-slh-dsa-shake-128s: SHAKE128 with 256-bit output | |||
id-slh-dsa-shake-128f: SHAKE128 with 256 bit output | id-slh-dsa-shake-128f: SHAKE128 with 256-bit output | |||
id-slh-dsa-shake-192s: SHAKE256 with 512 bit output | id-slh-dsa-shake-192s: SHAKE256 with 512-bit output | |||
id-slh-dsa-shake-192f: SHAKE256 with 512 bit output | id-slh-dsa-shake-192f: SHAKE256 with 512-bit output | |||
id-slh-dsa-shake-256s: SHAKE256 with 512 bit output | id-slh-dsa-shake-256s: SHAKE256 with 512-bit output | |||
id-slh-dsa-shake-256f: SHAKE256 with 512 bit output | id-slh-dsa-shake-256f: SHAKE256 with 512-bit output | |||
The object identifiers for SHA-256 and SHA-512 are included | The object identifiers for SHA-256 and SHA-512 are included in | |||
in [RFC5754]. The object identifiers for SHAKE128 and | [RFC5754]. The object identifiers for SHAKE128 and SHAKE256 are | |||
SHAKE256 are included in [RFC8702]. In all four cases, the | included in [RFC8702]. In all four cases, the AlgorithmIdentifier | |||
AlgorithmIdentifier SHOULD NOT include parameters. | SHOULD NOT include parameters. | |||
signatureAlgorithm: | signatureAlgorithm: | |||
The signatureAlgorithm MUST contain one of the the SLH-DSA | The signatureAlgorithm MUST contain one of the SLH-DSA algorithm | |||
algorithm identifiers, and the algorithm parameters field MUST be | identifiers, and the algorithm parameters field MUST be absent. | |||
absent. The algorithm identifier MUST be one of the following: | The algorithm identifier MUST be one of the following: | |||
id-slh-dsa-sha2-128s, id-slh-dsa-sha2-128f, | id-slh-dsa-sha2-128s, id-slh-dsa-sha2-128f, | |||
id-slh-dsa-sha2-192s, id-slh-dsa-sha2-192f, | id-slh-dsa-sha2-192s, id-slh-dsa-sha2-192f, | |||
id-slh-dsa-sha2-256s, id-slh-dsa-sha2-256f, | id-slh-dsa-sha2-256s, id-slh-dsa-sha2-256f, | |||
id-slh-dsa-shake-128s, id-slh-dsa-shake-128f, | id-slh-dsa-shake-128s, id-slh-dsa-shake-128f, | |||
id-slh-dsa-shake-192s, id-slh-dsa-shake-192f, | id-slh-dsa-shake-192s, id-slh-dsa-shake-192f, | |||
id-slh-dsa-shake-256s, id-slh-dsa-shake-256f. | id-slh-dsa-shake-256s, id-slh-dsa-shake-256f. | |||
signature: | signature: | |||
The signature contains the signature value resulting from the SLH- | The signature contains the signature value resulting from the SLH- | |||
DSA signing operation with the parameters associated with the | DSA signing operation with the parameters associated with the | |||
selected signatureAlgorithm. The SLH-DSA signature generation | selected signatureAlgorithm. The SLH-DSA signature-generation | |||
operation is specified in Section 10.2.1 of [FIPS205], and the | operation is specified in Section 10.2.1 of [FIPS205], and the | |||
SLH-DSA signature verification operation is specified in | SLH-DSA signature verification operation is specified in | |||
Section 10.3 of [FIPS205]. Signature verification MUST include | Section 10.3 of [FIPS205]. Signature verification MUST include | |||
checking that the signatureAlgorithm field identifies SLH-DSA | checking that the signatureAlgorithm field identifies SLH-DSA | |||
parameters that are consistent with public key used to validate | parameters that are consistent with public key used to validate | |||
the signature. | the signature. | |||
5. Security Considerations | 5. Security Considerations | |||
Implementations MUST protect the private keys. Compromise of the | Implementations MUST protect the private keys. Compromise of the | |||
private keys may result in the ability to forge signatures. | private keys may result in the ability to forge signatures. | |||
When generating an SLH-DSA key pair, an implementation MUST generate | When generating an SLH-DSA key pair, an implementation MUST generate | |||
each key pair independently of all other key pairs in the SLH-DSA | each key pair independently of all other key pairs in the SLH-DSA | |||
hypertree. | hypertree. | |||
A SLH-DSA tree MUST NOT be used for more than 2^64 signing | A SLH-DSA tree MUST NOT be used for more than 2^64 signing | |||
operations. | operations. | |||
The generation of private keys relies on random numbers. The use of | The generation of private keys relies on random numbers. The use of | |||
inadequate pseudo-random number generators (PRNGs) to generate these | inadequate Pseudorandom Number Generators (PRNGs) to generate these | |||
values can result in little or no security. An attacker may find it | values can result in little or no security. An attacker may find it | |||
much easier to reproduce the PRNG environment that produced the keys, | much easier to reproduce the PRNG environment that produced the keys, | |||
searching the resulting small set of possibilities, rather than brute | searching the resulting small set of possibilities, rather than | |||
force searching the whole key space. The generation of quality | brute-force searching the whole key space. The generation of quality | |||
random numbers is difficult, and [RFC4086] offers important guidance | random numbers is difficult, and [RFC4086] offers important guidance | |||
in this area. | in this area. | |||
To avoid algorithm substitution attacks, the CMSAlgorithmProtection | To avoid algorithm-substitution attacks, the CMSAlgorithmProtection | |||
attribute defined in [RFC6211] SHOULD be included in signed | attribute defined in [RFC6211] SHOULD be included in signed | |||
attributes. | attributes. | |||
Implementers should consider their particular use cases and may | Implementers should consider their particular use cases and may | |||
choose to implement optional fault attack countermeasures [CMP2018] | choose to implement optional fault-attack countermeasures [CMP2018] | |||
[Ge2023]. Verifying a signature before releasing the signature value | [Ge2023]. Verifying a signature before releasing the signature value | |||
is a typical fault attack countermeasure; however, this | is a typical fault-attack countermeasure; however, this | |||
countermeasure is not effective for SLH-DSA [Ge2023]. Redundancy by | countermeasure is not effective for SLH-DSA [Ge2023]. Redundancy by | |||
replicating the signature generation process MAY be used as an | replicating the signature-generation process MAY be used as an | |||
effective fault attack countermeasure for SLH-DSA [Ge2023]; however, | effective fault-attack countermeasure for SLH-DSA [Ge2023]; however, | |||
the SLH-DSA signature generation is already considered slow. | the SLH-DSA signature generation is already considered slow. | |||
Likewise, Implementers should consider their particular use cases and | Likewise, implementers should consider their particular use cases and | |||
may choose to implement protections against passive power and | may choose to implement protections against passive power and | |||
emissions side-channel attacks [SLotH]. | emissions side-channel attacks [SLotH]. | |||
6. Operational Considerations | 6. Operational Considerations | |||
If slh_sign is implemented in a hardware device such as hardware | If slh_sign is implemented in a hardware device such as Hardware | |||
security module (HSM) or portable cryptographic token, | Security Module (HSM) or portable cryptographic token, | |||
implementations can avoid sending the full content to the device. By | implementations can avoid sending the full content to the device. By | |||
including signed attributes, which necessarily include the message- | including signed attributes, which necessarily include the message- | |||
digest attribute and the content-type attribute as described in | digest attribute and the content-type attribute as described in | |||
Section 5.3 of [RFC5652], the much smaller set of signed attributes | Section 5.3 of [RFC5652], the much smaller set of signed attributes | |||
are sent to the device for signing. | are sent to the device for signing. | |||
By including signed attributes in the SignerInfo, one can obtain | By including signed attributes in the SignerInfo, one can obtain | |||
similar interface characteristics to SLH-DSA in pre-hash mode. With | similar interface characteristics to SLH-DSA in pre-hash mode. With | |||
pre-hash mode, the hash of the content is passed to the SLH-DSA | pre-hash mode, the hash of the content is passed to the SLH-DSA | |||
signature operation instead of the full message content. By | signature operation instead of the full message content. By | |||
skipping to change at page 11, line 23 ¶ | skipping to change at line 485 ¶ | |||
of stream-based APIs, implementers SHOULD include signed attributes | of stream-based APIs, implementers SHOULD include signed attributes | |||
within any SignerInfo that uses SLH-DSA as signature algorithm. | within any SignerInfo that uses SLH-DSA as signature algorithm. | |||
Doing so allows the recipient implementation to avoid keeping the | Doing so allows the recipient implementation to avoid keeping the | |||
signed content in memory. Recall that when signed attributes are | signed content in memory. Recall that when signed attributes are | |||
present, they MUST contain a content-type attribute and a message- | present, they MUST contain a content-type attribute and a message- | |||
digest attribute, and they SHOULD contain a CMSAlgorithmProtection | digest attribute, and they SHOULD contain a CMSAlgorithmProtection | |||
attribute. | attribute. | |||
7. IANA Considerations | 7. IANA Considerations | |||
For the ASN.1 Module in the Appendix of this document, IANA is | For the ASN.1 Module in Appendix A, IANA has assigned an Object | |||
requested to assign an object identifier (OID) for the module | Identifier (OID) for the module identifier (81) with a Description of | |||
identifier (TBD1) with a Description of "id-mod-slh-dsa-2024". The | "id-mod-slh-dsa-2024". The OID for the module has been allocated in | |||
OID for the module should be allocated in the "SMI Security for S/ | the "SMI Security for S/MIME Module Identifier | |||
MIME Module Identifier" (1.2.840.113549.1.9.16.0). | (1.2.840.113549.1.9.16.0)" registry. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[FIPS180] National Institute of Standards and Technology (NIST), | [FIPS180] National Institute of Standards and Technology (NIST), | |||
"Secure Hash Standard (SHS)", FIPS PUB 180-4, August 2015. | "Secure Hash Standard (SHS)", NIST FIPS 180-4, | |||
DOI 10.6028/NIST.FIPS.180-4, August 2015, | ||||
<https://doi.org/10.6028/NIST.FIPS.180-4>. | ||||
[FIPS202] National Institute of Standards and Technology (NIST), | [FIPS202] National Institute of Standards and Technology (NIST), | |||
"SHA-3 Standard: Permutation-Based Hash and Extendable- | "SHA-3 Standard: Permutation-Based Hash and Extendable- | |||
Output Functions", FIPS PUB 202, August 2015. | Output Functions", NIST FIPS 202, | |||
DOI 10.6028/NIST.FIPS.202, August 2015, | ||||
<https://doi.org/10.6028/NIST.FIPS.202>. | ||||
[FIPS205] National Institute of Standards and Technology (NIST), | [FIPS205] National Institute of Standards and Technology (NIST), | |||
"Stateless Hash-Based Digital Signature Standard", FIPS | "Stateless Hash-Based Digital Signature Standard", NIST | |||
PUB 205, 13 August 2024, | FIPS 205, DOI 10.6028/NIST.FIPS.205, 13 August 2024, | |||
<https://doi.org/10.6028/NIST.FIPS.205>. | <https://doi.org/10.6028/NIST.FIPS.205>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
(CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
<https://www.rfc-editor.org/rfc/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
[RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, | [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, | |||
RFC 5652, DOI 10.17487/RFC5652, September 2009, | RFC 5652, DOI 10.17487/RFC5652, September 2009, | |||
<https://www.rfc-editor.org/rfc/rfc5652>. | <https://www.rfc-editor.org/info/rfc5652>. | |||
[RFC5754] Turner, S., "Using SHA2 Algorithms with Cryptographic | [RFC5754] Turner, S., "Using SHA2 Algorithms with Cryptographic | |||
Message Syntax", RFC 5754, DOI 10.17487/RFC5754, January | Message Syntax", RFC 5754, DOI 10.17487/RFC5754, January | |||
2010, <https://www.rfc-editor.org/rfc/rfc5754>. | 2010, <https://www.rfc-editor.org/info/rfc5754>. | |||
[RFC5958] Turner, S., "Asymmetric Key Packages", RFC 5958, | [RFC5958] Turner, S., "Asymmetric Key Packages", RFC 5958, | |||
DOI 10.17487/RFC5958, August 2010, | DOI 10.17487/RFC5958, August 2010, | |||
<https://www.rfc-editor.org/rfc/rfc5958>. | <https://www.rfc-editor.org/info/rfc5958>. | |||
[RFC6211] Schaad, J., "Cryptographic Message Syntax (CMS) Algorithm | [RFC6211] Schaad, J., "Cryptographic Message Syntax (CMS) Algorithm | |||
Identifier Protection Attribute", RFC 6211, | Identifier Protection Attribute", RFC 6211, | |||
DOI 10.17487/RFC6211, April 2011, | DOI 10.17487/RFC6211, April 2011, | |||
<https://www.rfc-editor.org/rfc/rfc6211>. | <https://www.rfc-editor.org/info/rfc6211>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8702] Kampanakis, P. and Q. Dang, "Use of the SHAKE One-Way Hash | [RFC8702] Kampanakis, P. and Q. Dang, "Use of the SHAKE One-Way Hash | |||
Functions in the Cryptographic Message Syntax (CMS)", | Functions in the Cryptographic Message Syntax (CMS)", | |||
RFC 8702, DOI 10.17487/RFC8702, January 2020, | RFC 8702, DOI 10.17487/RFC8702, January 2020, | |||
<https://www.rfc-editor.org/rfc/rfc8702>. | <https://www.rfc-editor.org/info/rfc8702>. | |||
[X680] ITU-T, "Information technology -- Abstract Syntax Notation | [X680] ITU-T, "Information technology -- Abstract Syntax Notation | |||
One (ASN.1): Specification of basic notation", ITU-T | One (ASN.1): Specification of basic notation", ITU-T | |||
Recommendation X.680, ISO/IEC 8824-1:2021, February 2021, | Recommendation X.680, ISO/IEC 8824-1:2021, February 2021, | |||
<https://www.itu.int/rec/T-REC-X.680>. | <https://www.itu.int/rec/T-REC-X.680>. | |||
[X690] ITU-T, "Information technology -- ASN.1 encoding rules: | [X690] ITU-T, "Information technology -- ASN.1 encoding rules: | |||
Specification of Basic Encoding Rules (BER), Canonical | Specification of Basic Encoding Rules (BER), Canonical | |||
Encoding Rules (CER) and Distinguished Encoding Rules | Encoding Rules (CER) and Distinguished Encoding Rules | |||
(DER)", ITU-T Recommendation X.690, ISO/IEC 8825-1-2021, | (DER)", ITU-T Recommendation X.690, ISO/IEC 8825-1-2021, | |||
February 2021, <https://www.itu.int/rec/T-REC-X.690>. | February 2021, <https://www.itu.int/rec/T-REC-X.690>. | |||
8.2. Informative References | 8.2. Informative References | |||
[CMP2018] Castelnovi, L., Martinelli, A., and T. Prest, "Grafting | [CMP2018] Castelnovi, L., Martinelli, A., and T. Prest, "Grafting | |||
Trees: A Fault Attack Against the SPHINCS Framework", | Trees: A Fault Attack Against the SPHINCS Framework", | |||
Post-Quantum Cryptography pp. 165-184, PQCrypto 2018, | Post-Quantum Cryptography (PQCrypto 2018), Lecture Notes | |||
Lecture Notes in Computer Science vol 10786, 2018, | in Computer Science, vol. 10786, pp. 165-184, | |||
DOI 10.1007/978-3-319-79063-3_8, 2018, | ||||
<https://link.springer.com/ | <https://link.springer.com/ | |||
chapter/10.1007/978-3-319-79063-3_8>. | chapter/10.1007/978-3-319-79063-3_8>. | |||
[Ge2023] GenĂȘt, A., "On Protecting SPHINCS+ Against Fault Attacks", | [Ge2023] GenĂȘt, A., "On Protecting SPHINCS+ Against Fault Attacks", | |||
TCHES 2023/02, DOI 10.46586/tches.v2023.i2.80-114, 2023, | IACR Transactions on Cryptographic Hardware and Embedded | |||
Systems, vol. 2023, no. 2, pp. 80-114, | ||||
DOI 10.46586/tches.v2023.i2.80-114, 2023, | ||||
<https://tches.iacr.org/index.php/TCHES/article/ | <https://tches.iacr.org/index.php/TCHES/article/ | |||
view/10278/9726>. | view/10278/9726>. | |||
[RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | |||
"Randomness Requirements for Security", BCP 106, RFC 4086, | "Randomness Requirements for Security", BCP 106, RFC 4086, | |||
DOI 10.17487/RFC4086, June 2005, | DOI 10.17487/RFC4086, June 2005, | |||
<https://www.rfc-editor.org/rfc/rfc4086>. | <https://www.rfc-editor.org/info/rfc4086>. | |||
[RFC5911] Hoffman, P. and J. Schaad, "New ASN.1 Modules for | [RFC5911] Hoffman, P. and J. Schaad, "New ASN.1 Modules for | |||
Cryptographic Message Syntax (CMS) and S/MIME", RFC 5911, | Cryptographic Message Syntax (CMS) and S/MIME", RFC 5911, | |||
DOI 10.17487/RFC5911, June 2010, | DOI 10.17487/RFC5911, June 2010, | |||
<https://www.rfc-editor.org/rfc/rfc5911>. | <https://www.rfc-editor.org/info/rfc5911>. | |||
[RFC8391] Huelsing, A., Butin, D., Gazdag, S., Rijneveld, J., and A. | [RFC8391] Huelsing, A., Butin, D., Gazdag, S., Rijneveld, J., and A. | |||
Mohaisen, "XMSS: eXtended Merkle Signature Scheme", | Mohaisen, "XMSS: eXtended Merkle Signature Scheme", | |||
RFC 8391, DOI 10.17487/RFC8391, May 2018, | RFC 8391, DOI 10.17487/RFC8391, May 2018, | |||
<https://www.rfc-editor.org/rfc/rfc8391>. | <https://www.rfc-editor.org/info/rfc8391>. | |||
[RFC8554] McGrew, D., Curcio, M., and S. Fluhrer, "Leighton-Micali | [RFC8554] McGrew, D., Curcio, M., and S. Fluhrer, "Leighton-Micali | |||
Hash-Based Signatures", RFC 8554, DOI 10.17487/RFC8554, | Hash-Based Signatures", RFC 8554, DOI 10.17487/RFC8554, | |||
April 2019, <https://www.rfc-editor.org/rfc/rfc8554>. | April 2019, <https://www.rfc-editor.org/info/rfc8554>. | |||
[SLotH] Saarinen, M.-J., "Accelerating SLH-DSA by Two Orders of | [SLotH] Saarinen, M.-J., "Accelerating SLH-DSA by Two Orders of | |||
Magnitude with a Single Hash Unit", 2024, | Magnitude with a Single Hash Unit", Cryptology ePrint | |||
Archive, Paper 2024/367, 2024, | ||||
<https://eprint.iacr.org/2024/367.pdf>. | <https://eprint.iacr.org/2024/367.pdf>. | |||
Appendix A. ASN.1 Module | Appendix A. ASN.1 Module | |||
This ASN.1 Module builds upon the conventions established in | This ASN.1 Module builds upon the conventions established in | |||
[RFC5911]. | [RFC5911]. | |||
<CODE BEGINS> | <CODE BEGINS> | |||
SLH-DSA-Module-2024 | SLH-DSA-Module-2024 | |||
{ iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) | { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) | |||
id-smime(16) id-mod(0) id-mod-slh-dsa-2024(TBD1) } | id-smime(16) id-mod(0) id-mod-slh-dsa-2024(81) } | |||
DEFINITIONS IMPLICIT TAGS ::= BEGIN | DEFINITIONS IMPLICIT TAGS ::= BEGIN | |||
EXPORTS ALL; | EXPORTS ALL; | |||
IMPORTS | IMPORTS | |||
PUBLIC-KEY, SIGNATURE-ALGORITHM, SMIME-CAPS | PUBLIC-KEY, SIGNATURE-ALGORITHM, SMIME-CAPS | |||
FROM AlgorithmInformation-2009 -- in [RFC5911] | FROM AlgorithmInformation-2009 -- in [RFC5911] | |||
{ iso(1) identified-organization(3) dod(6) internet(1) | { iso(1) identified-organization(3) dod(6) internet(1) | |||
security(5) mechanisms(5) pkix(7) id-mod(0) | security(5) mechanisms(5) pkix(7) id-mod(0) | |||
End of changes. 56 change blocks. | ||||
147 lines changed or deleted | 155 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |