| rfc8702xml2.original.xml | rfc8702.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| <!ENTITY RFC2104 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2104.xml"> | ||||
| <!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2119.xml"> | ||||
| <!ENTITY RFC3279 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3279.xml"> | ||||
| <!ENTITY RFC3370 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3370.xml"> | ||||
| <!ENTITY RFC4055 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4055.xml"> | ||||
| <!-- <!ENTITY RFC4086 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.4086.xml"> --> | ||||
| <!ENTITY RFC5480 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5480.xml"> | ||||
| <!ENTITY RFC5652 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5652.xml"> | ||||
| <!ENTITY RFC5753 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5753.xml"> | ||||
| <!ENTITY RFC5911 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5911.xml"> | ||||
| <!ENTITY RFC6268 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6268.xml"> | ||||
| <!ENTITY RFC6979 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6979.xml"> | ||||
| <!ENTITY RFC8017 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8017.xml"> | ||||
| <!ENTITY RFC8174 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
| RFC.8174.xml"> | ||||
| <!ENTITY I-D.ietf-lamps-pkix-shake SYSTEM "https://xml2rfc.tools.ietf.org/public | ||||
| /rfc/bibxml3/reference.I-D.ietf-lamps-pkix-shake.xml"> | ||||
| <!ENTITY I-D.draft-housley-lamps-cms-sha3-hash SYSTEM "http://xml2rfc.tools.ietf | ||||
| .org/public/rfc/bibxml-ids/reference.I-D.draft-housley-lamps-cms-sha3-hash-00.xm | ||||
| l"> | ||||
| ]> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <!-- used by XSLT processors --> | ||||
| <!-- For a complete list and description of processing instructions (PIs), | <rfc number="8702" xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
| please see http://xml.resource.org/authoring/README.html. --> | consensus="true" | |||
| <!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | docName="draft-ietf-lamps-cms-shakes-18" ipr="trust200902" updates="3370" | |||
| might want to use. | obsoletes="" submissionType="IETF" xml:lang="en" tocInclude="true" | |||
| (Here they are set differently than their defaults in xml2rfc v1.32) --> | symRefs="true" sortRefs="true" version="3"> | |||
| <?rfc strict="yes" ?> | ||||
| <!-- give errors regarding ID-nits and DTD validation --> | ||||
| <!-- control the table of contents (ToC) --> | ||||
| <?rfc toc="yes"?> | ||||
| <!-- generate a ToC --> | ||||
| <?rfc tocdepth="4"?> | ||||
| <!-- the number of levels of subsections in ToC. default: 3 --> | ||||
| <!-- control references --> | ||||
| <?rfc symrefs="yes"?> | ||||
| <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <!-- sort the reference entries alphabetically --> | ||||
| <!-- control vertical white space | ||||
| (using these PIs as follows is recommended by the RFC Editor) --> | ||||
| <?rfc compact="yes" ?> | ||||
| <!-- do not start each main section on a new page --> | ||||
| <?rfc subcompact="no" ?> | ||||
| <!-- keep one blank line between list items --> | ||||
| <!-- end of list of popular I-D processing instructions --> | ||||
| <rfc category="std" docName="draft-ietf-lamps-cms-shakes-18" ipr="trust200902" u | ||||
| pdates="3370"> | ||||
| <!-- category values: std, bcp, info, exp, and historic | ||||
| ipr="full3978" (probably old) | ||||
| ipr values: full3667, noModification3667, noDerivatives3667 | ||||
| you can add the attributes updates="NNNN" and obsoletes="NNNN" | ||||
| they will automatically be output with "(if approved)" --> | ||||
| <!-- ***** FRONT MATTER ***** --> | <!-- ***** FRONT MATTER ***** --> | |||
| <front> | <front> | |||
| <title abbrev="SHAKEs in CMS">Use of the SHAKE One-way Hash | <title abbrev="SHAKEs in CMS">Use of the SHAKE One-Way Hash | |||
| Functions in the Cryptographic Message Syntax (CMS)</title> | Functions in the Cryptographic Message Syntax (CMS)</title> | |||
| <seriesInfo name="RFC" value="8702" /> | ||||
| <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis"> | ||||
| <organization>Cisco Systems</organization> | ||||
| <address> | ||||
| <email>pkampana@cisco.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Quynh Dang" initials="Q." surname="Dang"> | ||||
| <organization>NIST</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>100 Bureau Drive</street> | ||||
| <city>Gaithersburg</city> | ||||
| <region>MD</region> | ||||
| <code>20899</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>quynh.Dang@nist.gov</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="January" year="2020"/> | ||||
| <area>General</area> | ||||
| <workgroup>LAMPS WG</workgroup> | ||||
| <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis"> | <keyword>SHAKEs in CMS</keyword> | |||
| <organization>Cisco Systems</organization> | <keyword>SHAKE</keyword> | |||
| <address><email>pkampana@cisco.com</email></address> | <keyword>CMS with SHAKEs</keyword> | |||
| </author> | ||||
| <author fullname="Quynh Dang" initials="Q." surname="Dang"> | ||||
| <organization>NIST</organization> | ||||
| <address><postal><street>100 Bureau Drive</street> | ||||
| <street>Gaithersburg, MD 20899</street> | ||||
| </postal> | ||||
| <email>quynh.Dang@nist.gov</email> | ||||
| </address> | ||||
| </author> | ||||
| <date year="2019"/> | ||||
| <area>General</area> | ||||
| <workgroup>LAMPS WG</workgroup> | ||||
| <abstract> | ||||
| <t>This document updates the “Cryptographic Message Syntax Algorithms | ||||
| ” | ||||
| (RFC3370) and describes the conventions for using the SHAKE famil | ||||
| y of | ||||
| hash functions in the Cryptographic Message Syntax as one-way has | ||||
| h | ||||
| functions with the RSA Probabilistic signature and ECDSA signature | ||||
| algorithms. The conventions for the | ||||
| associated signer public keys in CMS are also described. </t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | <abstract> | |||
| <section title="Change Log"> | <t>This document updates the "Cryptographic Message Syntax (CMS) | |||
| <t>[ EDNOTE: Remove this section before publication. ]</t> | Algorithms" | |||
| <t><list style="symbols"> | (RFC 3370) and describes the conventions for using the SHAKE family of | |||
| <t>draft-ietf-lamps-cms-shake-18: | hash functions in the Cryptographic Message Syntax as one-way hash | |||
| <list> | functions with the RSA Probabilistic Signature Scheme (RSASSA-PSS) | |||
| <t>Minor ASN.1 changes.</t> | and Elliptic Curve Digital Signature Algorithm (ECDSA). The | |||
| </list></t> | conventions for the associated signer public keys in CMS are also | |||
| <t>draft-ietf-lamps-cms-shake-17: | described.</t> | |||
| <list> | </abstract> | |||
| <t>Minor updates for EDNOTE accuracy.</t> | </front> | |||
| </list></t> | <middle> | |||
| <t>draft-ietf-lamps-cms-shake-16: | <section anchor="intro" numbered="true" toc="default"> | |||
| <list> | <name>Introduction</name> | |||
| <t>Minor nits.</t> | ||||
| <t>Using bytes instead of bits for consistency.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-15: | ||||
| <list> | ||||
| <t>Minor editorial nits.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-14: | ||||
| <list> | ||||
| <t>Fixing error with incorrect preimage resistance bits for SHA | ||||
| 128 and SHA256.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-13: | ||||
| <list> | ||||
| <t>Addressing comments from Dan M.'s secdir review.</t> | ||||
| <t>Addressing comment from Scott B.'s opsdir review about refer | ||||
| ences in the abstract.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-12: | ||||
| <list> | ||||
| <t>Nits identified by Roman, Barry L. in ballot position review | ||||
| .</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-11: | ||||
| <list> | ||||
| <t>Minor nits.</t> | ||||
| <t>Nits identified by Roman in AD Review.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-10: | ||||
| <list> | ||||
| <t>Updated IANA considerations section to request for OID assig | ||||
| nments. </t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-09: | ||||
| <list> | ||||
| <t>Fixed minor text nit.</t> | ||||
| <t>Updates in Sec Considerations section.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-08: | ||||
| <list> | ||||
| <t>id-shake128-len and id-shake256-len were replaced with id-sh | ||||
| a128 with 32 bytes output length and id-shake256 with 64 bytes output length.</t | ||||
| > | ||||
| <t>Fixed a discrepancy between section 3 and 4.4 about the KMAC | ||||
| OIDs that have parameters as optional. </t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-07: | ||||
| <list> | ||||
| <t>Small nit from Russ while in WGLC.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-06: | ||||
| <list> | ||||
| <t>Incorporated Eric's suggestion from WGLC.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-05: | ||||
| <list> | ||||
| <t>Added informative references.</t> | ||||
| <t>Updated ASN.1 so it compiles.</t> | ||||
| <t>Updated IANA considerations.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-04: | ||||
| <list> | ||||
| <t>Added RFC8174 reference and text. </t> | ||||
| <t>Explicitly explained why RSASSA-PSS-params are omitted in se | ||||
| ction 4.2.1.</t> | ||||
| <t>Simplified Public Keys section by removing redundant info fr | ||||
| om RFCs.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-03: | ||||
| <list> | ||||
| <t>Removed paragraph suggesting KMAC to be used in generating k | ||||
| in Deterministic ECDSA. That should be RFC6979-bis. </t> | ||||
| <t>Removed paragraph from Security Considerations that talks ab | ||||
| out randomness of k because we are using deterministic ECDSA.</t> | ||||
| <t>Completed ASN.1 module and fixed KMAC ASN.1 based on Jim's f | ||||
| eedback.</t> | ||||
| <t>Text fixes.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-02: | ||||
| <list> | ||||
| <t>Updates based on suggestions and clarifications by Jim. </t> | ||||
| <t>Started ASN.1 module.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-01: | ||||
| <list> | ||||
| <t>Significant reorganization of the sections to simplify the | ||||
| introduction, the new OIDs and their use in CMS.</t> | ||||
| <t>Added new OIDs for RSASSA-PSS that hardcodes hash, salt an | ||||
| d MGF, according the WG consensus.</t> | ||||
| <t>Updated Public Key section to use the new RSASSA-PSS OIDs | ||||
| and clarify the algorithm identifier usage.</t> | ||||
| <t>Removed the no longer used SHAKE OIDs from section 3.1.</t | ||||
| > | ||||
| </list></t> | ||||
| <t>draft-ietf-lamps-cms-shake-00: | ||||
| <list> | ||||
| <t>Various updates to title and section names.</t> | ||||
| <t>Content changes filling in text and references.</t> | ||||
| </list></t> | ||||
| <t>draft-dang-lamps-cms-shakes-hash-00: | ||||
| <list> | ||||
| <t>Initial version</t> | ||||
| </list></t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section title="Introduction" anchor="intro"> | <t>"Cryptographic Message Syntax (CMS)" <xref target="RFC5652" | |||
| <t>The "Cryptographic Message Syntax (CMS)" <xref target="RFC5652"/> is u | format="default"/> describes syntax used to | |||
| sed to | ||||
| digitally sign, digest, authenticate, or encrypt arbitrary message conten ts. | digitally sign, digest, authenticate, or encrypt arbitrary message conten ts. | |||
| "Cryptographic Message Syntax (CMS) Algorithms" <xref target="RFC3370"/> | "Cryptographic Message Syntax (CMS) Algorithms" <xref target="RFC3370" fo rmat="default"/> | |||
| defines the use of common cryptographic algorithms with CMS. This | defines the use of common cryptographic algorithms with CMS. This | |||
| specification updates RFC3370 and describes the use of the SHAKE128 and S | specification updates RFC 3370 and describes the use of the SHAKE128 and | |||
| HAKE256 | SHAKE256 | |||
| specified in <xref target="SHA3"/> as new hash functions in CMS. In addition | specified in <xref target="SHA3" format="default"/> as new hash functions in | |||
| , | CMS. In addition, | |||
| it describes the use of these functions with the RSASSA-PSS signature | it describes the use of these functions with the RSA Probabilistic | |||
| algorithm <xref target="RFC8017"/> and the Elliptic Curve Digital Signatu | Signature Scheme (RSASSA-PSS) signature | |||
| re | algorithm <xref target="RFC8017" format="default"/> and the Elliptic Curv | |||
| Algorithm (ECDSA) <xref target="X9.62"/> with the CMS signed-data content | e Digital Signature | |||
| type.</t> | Algorithm (ECDSA) <xref target="X9.62" format="default"/> with the CMS si | |||
| gned-data content type.</t> | ||||
| <t>In the SHA-3 family, two extendable-output functions (SHAKEs), SHAKE128 a | <t>In the SHA-3 family, two extendable-output functions (SHAKEs), SHAKE128 | |||
| nd SHAKE256, | and SHAKE256, | |||
| are defined. Four other hash function instances, SHA3-224, SHA3-256, | are defined. Four other hash function instances (SHA3-224, SHA3-256, | |||
| SHA3-384, and SHA3-512, are also defined but are out of scope for this do | SHA3-384, and SHA3-512) are also defined but are out of scope for this do | |||
| cument. | cument. | |||
| A SHAKE is a variable length hash function defined as SHAKE(M, d) where t | A SHAKE is a variable-length hash function defined as SHAKE(M, d) where t | |||
| he | he | |||
| output is a d-bits-long digest of message M. The corresponding collision | output is a d-bit-long digest of message M. The corresponding collision a | |||
| and second-preimage-resistance strengths for SHAKE128 are min(d/2,128) and min( | nd second-preimage-resistance strengths for SHAKE128 are min(d/2,128) and min(d, | |||
| d,128) bits, | 128) bits, | |||
| respectively (Appendix A.1 <xref target="SHA3"/>). And the | respectively (see Appendix A.1 of <xref target="SHA3" format="default"/>) | |||
| . And the | ||||
| corresponding collision and second-preimage-resistance | corresponding collision and second-preimage-resistance | |||
| strengths for SHAKE256 are min(d/2,256) and min(d,256) bits, respectively . | strengths for SHAKE256 are min(d/2,256) and min(d,256) bits, respectively . | |||
| In this specification we use d=256 (for SHAKE128) and d=512 (for SHAKE256 | In this specification, we use d=256 (for SHAKE128) and d=512 (for SHAKE25 | |||
| ).</t> | 6).</t> | |||
| <t>A SHAKE can be used in CMS as the message digest function (to hash the | ||||
| <t>A SHAKE can be used in CMS as the message digest function (to hash the | message to be signed) in RSASSA-PSS and ECDSA, as the message | |||
| message to be signed) in RSASSA-PSS and ECDSA, message | authentication code, and as the mask generation function (MGF) in RSASSA-PSS | |||
| authentication code and as the mask generation function (MGF) in RSASSA-PSS. | . | |||
| This specification describes the identifiers for SHAKEs to be used in | This specification describes the identifiers for SHAKEs to be used in | |||
| CMS and their meaning. </t> | CMS and their meanings. </t> | |||
| <!-- <section title="ASN.1" anchor="section-1.1"> | ||||
| <t>CMS values are generated using ASN.1 <xref target="ASN1-B"/>, using | ||||
| the Basic | ||||
| Encoding Rules (BER) and the Distinguished Encoding Rules (DER) | ||||
| <xref target="ASN1-E"/>.</t> | ||||
| </section> --> | ||||
| <section anchor="terminology" title="Terminology"> | ||||
| <t>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 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
| when, and only when, they appear in all capitals, as shown here.</t> | ||||
| </section> <!-- Terminology --> | ||||
| </section> | ||||
| <section title="Identifiers" anchor="oids"> | ||||
| <!-- <figure><artwork><![CDATA[ | ||||
| id-RSASSA-PSS OBJECT IDENTIFIER ::= { pkcs-1 10 } | ||||
| RSASSA-PSS-params ::= SEQUENCE { | ||||
| hashAlgorithm HashAlgorithm, | ||||
| maskGenAlgorithm MaskGenAlgorithm, | ||||
| saltLength INTEGER, | ||||
| trailerField INTEGER } | ||||
| ]]></artwork></figure> --> | ||||
| <!-- Commention out the below OIDs as they are no longer pertinent for | <section anchor="terminology" numbered="true" toc="default"> | |||
| the below public keys and sigs --> | <name>Terminology</name> | |||
| <!-- The mask generation function used in RSASSA-PSS | <t> | |||
| is defined in <xref target="RFC8017"/>, but we include it here as well | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| for convenience: | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| <t><figure><artwork><![CDATA[ | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 }]]></artwork></figure></t> | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
| be interpreted as | ||||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
| when, and only when, they appear in all capitals, as shown here. | ||||
| </t> | ||||
| <t>The parameters field associated with id-mgf1 MUST have a | </section> | |||
| hashAlgorithm value that identifies the hash used with MGF1. To use | <!-- Terminology --> | |||
| SHAKE as this hash, this parameter MUST be id-shake128-len or id- | </section> | |||
| shake256-len as specified in <xref target="mdmgf" /> above. </t> --> | <section anchor="oids" numbered="true" toc="default"> | |||
| <name>Identifiers</name> | ||||
| <t>This section identifies eight new object identifiers (OIDs) | <t>This section identifies eight new object identifiers (OIDs) | |||
| for using SHAKE128 and SHAKE256 in CMS.</t> | for using SHAKE128 and SHAKE256 in CMS.</t> | |||
| <t>Two object identifiers for SHAKE128 and SHAKE256 hash functions are def | ||||
| <t>Two object identifiers for SHAKE128 and SHAKE256 hash functions are d | ined | |||
| efined | in <xref target="shake-nist-oids" format="default"/>, and we include the | |||
| in <xref target="shake-nist-oids"/> and we include them here for conveni | m here for convenience.</t> | |||
| ence.</t> | <sourcecode type="asn.1"><![CDATA[ | |||
| <t><figure><artwork><![CDATA[ | ||||
| id-shake128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-shake128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | |||
| country(16) us(840) organization(1) gov(101) csor(3) | country(16) us(840) organization(1) gov(101) csor(3) | |||
| nistAlgorithm(4) 2 11 } | nistAlgorithm(4) 2 11 } | |||
| id-shake256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-shake256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | |||
| country(16) us(840) organization(1) gov(101) csor(3) | country(16) us(840) organization(1) gov(101) csor(3) | |||
| nistAlgorithm(4) 2 12 } | nistAlgorithm(4) 2 12 } | |||
| ]]></artwork></figure></t> | ]]></sourcecode> | |||
| <t>In this specification, when using the id-shake128 or id-shake256 algori | ||||
| <t>In this specification, when using the id-shake128 or id-shake256 algorit | thm identifiers, the parameters <bcp14>MUST</bcp14> be absent. That is, the iden | |||
| hm identifiers, the parameters MUST be absent. That is, the identifier SHALL be | tifier <bcp14>SHALL</bcp14> be a SEQUENCE of one component, the OID. | |||
| a SEQUENCE of one component, the OID. | </t> | |||
| <!-- present, and they MUST employ the ShakeOutputLen --> | <t><xref target="RFC8692" format="default"/> | |||
| <!-- "MUST employ syntax borrowed from RFC4055 --> | defines two identifiers for RSASSA-PSS signatures using SHAKEs, which we | |||
| <!-- syntax that contains an encoded positive integer value of 32 or 64 | include here for | |||
| respectively.--></t> | ||||
| <t><xref target="I-D.ietf-lamps-pkix-shake"/> | ||||
| [ EDNOTE: Update reference with the RFC when it is published. ] | ||||
| defines two identifiers for RSASSA-PSS signatures using SHAKEs which we | ||||
| include here for | ||||
| convenience. | convenience. | |||
| </t> | </t> | |||
| <t><figure><artwork><![CDATA[ | <sourcecode type="asn.1"><![CDATA[ | |||
| id-RSASSA-PSS-SHAKE128 OBJECT IDENTIFIER ::= { iso(1) | id-RSASSA-PSS-SHAKE128 OBJECT IDENTIFIER ::= { iso(1) | |||
| identified-organization(3) dod(6) internet(1) | identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) algorithms(6) 30 } | security(5) mechanisms(5) pkix(7) algorithms(6) 30 } | |||
| id-RSASSA-PSS-SHAKE256 OBJECT IDENTIFIER ::= { iso(1) | id-RSASSA-PSS-SHAKE256 OBJECT IDENTIFIER ::= { iso(1) | |||
| identified-organization(3) dod(6) internet(1) | identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) algorithms(6) 31 } | security(5) mechanisms(5) pkix(7) algorithms(6) 31 } | |||
| ]]></artwork></figure></t> | ]]></sourcecode> | |||
| <t>The same RSASSA-PSS algorithm identifiers can be used for identifying | ||||
| <t>The same RSASSA-PSS algorithm identifiers can be used for identifying | ||||
| public keys and signatures.</t> | public keys and signatures.</t> | |||
| <t><xref target="RFC8692" format="default"/> | ||||
| <t><xref target="I-D.ietf-lamps-pkix-shake"/> | ||||
| [ EDNOTE: Update reference with the RFC when it is published. ] | ||||
| also defines two algorithm | also defines two algorithm | |||
| identifiers of ECDSA signatures using SHAKEs which we include here for | identifiers of ECDSA signatures using SHAKEs, which we include here for | |||
| convenience. | convenience. | |||
| </t> | </t> | |||
| <t><figure><artwork><![CDATA[ | <sourcecode type="asn.1"><![CDATA[ | |||
| id-ecdsa-with-shake128 OBJECT IDENTIFIER ::= { iso(1) | id-ecdsa-with-shake128 OBJECT IDENTIFIER ::= { iso(1) | |||
| identified-organization(3) dod(6) internet(1) | identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) algorithms(6) 32 } | security(5) mechanisms(5) pkix(7) algorithms(6) 32 } | |||
| id-ecdsa-with-shake256 OBJECT IDENTIFIER ::= { iso(1) | id-ecdsa-with-shake256 OBJECT IDENTIFIER ::= { iso(1) | |||
| identified-organization(3) dod(6) internet(1) | identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) algorithms(6) 33 } | security(5) mechanisms(5) pkix(7) algorithms(6) 33 } | |||
| ]]></artwork></figure></t> | ]]></sourcecode> | |||
| <t>The parameters for the four RSASSA-PSS and ECDSA identifiers | ||||
| <t>The parameters for the four RSASSA-PSS and ECDSA identifiers | <bcp14>MUST</bcp14> be absent. That is, each identifier <bcp14>SHALL</bc | |||
| MUST be absent. That is, each identifier SHALL be a SEQUENCE of one comp | p14> be a SEQUENCE of one component, | |||
| onent, | ||||
| the OID.</t> | the OID.</t> | |||
| <!-- <figure><artwork><![CDATA[ | <t> | |||
| sigAlgs OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) | In <xref target="shake-nist-oids" format="default"/>, the National | |||
| us(840) organization(1) gov(101) csor(3) nistAlgorithm(4) 3 } | Institute of Standards and Technology (NIST) defines two object | |||
| identifiers for Keccak message authentication codes (KMACs) using SHAKE1 | ||||
| id-ecdsa-with-shake128 ::= { sigAlgs x } | 28 and SHAKE256, | |||
| id-ecdsa-with-shake256 ::= { sigAlgs y } | ||||
| Note: x and y will be specified by NIST. | ||||
| ]]></artwork> </figure> --> | ||||
| <t>Two object identifiers for KMACs using SHAKE128 and SHAKE256 as | ||||
| defined in by the National Institute of Standards and Technology (NIST) | ||||
| in <xref target="shake-nist-oids"/> | ||||
| and we include them here for convenience.</t> | and we include them here for convenience.</t> | |||
| <t><figure><artwork><![CDATA[ | <sourcecode type="asn.1"><![CDATA[ | |||
| id-KmacWithSHAKE128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-KmacWithSHAKE128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | |||
| country(16) us(840) organization(1) gov(101) csor(3) | country(16) us(840) organization(1) gov(101) csor(3) | |||
| nistAlgorithm(4) 2 19 } | nistAlgorithm(4) 2 19 } | |||
| id-KmacWithSHAKE256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-KmacWithSHAKE256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | |||
| country(16) us(840) organization(1) gov(101) csor(3) | country(16) us(840) organization(1) gov(101) csor(3) | |||
| nistAlgorithm(4) 2 20 } | nistAlgorithm(4) 2 20 } | |||
| ]]></artwork></figure></t> | ]]></sourcecode> | |||
| <t>The parameters for id-KmacWithSHAKE128 and id-KmacWithSHAKE256 are <bcp | ||||
| <t>The parameters for id-KmacWithSHAKE128 and id-KmacWithSHAKE256 are OP | 14>OPTIONAL</bcp14>.</t> | |||
| TIONAL.</t> | ||||
| <!-- <figure><artwork><![CDATA[ | ||||
| hashAlgs OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) | ||||
| us(840) organization(1) gov(101) csor(3) nistAlgorithm(4) 2 } | ||||
| id-KmacWithSHAKE128 OBJECT IDENTIFIER ::= { x } | ||||
| id-KmacWithSHAKE256 OBJECT IDENTIFIER ::= { y } | ||||
| Note: x and y will be specified by NIST. | ||||
| ]]></artwork></figure> --> | ||||
| <t><xref target="md"/>, <xref target="rsa-sigs"/>, <xref target="ecdsa-sigs | ||||
| "/> | ||||
| and <xref target="kmac"/> specify the required output length for each us | ||||
| e | ||||
| of SHAKE128 or SHAKE256 in message digests, RSASSA-PSS, ECDSA | ||||
| and KMAC.</t> | ||||
| </section> | ||||
| <section title="Use in CMS"> | <t>Sections <xref target="md" format="counter"/>, <xref | |||
| <section anchor="md" title="Message Digests"> | target="rsa-sigs" format="counter"/>, <xref target="ecdsa-sigs" | |||
| <t>The id-shake128 and id-shake256 OIDs (<xref target="oids"/>) can | format="counter"/>, and <xref target="kmac" format="counter"/> specify | |||
| the required output length for each use of SHAKE128 or SHAKE256 in | ||||
| message digests, RSASSA-PSS, ECDSA, and KMAC.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Use in CMS</name> | ||||
| <section anchor="md" numbered="true" toc="default"> | ||||
| <name>Message Digests</name> | ||||
| <t>The id-shake128 and id-shake256 OIDs (see <xref target="oids" format= | ||||
| "default"/>) can | ||||
| be used as the digest algorithm identifiers located in the Signed Data, | be used as the digest algorithm identifiers located in the Signed Data, | |||
| SignerInfo, DigestedData, and the AuthenticatedData digestAlgori | SignerInfo, DigestedData, and the AuthenticatedData digestAlgorit | |||
| thm fields | hm fields | |||
| in CMS <xref target="RFC5652"/>. The OID encoding MUST omit the p | in CMS <xref target="RFC5652" format="default"/>. The OID encodin | |||
| arameters field and the output length of SHAKE128 or SHAKE256 as the message dig | g <bcp14>MUST</bcp14> omit the parameters field and the output length of SHAKE12 | |||
| est MUST be 32 or 64 bytes, respectively.</t> | 8 or SHAKE256 as the message digest <bcp14>MUST</bcp14> be 32 or 64 bytes, respe | |||
| ctively.</t> | ||||
| <t>The digest values are located in the DigestedData field and the Me | <t>The digest values are located in the DigestedData field and the Messa | |||
| ssage | ge | |||
| Digest authenticated attribute included in the signedAttributes of th e | Digest authenticated attribute included in the signedAttributes of th e | |||
| SignedData signerInfo. In addition, digest values are input to | SignedData signerInfos. In addition, digest values are input to | |||
| signature algorithms. The digest algorithm MUST be the same as the | signature algorithms. The digest algorithm <bcp14>MUST</bcp14> be the | |||
| same as the | ||||
| message hash algorithms used in signatures.</t> | message hash algorithms used in signatures.</t> | |||
| </section> | </section> | |||
| <section anchor="sigs" numbered="true" toc="default"> | ||||
| <section title="Signatures" anchor="sigs"> | <name>Signatures</name> | |||
| <t>In CMS, signature algorithm identifiers are located in the SignerInfo | <t>In CMS, signature algorithm identifiers are located in the SignerInfo | |||
| signatureAlgorithm field of SignedData content type and countersignature attribute. | signatureAlgorithm field of signed-data content type and countersignatur e attribute. | |||
| Signature values are located in the SignerInfo signature field of | Signature values are located in the SignerInfo signature field of | |||
| SignedData content type and countersignature attribute.</t> | signed-data content type and countersignature attribute.</t> | |||
| <t>Conforming implementations that process RSASSA-PSS and | ||||
| <t>Conforming implementations that process RSASSA-PSS and | ECDSA with SHAKE signatures when processing CMS data <bcp14>MUST< | |||
| ECDSA with SHAKE signatures when processing CMS data MUST recogni | /bcp14> recognize the | |||
| ze the | corresponding OIDs specified in <xref target="oids" format="defau | |||
| corresponding OIDs specified in <xref target="oids"/>.</t> | lt"/>.</t> | |||
| <t>When using RSASSA-PSS or ECDSA with SHAKEs, the RSA modulus or ECDSA | ||||
| <t>When using RSASSA-PSS or ECDSA with SHAKEs, the RSA modulus or ECD | curve order <bcp14>SHOULD</bcp14> be chosen in line with the SHAK | |||
| SA | E output length. Refer to <xref target="sec_cons" format="default"/> for more de | |||
| curve order SHOULD be chosen in line with the SHAKE output length | tails.</t> | |||
| . Refer to <xref target="sec_cons"/> for more details.</t> | <section anchor="rsa-sigs" numbered="true" toc="default"> | |||
| <name>RSASSA-PSS Signatures</name> | ||||
| <section title="RSASSA-PSS Signatures" anchor="rsa-sigs"> | <t>The RSASSA-PSS algorithm is defined in <xref target="RFC8017" forma | |||
| <t>The RSASSA-PSS algorithm is defined in <xref target="RFC8017"/>. | t="default"/>. | |||
| When id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256 specified | When id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256 (specifie | |||
| in <xref target="oids"/> | d in <xref target="oids" format="default"/>) | |||
| is used, the encoding MUST omit the parameters field. That is, | is used, the encoding <bcp14>MUST</bcp14> omit the parameters f | |||
| the AlgorithmIdentifier SHALL be a SEQUENCE of one component, | ield. That is, | |||
| id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256. <xref target= | the AlgorithmIdentifier <bcp14>SHALL</bcp14> be a SEQUENCE of o | |||
| "RFC4055"/> | ne component: | |||
| id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256. <xref target= | ||||
| "RFC4055" format="default"/> | ||||
| defines RSASSA-PSS-params that are used to define the algorithm s and inputs | defines RSASSA-PSS-params that are used to define the algorithm s and inputs | |||
| to the algorithm. This specification does not use parameters be | to the algorithm. | |||
| cause the | This specification does not use parameters because the | |||
| hash, mask generation algorithm, trailer and salt are embedded | hash, mask generation algorithm, trailer, and salt are embedded | |||
| in | in | |||
| the OID definition.</t> | the OID definition.</t> | |||
| <t>The hash algorithm used to hash a message being signed and the hash | ||||
| <t>The hash algorithm to hash a message being signed and the ha | algorithm as the mask generation function used in RSASSA-PSS <bcp14>MU | |||
| sh | ST</bcp14> be | |||
| algorithm as the mask generation function used in RSASSA-PSS MUST be | ||||
| the same: both SHAKE128 or both SHAKE256. The output length of | the same: both SHAKE128 or both SHAKE256. The output length of | |||
| the hash algorithm which hashes the message SHALL be 32 (for SHAKE128) | the hash algorithm that hashes the message <bcp14>SHALL</bcp14> be 32 (for SHAKE128) | |||
| or 64 bytes (for SHAKE256). </t> | or 64 bytes (for SHAKE256). </t> | |||
| <t>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 | ||||
| <bcp14>MUST</bcp14> be used natively as the MGF, instead of the MGF1 | ||||
| algorithm that uses the hash function in multiple iterations, as | ||||
| specified in <xref target="RFC8017" sectionFormat="of" | ||||
| section="B.2.1"/>. 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. | ||||
| <t>The mask generation function takes an octet string of variable l | The mgfSeed is an octet string used as the seed to generate | |||
| ength | the mask <xref | |||
| and a desired output length as input, and outputs an octet string of | target="RFC8017" format="default"/>. As explained in Step 9 of | |||
| the desired length. In RSASSA-PSS with SHAKEs, the SHAKEs MUST be | <xref target="RFC8017" sectionFormat="of" section="9.1.1"/>, the | |||
| used natively as the MGF function, instead of the MGF1 algorithm that | output length of the MGF is emLen - hLen - 1 bytes. emLen is the | |||
| uses the hash function in multiple iterations as specified in | maximum message length ceil((n-1)/8), where n is the RSA modulus in | |||
| Section B.2.1 of [RFC8017]. In other words, the MGF is defined as | bits. hLen is 32 and 64 bytes for id-RSASSA-PSS-SHAKE128 and | |||
| the SHAKE128 or SHAKE256 with input being the mgfSeed for id-RSASSA-PS | id-RSASSA-PSS-SHAKE256, respectively. Thus, when SHAKE is used as | |||
| S- | the MGF, the SHAKE output length maskLen is (8*emLen - 264) or | |||
| SHAKE128 and id-RSASSA-PSS-SHAKE256, respectively. The mgfSeed is the | (8*emLen - 520) bits, respectively. For example, when RSA modulus n | |||
| seed | is 2048, the output length of SHAKE128 or SHAKE256 as the MGF will | |||
| from which mask is generated, an octet string <xref target="RFC | be 1784 or 1528 bits when id-RSASSA-PSS-SHAKE128 or | |||
| 8017"/>. | id-RSASSA-PSS-SHAKE256 is used, respectively.</t> | |||
| As explained in Step 9 of section 9.1.1 of <xref target="RFC801 | <t>The RSASSA-PSS saltLength <bcp14>MUST</bcp14> be 32 bytes for id-RS | |||
| 7"/>, the output | ASSA-PSS-SHAKE128 | |||
| length of the MGF is emLen - hLen - 1 bytes. emLen is the maxim | ||||
| um 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 mas | ||||
| kLen is | ||||
| (8*emLen - 264) or (8*emLen - 520) bits, respectively. For exam | ||||
| ple, when RSA modulus n is 2048, | ||||
| the output length of SHAKE128 or SHAKE256 as the MGF will be 17 | ||||
| 84 or 1528-bits | ||||
| when id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256 is used, | ||||
| respectively.</t> | ||||
| <t>The RSASSA-PSS saltLength MUST be 32 bytes for id-RSASSA-PSS | ||||
| -SHAKE128 | ||||
| or 64 bytes for id-RSASSA-PSS-SHAKE256. | or 64 bytes for id-RSASSA-PSS-SHAKE256. | |||
| Finally, the trailerField MUST be 1, which represents the trailer | Finally, the trailerField <bcp14>MUST</bcp14> be 1, which represents t | |||
| field with hexadecimal value 0xBC <xref target="RFC8017"/>.</t> | he trailer | |||
| </section> | field with hexadecimal value 0xBC <xref target="RFC8017" format="defau | |||
| lt"/>.</t> | ||||
| <section title="ECDSA Signatures" anchor="ecdsa-sigs"> | </section> | |||
| <t>The Elliptic Curve Digital Signature Algorithm (ECDSA) is define | <section anchor="ecdsa-sigs" numbered="true" toc="default"> | |||
| d in | <name>ECDSA Signatures</name> | |||
| <xref target="X9.62"/>. When the id-ecdsa-with-shake128 or id-ecdsa | <t>The Elliptic Curve Digital Signature Algorithm (ECDSA) is defined i | |||
| -with-shake256 | n | |||
| (specified in <xref target="oids"/>) algorithm identifier appea | <xref target="X9.62" format="default"/>. When the id-ecdsa-with-sha | |||
| rs, the | ke128 or id-ecdsa-with-shake256 | |||
| (specified in <xref target="oids" format="default"/>) algorithm | ||||
| identifier appears, the | ||||
| respective SHAKE function is used as the hash. | respective SHAKE function is used as the hash. | |||
| The encoding MUST omit the parameters field. That is, the Algor | The encoding <bcp14>MUST</bcp14> omit the parameters field. Tha | |||
| ithmIdentifier | t is, the AlgorithmIdentifier | |||
| SHALL be a SEQUENCE of one component, the OID id-ecdsa-with-sha | <bcp14>SHALL</bcp14> be a SEQUENCE of one component, the OID id | |||
| ke128 or | -ecdsa-with-shake128 or | |||
| id-ecdsa-with-shake256.</t> | id-ecdsa-with-shake256.</t> | |||
| <t>For simplicity and compliance with the ECDSA standard specif | <t>For simplicity and compliance with the ECDSA standard | |||
| ication, | specification <xref target="X9.62" format="default"/>, | |||
| the output length of the hash function must be explicitly deter mined. | the output length of the hash function must be explicitly deter mined. | |||
| The output length for SHAKE128 or SHAKE256 used in ECDSA MUST b e 32 | The output length for SHAKE128 or SHAKE256 used in ECDSA <bcp14 >MUST</bcp14> be 32 | |||
| or 64 bytes, respectively. </t> | or 64 bytes, respectively. </t> | |||
| <t>Conforming Certification Authority (CA) implementations that genera | ||||
| te ECDSA with SHAKE signatures | ||||
| in certificates or Certificate Revocation Lists (CRLs) <bcp14>S | ||||
| HOULD</bcp14> generate such signatures with a | ||||
| deterministically generated, nonrandom k in accordance with all | ||||
| the requirements specified in <xref target="RFC6979" format="de | ||||
| fault"/>. | ||||
| <t>Conforming CA implementations that generate ECDSA with SHAKE | They <bcp14>MAY</bcp14> also generate such signatures | |||
| signatures | in accordance with all other recommendations in <xref target="X | |||
| in certificates or CRLs SHOULD generate such signatures with a | 9.62" format="default"/> or | |||
| deterministically generated, non-random k in accordance with al | <xref target="SEC1" format="default"/> if they have a stated po | |||
| l | licy that requires | |||
| the requirements specified in <xref target="RFC6979"/>. | ||||
| <!-- Sections 7.2 and 7.3 of | ||||
| <xref target="X9.62"/> or with all the requirements specified i | ||||
| n Section | ||||
| 4.1.3 of <xref target="SEC1"/>. --> | ||||
| They MAY also generate such signatures | ||||
| in accordance with all other recommendations in <xref target="X | ||||
| 9.62"/> or | ||||
| <xref target="SEC1"/> if they have a stated policy that require | ||||
| s | ||||
| conformance to those standards. Those standards have not specif ied | conformance to those standards. Those standards have not specif ied | |||
| SHAKE128 and SHAKE256 as hash algorithm options. However, SHAKE 128 and | SHAKE128 and SHAKE256 as hash algorithm options. However, SHAKE 128 and | |||
| SHAKE256 with output length being 32 and 64 octets, respectivel | SHAKE256 with output length being 32 and 64 octets, respectivel | |||
| y can | y, can | |||
| be used instead of 256 and 512-bit output hash algorithms such | be used instead of 256 and 512-bit output hash algorithms, such | |||
| as SHA256 | as SHA256 | |||
| and SHA512.</t> | and SHA512.</t> | |||
| <!-- <t>In Section 3.2 "Generation of k" of <xref target="RFC69 | </section> | |||
| 79"/>, HMAC is used to derive | </section> | |||
| the deterministic k. Conforming implementations that generate d | <section numbered="true" toc="default"> | |||
| eterministic | <name>Public Keys</name> | |||
| ECDSA with SHAKE signatures in X.509 MUST use KMAC with SHAKE12 | <t>In CMS, the signer's public key algorithm identifiers are located in | |||
| 8 or KMAC with | the | |||
| SHAKE256 as specfied in <xref target="SP800-185"/> when SHAKE12 | ||||
| 8 or SHAKE256 is | ||||
| used as the message hashing algorithm, respectively. In this si | ||||
| tuation, KMAC with | ||||
| SHAKE128 and KMAC with SHAKE256 have 256-bit and 512-bit output | ||||
| s respectively, | ||||
| and the optional customization bit string S is an empty string. | ||||
| </t> --> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Public Keys"> | ||||
| <t>In CMS, the signer's public key algorithm identifiers are located | ||||
| in the | ||||
| OriginatorPublicKey's algorithm attribute. | OriginatorPublicKey's algorithm attribute. | |||
| The conventions and encoding for RSASSA-PSS and ECDSA <!-- and Ed DSA --> | The conventions and encoding for RSASSA-PSS and ECDSA | |||
| public keys algorithm identifiers are as specified in | public keys algorithm identifiers are as specified in | |||
| Section 2.3 of <xref target="RFC3279"/>, | <xref target="RFC3279" sectionFormat="of" section="2.3"/>, | |||
| Section 3.1 of <xref target="RFC4055"/> | <xref target="RFC4055" sectionFormat="of" section="3.1"/>, | |||
| and Section 2.1 of <xref target="RFC5480"/>. | and <xref target="RFC5480" sectionFormat="of" section="2.1"/>. | |||
| <!-- and <xref target="I-D.josefsson-pkix-eddsa"/> --></t> | ||||
| <t>Traditionally, the rsaEncryption object identifier is used to | </t> | |||
| <t>Traditionally, the rsaEncryption object identifier is used to | ||||
| identify RSA public keys. The rsaEncryption object identifier | identify RSA public keys. The rsaEncryption object identifier | |||
| continues to identify the public key when the RSA private | continues to identify the public key when the RSA private | |||
| key owner does not wish to limit the use of the public key | key owner does not wish to limit the use of the public key | |||
| exclusively to RSASSA-PSS with SHAKEs. When the RSA private key | exclusively to RSASSA-PSS with SHAKEs. When the RSA private key | |||
| owner wishes to limit the use of the public key exclusively | owner wishes to limit the use of the public key exclusively | |||
| to RSASSA-PSS, the AlgorithmIdentifier for RSASSA-PSS defined | to RSASSA-PSS, the AlgorithmIdentifier for RSASSA-PSS defined | |||
| in <xref target="oids"/> SHOULD be used as the algorithm attribut e | in <xref target="oids" format="default"/> <bcp14>SHOULD</bcp14> b e used as the algorithm attribute | |||
| in the OriginatorPublicKey sequence. Conforming client | in the OriginatorPublicKey sequence. Conforming client | |||
| implementations that process RSASSA-PSS with SHAKE public keys | implementations that process RSASSA-PSS with SHAKE public keys | |||
| in CMS message MUST recognize the corresponding OIDs in <xref tar | in CMS message <bcp14>MUST</bcp14> recognize the corresponding OI | |||
| get="oids"/>.</t> | Ds in <xref target="oids" format="default"/>.</t> | |||
| <t>Conforming implementations <bcp14>MUST</bcp14> specify and process th | ||||
| <t>Conforming implementations MUST specify and process the | e | |||
| algorithms explicitly by using the OIDs specified in | algorithms explicitly by using the OIDs specified in | |||
| <xref target="oids"/> when encoding ECDSA with SHAKE | <xref target="oids" format="default"/> when encoding ECDSA with S HAKE | |||
| public keys in CMS messages. </t> | public keys in CMS messages. </t> | |||
| <t>The identifier parameters, as explained in <xref target="oids" format | ||||
| <t>The identifier parameters, as explained in <xref target="oids" | ="default"/>, | |||
| />, | <bcp14>MUST</bcp14> be absent. </t> | |||
| MUST be absent. </t> | </section> | |||
| </section> | <section anchor="kmac" numbered="true" toc="default"> | |||
| <name>Message Authentication Codes</name> | ||||
| <section anchor="kmac" title="Message Authentication Codes"> | <t>Keccak message authentication code (KMAC) is specified in <xref targe | |||
| <t>KMAC message authentication code (KMAC) is specified in <xref targ | t="SP800-185" format="default"/>. | |||
| et="SP800-185"/>. | ||||
| In CMS, KMAC algorithm identifiers are located in the AuthenticatedDa ta | In CMS, KMAC algorithm identifiers are located in the AuthenticatedDa ta | |||
| macAlgorithm field. The KMAC values are located in the AuthenticatedD ata mac field.</t> | macAlgorithm field. The KMAC values are located in the AuthenticatedD ata mac field.</t> | |||
| <t>When the id-KmacWithSHAKE128 or id-KmacWithSHAKE256 OID | ||||
| <t>When the id-KmacWithSHAKE128 or id-KmacWithSHAKE256 OID | ||||
| is used as the MAC algorithm identifier, the parameters field is opti onal | is used as the MAC algorithm identifier, the parameters field is opti onal | |||
| (absent or present). If absent, the SHAKE256 output length used in KM AC is | (absent or present). If absent, the SHAKE256 output length used in KM AC is | |||
| 32 or 64 bytes, respectively, and the customization string is an empt y string by default.</t> | 32 or 64 bytes, respectively, and the customization string is an empt y string by default.</t> | |||
| <t>Conforming implementations that process KMACs with the SHAKEs | ||||
| <t>Conforming implementations that process KMACs with the SHAKEs | when processing CMS data <bcp14>MUST</bcp14> recognize these iden | |||
| when processing CMS data MUST recognize these identifiers.</t> | tifiers.</t> | |||
| <t>When calculating the KMAC output, the variable N is 0xD2B282C2, S | ||||
| <t>When calculating the KMAC output, the variable N is 0xD2B282C2, S | is an empty string, and L (the integer representing the requested out | |||
| is an empty string, and L, the integer representing the requested out | put | |||
| put | length in bits) is 256 or 512 for KmacWithSHAKE128 or KmacWithSHAKE25 | |||
| length in bits, is 256 or 512 for KmacWithSHAKE128 or KmacWithSHAKE25 | 6, | |||
| 6, | ||||
| respectively, in this specification.</t> | respectively, in this specification.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="IANA" numbered="true" toc="default"> | ||||
| <section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <t>One object identifier for the ASN.1 module in <xref target="section- | <t>One object identifier for the ASN.1 module in <xref target="asn-app" fo | |||
| a"/> | rmat="default"/> | |||
| was requested for the SMI Security for S/MIME Module Identifiers | was updated in the "Structure of Management Information (SMI) Secu | |||
| (1.2.840.113549.1.9.16.0) registry: </t> | rity for S/MIME Module Identifier | |||
| <texttable> | (1.2.840.113549.1.9.16.0)" registry: </t> | |||
| <ttcol align='center'>Decimal</ttcol> | <table align="left"> | |||
| <ttcol align='center'>Description</ttcol> | <thead> | |||
| <ttcol align='center'>References</ttcol> | <tr> | |||
| <c>70</c> | <th align="center">Decimal</th> | |||
| <c>CMSAlgsForSHAKE-2019</c> | <th align="center">Description</th> | |||
| <c>[EDNOTE: THIS RFC]</c> | <th align="center">References</th> | |||
| </texttable> | </tr> | |||
| </thead> | ||||
| <!-- <t>EDNOTE: If the PKIX draft is standardized first maybe we should | <tbody> | |||
| not | <tr> | |||
| keep these OIDS as they are not new. </t> | <td align="center">70</td> | |||
| <td align="center">CMSAlgsForSHAKE-2019</td> | ||||
| <td align="center">RFC 8702</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| <section anchor="sec_cons" numbered="true" toc="default"> | ||||
| <name>Security Considerations</name> | ||||
| <t>This document updates <xref target="RFC3370" format="default"/>. The se | ||||
| curity considerations | ||||
| section of that document applies to this specification as well.</t> | ||||
| <t>IANA has assigned four OID identifiers in the | <t>NIST has defined appropriate use of the hash functions in terms of the | |||
| SMI Security for PKIX Algorithms <xref target="SMI-PKIX"/> | algorithm | |||
| (1.3.6.1.5.5.7.6) registry </t> | strengths and expected time frames for secure use in Special Publications | |||
| (SPs) | ||||
| <xref target="SP800-78-4" format="default"/> and <xref target="SP800-107" | ||||
| format="default"/>. | ||||
| These documents can be used as guides to choose appropriate key sizes | ||||
| for various security scenarios. </t> | ||||
| <t>SHAKE128 with an output length of 32 bytes offers 128 bits of collision | ||||
| and preimage resistance. Thus, SHAKE128 OIDs in this specification are | ||||
| <bcp14>RECOMMENDED</bcp14> with a 2048- (112-bit security) or 3072-bit | ||||
| (128-bit security) RSA modulus or curves with a group order of 256 bits | ||||
| (128-bit security). SHAKE256 with a 64-byte output length offers 256 bits | ||||
| of collision and preimage resistance. Thus, the SHAKE256 OIDs in this | ||||
| specification are <bcp14>RECOMMENDED</bcp14> with 4096-bit RSA modulus | ||||
| or higher or curves with group order of at least 512 bits, such as NIST | ||||
| curve P-521 (256-bit security). Note that we recommended a 4096-bit RSA | ||||
| because we would need a 15360-bit modulus for 256 bits of security, which | ||||
| is impractical for today's technology.</t> | ||||
| <t>When more than two parties share the same message-authentication key, | ||||
| data origin authentication is not provided. Any party that knows the | ||||
| message-authentication key can compute a valid MAC; therefore, the | ||||
| content could originate from any one of the parties.</t> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <t><figure><artwork><![CDATA[ | <displayreference target="I-D.housley-lamps-cms-sha3-hash" to="CMS-SHA3"/> | |||
| id-RSASSA-PSS-SHAKE128 OBJECT IDENTIFIER ::= { iso(1) | ||||
| identified-organization(3) dod(6) internet(1) | ||||
| security(5) mechanisms(5) pkix(7) algorithms(6) | ||||
| 30 } | ||||
| id-RSASSA-PSS-SHAKE256 OBJECT IDENTIFIER ::= { iso(1) | ||||
| identified-organization(3) dod(6) internet(1) | ||||
| security(5) mechanisms(5) pkix(7) algorithms(6) | ||||
| 31 } | ||||
| id-ecdsa-with-shake128 OBJECT IDENTIFIER ::= { iso(1) | ||||
| identified-organization(3) dod(6) internet(1) | ||||
| security(5) mechanisms(5) pkix(7) algorithms(6) | ||||
| 32 } | ||||
| id-ecdsa-with-shake256 OBJECT IDENTIFIER ::= { iso(1) | ||||
| identified-organization(3) dod(6) internet(1) | ||||
| security(5) mechanisms(5) pkix(7) algorithms(6) | ||||
| 33 } | ||||
| ]]></artwork></figure></t> --> | ||||
| </section> | <references> | |||
| <name>References</name> | ||||
| <section title="Security Considerations" anchor="sec_cons"> | <references> | |||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3370.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5652.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8017.xml"/> | ||||
| <t>This document updates <xref target="RFC3370"/>. The security conside | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| rations | ence.RFC.4055.xml"/> | |||
| section of that document applies to this specification as well.</t> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| ence.RFC.5480.xml"/> | ||||
| <!-- <t>The SHAKEs are deterministic functions. Like any other determinist | <reference anchor="SHA3" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIP | |||
| ic | S.202.pdf"> | |||
| function, executing each function with the same input multiple times | <front> | |||
| will produce the same output. Therefore, users should not expect | <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output | |||
| unrelated outputs (with the same or different output lengths) from | Functions</title> | |||
| excuting a SHAKE function with the same input multiple times. | <author> | |||
| The shorter one of any 2 outputs produced from a SHAKE with the same | <organization>National Institute of Standards and | |||
| input is a prefix of the longer one. It is a similar situation as | Technology (NIST)</organization> | |||
| truncating a 512-bit output of SHA-512 by taking its 256 left-most bits | </author> | |||
| . | <date month="August" year="2015"/> | |||
| These 256 left-most bits are a prefix of the 512-bit output.</t> --> | </front> | |||
| <seriesInfo name="FIPS" value="PUB 202"/> | ||||
| <seriesInfo name="DOI" value="10.6028/NIST.FIPS.202"/> | ||||
| </reference> | ||||
| <!-- <t>Implementations must protect the signer's private key. Compromi | <reference anchor="SP800-185" target="http://nvlpubs.nist.gov/nistpubs/Spec | |||
| se of | ialPublications/NIST.SP.800-185.pdf"> | |||
| the signer's private key permits masquerade.</t> --> | <front> | |||
| <title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and Parallel | ||||
| Hash</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology (NIST | ||||
| )</organization> | ||||
| </author> | ||||
| <date month="December" year="2016"/> | ||||
| </front> | ||||
| <seriesInfo name="NIST Special Publication" value="800-185"/> | ||||
| <seriesInfo name="DOI" value="10.6028/NIST.SP.800-185"/> | ||||
| </reference> | ||||
| <t>NIST has defined appropriate use of the hash functions in terms of t | </references> | |||
| he algorithm | <references> | |||
| strengths and expected time frames for secure use in Special Publications | <name>Informative References</name> | |||
| (SPs) | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <xref target="SP800-78-4"/> and <xref target="SP800-107"/>. | ence.RFC.3279.xml"/> | |||
| These documents can be used as guides to choose appropriate key sizes | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| for various security scenarios. </t> | ence.RFC.5753.xml"/> | |||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5911.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6268.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6979.xml"/> | ||||
| <t>SHAKE128 with output length of 32 bytes offers 128-bits of collision and preimage resistance. Thus, SHAKE128 OIDs in this specification are RECOMMEN DED with 2048 (112-bit security) or 3072-bit (128-bit security) RSA modulus or c urves with group order of 256-bits (128-bit security). SHAKE256 with 64 bytes ou tput length offers 256-bits of collision and preimage resistance. Thus, the SHAK E256 OIDs in this specification are RECOMMENDED with 4096-bit RSA modulus or hig her or curves with group order of at least 512 bits such as NIST Curve P-521 (25 6-bit security). Note that we recommended 4096-bit RSA because we would need 153 60-bit modulus for 256-bits of security which is impractical for today's technol ogy.</t> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC .8692.xml"/> | |||
| <t>When more than two parties share the same message-authentication key | <!-- housley-lamps-cms-sha3-hash Expired --> | |||
| , | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | |||
| data origin authentication is not provided. Any party that knows the | rence.I-D.housley-lamps-cms-sha3-hash.xml"/> | |||
| message-authentication key can compute a valid MAC, therefore the | ||||
| content could originate from any one of the parties.</t> | ||||
| <!-- <t>Implementations must randomly generate message-authentication k | <reference anchor="shake-nist-oids" target="https://csrc.nist.gov/Projec | |||
| eys | ts/Computer-Security-Objects-Register/Algorithm-Registration"> | |||
| and one-time values, such as the k value when generating a ECDSA | <front> | |||
| signature. In addition, the generation of public/private key pairs | <title>Computer Security Objects Register</title> | |||
| relies on random numbers. The use of inadequate pseudo-random | <author> | |||
| number generators (PRNGs) to generate such cryptographic values can | <organization>National Institute of Standards and Technology (NIST | |||
| result in little or no security. The generation of quality random | )</organization> | |||
| numbers is difficult. <xref target="RFC4086"/> offers important guidance | </author> | |||
| in this area, and <xref target="SP800-90A"/> series provide acceptable | <date month="October" year="2019"/> | |||
| PRNGs.</t> --> | </front> | |||
| </reference> | ||||
| <!--<t>Implementers should be aware that cryptographic algorithms may | <reference anchor="X9.62"> | |||
| become weaker with time. As new cryptanalysis techniques are developed | <front> | |||
| and computing power increases, the work factor or time required to brea | <title>Public Key Cryptography for the Financial Services Industry: | |||
| k | the Elliptic Curve Digital Signature Algorithm (ECDSA)</title> | |||
| a particular cryptographic algorithm may decrease. Therefore, cryptogra | <author> | |||
| phic | <organization>American National Standard for Financial Services (A | |||
| algorithm implementations should be modular allowing new algorithms to | NSI)</organization> | |||
| be readily inserted. That is, implementers should be prepared to | </author> | |||
| regularly update the set of algorithms in their implementations.</t> -- | <date month="November" year="2005"/> | |||
| > | </front> | |||
| <seriesInfo name="ANSI" value="X9.62"/> | ||||
| </reference> | ||||
| </section> | <reference anchor="SP800-78-4" target="https://nvlpubs.nist.gov/nistpubs | |||
| /SpecialPublications/NIST.SP.800-78-4.pdf"> | ||||
| <front> | ||||
| <title>Cryptographic Algorithms and Key Sizes for Personal Identity | ||||
| Verification</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology (NIST | ||||
| )</organization> | ||||
| </author> | ||||
| <date month="May" year="2015"/> | ||||
| </front> | ||||
| <seriesInfo name="NIST Special Publication" value="800-78-4"/> | ||||
| <seriesInfo name="DOI" value="10.6028/NIST.SP.800-78-4"/> | ||||
| </reference> | ||||
| <section title="Acknowledgements" anchor="ack"> | <reference anchor="SP800-107" target="https://nvlpubs.nist.gov/nistpubs/ | |||
| <t>This document is based on Russ Housley's draft | Legacy/SP/nistspecialpublication800-107r1.pdf"> | |||
| <xref target="I-D.housley-lamps-cms-sha3-hash"/>. | <front> | |||
| It replaces SHA3 hash functions by SHAKE128 and SHAKE256 as the LAMPS | <title>Recommendation for Applications Using Approved Hash Algorithm | |||
| WG agreed.</t> | s</title> | |||
| <t>The authors would like to thank Russ Housley for his guidance and | <author> | |||
| very valuable contributions with the ASN.1 module. Valuable | <organization>National Institute of Standards and Technology (NIST | |||
| feedback was also provided by Eric Rescorla. </t> | )</organization> | |||
| </section> | </author> | |||
| </middle> | <date month="August" year="2012"/> | |||
| </front> | ||||
| <seriesInfo name="Draft NIST Special Publication" | ||||
| value="800-107 Revised"/> | ||||
| </reference> | ||||
| <back> | <reference anchor="SEC1" target="http://www.secg.org/sec1-v2.pdf"> | |||
| <references title="Normative References"> | <front> | |||
| &RFC2119; | <title>SEC 1: Elliptic Curve Cryptography</title> | |||
| &RFC3370; | <author> | |||
| &RFC8174; | <organization>Standards for Efficient Cryptography Group</organiza | |||
| &RFC5652; | tion> | |||
| &RFC8017; <!-- RFC8017 is Informational draft but we are keeping it in | </author> | |||
| the Normative References even though idnits complains because we need a normativ | <date month="May" year="2009"/> | |||
| e reference for RSASSA-PSS. RFC4056 does the same thing with RSASS-PSS v2.1 --> | </front> | |||
| &RFC4055; | </reference> | |||
| &RFC5480; | ||||
| <reference anchor="SHA3"> | ||||
| <front> | ||||
| <title>SHA-3 Standard - Permutation-Based Hash and Extendable-Outpu | ||||
| t Functions</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology, U.S | ||||
| . Department of Commerce</organization> | ||||
| </author> | ||||
| <date month="August" year="2015"/> | ||||
| </front> | ||||
| <seriesInfo name="FIPS" value="PUB 202"/> | ||||
| </reference> | ||||
| <reference anchor="SP800-185" target="http://nvlpubs.nist.gov/nistpubs/Spe | ||||
| cialPublications/NIST.SP.800-185.pdf"> | ||||
| <front> | ||||
| <title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and ParallelHa | ||||
| sh. NIST SP 800-185</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology</organi | ||||
| zation> | ||||
| </author> | ||||
| <date month="December" year="2016" /> | ||||
| </front> | ||||
| </reference> | ||||
| <!-- <reference anchor="ASN1-B"><front> | ||||
| <title>Information technology - Abstract Syntax Notation One (ASN.1): S | ||||
| pecification of basic notation</title> | ||||
| <author> | ||||
| <organization>ITU-T</organization> | ||||
| </author> | ||||
| <date year="2015"/> | ||||
| </front> | ||||
| <seriesInfo name="ITU-T" value="Recommendation X.680"/> | ||||
| </reference> --> | ||||
| <!-- <reference anchor="ASN1-E"><front> | ||||
| <title>Information technology - ASN.1 encoding rules: Specification of | ||||
| Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Enc | ||||
| oding Rules (DER)</title> | ||||
| <author> | ||||
| <organization>ITU-T</organization> | ||||
| </author> | ||||
| <date year="2015"/> | ||||
| </front> | ||||
| <seriesInfo name="ITU-T" value="Recommendation X.690"/> | ||||
| </reference> --> | ||||
| <!-- <reference anchor="DSS"><front> | ||||
| <title>Digital Signature Standard, version 4</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology, U.S. Depa | ||||
| rtment of Commerce</organization> | ||||
| </author> | ||||
| <date year="2013"/> | ||||
| </front> | ||||
| <seriesInfo name="NIST" value="FIPS PUB 186-4"/> | ||||
| </reference> --> | ||||
| </references> | ||||
| <references title="Informative References"> | </references> | |||
| &RFC3279; | </references> | |||
| <!-- &RFC4086; --> | <section anchor="asn-app" numbered="true" toc="default"> | |||
| &RFC5753; | <name>ASN.1 Module</name> | |||
| &RFC5911; | <t>This appendix includes the ASN.1 modules for SHAKEs in CMS. | |||
| &RFC6268; | ||||
| &RFC6979; | ||||
| &I-D.ietf-lamps-pkix-shake; | ||||
| <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/refe | ||||
| rence.I-D.draft-housley-lamps-cms-sha3-hash-00.xml"?> | ||||
| <reference anchor="shake-nist-oids" target="https://csrc.nist.gov/Projects | ||||
| /Computer-Security-Objects-Register/Algorithm-Registration"> | ||||
| <front> | ||||
| <title>Computer Security Objects Register</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology</organi | ||||
| zation> | ||||
| </author> | ||||
| <date month="October" year="2017" /> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="X9.62"> | ||||
| <front> | ||||
| <title>X9.62-2005 Public Key Cryptography for the Financial Services I | ||||
| ndustry: The Elliptic Curve Digital Signature Standard (ECDSA)</title> | ||||
| <author> | ||||
| <organization>American National Standard for Financial Services (ANS | ||||
| I)</organization> | ||||
| </author> | ||||
| <date month="November" year="2005" /> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="SP800-78-4" target="https://csrc.nist.gov/csrc/media/pu | ||||
| blications/sp/800-78/4/final/documents/sp800_78-4_revised_draft.pdf"> | ||||
| <front> | ||||
| <title>SP800-78-4: Cryptographic Algorithms and Key Sizes for Personal | ||||
| Identity Verification</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology (NIST)< | ||||
| /organization> | ||||
| </author> | ||||
| <date month="May" year="2014" /> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="SP800-107" target="https://csrc.nist.gov/csrc/media/pub | ||||
| lications/sp/800-107/rev-1/final/documents/draft_revised_sp800-107.pdf"> | ||||
| <front> | ||||
| <title>SP800-107: Recommendation for Applications Using Approved Hash | ||||
| Algorithms</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology (NIST)< | ||||
| /organization> | ||||
| </author> | ||||
| <date month="May" year="2014" /> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="SEC1" target="http://www.secg.org/sec1-v2.pdf"> | ||||
| <front> | ||||
| <title>SEC 1: Elliptic Curve Cryptography</title> | ||||
| <author> | ||||
| <organization>Standards for Efficient Cryptography Group</organizati | ||||
| on> | ||||
| </author> | ||||
| <date month="May" year="2009" /> | ||||
| </front> | ||||
| </reference> | ||||
| <!-- <reference anchor="SMI-PKIX" target="https://www.iana.org/assignments | ||||
| /smi-numbers/smi-numbers.xhtml#smi-numbers-1.3.6.1.5.5.7.6"> | ||||
| <front> | ||||
| <title>SMI Security for PKIX Algorithms</title> | ||||
| <author> | ||||
| <organization>IANA</organization> | ||||
| </author> | ||||
| <date month="March" year="2019" /> | ||||
| </front> | ||||
| </reference> --> | ||||
| <!-- <reference anchor="SP800-90A" target="http://nvlpubs.nist.gov/nistpub | ||||
| s/SpecialPublications/NIST.SP.800-90Ar1.pdf"> | ||||
| <front> | ||||
| <title>Recommendation for Random Number Generation Using Deterministic | ||||
| Random Bit Generators. NIST SP 800-90A</title> | ||||
| <author> | ||||
| <organization>National Institute of Standards and Technology</organi | ||||
| zation> | ||||
| </author> | ||||
| <date month="June" year="2015" /> | ||||
| </front> | ||||
| </reference> --> | ||||
| </references> | ||||
| <section title="ASN.1 Module" anchor="section-a"> | ||||
| <t>This appendix includes the ASN.1 modules for SHAKEs in CMS. | ||||
| This module includes some ASN.1 from other standards for reference.</t> | This module includes some ASN.1 from other standards for reference.</t> | |||
| <t><figure><artwork><![CDATA[ | <sourcecode type="asn.1"><![CDATA[ | |||
| CMSAlgsForSHAKE-2019 { iso(1) member-body(2) us(840) | CMSAlgsForSHAKE-2019 { iso(1) member-body(2) us(840) | |||
| rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) | rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) | |||
| id-mod-cms-shakes-2019(70) } | id-mod-cms-shakes-2019(70) } | |||
| DEFINITIONS EXPLICIT TAGS ::= | ||||
| BEGIN | DEFINITIONS EXPLICIT TAGS ::= | |||
| -- EXPORTS ALL; | BEGIN | |||
| IMPORTS | -- EXPORTS ALL; | |||
| DIGEST-ALGORITHM, MAC-ALGORITHM, SMIME-CAPS | IMPORTS | |||
| FROM AlgorithmInformation-2009 | ||||
| { iso(1) identified-organization(3) dod(6) internet(1) security(5) | ||||
| mechanisms(5) pkix(7) id-mod(0) | ||||
| id-mod-algorithmInformation-02(58) } | ||||
| RSAPublicKey, rsaEncryption, id-ecPublicKey | DIGEST-ALGORITHM, MAC-ALGORITHM, SMIME-CAPS | |||
| FROM PKIXAlgs-2009 { iso(1) identified-organization(3) dod(6) | FROM AlgorithmInformation-2009 | |||
| internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) | { iso(1) identified-organization(3) dod(6) internet(1) security(5) | |||
| id-mod-pkix1-algorithms2008-02(56) } | mechanisms(5) pkix(7) id-mod(0) | |||
| id-mod-algorithmInformation-02(58) } | ||||
| sa-rsassapssWithSHAKE128, sa-rsassapssWithSHAKE256, | RSAPublicKey, rsaEncryption, id-ecPublicKey | |||
| sa-ecdsaWithSHAKE128, sa-ecdsaWithSHAKE256 | FROM PKIXAlgs-2009 { iso(1) identified-organization(3) dod(6) | |||
| FROM PKIXAlgsForSHAKE-2019 { | internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) | |||
| iso(1) identified-organization(3) dod(6) | id-mod-pkix1-algorithms2008-02(56) } | |||
| internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) | ||||
| id-mod-pkix1-shakes-2019(94) } ; | ||||
| -- Message Digest Algorithms (mda-) | sa-rsassapssWithSHAKE128, sa-rsassapssWithSHAKE256, | |||
| -- used in SignedData, SignerInfo, DigestedData, | sa-ecdsaWithSHAKE128, sa-ecdsaWithSHAKE256 | |||
| -- and the AuthenticatedData digestAlgorithm | FROM PKIXAlgsForSHAKE-2019 { | |||
| -- fields in CMS | iso(1) identified-organization(3) dod(6) | |||
| -- | internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) | |||
| -- This expands MessageAuthAlgs from [RFC5652] and | id-mod-pkix1-shakes-2019(94) } ; | |||
| -- MessageDigestAlgs in [RFC5753] | ||||
| -- | ||||
| -- MessageDigestAlgs DIGEST-ALGORITHM ::= { | ||||
| -- mda-shake128 | | ||||
| -- mda-shake256, | ||||
| -- ... | ||||
| -- } | ||||
| -- | -- Message digest Algorithms (mda-) | |||
| -- One-Way Hash Functions | -- used in SignedData, SignerInfo, DigestedData, | |||
| -- SHAKE128 | -- and the AuthenticatedData digestAlgorithm | |||
| mda-shake128 DIGEST-ALGORITHM ::= { | -- fields in CMS | |||
| IDENTIFIER id-shake128 -- with output length 32 bytes. | -- | |||
| } | -- This expands MessageAuthAlgs from [RFC5652] and | |||
| id-shake128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) | -- MessageDigestAlgs in [RFC5753] | |||
| us(840) organization(1) gov(101) | -- | |||
| csor(3) nistAlgorithm(4) | -- MessageDigestAlgs DIGEST-ALGORITHM ::= { | |||
| hashAlgs(2) 11 } | -- mda-shake128 | | |||
| -- mda-shake256, | ||||
| -- ... | ||||
| -- } | ||||
| -- SHAKE256 | -- | |||
| mda-shake256 DIGEST-ALGORITHM ::= { | -- One-Way Hash Functions | |||
| IDENTIFIER id-shake256 -- with output length 64 bytes. | -- SHAKE128 | |||
| } | mda-shake128 DIGEST-ALGORITHM ::= { | |||
| id-shake256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) | IDENTIFIER id-shake128 -- with output length 32 bytes. | |||
| us(840) organization(1) gov(101) | } | |||
| csor(3) nistAlgorithm(4) | id-shake128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) | |||
| hashAlgs(2) 12 } | us(840) organization(1) gov(101) | |||
| csor(3) nistAlgorithm(4) | ||||
| hashAlgs(2) 11 } | ||||
| -- | -- SHAKE256 | |||
| -- Public key algorithm identifiers located in the | mda-shake256 DIGEST-ALGORITHM ::= { | |||
| -- OriginatorPublicKey's algorithm attribute in CMS. | IDENTIFIER id-shake256 -- with output length 64 bytes. | |||
| -- And Signature identifiers used in SignerInfo | } | |||
| -- signatureAlgorithm field of SignedData content | id-shake256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) | |||
| -- type and countersignature attribute in CMS. | us(840) organization(1) gov(101) | |||
| -- | csor(3) nistAlgorithm(4) | |||
| -- From RFC5280, for reference. | hashAlgs(2) 12 } | |||
| -- rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } | ||||
| -- When the rsaEncryption algorithm identifier is used | ||||
| -- for a public key, the AlgorithmIdentifier parameters | ||||
| -- field MUST contain NULL. | ||||
| -- | ||||
| id-RSASSA-PSS-SHAKE128 OBJECT IDENTIFIER ::= { iso(1) | ||||
| identified-organization(3) dod(6) internet(1) | ||||
| security(5) mechanisms(5) pkix(7) algorithms(6) 30 } | ||||
| id-RSASSA-PSS-SHAKE256 OBJECT IDENTIFIER ::= { iso(1) | -- | |||
| identified-organization(3) dod(6) internet(1) | -- Public key algorithm identifiers located in the | |||
| security(5) mechanisms(5) pkix(7) algorithms(6) 31 } | -- OriginatorPublicKey's algorithm attribute in CMS. | |||
| -- And Signature identifiers used in SignerInfo | ||||
| -- signatureAlgorithm field of signed-data content | ||||
| -- type and countersignature attribute in CMS. | ||||
| -- | ||||
| -- From RFC 5280, for reference: | ||||
| -- rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } | ||||
| -- When the rsaEncryption algorithm identifier is used | ||||
| -- for a public key, the AlgorithmIdentifier parameters | ||||
| -- field MUST contain NULL. | ||||
| -- | ||||
| id-RSASSA-PSS-SHAKE128 OBJECT IDENTIFIER ::= { iso(1) | ||||
| identified-organization(3) dod(6) internet(1) | ||||
| security(5) mechanisms(5) pkix(7) algorithms(6) 30 } | ||||
| -- When the id-RSASSA-PSS-* algorithm identifiers are used | id-RSASSA-PSS-SHAKE256 OBJECT IDENTIFIER ::= { iso(1) | |||
| -- for a public key or signature in CMS, the AlgorithmIdentifier | identified-organization(3) dod(6) internet(1) | |||
| -- parameters field MUST be absent. The message digest algorithm | security(5) mechanisms(5) pkix(7) algorithms(6) 31 } | |||
| -- used in RSASSA-PSS MUST be SHAKE128 or SHAKE256 with a 32 or | ||||
| -- 64 byte outout length, respectively. The mask generation | ||||
| -- function MUST be SHAKE128 or SHAKE256 with an output length | ||||
| -- of (8*ceil((n-1)/8) - 264) or (8*ceil((n-1)/8) - 520) bits, | ||||
| -- respectively, where n is the RSA modulus in bits. | ||||
| -- The RSASSA-PSS saltLength MUST be 32 or 64 bytes, respectively. | ||||
| -- The trailerField MUST be 1, which represents the trailer | ||||
| -- field with hexadecimal value 0xBC. Regardless of | ||||
| -- id-RSASSA-PSS-* or rsaEncryption being used as the | ||||
| -- AlgorithmIdentifier of the OriginatorPublicKey, the RSA | ||||
| -- public key MUST be encoded using the RSAPublicKey type. | ||||
| -- From RFC4055, for reference. | -- When the id-RSASSA-PSS-* algorithm identifiers are used | |||
| -- RSAPublicKey ::= SEQUENCE { | -- for a public key or signature in CMS, the AlgorithmIdentifier | |||
| -- modulus INTEGER, -- -- n | -- parameters field MUST be absent. The message digest algorithm | |||
| -- publicExponent INTEGER } -- -- e | -- used in RSASSA-PSS MUST be SHAKE128 or SHAKE256 with a 32- or | |||
| -- 64-byte output length, respectively. The mask generation | ||||
| -- function MUST be SHAKE128 or SHAKE256 with an output length | ||||
| -- of (8*ceil((n-1)/8) - 264) or (8*ceil((n-1)/8) - 520) bits, | ||||
| -- respectively, where n is the RSA modulus in bits. | ||||
| -- The RSASSA-PSS saltLength MUST be 32 or 64 bytes, respectively. | ||||
| -- The trailerField MUST be 1, which represents the trailer | ||||
| -- field with hexadecimal value 0xBC. Regardless of | ||||
| -- id-RSASSA-PSS-* or rsaEncryption being used as the | ||||
| -- AlgorithmIdentifier of the OriginatorPublicKey, the RSA | ||||
| -- public key MUST be encoded using the RSAPublicKey type. | ||||
| id-ecdsa-with-shake128 OBJECT IDENTIFIER ::= { iso(1) | -- From RFC 4055, for reference: | |||
| identified-organization(3) dod(6) internet(1) | -- RSAPublicKey ::= SEQUENCE { | |||
| security(5) mechanisms(5) pkix(7) algorithms(6) 32 } | -- modulus INTEGER, -- -- n | |||
| -- publicExponent INTEGER } -- -- e | ||||
| id-ecdsa-with-shake256 OBJECT IDENTIFIER ::= { iso(1) | id-ecdsa-with-shake128 OBJECT IDENTIFIER ::= { iso(1) | |||
| identified-organization(3) dod(6) internet(1) | identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) algorithms(6) 33 } | security(5) mechanisms(5) pkix(7) algorithms(6) 32 } | |||
| -- When the id-ecdsa-with-shake* algorithm identifiers are | id-ecdsa-with-shake256 OBJECT IDENTIFIER ::= { iso(1) | |||
| -- used in CMS, the AlgorithmIdentifier parameters field | identified-organization(3) dod(6) internet(1) | |||
| -- MUST be absent and the signature algorithm should be | security(5) mechanisms(5) pkix(7) algorithms(6) 33 } | |||
| -- deterministic ECDSA [RFC6979]. The message digest MUST | ||||
| -- be SHAKE128 or SHAKE256 with a 32 or 64 byte outout | ||||
| -- length, respectively. In both cases, the ECDSA public key, | ||||
| -- MUST be encoded using the id-ecPublicKey type. | ||||
| -- From RFC5480, for reference. | -- When the id-ecdsa-with-shake* algorithm identifiers are | |||
| -- id-ecPublicKey OBJECT IDENTIFIER ::= { | -- used in CMS, the AlgorithmIdentifier parameters field | |||
| -- iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 } | -- MUST be absent and the signature algorithm should be | |||
| -- The id-ecPublicKey parameters must be absent or present | -- deterministic ECDSA [RFC6979]. The message digest MUST | |||
| -- and are defined as | -- be SHAKE128 or SHAKE256 with a 32- or 64-byte output | |||
| -- ECParameters ::= CHOICE { | -- length, respectively. In both cases, the ECDSA public key, | |||
| -- namedCurve OBJECT IDENTIFIER | -- MUST be encoded using the id-ecPublicKey type. | |||
| -- -- -- implicitCurve NULL | ||||
| -- -- -- specifiedCurve SpecifiedECDomain | ||||
| -- } | ||||
| -- This expands SignatureAlgorithms from [RFC5912] | -- From RFC 5480, for reference: | |||
| -- | -- id-ecPublicKey OBJECT IDENTIFIER ::= { | |||
| -- SignatureAlgs SIGNATURE-ALGORITHM ::= { | -- iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 } | |||
| -- sa-rsassapssWithSHAKE128 | | -- The id-ecPublicKey parameters must be absent or present | |||
| -- sa-rsassapssWithSHAKE256 | | -- and are defined as: | |||
| -- sa-ecdsaWithSHAKE128 | | -- ECParameters ::= CHOICE { | |||
| -- sa-ecdsaWithSHAKE256, | -- namedCurve OBJECT IDENTIFIER | |||
| -- ... | -- -- -- implicitCurve NULL | |||
| -- } | -- -- -- specifiedCurve SpecifiedECDomain | |||
| -- } | ||||
| - } | -- This expands SignatureAlgs from [RFC5912] | |||
| -- This expands MessageAuthAlgs from [RFC5652] and [RFC6268] | -- | |||
| -- | -- SignatureAlgs SIGNATURE-ALGORITHM ::= { | |||
| -- Message Authentication (maca-) Algorithms | -- sa-rsassapssWithSHAKE128 | | |||
| -- used in AuthenticatedData macAlgorithm in CMS | -- sa-rsassapssWithSHAKE256 | | |||
| -- | -- sa-ecdsaWithSHAKE128 | | |||
| MessageAuthAlgs MAC-ALGORITHM ::= { | -- sa-ecdsaWithSHAKE256, | |||
| maca-KMACwithSHAKE128 | | -- ... | |||
| maca-KMACwithSHAKE256, | -- } | |||
| ... | ||||
| } | ||||
| -- This expands SMimeCaps from [RFC5911] | -- This expands MessageAuthAlgs from [RFC5652] and [RFC6268] | |||
| -- | -- | |||
| SMimeCaps SMIME-CAPS ::= { | -- Message Authentication (maca-) Algorithms | |||
| -- sa-rsassapssWithSHAKE128.&smimeCaps | | -- used in AuthenticatedData macAlgorithm in CMS | |||
| -- sa-rsassapssWithSHAKE256.&smimeCaps | | -- | |||
| -- sa-ecdsaWithSHAKE128.&smimeCaps | | MessageAuthAlgs MAC-ALGORITHM ::= { | |||
| -- sa-ecdsaWithSHAKE256.&smimeCaps, | maca-KMACwithSHAKE128 | | |||
| maca-KMACwithSHAKE128.&smimeCaps | | maca-KMACwithSHAKE256, | |||
| maca-KMACwithSHAKE256.&smimeCaps, | ... | |||
| ... | } | |||
| } | ||||
| -- | -- This expands SMimeCaps from [RFC5911] | |||
| -- KMAC with SHAKE128 | -- | |||
| maca-KMACwithSHAKE128 MAC-ALGORITHM ::= { | SMimeCaps SMIME-CAPS ::= { | |||
| IDENTIFIER id-KMACWithSHAKE128 | -- sa-rsassapssWithSHAKE128.&smimeCaps | | |||
| PARAMS TYPE KMACwithSHAKE128-params ARE optional | -- sa-rsassapssWithSHAKE256.&smimeCaps | | |||
| -- If KMACwithSHAKE128-params parameters are absent | -- sa-ecdsaWithSHAKE128.&smimeCaps | | |||
| -- the SHAKE128 output length used in KMAC is 256 bits | -- sa-ecdsaWithSHAKE256.&smimeCaps, | |||
| -- and the customization string is an empty string. | maca-KMACwithSHAKE128.&smimeCaps | | |||
| IS-KEYED-MAC TRUE | maca-KMACwithSHAKE256.&smimeCaps, | |||
| SMIME-CAPS {IDENTIFIED BY id-KMACWithSHAKE128} | ... | |||
| } | } | |||
| id-KMACWithSHAKE128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | ||||
| country(16) us(840) organization(1) | ||||
| gov(101) csor(3) nistAlgorithm(4) | ||||
| hashAlgs(2) 19 } | ||||
| KMACwithSHAKE128-params ::= SEQUENCE { | ||||
| kMACOutputLength INTEGER DEFAULT 256, -- Output length in bits | ||||
| customizationString OCTET STRING DEFAULT ''H | ||||
| } | ||||
| -- KMAC with SHAKE256 | -- | |||
| maca-KMACwithSHAKE256 MAC-ALGORITHM ::= { | -- KMAC with SHAKE128 | |||
| IDENTIFIER id-KMACWithSHAKE256 | maca-KMACwithSHAKE128 MAC-ALGORITHM ::= { | |||
| PARAMS TYPE KMACwithSHAKE256-params ARE optional | IDENTIFIER id-KMACWithSHAKE128 | |||
| -- If KMACwithSHAKE256-params parameters are absent | PARAMS TYPE KMACwithSHAKE128-params ARE optional | |||
| -- the SHAKE256 output length used in KMAC is 512 bits | -- If KMACwithSHAKE128-params parameters are absent, | |||
| -- and the customization string is an empty string. | -- the SHAKE128 output length used in KMAC is 256 bits | |||
| IS-KEYED-MAC TRUE | -- and the customization string is an empty string. | |||
| SMIME-CAPS {IDENTIFIED BY id-KMACWithSHAKE256} | IS-KEYED-MAC TRUE | |||
| } | SMIME-CAPS {IDENTIFIED BY id-KMACWithSHAKE128} | |||
| id-KMACWithSHAKE256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | } | |||
| country(16) us(840) organization(1) | id-KMACWithSHAKE128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | |||
| gov(101) csor(3) nistAlgorithm(4) | country(16) us(840) organization(1) | |||
| hashAlgs(2) 20 } | gov(101) csor(3) nistAlgorithm(4) | |||
| KMACwithSHAKE256-params ::= SEQUENCE { | hashAlgs(2) 19 } | |||
| kMACOutputLength INTEGER DEFAULT 512, -- Output length in bits | KMACwithSHAKE128-params ::= SEQUENCE { | |||
| customizationString OCTET STRING DEFAULT ''H | kMACOutputLength INTEGER DEFAULT 256, -- Output length in bits | |||
| } | customizationString OCTET STRING DEFAULT ''H | |||
| } | ||||
| END | -- KMAC with SHAKE256 | |||
| ]]></artwork></figure> | maca-KMACwithSHAKE256 MAC-ALGORITHM ::= { | |||
| </t> | IDENTIFIER id-KMACWithSHAKE256 | |||
| </section> | PARAMS TYPE KMACwithSHAKE256-params ARE optional | |||
| -- If KMACwithSHAKE256-params parameters are absent, | ||||
| -- the SHAKE256 output length used in KMAC is 512 bits | ||||
| -- and the customization string is an empty string. | ||||
| IS-KEYED-MAC TRUE | ||||
| SMIME-CAPS {IDENTIFIED BY id-KMACWithSHAKE256} | ||||
| } | ||||
| id-KMACWithSHAKE256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | ||||
| country(16) us(840) organization(1) | ||||
| gov(101) csor(3) nistAlgorithm(4) | ||||
| hashAlgs(2) 20 } | ||||
| KMACwithSHAKE256-params ::= SEQUENCE { | ||||
| kMACOutputLength INTEGER DEFAULT 512, -- Output length in bits | ||||
| customizationString OCTET STRING DEFAULT ''H | ||||
| } | ||||
| </back> | END ]]></sourcecode> | |||
| </section> | ||||
| <section anchor="ack" numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <t>This document is based on <contact fullname="Russ Housley"/>'s document | ||||
| <xref target="I-D.housley-lamps-cms-sha3-hash" format="default"/>. | ||||
| It replaces SHA3 hash functions by SHAKE128 and SHAKE256, as the LAMPS | ||||
| WG agreed.</t> | ||||
| <t>The authors would like to thank <contact fullname="Russ Housley"/> for | ||||
| his guidance and | ||||
| very valuable contributions with the ASN.1 module. Valuable | ||||
| feedback was also provided by Eric Rescorla. </t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 98 change blocks. | ||||
| 980 lines changed or deleted | 668 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||