The id-shake128 and id-shake256 OIDs (see
Section 2) can be used as the digest algorithm identifiers located in the SignedData, SignerInfo, DigestedData, and the AuthenticatedData digestAlgorithm fields in CMS [
RFC 5652]. The OID encoding
MUST omit the parameters field and the output length of SHAKE128 or SHAKE256 as the message digest
MUST be 32 or 64 bytes, respectively.
The digest values are located in the DigestedData field and the Message Digest authenticated attribute included in the signedAttributes of the SignedData signerInfos. In addition, digest values are input to signature algorithms. The digest algorithm
MUST be the same as the message hash algorithms used in signatures.
In CMS, signature algorithm identifiers are located in the SignerInfo signatureAlgorithm field of signed-data content type and countersignature attribute. Signature values are located in the SignerInfo signature field of signed-data content type and countersignature attribute.
Conforming implementations that process RSASSA-PSS and ECDSA with SHAKE signatures when processing CMS data
MUST recognize the corresponding OIDs specified in
Section 2.
When using RSASSA-PSS or ECDSA with SHAKEs, the RSA modulus or ECDSA curve order
SHOULD be chosen in line with the SHAKE output length. Refer to
Section 5 for more details.
The RSASSA-PSS algorithm is defined in [
RFC 8017]. When id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256 (specified in
Section 2) is used, the encoding
MUST omit the parameters field. That is, the AlgorithmIdentifier
SHALL be a SEQUENCE of one component: id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256. [
RFC 4055] defines RSASSA-PSS-params that are used to define the algorithms and inputs to the algorithm. This specification does not use parameters because the hash, mask generation algorithm, trailer, and salt are embedded in the OID definition.
The hash algorithm used to hash a message being signed and the hash algorithm as the mask generation function used in RSASSA-PSS
MUST be the same: both SHAKE128 or both SHAKE256. The output length of the hash algorithm that hashes the message
SHALL be 32 (for SHAKE128) or 64 bytes (for SHAKE256).
The mask generation function takes an octet string of variable length and a desired output length as input, and outputs an octet string of the desired length. In RSASSA-PSS with SHAKEs, the SHAKEs
MUST be used natively as the MGF, instead of the MGF1 algorithm that uses the hash function in multiple iterations, as specified in
Appendix B.2.1 of
RFC 8017. In other words, the MGF is defined as the SHAKE128 or SHAKE256 with input being the mgfSeed for id-RSASSA-PSS-SHAKE128 and id-RSASSA-PSS-SHAKE256, respectively. The mgfSeed is an octet string used as the seed to generate the mask [
RFC 8017]. As explained in Step 9 of
Section 9.1.1 of
RFC 8017, the output length of the MGF is emLen - hLen - 1 bytes. emLen is the maximum message length ceil((n-1)/8), where n is the RSA modulus in bits. hLen is 32 and 64 bytes for id-RSASSA-PSS-SHAKE128 and id-RSASSA-PSS-SHAKE256, respectively. Thus, when SHAKE is used as the MGF, the SHAKE output length maskLen is (8*emLen - 264) or (8*emLen - 520) bits, respectively. For example, when RSA modulus n is 2048, the output length of SHAKE128 or SHAKE256 as the MGF will be 1784 or 1528 bits when id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256 is used, respectively.
The RSASSA-PSS saltLength
MUST be 32 bytes for id-RSASSA-PSS-SHAKE128 or 64 bytes for id-RSASSA-PSS-SHAKE256. Finally, the trailerField
MUST be 1, which represents the trailer field with hexadecimal value 0xBC [
RFC 8017].
The Elliptic Curve Digital Signature Algorithm (ECDSA) is defined in [
X9.62]. When the id-ecdsa-with-shake128 or id-ecdsa-with-shake256 (specified in
Section 2) algorithm identifier appears, the respective SHAKE function is used as the hash. The encoding
MUST omit the parameters field. That is, the AlgorithmIdentifier
SHALL be a SEQUENCE of one component, the OID id-ecdsa-with-shake128 or id-ecdsa-with-shake256.
For simplicity and compliance with the ECDSA standard specification [
X9.62], the output length of the hash function must be explicitly determined. The output length for SHAKE128 or SHAKE256 used in ECDSA
MUST be 32 or 64 bytes, respectively.
Conforming Certification Authority (CA) implementations that generate ECDSA with SHAKE signatures in certificates or Certificate Revocation Lists (CRLs)
SHOULD generate such signatures with a deterministically generated, nonrandom k in accordance with all the requirements specified in [
RFC 6979]. They
MAY also generate such signatures in accordance with all other recommendations in [
X9.62] or [
SEC1] if they have a stated policy that requires conformance to those standards. Those standards have not specified SHAKE128 and SHAKE256 as hash algorithm options. However, SHAKE128 and SHAKE256 with output length being 32 and 64 octets, respectively, can be used instead of 256 and 512-bit output hash algorithms, such as SHA256 and SHA512.
In CMS, the signer's public key algorithm identifiers are located in the OriginatorPublicKey's algorithm attribute. The conventions and encoding for RSASSA-PSS and ECDSA public keys algorithm identifiers are as specified in
Section 2.3 of
RFC 3279,
Section 3.1 of
RFC 4055, and
Section 2.1 of
RFC 5480.
Traditionally, the rsaEncryption object identifier is used to identify RSA public keys. The rsaEncryption object identifier continues to identify the public key when the RSA private key owner does not wish to limit the use of the public key exclusively to RSASSA-PSS with SHAKEs. When the RSA private key owner wishes to limit the use of the public key exclusively to RSASSA-PSS, the AlgorithmIdentifier for RSASSA-PSS defined in
Section 2 SHOULD be used as the algorithm attribute in the OriginatorPublicKey sequence. Conforming client implementations that process RSASSA-PSS with SHAKE public keys in CMS message
MUST recognize the corresponding OIDs in
Section 2.
Conforming implementations
MUST specify and process the algorithms explicitly by using the OIDs specified in
Section 2 when encoding ECDSA with SHAKE public keys in CMS messages.
The identifier parameters, as explained in
Section 2,
MUST be absent.
Keccak message authentication code (KMAC) is specified in [
SP800-185]. In CMS, KMAC algorithm identifiers are located in the AuthenticatedData macAlgorithm field. The KMAC values are located in the AuthenticatedData mac field.
When the id-KmacWithSHAKE128 or id-KmacWithSHAKE256 OID is used as the MAC algorithm identifier, the parameters field is optional (absent or present). If absent, the SHAKE256 output length used in KMAC is 32 or 64 bytes, respectively, and the customization string is an empty string by default.
Conforming implementations that process KMACs with the SHAKEs when processing CMS data
MUST recognize these identifiers.
When calculating the KMAC output, the variable N is 0xD2B282C2, S is an empty string, and L (the integer representing the requested output length in bits) is 256 or 512 for KmacWithSHAKE128 or KmacWithSHAKE256, respectively, in this specification.