diff --git a/docs/BR.md b/docs/BR.md index 5c13e270..6b071239 100644 --- a/docs/BR.md +++ b/docs/BR.md @@ -575,6 +575,8 @@ FIPS 140-3, Federal Information Processing Standards Publication - Security Requ FIPS 186-5, Federal Information Processing Standards Publication - Digital Signature Standard (DSS), Information Technology Laboratory, National Institute of Standards and Technology, February 2023. +FIPS 204, Federal Information Processing Standards Publication - Module-Lattice-Based Digital Signature Standard, Information Technology Laboratory, National Institute of Standards and Technology, August 2024. + ISO 21188:2018, Public key infrastructure for financial services -- Practices and policy framework. Network and Certificate System Security Requirements, Version 1.7, available at @@ -2088,6 +2090,13 @@ For ECDSA key pairs, the CA SHALL: - Ensure that the key represents a valid point on the NIST P-256, NIST P-384 or NIST P-521 elliptic curve. +For ML-DSA key pairs, the CA SHALL: + +- Ensure that the key uses one of the following parameter sets, as specified in FIPS 204: + - ML-DSA-44 (OID: 2.16.840.1.101.3.4.3.17), + - ML-DSA-65 (OID: 2.16.840.1.101.3.4.3.18), or + - ML-DSA-87 (OID: 2.16.840.1.101.3.4.3.19). + No other algorithms or key sizes are permitted. ### 6.1.6 Public key parameters generation and quality checking @@ -2096,6 +2105,8 @@ RSA: The CA SHALL confirm that the value of the public exponent is an odd number ECDSA: The CA SHOULD confirm the validity of all keys using either the ECC Full Public Key Validation Routine or the ECC Partial Public Key Validation Routine. [Source: Sections 5.6.2.3.2 and 5.6.2.3.3, respectively, of NIST SP 800-56A: Revision 2] +ML-DSA: The CA SHALL confirm that the public key is a valid encoding for the specified parameter set per FIPS 204. + ### 6.1.7 Key usage purposes (as per X.509 v3 key usage field) Private Keys corresponding to Root Certificates MUST NOT be used to sign Certificates except in the following cases: @@ -2894,7 +2905,7 @@ Table: Permitted `policyQualifiers` ##### 7.1.2.7.11 Subscriber Certificate Key Usage -The acceptable Key Usage values vary based on whether the Certificate's `subjectPublicKeyInfo` identifies an RSA public key or an ECC public key. CAs MUST ensure the Key Usage is appropriate for the Certificate Public Key. +The acceptable Key Usage values vary based on whether the Certificate's `subjectPublicKeyInfo` identifies an RSA public key, an ECC public key, or an ML-DSA public key. CAs MUST ensure the Key Usage is appropriate for the Certificate Public Key. Table: Key Usage for RSA Public Keys @@ -2928,6 +2939,20 @@ Table: Key Usage for ECC Public Keys **Note**: The `keyAgreement` bit is currently permitted, although setting it is NOT RECOMMENDED, as it is a Pending Prohibition (). +Table: Key Usage for ML-DSA Public Keys + +| **Key Usage** | **Permitted** | **Required** | +| ----- | -- | --- | +| `digitalSignature` | Y | MUST | +| `nonRepudiation` | N | -- | +| `keyEncipherment` | N | -- | +| `dataEncipherment` | N | -- | +| `keyAgreement` | N | -- | +| `keyCertSign` | N | -- | +| `cRLSign` | N | -- | +| `encipherOnly` | N | -- | +| `decipherOnly` | N | -- | + ##### 7.1.2.7.12 Subscriber Certificate Subject Alternative Name For Subscriber Certificates, the Subject Alternative Name MUST be present and MUST contain at least one `dNSName` or `iPAddress` `GeneralName`. See below for further requirements about the permitted fields and their validation requirements. @@ -3406,6 +3431,22 @@ When encoded, the `AlgorithmIdentifier` for ECDSA keys MUST be byte-for-byte ide - For P-384 keys, `301006072a8648ce3d020106052b81040022`. - For P-521 keys, `301006072a8648ce3d020106052b81040023`. +##### 7.1.3.1.3 ML-DSA + +The CA SHALL indicate an ML-DSA key using one of the following algorithm identifiers: + +- id-ml-dsa-44 (OID: 2.16.840.1.101.3.4.3.17), +- id-ml-dsa-65 (OID: 2.16.840.1.101.3.4.3.18), or +- id-ml-dsa-87 (OID: 2.16.840.1.101.3.4.3.19). + +The parameters for ML-DSA keys SHALL be absent. The CA MUST NOT use HashML-DSA, as specified in FIPS 204; only "pure" ML-DSA is permitted. Additionally, the CA SHALL NOT use these algorithm identifiers if the algorithm identifier of the Certificate's signature algorithm is not one of id-ml-dsa-44 (OID: 2.16.840.1.101.3.4.3.17), id-ml-dsa-65 (OID: 2.16.840.1.101.3.4.3.18), or id-ml-dsa-87 (OID: 2.16.840.1.101.3.4.3.19). + +When encoded, the `AlgorithmIdentifier` for ML-DSA keys MUST be byte-for-byte identical with the following hex-encoded bytes: + +- For id-ml-dsa-44, `300b0609608648016503040311`. +- For id-ml-dsa-65, `300b0609608648016503040312`. +- For id-ml-dsa-87, `300b0609608648016503040313`. + #### 7.1.3.2 Signature AlgorithmIdentifier All objects signed by a CA Private Key MUST conform to these requirements on the use of the `AlgorithmIdentifier` or `AlgorithmIdentifier`-derived type in the context of signatures. @@ -3514,6 +3555,18 @@ If the signing key is P-384, the signature MUST use ECDSA with SHA-384. When enc If the signing key is P-521, the signature MUST use ECDSA with SHA-512. When encoded, the `AlgorithmIdentifier` MUST be byte-for-byte identical with the following hex-encoded bytes: `300a06082a8648ce3d040304`. +##### 7.1.3.2.3 ML-DSA + +The CA SHALL use the appropriate signature algorithm and encoding based upon the signing key used. + +If the signing key is ML-DSA-44, the signature algorithm MUST be id-ml-dsa-44 (OID: 2.16.840.1.101.3.4.3.17). When encoded, the `AlgorithmIdentifier` MUST be byte-for-byte identical with the following hex-encoded bytes: `300b0609608648016503040311`. + +If the signing key is ML-DSA-65, the signature algorithm MUST be id-ml-dsa-65 (OID: 2.16.840.1.101.3.4.3.18). When encoded, the `AlgorithmIdentifier` MUST be byte-for-byte identical with the following hex-encoded bytes: `300b0609608648016503040312`. + +If the signing key is ML-DSA-87, the signature algorithm MUST be id-ml-dsa-87 (OID: 2.16.840.1.101.3.4.3.19). When encoded, the `AlgorithmIdentifier` MUST be byte-for-byte identical with the following hex-encoded bytes: `300b0609608648016503040313`. + +If used within a Certificate or Precertificate, such as the `signatureAlgorithm` field of a Certificate or the `signature` field of a TBSCertificate, the CA SHALL NOT use these signature algorithms unless the algorithm identifier of the public key being certified is one of id-ml-dsa-44 (OID: 2.16.840.1.101.3.4.3.17), id-ml-dsa-65 (OID: 2.16.840.1.101.3.4.3.18), or id-ml-dsa-87 (OID: 2.16.840.1.101.3.4.3.19). This restriction does not apply if used within a CRL, such as the `signatureAlgorithm` field of a CertificateList, or within an OCSP response, such as the `signatureAlgorithm` of a BasicOCSPResponse, as these objects do not certify a public key. + ### 7.1.4 Name Forms This section details encoding rules that apply to all Certificates issued by a CA. Further restrictions may be specified within [Section 7.1.2](#712-certificate-content-and-extensions), but these restrictions do not supersede these requirements.