| rfc8755xml2.original.xml | rfc8755.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| <!ENTITY rfc2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .2119.xml"> | ||||
| <!ENTITY rfc2631 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .2631.xml"> | ||||
| <!ENTITY rfc3370 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3370.xml"> | ||||
| <!ENTITY rfc3560 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3560.xml"> | ||||
| <!ENTITY rfc3565 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3565.xml"> | ||||
| <!ENTITY rfc4055 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4055.xml"> | ||||
| <!ENTITY rfc4056 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4056.xml"> | ||||
| <!ENTITY rfc4086 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4086.xml"> | ||||
| <!ENTITY rfc5083 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5083.xml"> | ||||
| <!ENTITY rfc5084 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5084.xml"> | ||||
| <!ENTITY rfc5480 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5480.xml"> | ||||
| <!ENTITY rfc5649 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5649.xml"> | ||||
| <!ENTITY rfc5652 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5652.xml"> | ||||
| <!ENTITY rfc5753 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5753.xml"> | ||||
| <!ENTITY rfc5754 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5754.xml"> | ||||
| <!ENTITY rfc6318 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6318.xml"> | ||||
| <!ENTITY rfc8017 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8017.xml"> | ||||
| <!ENTITY rfc8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8174.xml"> | ||||
| <!ENTITY rfc8551 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8551.xml"> | ||||
| <!ENTITY rfc8603 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8603.xml"> | ||||
| ]> | ||||
| <!-- Extra statement used by XSLT processors to control the output style. --> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <!-- Information about the document. --> | ||||
| <rfc category="info" ipr="trust200902" docName="draft-jenkins-cnsa-smime-profile | ||||
| -03"> | ||||
| <!-- Processing Instructions- PIs (for a complete list and description, | ||||
| see file http://xml.resource.org/authoring/README.html and below... -- | ||||
| > | ||||
| <?rfc strict="yes" ?> | ||||
| <?rfc comments="no" ?> | ||||
| <?rfc inline="no" ?> | ||||
| <?rfc editing="no" ?> | ||||
| <!-- Table of Contents (ToC) options. --> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc tocompact="yes"?> | ||||
| <?rfc tocdepth="2"?> | ||||
| <!-- References options. --> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <!-- Vertical spacing options. --> | ||||
| <?rfc compact="yes" ?> | ||||
| <?rfc subcompact="no" ?> | ||||
| <!-- end of list of popular I-D processing instructions --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" | |||
| ipr="trust200902" docName="draft-jenkins-cnsa-smime-profile-03" | ||||
| obsoletes="" updates="" submissionType="independent" xml:lang="en" | ||||
| tocInclude="true" tocDepth="2" symRefs="true" sortRefs="true" version="3" | ||||
| number="8755"> | ||||
| <!-- xml2rfc v2v3 conversion 2.38.1 --> | ||||
| <!-- ***** FRONT MATTER ***** --> | <!-- ***** FRONT MATTER ***** --> | |||
| <front> | <front> | |||
| <title abbrev="CNSA Suite for S/MIME">Using Commercial National Security Alg orithm Suite Algorithms in Secure/Multipurpose Internet Mail Extensions</title> | <title abbrev="CNSA Suite for S/MIME">Using Commercial National Security Alg orithm Suite Algorithms in Secure/Multipurpose Internet Mail Extensions</title> | |||
| <seriesInfo name="RFC" value="8755"/> | ||||
| <author fullname="Michael Jenkins" initials="M." surname="Jenkins"> | <author fullname="Michael Jenkins" initials="M." surname="Jenkins"> | |||
| <organization abbrev="NSA">National Security Agency</organization> | <organization abbrev="NSA">National Security Agency</organization> | |||
| <address><email>mjjenki@nsa.gov</email></address> | <address> | |||
| <email>mjjenki@nsa.gov</email> | ||||
| </address> | ||||
| </author> | </author> | |||
| <date month="March" year="2020"/> | ||||
| <date year="2019"/> <!-- Current month and day will be filled in. --> | ||||
| <!-- Meta-data Declarations --> | ||||
| <area>Security</area> | <area>Security</area> | |||
| <workgroup>Internet Engineering Task Force</workgroup> | <workgroup>Internet Engineering Task Force</workgroup> | |||
| <keyword>NSA</keyword> | ||||
| <keyword>CNSA</keyword> | ||||
| <keyword>NSS</keyword> | ||||
| <keyword>smime</keyword> | ||||
| <abstract> | <abstract> | |||
| <t>The United States Government has published the NSA Commercial Nationa | <t>The United States Government has published the National Security | |||
| l Security Algorithm (CNSA) Suite, which defines cryptographic algorithm policy | Agency (NSA) Commercial National Security Algorithm (CNSA) Suite, which de | |||
| for national security applications. This document specifies the conventions for | fines cryptographic algorithm policy for national security applications. This do | |||
| using the United States National Security Agency's CNSA Suite algorithms in Secu | cument specifies the conventions for using the United States National Security A | |||
| re/Multipurpose Internet Mail Extensions (S/MIME) as specified in RFC 8551. It a | gency's CNSA Suite algorithms in Secure/Multipurpose Internet Mail Extensions (S | |||
| pplies to the capabilities, configuration, and operation of all components of US | /MIME) as specified in RFC 8551. It applies to the capabilities, configuration, | |||
| National Security Systems that employ S/MIME messaging. US National Security Sy | and operation of all components of US National Security Systems that employ S/MI | |||
| stems are described in NIST Special Publication 800-59. It is also appropriate f | ME messaging. US National Security Systems are described in NIST Special Publica | |||
| or all other US Government systems that process high-value information. It is ma | tion 800-59. It is also appropriate for all other US Government systems that pro | |||
| de publicly available for use by developers and operators of these and any other | cess high-value information. It is made publicly available for use by developers | |||
| system deployments.</t> | and operators of these and any other system deployments.</t> | |||
| </abstract> | </abstract> | |||
| </front> | ||||
| </front> | <!-- ***** END FRONT MATTER ***** --> | |||
| <!-- ***** END FRONT MATTER ***** --> | ||||
| <!-- ***** DOCUMENT BODY ***** --> | <!-- ***** DOCUMENT BODY ***** --> | |||
| <middle> | <middle> | |||
| <section anchor="intro" numbered="true" toc="default"> | ||||
| <section anchor="intro" title="Introduction"> | <name>Introduction</name> | |||
| <t>This document specifies the conventions for using the United States Nat | ||||
| <t>This document specifies the conventions for using the United States National | ional Security Agency's Commercial National Security Algorithm (CNSA) Suite algo | |||
| Security Agency's Commercial National Security Algorithm (CNSA) Suite algorithms | rithms <xref target="CNSA" format="default"/> in Secure/Multipurpose Internet Ma | |||
| <xref target="CNSA" /> in Secure/Multipurpose Internet Mail Extensions (S/MIME) | il Extensions (S/MIME) <xref target="RFC8551" format="default"/>. It applies to | |||
| <xref target="RFC8551" />. It applies to the capabilities, configuration, and o | the capabilities, configuration, and operation of all components of US National | |||
| peration of all components of US National Security Systems that employ S/MIME me | Security Systems that employ S/MIME messaging. US National Security Systems are | |||
| ssaging. US National Security Systems are described in NIST Special Publication | described in NIST Special Publication 800-59 <xref target="SP80059" format="defa | |||
| 800-59 <xref target="SP80059" />. It is also appropriate for all other US Govern | ult"/>. It is also appropriate for all other US Government systems that process | |||
| ment systems that process high-value information. It is made publicly available | high-value information. It is made publicly available for use by developers and | |||
| for use by developers and operators of these and any other system deployments. | operators of these and any other system deployments. | |||
| </t> | ||||
| <t>S/MIME makes use of the Cryptographic Message Syntax (CMS) <xref target="RFC5 | ||||
| 652" /> <xref target="RFC5083" />. In particular, the signed-data, enveloped-dat | ||||
| a, and authenticated-enveloped-data content types are used. This document only a | ||||
| ddresses CNSA Suite compliance for S/MIME. Other applications of CMS are outside | ||||
| the scope of this document. | ||||
| </t> | </t> | |||
| <t>S/MIME makes use of the Cryptographic Message Syntax (CMS) <xref target | ||||
| <t>This document does not define any new cryptographic algorithm suite; instead, | ="RFC5652" format="default"/> <xref target="RFC5083" format="default"/>. In part | |||
| it defines a CNSA compliant profile of S/MIME. Since many of the CNSA Suite alg | icular, the signed-data, enveloped-data, and authenticated-enveloped-data conten | |||
| orithms enjoy uses in other environments as well, the majority of the convention | t types are used. This document only addresses CNSA Suite compliance for S/MIME. | |||
| s needed for these algorithms are already specified in other documents. This doc | Other applications of CMS are outside the scope of this document. | |||
| ument references the source of these conventions, with some relevant details rep | ||||
| eated to aid developers that choose to support the CNSA Suite. Where details hav | ||||
| e been repeated, the cited documents are authoritative. | ||||
| </t> | </t> | |||
| <t>This document does not define any new cryptographic algorithm suites; i | ||||
| </section> <!-- intro --> | nstead, it defines a CNSA-compliant profile of S/MIME. Since many of the CNSA Su | |||
| ite algorithms enjoy uses in other environments as well, the majority of the con | ||||
| <section anchor="cnsa" title="The Commercial National Security Algorithm Suite"> | ventions needed for these algorithms are already specified in other documents. T | |||
| his document references the source of these conventions, with some relevant deta | ||||
| <t>The National Security Agency (NSA) profiles commercial cryptographic algorith | ils repeated to aid developers that choose to support the CNSA Suite. Where deta | |||
| ms and protocols as part of its mission to support secure, interoperable communi | ils have been repeated, the cited documents are authoritative. | |||
| cations for US Government National Security Systems. To this end, it publishes g | ||||
| uidance both to assist with the US Government transition to new algorithms, and | ||||
| to provide vendors - and the Internet community in general - with information co | ||||
| ncerning their proper use and configuration. | ||||
| </t> | </t> | |||
| <t>Recently, cryptographic transition plans have become overshadowed by the pros | <section anchor="terminology" numbered="true" toc="default"> | |||
| pect of the development of a cryptographically-relevant quantum computer. NSA ha | <name>Terminology</name> | |||
| s established the Commercial National Security Algorithm (CNSA) Suite to provide | <t> | |||
| vendors and IT users near-term flexibility in meeting their cybersecurity inter | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| operability requirements. The purpose behind this flexibility is to avoid vendor | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| s and customers making two major transitions in a relatively short timeframe, as | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| we anticipate a need to shift to quantum-resistant cryptography in the near fut | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| ure. | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| </t> | 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> | ||||
| <!-- intro --> | ||||
| <t>NSA is authoring a set of RFCs, including this one, to provide updated guidan | <section anchor="cnsa" numbered="true" toc="default"> | |||
| ce concerning the use of certain commonly available commercial algorithms in IET | <name>The Commercial National Security Algorithm Suite</name> | |||
| F protocols. These RFCs can be used in conjunction with other RFCs and cryptogra | <t>The National Security Agency (NSA) profiles commercial cryptographic al | |||
| phic guidance (e.g., NIST Special Publications) to properly protect Internet tra | gorithms and protocols as part of its mission to support secure, interoperable c | |||
| ffic and data-at-rest for US Government National Security Systems.. | ommunications for US Government National Security Systems. To this end, it publi | |||
| shes guidance both to assist with the US Government transition to new algorithms | ||||
| and to provide vendors -- and the Internet community in general -- with informa | ||||
| tion concerning their proper use and configuration. | ||||
| </t> | </t> | |||
| <t>Recently, cryptographic transition plans have become overshadowed by | ||||
| </section> <!-- cnsa --> | the prospect of the development of a cryptographically relevant quantum | |||
| computer. The NSA has established the Commercial National Security Algorit | ||||
| <section anchor="terminology" title="Terminology"> | hm | |||
| (CNSA) Suite to provide vendors and IT users near-term flexibility in | ||||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", | meeting their cybersecurity interoperability requirements. The purpose | |||
| "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this d | behind this flexibility is to avoid having vendors and customers make two | |||
| ocument are to be interpreted as described in BCP 14 <xref target="RFC2119" /> | major transitions in a relatively short timeframe, as we anticipate a need to sh | |||
| <xref target="RFC8174" /> when, and only when, they appear in all capitals, as s | ift to quantum-resistant cryptography in the near future. | |||
| hown here. | ||||
| </t> | </t> | |||
| <t>The NSA is authoring a set of RFCs, including this one, to provide upda | ||||
| </section> <!-- terminology --> | ted guidance concerning the use of certain commonly available commercial algorit | |||
| hms in IETF protocols. These RFCs can be used in conjunction with other RFCs and | ||||
| <section anchor="reqts" title="Requirements and Assumptions"> | cryptographic guidance (e.g., NIST Special Publications) to properly protect In | |||
| ternet traffic and data-at-rest for US Government National Security Systems. | ||||
| <t>CMS values are generated using ASN.1 <xref target="X208" />, the Basic Encodi | ||||
| ng Rules (BER) <xref target="X209" />, and the Distinguished Encoding Rules (DER | ||||
| ) <xref target="X509" />. | ||||
| </t> | </t> | |||
| </section> | ||||
| <!-- cnsa --> | ||||
| <t>The elliptic curve used in the CNSA Suite is specified in <xref target="FIPS1 | <section anchor="reqts" numbered="true" toc="default"> | |||
| 86" />, and appears in the literature under two different names. For the sake of | <name>Requirements and Assumptions</name> | |||
| clarity, we list both names below: | <t>CMS values are generated using ASN.1 <xref target="X208" format="defaul | |||
| t"/>, the Basic Encoding Rules (BER) <xref target="X209" format="default"/>, and | ||||
| <figure><artwork> | the Distinguished Encoding Rules (DER) <xref target="X509" format="default"/>. | |||
| Curve NIST Name SECG Name OID [FIPS186] | ||||
| --------------------------------------------------------- | ||||
| nistp384 P-384 secp384r1 1.3.132.0.34 | ||||
| </artwork></figure> | ||||
| </t> | </t> | |||
| <t>The elliptic curve used in the CNSA Suite is specified in <xref target= "FIPS186" format="default"/> and appears in the literature under two different n ames. For the sake of clarity, we list both names below: | ||||
| <t>For CNSA Suite applications, public key certificates used to verify S/MIME si | </t> | |||
| gnatures MUST be compliant with the CNSA Suite Certificate and Certificate Revoc | <table anchor="curve" align="left"> | |||
| ation List (CRL) Profile specified in <xref target="RFC8603" />. | <thead> | |||
| <tr> | ||||
| <th align="left">Curve</th> | ||||
| <th align="left">NIST Name</th> | ||||
| <th align="left">SECG Name</th> | ||||
| <th align="left">OID [FIPS186]</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">nistp384</td> | ||||
| <td align="left">P-384</td> | ||||
| <td align="left">secp384r1</td> | ||||
| <td align="left">1.3.132.0.34</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>For CNSA Suite applications, public key certificates used to verify S/M | ||||
| IME signatures <bcp14>MUST</bcp14> be compliant with the CNSA Suite Certificate | ||||
| and Certificate Revocation List (CRL) profile specified in <xref target="RFC8603 | ||||
| " format="default"/>. | ||||
| </t> | </t> | |||
| <t>Within the CMS signed-data content type, signature algorithm identifier | ||||
| <t>Within the CMS signed-data content type, signature algorithm identifiers are | s are located in the signatureAlgorithm field of SignerInfo structures contained | |||
| located in the signatureAlgorithm field of SignerInfo structures contained withi | within the SignedData. In addition, signature algorithm identifiers are located | |||
| n the SignedData. In addition, signature algorithm identifiers are located in th | in the SignerInfo signatureAlgorithm field of countersignature attributes. Spec | |||
| e SignerInfo signatureAlgorithm field of countersignature attributes. Specific r | ific requirements for digital signatures are given in <xref target="digital-sign | |||
| equirements for digital signatures are given in <xref target="digital-signature" | ature" format="default"/>; compliant implementations <bcp14>MUST</bcp14> conside | |||
| />; compliant implementations MUST consider signatures not meeting these requir | r signatures not meeting these requirements as invalid. | |||
| ements as invalid. | ||||
| </t> | </t> | |||
| <t>Implementations based on Elliptic Curve Cryptography (ECC) also require | ||||
| <t>Elliptic Curve Cryptography (ECC) based implementations also require specific | specification of schemes for key derivation and key wrap. Requirements for thes | |||
| ation of schemes for key derivation and key wrap. Requirements for these schemes | e schemes are in Sections <xref target="kdf" format="counter"/> and <xref target | |||
| are in sections <xref target="kdf" /> and <xref target="keywrap" /> repectively | ="keywrap" format="counter"/>, respectively. | |||
| . | ||||
| </t> | </t> | |||
| <t>RSA key pairs (public, private) are identified by the modulus size expr | ||||
| <t>RSA key pairs (public, private) are identified by the modulus size expressed | essed in bits; RSA-3072 and RSA-4096 are computed using moduli of 3072 bits and | |||
| in bits; RSA-3072 and RSA-4096 are computed using moduli of 3072 bits and 4096 b | 4096 bits, respectively. | |||
| its, respectively. | ||||
| </t> | </t> | |||
| <t>RSA signature key pairs used in CNSA Suite-compliant implementations | ||||
| <t>RSA signature key pairs used in CNSA Suite compliant implementations are eith | are either RSA-3072 or RSA-4096. The RSA exponent e <bcp14>MUST</bcp14> | |||
| er RSA-3072 or RSA-4096. The RSA exponent e MUST satisfy 2^16<e<2^256 and | satisfy 2<sup>16</sup> < e < 2<sup>256</sup> and be odd per <xref ta | |||
| be odd per <xref target="FIPS186" />. | rget="FIPS186" format="default"/>. | |||
| </t> | </t> | |||
| <t>It is recognized that, while the vast majority of RSA signatures are cu | ||||
| <t>It is recognized that, while the vast majority of RSA signatures are currentl | rrently made using the RSASSA-PKCS1-v1_5 algorithm, the preferred RSA signature | |||
| y made using the RSASSA-PKCS1-v1_5 algorithm, the preferred RSA signature scheme | scheme for new applications is RSASSA-PSS. CNSA Suite-compliant X.509 certifica | |||
| for new applications is RSASSA-PSS. CNSA Suite compliant X.509 certificates wi | tes will be issued in accordance with <xref target="RFC8603" format="default"/>, | |||
| ll be issued in accordance with <xref target="RFC8603" />, and while those certi | and while those certificates must be signed and validated using RSASSA-PKCS1-v1 | |||
| ficates must be signed and validated using RSASSA-PKCS1-v1_5, the subject's RSA | _5, the subject's RSA key pair can be used to generate and validate signatures a | |||
| key pair can be used to generate and validate signatures appropriate for either | ppropriate for either signing scheme. Where use of RSASSA-PSS is indicated in t | |||
| signing scheme. Where use of RSASSA-PSS is indicated in this document, the para | his document, the parameters in <xref target="rsa-pss" format="default"/> apply. | |||
| meters in <xref target="rsa-pss" /> apply. | ||||
| </t> | </t> | |||
| <t>This document assumes that the required trust anchors have been securel | ||||
| <t>This document assumes that required trust anchors have been securely provisio | y provisioned to the client. | |||
| ned to the client. | ||||
| </t> | </t> | |||
| <t>All implementations use SHA-384 for hashing and either AES-CBC or AES-G | ||||
| <t>All implementations use SHA-384 for hashing and either AES-CBC or AES-GCM for | CM for encryption, the requirements for which are given in <xref target="message | |||
| encryption, the requirements for which are given in <xref target="message-diges | -digest" format="default"/> and <xref target="content-enc" format="default"/>, r | |||
| t" /> and <xref target="content-enc" />, respectively. | espectively. | |||
| </t> | </t> | |||
| </section> | ||||
| <!-- reqts --> | ||||
| </section> <!-- reqts --> | <section anchor="message-digest" numbered="true" toc="default"> | |||
| <name>SHA-384 Message Digest Algorithm</name> | ||||
| <section anchor="message-digest" title="SHA-384 Message Digest Algorithm"> | <t>SHA-384 is the sole CNSA Suite message digest algorithm. <xref target=" | |||
| RFC5754" format="default"/> specifies the conventions for using SHA-384 with the | ||||
| <t>SHA-384 is the sole CNSA Suite message digest algorithm. <xref target="RFC575 | Cryptographic Message Syntax (CMS). CNSA Suite-compliant S/MIME implementations | |||
| 4" /> specifies the conventions for using SHA-384 with the Cryptographic Message | <bcp14>MUST</bcp14> follow the conventions in <xref target="RFC5754" format="de | |||
| Syntax (CMS). CNSA Suite compliant S/MIME implementations MUST follow the conve | fault"/>. | |||
| ntions in <xref target="RFC5754" />. | ||||
| </t> | </t> | |||
| <t>Within the CMS signed-data content type, message digest algorithm ident | ||||
| <t>Within the CMS signed-data content type, message digest algorithm identifiers | ifiers are located in the SignedData digestAlgorithms field and the SignerInfo d | |||
| are located in the SignedData digestAlgorithms field and the SignerInfo digestA | igestAlgorithm field. | |||
| lgorithm field. | ||||
| </t> | </t> | |||
| <t>The SHA-384 message digest algorithm is defined in FIPS Pub 180 <xref t | ||||
| <t>The SHA-384 message digest algorithm is defined in FIPS Pub 180 <xref target= | arget="FIPS180" format="default"/>. The algorithm identifier for SHA-384 is defi | |||
| "FIPS180" />. The algorithm identifier for SHA-384 is defined in <xref target="R | ned in <xref target="RFC5754" format="default"/> as follows: | |||
| FC5754" /> as follows: | </t> | |||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| <figure><artwork> | ||||
| id-sha384 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-sha384 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) hashalgs(2) 2 } | nistalgorithm(4) hashalgs(2) 2 } | |||
| ]]></sourcecode> | ||||
| </artwork></figure> | <t>For SHA-384, the AlgorithmIdentifier parameters field is <bcp14>OPTIONA | |||
| </t> | L</bcp14>, and if present, the parameters field <bcp14>MUST</bcp14> contain a NU | |||
| LL. As specified in <xref target="RFC5754" format="default"/>, implementations < | ||||
| <t>For SHA-384, the AlgorithmIdentifier parameters field is OPTIONAL, and if pre | bcp14>MUST</bcp14> generate SHA-384 AlgorithmIdentifiers with absent parameters. | |||
| sent, the parameters field MUST contain a NULL. As specified in <xref target="RF | Implementations <bcp14>MUST</bcp14> accept SHA-384 AlgorithmIdentifiers with ab | |||
| C5754" />, implementations MUST generate SHA-384 AlgorithmIdentifiers with absen | sent parameters or with NULL parameters. | |||
| t parameters. Implementations MUST accept SHA-384 AlgorithmIdentifiers with abse | ||||
| nt parameters or with NULL parameters. | ||||
| </t> | </t> | |||
| </section> | ||||
| <!-- message-digest --> | ||||
| </section> <!-- message-digest --> | <section anchor="digital-signature" numbered="true" toc="default"> | |||
| <name>Digital Signature</name> | ||||
| <section anchor="digital-signature" title="Digital Signature"> | <section anchor="ecc-dig-sig" numbered="true" toc="default"> | |||
| <name>ECDSA Signature</name> | ||||
| <section anchor="ecc-dig-sig" title="ECDSA Signature"> | <t>The Elliptic Curve Digital Signature Algorithm (ECDSA) is the CNSA Su | |||
| ite digital signature algorithm based on ECC. <xref target="RFC5753" format="def | ||||
| <t>The Elliptic Curve Digital Signature Algorithm (ECDSA) is the CNSA Suite digi | ault"/> specifies the conventions for using ECDSA with the Cryptographic Message | |||
| tal signature algorithm based on ECC. <xref target="RFC5753" /> specifies the co | Syntax (CMS). CNSA Suite-compliant S/MIME implementations <bcp14>MUST</bcp14> f | |||
| nventions for using ECDSA with the Cryptographic Message Syntax (CMS). CNSA Suit | ollow the conventions in <xref target="RFC5753" format="default"/>. | |||
| e compliant S/MIME implementations MUST follow the conventions in <xref target=" | ||||
| RFC5753" />. | ||||
| </t> | </t> | |||
| <t><xref target="RFC5480" format="default"/> defines the signature algor ithm identifier used in CMS for ECDSA with SHA-384 as follows: | ||||
| <t><xref target="RFC5480" /> defines the signature algorithm identifier used in | </t> | |||
| CMS for ECDSA with SHA-384 as follows: | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| <figure><artwork> | ||||
| ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { iso(1) | ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { iso(1) | |||
| member-body(2) us(840) ansi-X9-62(10045) signatures(4) | member-body(2) us(840) ansi-X9-62(10045) signatures(4) | |||
| ecdsa-with-sha2(3) 3 } | ecdsa-with-sha2(3) 3 } | |||
| ]]></sourcecode> | ||||
| </artwork></figure> | <t>When the ecdsa-with-SHA384 algorithm identifier is used, the Algorith | |||
| </t> | mIdentifier parameters field <bcp14>MUST</bcp14> be absent. | |||
| <t>When the ecdsa-with-SHA384 algorithm identifier is used, the AlgorithmIdentif | ||||
| ier parameters field MUST be absent. | ||||
| </t> | </t> | |||
| <t>When signing, the ECDSA algorithm generates two values, commonly call ed r and s. These two values <bcp14>MUST</bcp14> be encoded using the ECDSA-Sig -Value type specified in <xref target="RFC5480" format="default"/>: | ||||
| <t>When signing, the ECDSA algorithm generates two values, commonly called r and | </t> | |||
| s. These two values MUST be encoded using the ECDSA-Sig-Value type specified i | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| n <xref target="RFC5480" />: | ||||
| <figure><artwork> | ||||
| ECDSA-Sig-Value ::= SEQUENCE { | ECDSA-Sig-Value ::= SEQUENCE { | |||
| r INTEGER, | r INTEGER, | |||
| s INTEGER } | s INTEGER } | |||
| ]]></sourcecode> | ||||
| </section> | ||||
| <!-- ecc-dig-sig --> | ||||
| </artwork></figure> | <section anchor="rsa-dig-sig" numbered="true" toc="default"> | |||
| </t> | <name>RSA Signature</name> | |||
| <t>The RSA signature generation process and the encoding of the result i | ||||
| </section> <!-- ecc-dig-sig --> | s either RSASSA-PKCS1-v1_5 or RSA-PSS, as described in detail in PKCS #1 version | |||
| 2.2 <xref target="RFC8017" format="default"/>. | ||||
| <section anchor="rsa-dig-sig" title="RSA Signature"> | ||||
| <t>The RSA signature generation process and the encoding of the result is either | ||||
| RSASSA-PKCS1-v1_5 or RSA-PSS as described in detail in PKCS #1 version 2.2 <xre | ||||
| f target="RFC8017" />. | ||||
| </t> | </t> | |||
| <section anchor="rsa-pkcs1" numbered="true" toc="default"> | ||||
| <name>RSA-PKCS1-v1_5</name> | ||||
| <t><xref target="RFC5754" format="default"/> defines the signature | ||||
| algorithm identifier used in CMS for an RSA signature with SHA-384 as f | ||||
| ollows: | ||||
| <section anchor="rsa-pkcs1" title="RSA-PKCS1-v1_5"> | </t> | |||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| <t><xref target="RFC5754" /> defines the signature algorithm identifier used in | sha384WithRSAEncryption OBJECT IDENTIFIER ::= { iso(1) | |||
| CMS for RSA signature with SHA-384 as follows: | ||||
| <figure><artwork> | ||||
| sha384WithRSAEncryption OBJECT IDENTIFIER :== { iso(1) | ||||
| member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 12 } | member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 12 } | |||
| ]]></sourcecode> | ||||
| </artwork></figure> | <t>When the sha384WithRSAEncryption algorithm identifier is used, the | |||
| </t> | parameters <bcp14>MUST</bcp14> be NULL. Implementations <bcp14>MUST</bcp14> acce | |||
| pt the parameters being absent as well as present. | ||||
| <t>When the sha384WithRSAEncryption algorithm identifier is used, the parameters | ||||
| MUST be NULL. Implementations MUST accept the parameters being absent as well a | ||||
| s present. | ||||
| </t> | </t> | |||
| </section> | ||||
| <!-- rsa-pkcs1 --> | ||||
| </section> <!-- rsa-pkcs1 --> | <section anchor="rsa-pss" numbered="true" toc="default"> | |||
| <name>RSA-PSS</name> | ||||
| <section anchor="rsa-pss" title="RSA-PSS"> | ||||
| <t><xref target="RFC4056" /> defines the signature algorithm identifier used in | ||||
| CMS for RSA-PSS signature as follows: | ||||
| <figure><artwork> | <t><xref target="RFC4056" format="default"/> defines the signature | |||
| algorithm identifier used in CMS for an RSA-PSS signature as follows (p | ||||
| resented here in expanded form): | ||||
| RSASSA-PSS OBJECT IDENTIFIER :== { iso(1) | </t> | |||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| RSASSA-PSS OBJECT IDENTIFIER ::= { iso(1) | ||||
| member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 10 } | member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 10 } | |||
| ]]></sourcecode> | ||||
| <t>The parameters field of an AlgorithmIdentifier that identifies RSAS | ||||
| SA-PSS is defined in <xref target="RFC4055" format="default"/> as follows: | ||||
| </artwork></figure> | </t> | |||
| </t> | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| <t>The parameters field of an AlgorithmIdentifier that identifies RSASSA-PSS is | ||||
| defined in <xref target="RFC4055" /> as follows: | ||||
| <figure><artwork> | ||||
| RSASSA-PSS-params ::= SEQUENCE { | RSASSA-PSS-params ::= SEQUENCE { | |||
| hashAlgorithm [0] HashAlgorithm DEFAULT | hashAlgorithm [0] HashAlgorithm DEFAULT | |||
| sha1Identifier, | sha1Identifier, | |||
| maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT | maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT | |||
| mgf1SHA1Identifier, | mgf1SHA1Identifier, | |||
| saltLength [2] INTEGER DEFAULT 20, | saltLength [2] INTEGER DEFAULT 20, | |||
| trailerField [3] INTEGER DEFAULT 1 } | trailerField [3] INTEGER DEFAULT 1 } | |||
| ]]></sourcecode> | ||||
| <t>The AlgorithmIdentifier parameters field <bcp14>MUST</bcp14> contai | ||||
| n RSASSA-PSS-params with the following values: | ||||
| </artwork></figure> | ||||
| </t> | ||||
| <t>The AlgorithmIdentifier parameters field MUST contain RSASSA-PSS-params with | ||||
| the following values: | ||||
| <list style="symbols"> | ||||
| <t>the hash algorithm MUST be id-sha384 as defined in <xref target="RFC8017" />; | ||||
| </t> | ||||
| <t>the mask generation function MUST use the algorithm identifier mfg1SHA384Iden | ||||
| tifier as defined in <xref target="RFC4055" />;</t> | ||||
| <t>the salt length MUST be 48 octets (the same length as the SHA-384 output); an | ||||
| d</t> | ||||
| <t>the trailerField MUST have value 1.</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul spacing="normal"> | ||||
| <li>The hash algorithm <bcp14>MUST</bcp14> be id-sha384 as defined i | ||||
| n <xref target="RFC8017" format="default"/>;</li> | ||||
| <li>The mask generation function <bcp14>MUST</bcp14> use the algorit | ||||
| hm identifier mfg1SHA384Identifier as defined in <xref target="RFC4055" format=" | ||||
| default"/>;</li> | ||||
| <li>The salt length <bcp14>MUST</bcp14> be 48 octets (the same lengt | ||||
| h as the SHA-384 output); and</li> | ||||
| <li>The trailerField <bcp14>MUST</bcp14> have value 1.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <!-- rsa-pss --> | ||||
| </section> <!-- rsa-pss --> | </section> | |||
| <!-- rsa-dig-sig --> | ||||
| </section> <!-- rsa-dig-sig --> | ||||
| </section> <!-- digital-signature --> | ||||
| <section anchor="key-establishment" title="Key Establishment"> | ||||
| <section anchor="ecc-ka" title="Elliptic Curve Key Agreement"> | </section> | |||
| <!-- digital-signature --> | ||||
| <t>Elliptic Curve Diffie-Hellman (ECDH) is the CNSA Suite key agreement algorith | <section anchor="key-establishment" numbered="true" toc="default"> | |||
| m. Since S/MIME is used in store-and-forward communications, ephemeral-static EC | <name>Key Establishment</name> | |||
| DH is always employed. This means that the message originator possesses an ephem | <section anchor="ecc-ka" numbered="true" toc="default"> | |||
| eral ECDH key pair and that the message recipient possesses a static ECDH key pa | <name>Elliptic Curve Key Agreement</name> | |||
| ir whose public key is provided in an X.509 certificate. The certificate used to | <t>Elliptic Curve Diffie-Hellman (ECDH) is the CNSA Suite key agreement | |||
| obtain the recipient's public key MUST be compliant with <xref target="RFC8603" | algorithm. Since S/MIME is used in store-and-forward communications, ephemeral-s | |||
| />. | tatic ECDH is always employed. This means that the message originator possesses | |||
| an ephemeral ECDH key pair and that the message recipient possesses a static ECD | ||||
| H key pair whose public key is provided in an X.509 certificate. The certificate | ||||
| used to obtain the recipient's public key <bcp14>MUST</bcp14> be compliant with | ||||
| <xref target="RFC8603" format="default"/>. | ||||
| </t> | </t> | |||
| <t>When a key agreement algorithm is used, the following steps are perfo rmed: | ||||
| <t>When a key agreement algorithm is used, the following steps are performed: | ||||
| <list style="numbers"> | ||||
| <t>A content-encryption key (CEK) for a particular content-encryption algorit | ||||
| hm is generated at random.</t> | ||||
| <t>The recipient's public key and sender's private key are used with a key ag | ||||
| reement scheme to generate a shared secret (Z).</t> | ||||
| <t>The shared secret is used with a key derivation function (KDF) to produce | ||||
| a key-encryption key (KEK).</t> | ||||
| <t>The KEK is used with a key wrap algorithm to encrypt the CEK.</t> | ||||
| </list> | ||||
| Key derivation is discussed in <xref target="kdf" />. Key wrapping is discussed | ||||
| in <xref target="keywrap" />. | ||||
| </t> | </t> | |||
| <ol spacing="normal" type="1"> | ||||
| <li>A content-encryption key (CEK) for a particular content-encryption | ||||
| algorithm is generated at random.</li> | ||||
| <li>The recipient's public key and sender's private key are used with | ||||
| a key agreement scheme to generate a shared secret (Z).</li> | ||||
| <li>The shared secret is used with a key derivation function (KDF) to | ||||
| produce a key-encryption key (KEK).</li> | ||||
| <li>The KEK is used with a key wrap algorithm to encrypt the CEK.</li> | ||||
| </ol> | ||||
| <t> | ||||
| <t>Section 3.1 of <xref target="RFC5753" /> specifies the conventions for using ECDH with the CMS. CNSA Suite compliant S/MIME implementations MUST follow these conventions. | Key derivation is discussed in <xref target="kdf" format="default"/>. Key wrappi ng is discussed in <xref target="keywrap" format="default"/>. | |||
| </t> | </t> | |||
| <t><xref target="RFC5753" sectionFormat="of" section="3.1"/> specifies t | ||||
| <t>Within the CMS enveloped-data and authenticated-enveloped-data content types, | he conventions for using ECDH with the CMS. CNSA Suite-compliant S/MIME implemen | |||
| key agreement algorithm identifiers are located in the EnvelopedData RecipientI | tations <bcp14>MUST</bcp14> follow these conventions. | |||
| nfos KeyAgreeRecipientInfo keyEncryptionAlgorithm field. | </t> | |||
| <t>Within the CMS enveloped-data and authenticated-enveloped-data conten | ||||
| t types, key agreement algorithm identifiers are located in the EnvelopedData Re | ||||
| cipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm field. | ||||
| </t> | </t> | |||
| <t>The keyEncryptionAlgorithm field comprises two fields, an algorithm field and | <t>The keyEncryptionAlgorithm field comprises two fields, an algorithm | |||
| a parameter field. The algorithm field MUST identify dhSinglePass-stdDH-sha384k | field and a parameter field. The algorithm field <bcp14>MUST</bcp14> | |||
| df-scheme. The algorithm identifier for the dhSinglePass-stdDH-sha384kdf-scheme, | identify dhSinglePass-stdDH-sha384kdf-scheme. The algorithm identifier | |||
| repeated from Section 7.1.4 of <xref target="RFC5753" />, is: | for the dhSinglePass-stdDH-sha384kdf-scheme, repeated from <xref target=" | |||
| RFC5753" sectionFormat="of" section="7.1.4"/>, is (presented here in expanded fo | ||||
| <figure><artwork> | rm): | |||
| </t> | ||||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| dhSinglePass-stdDH-sha384kdf-scheme OBJECT IDENTIFIER ::= | dhSinglePass-stdDH-sha384kdf-scheme OBJECT IDENTIFIER ::= | |||
| { iso(1) identified-organization(3) certicom(132) | { iso(1) identified-organization(3) certicom(132) | |||
| schemes(1) 11 2 } | schemes(1) 11 2 } | |||
| ]]></sourcecode> | ||||
| </artwork></figure> | <t>The keyEncryptionAlgorithm parameter field <bcp14>MUST</bcp14> be con | |||
| </t> | structed as described in <xref target="keywrap" format="default"/>. | |||
| <t>The keyEncryptionAlgorithm parameter field MUST be constructed as described i | ||||
| n <xref target="keywrap" />. | ||||
| </t> | </t> | |||
| <section anchor="kdf" numbered="true" toc="default"> | ||||
| <name>Key Derivation Functions</name> | ||||
| <t>KDFs based on SHA-384 are used to derive a pairwise | ||||
| key-encryption key from the shared secret produced by | ||||
| ephemeral-static ECDH. Sections <xref | ||||
| target="RFC5753" section="7.1.8" sectionFormat="bare"/> and <xref | ||||
| target="RFC5753" sectionFormat="bare" section="7.2"/> in <xref | ||||
| target="RFC5753"/> specify the CMS conventions for using a KDF with the | ||||
| shared secret generated during ephemeral-static ECDH. CNSA Suite-compliant S/MI | ||||
| ME implementations <bcp14>MUST</bcp14> follow these conventions. | ||||
| </t> | ||||
| <t>As specified in <xref target="RFC5753" sectionFormat="of" | ||||
| section="7.1.8"/>, the ANSI-X9.63-KDF described in Section 3.6.1 of <xr | ||||
| ef target="SEC1"/> and based on SHA-384 <bcp14>MUST</bcp14> be used. | ||||
| </t> | ||||
| <t>As specified in <xref target="RFC5753" sectionFormat="of" section=" | ||||
| 7.2"/>, when using ECDH with the CMS enveloped-data or authenticated-enveloped-d | ||||
| ata content type, the derivation of key-encryption keys makes use of the ECC-CMS | ||||
| -SharedInfo type: | ||||
| <section anchor="kdf" title="Key Derivation Functions"> | </t> | |||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| <t>KDFs based on SHA-384 are used to derive a pairwise key-encryption key | ||||
| from the shared secret produced by ephemeral-static ECDH. Sections 7.1.8 and 7.2 | ||||
| of <xref target="RFC5753" /> specify the CMS conventions for using a KDF with t | ||||
| he shared secret generated during ephemeral-static ECDH. CNSA Suite compliant S/ | ||||
| MIME implementations MUST follow these conventions. | ||||
| </t> | ||||
| <t>As specified in Section 7.1.8 of <xref target="RFC5753" />, the ANSI-X9 | ||||
| .63-KDF described in Section 3.6.1 of <xref target="SEC1" /> and based on SHA-38 | ||||
| 4 MUST be used. | ||||
| </t> | ||||
| <t>As specified in Section 7.2 of <xref target="RFC5753" />, when using EC | ||||
| DH with the CMS enveloped-data or authenticated-enveloped-data content type, the | ||||
| derivation of key-encryption keys makes use of the ECC-CMS-SharedInfo type: | ||||
| <figure><artwork> | ||||
| ECC-CMS-SharedInfo ::= SEQUENCE { | ECC-CMS-SharedInfo ::= SEQUENCE { | |||
| keyInfo AlgorithmIdentifier, | keyInfo AlgorithmIdentifier, | |||
| entityUInfo [0] EXPLICIT OCTET STRING OPTIONAL, | entityUInfo [0] EXPLICIT OCTET STRING OPTIONAL, | |||
| suppPubInfo [2] EXPLICIT OCTET STRING } | suppPubInfo [2] EXPLICIT OCTET STRING } | |||
| ]]></sourcecode> | ||||
| <t>In the CNSA Suite for S/MIME, the fields of ECC-CMS-SharedInfo are | ||||
| used as follows: | ||||
| </artwork></figure> | </t> | |||
| </t> | <ul empty="false"> | |||
| <t>In CNSA Suite for S/MIME, the fields of ECC-CMS-SharedInfo are used as | ||||
| follows: | ||||
| <list style="hanging"> | ||||
| <t>keyInfo contains the object identifier of the key-encryption algorit | ||||
| hm used to wrap the content-encryption key. If AES-256 Key Wrap is used, then th | ||||
| e keyInfo will contain id-aes256-wrap-pad, and the parameters will be absent. | ||||
| </t> | ||||
| <t>entityUInfo optionally contains a random value provided by the messa | ||||
| ge originator. If user keying material (ukm) is included in the KeyAgreeRecipien | ||||
| tInfo, then the entityUInfo MUST be present, and it MUST contain the ukm value. | ||||
| If the ukm is not present, then the entityUInfo MUST be absent. | ||||
| </t> | ||||
| <t>suppPubInfo contains the length of the generated key-encryption key, | ||||
| in bits, represented as a 32-bit unsigned number, as described in <xref target= | ||||
| "RFC2631" />. When a 256-bit AES key is used, the length MUST be 0x00000100. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t>ECC-CMS-SharedInfo is DER encoded and used as input to the key derivati | ||||
| on function, as specified in Section 3.6.1 of <xref target="SEC1" />. Note that | ||||
| ECC-CMS-SharedInfo differs from the OtherInfo specified in <xref target="RFC263 | ||||
| 1" />. Here, a counter value is not included in the keyInfo field because the KD | ||||
| F specified in <xref target="SEC1" /> ensures that sufficient keying data is pro | ||||
| vided. | ||||
| </t> | ||||
| <t>The KDF specified in Section 3.6.1 of <xref target="SEC1" /> describes | ||||
| how to generate an essentially arbitrary amount of keying material from a shared | ||||
| secret, Z, produced by ephemeral-static ECDH. To generate an L-bit key-encrypti | ||||
| on key (KEK), KM is computed: | ||||
| <figure><artwork> | ||||
| <li>keyInfo contains the object identifier of the key-encryption alg | ||||
| orithm used to wrap the content-encryption key. If AES-256 Key Wrap is used, the | ||||
| n the keyInfo will contain id-aes256-wrap-pad, and the parameters will be absent | ||||
| . | ||||
| </li> | ||||
| <li>entityUInfo optionally contains a random value provided by the m | ||||
| essage originator. If user keying material (ukm) is included in the KeyAgreeReci | ||||
| pientInfo, then the entityUInfo <bcp14>MUST</bcp14> be present, and it <bcp14>MU | ||||
| ST</bcp14> contain the ukm value. If the ukm is not present, then the entityUInf | ||||
| o <bcp14>MUST</bcp14> be absent. | ||||
| </li> | ||||
| <li>suppPubInfo contains the length of the generated key-encryption | ||||
| key in bits, represented as a 32-bit unsigned number, as described in <xref targ | ||||
| et="RFC2631" format="default"/>. When a 256-bit AES key is used, the length <bcp | ||||
| 14>MUST</bcp14> be 0x00000100. | ||||
| </li> | ||||
| </ul> | ||||
| <t>ECC-CMS-SharedInfo is DER encoded and is used as input to the key | ||||
| derivation function, as specified in Section 3.6.1 of <xref target="SEC | ||||
| 1"/>. Note that ECC-CMS-SharedInfo differs from the OtherInfo specified in <xre | ||||
| f target="RFC2631" format="default"/>. Here, a counter value is not included in | ||||
| the keyInfo field because the KDF specified in <xref target="SEC1" format="defau | ||||
| lt"/> ensures that sufficient keying data is provided. | ||||
| </t> | ||||
| <t>The KDF specified in Section 3.6.1 of <xref target="SEC1"/> describ | ||||
| es how to generate an essentially arbitrary amount of keying material from a sha | ||||
| red secret, Z, produced by ephemeral-static ECDH. To generate an L-bit key-encry | ||||
| ption key (KEK), blocks of key material (KM) are computed by incrementing Counte | ||||
| r appropriately until enough material has been generated: | ||||
| </t> | ||||
| <sourcecode name="" type="pseudocode"><![CDATA[ | ||||
| KM(Counter) = Hash ( Z || Counter || ECC-CMS-SharedInfo ) | KM(Counter) = Hash ( Z || Counter || ECC-CMS-SharedInfo ) | |||
| ]]></sourcecode> | ||||
| <t> | ||||
| The KM blocks are concatenated left to right as they are | ||||
| generated, and the first (leftmost) L bits are used as the KEK: | ||||
| </artwork></figure> | </t> | |||
| <sourcecode name="" type="pseudocode"><![CDATA[ | ||||
| incrementing Counter appropriately, until enough material has been generat | ||||
| ed. The KM blocks are concatenated left to right, as they are generated, and th | ||||
| e first (leftmost) L bits are used as the KEK: | ||||
| <figure><artwork> | ||||
| KEK = the leftmost L bits of | KEK = the leftmost L bits of | |||
| [KM ( counter=1 ) || KM ( counter=2 ) ...] | [KM ( counter=1 ) || KM ( counter=2 ) ...] | |||
| ]]></sourcecode> | ||||
| <t>In the CNSA Suite for S/MIME, the elements of the KDF are defined a | ||||
| s follows: | ||||
| </artwork></figure> | </t> | |||
| </t> | <ul empty="false"> | |||
| <li>Hash is a one-way hash function. The SHA-384 hash <bcp14>MUST</b | ||||
| <t>In CNSA Suite for S/MIME, the elements of the KDF are defined as follow | cp14> be used. | |||
| s: | </li> | |||
| <li>Z is the shared secret value generated during ephemeral-static E | ||||
| <list style="hanging"> | CDH. | |||
| <t>Hash is a one-way hash function. The SHA-384 hash MUST be used. | Z <bcp14>MUST</bcp14> be exactly 384 bits, i.e., leading zero bits <bcp | |||
| </t> | 14>MUST</bcp14> be preserved. | |||
| </li> | ||||
| <t>Z is the shared secret value generated during ephemeral-static ECDH. | <li>Counter is a 32-bit unsigned number represented in network byte | |||
| Z MUST be exactly 384 bits, i.e., leading zero bits MUST be preserved. | order. Its initial value <bcp14>MUST</bcp14> be 0x00000001 for any key | |||
| </t> | ||||
| <t>Counter is a 32-bit unsigned number, represented in network byte | ||||
| order. Its initial value MUST be 0x00000001 for any key | ||||
| derivation operation. | derivation operation. | |||
| </t> | </li> | |||
| <li>ECC-CMS-SharedInfo is composed as described above. It <bcp14>MUS | ||||
| <t>ECC-CMS-SharedInfo is composed as described above. It MUST be DER | T</bcp14> be DER | |||
| encoded. | encoded. | |||
| </t> | </li> | |||
| </ul> | ||||
| </list></t> | <t> In the CNSA Suite for S/MIME, exactly one iteration is needed; the | |||
| Counter is not incremented. The key-encryption key (KEK) <bcp14>MUST</bcp14> be | ||||
| <t> In CNSA Suite for S/MIME, exactly one iteration is needed; the Counter | the first (leftmost) 256 bits of the SHA-384 output value: | |||
| is not incremented. The key-encryption key (KEK) MUST be the first (leftmost) 2 | ||||
| 56 bits of the SHA-384 output value: | ||||
| <figure><artwork> | ||||
| </t> | ||||
| <sourcecode name="" type="pseudocode"><![CDATA[ | ||||
| KEK = the leftmost 256 bits of | KEK = the leftmost 256 bits of | |||
| SHA-384 ( Z || 0x00000001 || ECC-CMS-SharedInfo ) | SHA-384 ( Z || 0x00000001 || ECC-CMS-SharedInfo ) | |||
| ]]></sourcecode> | ||||
| <t>Note that the only source of secret entropy in this computation is | ||||
| Z. | ||||
| </t> | ||||
| </section> | ||||
| <!-- kdf --> | ||||
| </artwork></figure> | <section anchor="keywrap" numbered="true" toc="default"> | |||
| </t> | <name>AES Key Wrap</name> | |||
| <t>The AES Key Wrap with Padding key-encryption algorithm, as specifie | ||||
| <t>Note that the only source of secret entropy in this computation is Z. | d in <xref target="RFC5649" format="default"/> and <xref target="SP80038F" forma | |||
| </t> | t="default"/>, is used to encrypt the content-encryption key with a pairwise key | |||
| -encryption key that is generated using ephemeral-static ECDH. <xref target="RFC | ||||
| </section> <!-- kdf --> | 5753" sectionFormat="of" section="8"/> specifies the CMS conventions for using A | |||
| ES Key Wrap with a pairwise key generated through ephemeral-static ECDH. CNSA Su | ||||
| <section anchor="keywrap" title="AES Key Wrap"> | ite-compliant S/MIME implementations <bcp14>MUST</bcp14> follow these convention | |||
| s. | ||||
| <t>The AES Key Wrap with Padding key-encryption algorithm, as specified in <xref | ||||
| target="RFC5649" /> and <xref target="SP80038F" />, is used to encrypt the cont | ||||
| ent-encryption key with a pairwise key-encryption key that is generated using ep | ||||
| hemeral-static ECDH. Section 8 of <xref target="RFC5753" /> specifies the CMS co | ||||
| nventions for using AES Key Wrap with a pairwise key generated through ephemeral | ||||
| -static ECDH. CNSA Suite compliant S/MIME implementations MUST follow these conv | ||||
| entions. | ||||
| </t> | </t> | |||
| <t>Within the CMS enveloped-data content type, key wrap algorithm iden | ||||
| <t>Within the CMS enveloped-data content type, key wrap algorithm identifiers ar | tifiers are located in the KeyWrapAlgorithm parameters within the EnvelopedData | |||
| e located in the KeyWrapAlgorithm parameters within the EnvelopedData RecipientI | RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm field. | |||
| nfos KeyAgreeRecipientInfo keyEncryptionAlgorithm field. | ||||
| </t> | </t> | |||
| <t>The KeyWrapAlgorithm <bcp14>MUST</bcp14> be id-aes256-wrap-pad. The required algorithm identifier, specified in <xref target="RFC5649" format="defa ult"/>, is: | ||||
| <t>The KeyWrapAlgorithm MUST be id-aes256-wrap-pad. The required algorithm ident | </t> | |||
| ifier, specified in <xref target="RFC5649" />, is: | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| <figure><artwork> | ||||
| id-aes256-wrap-pad OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-aes256-wrap-pad 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) aes(1) 48 } | nistAlgorithm(4) aes(1) 48 } | |||
| ]]></sourcecode> | ||||
| </section> | ||||
| <!-- keywrap --> | ||||
| </artwork></figure> | </section> | |||
| </t> | <!-- ecc-ka --> | |||
| </section> <!-- keywrap --> | ||||
| </section> <!-- ecc-ka --> | ||||
| <section anchor="rsa-kt" title="RSA Key Transport"> | ||||
| <t>RSA encryption (RSA) is the CNSA Suite key transport algorithm. The RSA key t | <section anchor="rsa-kt" numbered="true" toc="default"> | |||
| ransport algorithm is the RSA encryption scheme defined in <xref target="RFC8017 | <name>RSA Key Transport</name> | |||
| " />, where the message to be encrypted is the content-encryption key. | <t>RSA encryption (RSA) is the CNSA Suite key transport algorithm. The R | |||
| SA key transport algorithm is the RSA encryption scheme defined in <xref target= | ||||
| "RFC8017" format="default"/>, where the message to be encrypted is the content-e | ||||
| ncryption key. | ||||
| </t> | </t> | |||
| <t>The recipient of an S/MIME message possesses an RSA key pair whose pu | ||||
| <t>The recipient of an S/MIME message possesses an RSA key pair whose public key | blic key is represented by an X.509 certificate. The certificate used to obtain | |||
| is represented by an X.509 certificate. The certificate used to obtain the reci | the recipient's public key <bcp14>MUST</bcp14> be compliant with <xref target="R | |||
| pient's public key MUST be compliant with <xref target="RFC8603" />. These certi | FC8603" format="default"/>. These certificates are suitable for use with either | |||
| ficates are suitable for use with either RSAES-OAEP or RSAES-PKCS1-v1_5. | RSAES-OAEP or RSAES-PKCS1-v1_5. | |||
| </t> | </t> | |||
| <section anchor="rsaes-PKCS1" numbered="true" toc="default"> | ||||
| <section anchor="rsaes-PKCS1" title="RSAES-PKCS1-v1_5"> | <name>RSAES-PKCS1-v1_5</name> | |||
| <t><xref target="RFC3370" sectionFormat="of" section="4.2"/> specifies | ||||
| <t>Section 4.2 of <xref target="RFC3370" /> specifies the conventions for using | the conventions for using RSAES-PKCS1-v1_5 with the CMS. S/MIME implementations | |||
| RSAES-PKCS1-v1_5 with the CMS. S/MIME implementations employing this form of key | employing this form of key transport <bcp14>MUST</bcp14> follow these conventio | |||
| transport MUST follow these conventions. | ns. | |||
| </t> | </t> | |||
| <t>Within the CMS enveloped-data and authenticated-enveloped-data cont | ||||
| <t>Within the CMS enveloped-data and authenticated-enveloped-data content types, | ent types, key transport algorithm identifiers are located in the EnvelopedData | |||
| key transport algorithm identifiers are located in the EnvelopedData RecipientI | RecipientInfos KeyTransRecipientInfo keyEncryptionAlgorithm field. | |||
| nfos KeyTransRecipientInfo keyEncryptionAlgorithm field. | ||||
| </t> | </t> | |||
| <t>The algorithm identifier for RSA (PKCS #1 v1.5) is: | ||||
| <t>The algorithm identifier for RSA (PKCS #1 v1.5) is: | </t> | |||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| <figure><artwork> | ||||
| rsaEncryption OBJECT IDENTIFIER ::= { iso(1) member-body(2) | rsaEncryption OBJECT IDENTIFIER ::= { iso(1) member-body(2) | |||
| us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 1 } | us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 1 } | |||
| ]]></sourcecode> | ||||
| </artwork></figure> | <t>The AlgorithmIdentifier parameters field <bcp14>MUST</bcp14> be pre | |||
| </t> | sent, and the parameters field <bcp14>MUST</bcp14> contain NULL. | |||
| <t>The AlgorithmIdentifier parameters field MUST be present, and the parameters | ||||
| field MUST contain NULL. | ||||
| </t> | </t> | |||
| </section> | ||||
| <!-- rsaes-PKCS1 --> | ||||
| </section> <!-- rsaes-PKCS1 --> | <section anchor="rsaes-OAEP" numbered="true" toc="default"> | |||
| <name>RSAES-OAEP</name> | ||||
| <section anchor="rsaes-OAEP" title="RSAES-OAEP"> | <t><xref target="RFC3560" format="default"/> specifies the conventions | |||
| for using RSAES-OAEP with the CMS. CNSA Suite-compliant S/MIME implementations | ||||
| <t><xref target="RFC3560" /> specifies the conventions for using RSAES-OAEP with | employing this form of key transport <bcp14>MUST</bcp14> follow these convention | |||
| the CMS. CNSA Suite compliant S/MIME implementations employing this form of key | s. | |||
| transport MUST follow these conventions. | ||||
| </t> | </t> | |||
| <t>Within the CMS enveloped-data and authenticated-enveloped-data cont | ||||
| <t>Within the CMS enveloped-data and authenticated-enveloped-data content types, | ent types, key transport algorithm identifiers are located in the EnvelopedData | |||
| key transport algorithm identifiers are located in the EnvelopedData RecipientI | RecipientInfos KeyTransRecipientInfo keyEncryptionAlgorithm field. | |||
| nfos KeyTransRecipientInfo keyEncryptionAlgorithm field. | ||||
| </t> | </t> | |||
| <t>The algorithm identifier for RSA (OAEP) is: | ||||
| <t>The algorithm identifier for RSA (OAEP) is: | </t> | |||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| <figure><artwork> | ||||
| id-RSAES-OAEP OBJECT IDENTIFIER ::= { iso(1) member-body(2) | id-RSAES-OAEP OBJECT IDENTIFIER ::= { iso(1) member-body(2) | |||
| us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 7 } | us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 7 } | |||
| ]]></sourcecode> | ||||
| <t>The parameters field of an AlgorithmIdentifier that identifies RSAE | ||||
| S-OAEP is defined in <xref target="RFC4055" format="default"/> as follows: | ||||
| </artwork></figure> | </t> | |||
| </t> | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| <t>The parameters field of an AlgorithmIdentifier that identifies RSAES-OAEP is | ||||
| defined in <xref target="RFC4055" /> as follows: | ||||
| <figure><artwork> | ||||
| RSAES-OAEP-params ::= SEQUENCE { | RSAES-OAEP-params ::= SEQUENCE { | |||
| hashFunc [0] AlgorithmIdentifier DEFAULT | hashFunc [0] AlgorithmIdentifier DEFAULT | |||
| sha1Identifier, | sha1Identifier, | |||
| maskGenFunc [1] AlgorithmIdentifier DEFAULT | maskGenFunc [1] AlgorithmIdentifier DEFAULT | |||
| mgf1SHA1Identifier, | mgf1SHA1Identifier, | |||
| pSourceFunc [2] AlgorithmIdentifier DEFAULT | pSourceFunc [2] AlgorithmIdentifier DEFAULT | |||
| pSpecifiedEmptyIdentifier } | pSpecifiedEmptyIdentifier } | |||
| pSpecifiedEmptyIdentifier AlgorithmIdentifier ::= | pSpecifiedEmptyIdentifier AlgorithmIdentifier ::= | |||
| { id-pSpecified, nullOctetString } | { id-pSpecified, nullOctetString } | |||
| nullOctetString OCTET STRING (SIZE (0)) ::= { ''H } | nullOctetString OCTET STRING (SIZE (0)) ::= { ''H } | |||
| ]]></sourcecode> | ||||
| <t>The AlgorithmIdentifier parameters field <bcp14>MUST</bcp14> be pre | ||||
| sent, and the parameters field <bcp14>MUST</bcp14> contain RSAES-OAEP-params wit | ||||
| h values as follows: | ||||
| </artwork></figure> | ||||
| </t> | ||||
| <t>The AlgorithmIdentifier parameters field MUST be present, and the parameters | ||||
| field MUST contain RSAES-OAEP-params with values as follows: | ||||
| <list style="symbols"> | ||||
| <t>the hashFunc algorithm must be id-sha384 as defined in <xref target="RFC8017" | ||||
| />;</t> | ||||
| <t>the mask generation function must use the algorithm identifier mfg1SHA384Iden | ||||
| tifier as defined in <xref target="RFC4055" />;</t> | ||||
| <t>the pSourceFunc field must be absent.</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul spacing="normal"> | ||||
| <t>The SMIMECapabilities signed attribute is used to specify a partial list of a | <li>The hashFunc algorithm must be id-sha384 as defined in <xref tar | |||
| lgorithms that the software announcing the SMIMECapabilities can support. If the | get="RFC8017" format="default"/>;</li> | |||
| SMIMECapabilities signed attribute is included to announce support for the RSAE | <li>The mask generation function must use the algorithm identifier m | |||
| S-OAEP algorithm, it MUST be constructed as defined in Section 5 of <xref target | fg1SHA384Identifier as defined in <xref target="RFC4055" format="default"/>;</li | |||
| ="RFC3560" />, with the sequence representing the rSAES-OAEP-SHA384-Identifier. | > | |||
| <li>The pSourceFunc field must be absent.</li> | ||||
| </ul> | ||||
| <t>The SMIMECapabilities signed attribute is used to specify a | ||||
| partial list of algorithms that the software announcing the | ||||
| SMIMECapabilities can support. If the SMIMECapabilities signed | ||||
| attribute is included to announce support for the RSAES-OAEP | ||||
| algorithm, it <bcp14>MUST</bcp14> be constructed as defined in <xref | ||||
| target="RFC3560" sectionFormat="of" section="5"/>, with the sequence re | ||||
| presenting the rSAES-OAEP-SHA384-Identifier. | ||||
| </t> | </t> | |||
| </section> | ||||
| <!-- rsaes-OAEP --> | ||||
| </section> <!-- rsaes-OAEP --> | </section> | |||
| <!-- rsa-kt --> | ||||
| </section> <!-- rsa-kt --> | ||||
| </section> <!-- key-establishment --> | ||||
| <section anchor="content-enc" title="Content Encryption"> | </section> | |||
| <!-- key-establishment --> | ||||
| <t>AES-GCM is the preferred mode for CNSA Suite applications as described in the | <section anchor="content-enc" numbered="true" toc="default"> | |||
| <xref target="sec-considerations">Security Considerations</xref>. AES-CBC is ac | <name>Content Encryption</name> | |||
| ceptable where AES-GCM is not yet available. | <t>AES-GCM is the preferred mode for CNSA Suite applications, as described | |||
| in the <xref target="sec-considerations" format="default">Security Consideratio | ||||
| ns</xref>. AES-CBC is acceptable where AES-GCM is not yet available. | ||||
| </t> | </t> | |||
| <section anchor="aes-gcm-enc" numbered="true" toc="default"> | ||||
| <section anchor="aes-gcm-enc" title="AES-GCM Content Encryption"> | <name>AES-GCM Content Encryption</name> | |||
| <t>CNSA Suite-compliant S/MIME implementations using the | ||||
| <t>CNSA Suite compliant S/MIME implementations using the authenticated-enveloped | authenticated-enveloped-data content type <xref target="RFC5083" | |||
| -data content type <xref target="RFC5083" /> MUST use <xref target="FIPS197">AES | format="default"/> <bcp14>MUST</bcp14> use AES <xref target="FIPS197" | |||
| </xref> in <xref target="SP80038D">Galois Counter Mode (GCM)</xref> as the conte | format="default"/> in Galois Counter Mode (GCM) <xref | |||
| nt-authenticated encryption algorithm, and MUST follow the conventions for using | target="SP80038D" format="default"/> as the content-authenticated encrypt | |||
| AES-GCM with the CMS defined in <xref target="RFC5084" />. | ion algorithm and <bcp14>MUST</bcp14> follow the conventions for using AES-GCM w | |||
| ith the CMS defined in <xref target="RFC5084" format="default"/>. | ||||
| </t> | </t> | |||
| <t>Within the CMS authenticated-enveloped-data content type, content-aut | ||||
| <t>Within the CMS authenticated-enveloped-data content type, content-authenticat | henticated encryption algorithm identifiers are located in the AuthEnvelopedData | |||
| ed encryption algorithm identifiers are located in the AuthEnvelopedData Encrypt | EncryptedContentInfo contentEncryptionAlgorithm field. The content-authenticat | |||
| edContentInfo contentEncryptionAlgorithm field. The content-authenticated encry | ed encryption algorithm is used to encipher the content located in the AuthEnvel | |||
| ption algorithm is used to encipher the content located in the AuthEnvelopedData | opedData EncryptedContentInfo encryptedContent field. | |||
| EncryptedContentInfo encryptedContent field. | ||||
| </t> | </t> | |||
| <t>The AES-GCM content-authenticated encryption algorithm is described i n <xref target="FIPS197" format="default"/> and <xref target="SP80038D" format=" default"/>. The algorithm identifier for AES-256 in GCM mode is: | ||||
| <t>The AES-GCM content-authenticated encryption algorithm is described in <xref | </t> | |||
| target="FIPS197" /> and <xref target="SP80038D" />. The algorithm identifier fo | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| r AES-256 in GCM mode is: | ||||
| <figure><artwork> | ||||
| id-aes256-GCM OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-aes256-GCM 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) aes(1) 46 } | nistAlgorithm(4) aes(1) 46 } | |||
| </artwork></figure> | ]]></sourcecode> | |||
| </t> | <t>The AlgorithmIdentifier parameters field <bcp14>MUST</bcp14> be prese | |||
| nt, and the parameters field must contain GCMParameters: | ||||
| <t>The AlgorithmIdentifier parameters field MUST be present, and the parameters | </t> | |||
| field must contain GCMParameters: | ||||
| <figure><artwork> | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| GCMParameters ::= SEQUENCE { | GCMParameters ::= SEQUENCE { | |||
| aes-nonce OCTET STRING, | aes-nonce OCTET STRING, | |||
| aes-ICVlen AES-GCM-IVClen DEFAULT 12 } | aes-ICVlen AES-GCM-ICVlen DEFAULT 12 } | |||
| </artwork></figure> | ]]></sourcecode> | |||
| </t> | <t>The authentication tag length (aes-ICVlen) <bcp14>SHALL</bcp14> be 16 | |||
| (indicating a tag length of 128 bits). | ||||
| <t>The authentication tag length (aes-ICVlen) SHALL be 16 (indicating a tag leng | ||||
| th of 128 bits). | ||||
| </t> | </t> | |||
| <t>The initialization vector (aes-nonce) <bcp14>MUST</bcp14> be | ||||
| <t>The initialization vector (aes-nonce) MUST be generated in accordance with Se | generated in accordance with Section 8.2 of <xref target="SP80038D"/>. AE | |||
| ction 8.2 of [SP80038D]. AES-GCM loses security catastrophically if a nonce is r | S-GCM loses security catastrophically if a nonce is reused with a given key on m | |||
| eused with a given key on more than one distinct set of input data. Therefore, a | ore than one distinct set of input data. Therefore, a fresh content-authenticate | |||
| fresh content-authenticated encryption key MUST be generated for each message. | d encryption key <bcp14>MUST</bcp14> be generated for each message. | |||
| </t> | </t> | |||
| </section> | ||||
| <!-- aes-gcm-enc --> | ||||
| </section> <!-- aes-gcm-enc --> | <section anchor="aes-cbc-enc" numbered="true" toc="default"> | |||
| <name>AES-CBC Content Encryption</name> | ||||
| <section anchor="aes-cbc-enc" title="AES-CBC Content Encryption"> | <t>CNSA Suite-compliant S/MIME implementations using the | |||
| enveloped-data content type <bcp14>MUST</bcp14> use AES-256 <xref | ||||
| <t>CNSA Suite compliant S/MIME implementations using the enveloped-data content | target="FIPS197" format="default"/> in Cipher Block Chaining (CBC) | |||
| type MUST use <xref target="FIPS197">AES-256</xref> in <xref target="SP80038A">C | mode <xref target="SP80038A" format="default"/> as the content-encryption | |||
| ipher Block Chaining (CBC) mode</xref> as the content encryption algorithm, and | algorithm and <bcp14>MUST</bcp14> follow the conventions for using AES with the | |||
| MUST follow the conventions for using AES with the CMS defined in <xref target=" | CMS defined in <xref target="RFC3565" format="default"/>. | |||
| RFC3565" />. | ||||
| </t> | </t> | |||
| <t>Within the CMS enveloped-data content type, content-encryption algori | ||||
| <t>Within the CMS enveloped-data content type, content-encryption algorithm iden | thm identifiers are located in the EnvelopedData EncryptedContentInfo contentEnc | |||
| tifiers are located in the EnvelopedData EncryptedContentInfo contentEncryptionA | ryptionAlgorithm field. The content-encryption algorithm is used to encipher the | |||
| lgorithm field. The content-encryption algorithm is used to encipher the content | content located in the EnvelopedData EncryptedContentInfo encryptedContent fiel | |||
| located in the EnvelopedData EncryptedContentInfo encryptedContent field. | d. | |||
| </t> | </t> | |||
| <t>The AES-CBC content-encryption algorithm is described in <xref target ="FIPS197" format="default"/> and <xref target="SP80038A" format="default"/>. Th e algorithm identifier for AES-256 in CBC mode is: | ||||
| <t>The AES CBC content-encryption algorithm is described in <xref target="FIPS19 | </t> | |||
| 7" /> and <xref target="SP80038A" />. The algorithm identifier for AES-256 in CB | <sourcecode name="" type="asn.1"><![CDATA[ | |||
| C mode is: | ||||
| <figure><artwork> | ||||
| id-aes256-CBC OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) | id-aes256-CBC 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) aes(1) 42 } | nistAlgorithm(4) aes(1) 42 } | |||
| </artwork></figure> | ]]></sourcecode> | |||
| </t> | <t>The AlgorithmIdentifier parameters field <bcp14>MUST</bcp14> be prese | |||
| nt, and the parameters field must contain AES-IV: | ||||
| <t>The AlgorithmIdentifier parameters field MUST be present, and the parameters | ||||
| field must contain AES-IV: | ||||
| <figure><artwork> | ||||
| </t> | ||||
| <sourcecode name="" type="asn.1"><![CDATA[ | ||||
| AES-IV ::= OCTET STRING (SIZE(16)) | AES-IV ::= OCTET STRING (SIZE(16)) | |||
| ]]></sourcecode> | ||||
| </artwork></figure> | <t>The 16-octet initialization vector is generated at random by the orig | |||
| </t> | inator. See <xref target="RFC4086" format="default"/> for guidance on generation | |||
| of random values. | ||||
| <t>The 16-octet initialization vector is generated at random by the originator. | ||||
| See <xref target="RFC4086" /> for guidance on generation of random values. | ||||
| </t> | </t> | |||
| </section> | ||||
| <!-- aes-cbc-enc --> | ||||
| </section> <!-- aes-cbc-enc --> | </section> | |||
| <!-- content-enc --> | ||||
| </section> <!-- content-enc --> | ||||
| <section anchor="sec-considerations" title="Security Considerations"> | ||||
| <t>This document specifies the conventions for using the NSA's CNSA Suite alg | ||||
| orithms in S/MIME. All of the algorithms and algorithm identifiers have been spe | ||||
| cified in previous documents. | ||||
| </t> | ||||
| <t>See <xref target="RFC4086" /> for guidance on generation of random values. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC5652" /> discuss the CMS a | ||||
| s a method for digitally signing data and encrypting data. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC3370" /> discuss cryptogra | ||||
| phic algorithm implementation concerns in the context of the CMS. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC5753" /> discuss the use o | ||||
| f elliptic curve cryptography (ECC) in the CMS. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC3565" /> discuss the use o | ||||
| f AES in the CMS. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC8551" /> apply to this pro | ||||
| file, in particular the recommendation to use authenticated encryption modes (i. | ||||
| e. use authenticated-enveloped-data with AES-GCM rather than enveloped-data with | ||||
| AES-CBC). | ||||
| </t> | ||||
| </section> <!-- sec-considerations --> | ||||
| <section anchor="iana-considerations" title="IANA Considerations"> | ||||
| <t>This document has no IANA actions. | <section anchor="sec-considerations" numbered="true" toc="default"> | |||
| </t> | <name>Security Considerations</name> | |||
| <t>This document specifies the conventions for using the NSA's CNSA Suite | ||||
| algorithms in S/MIME. All of the algorithms and algorithm identifiers have been | ||||
| specified in previous documents. | ||||
| </t> | ||||
| <t>See <xref target="RFC4086" format="default"/> for guidance on generatio | ||||
| n of random values. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC5652" format="default"/ | ||||
| > discuss the CMS as a method for digitally signing data and encrypting data. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC3370" format="default"/ | ||||
| > discuss cryptographic algorithm implementation concerns in the context of the | ||||
| CMS. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC5753" format="default"/ | ||||
| > discuss the use of elliptic curve cryptography (ECC) in the CMS. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC3565" format="default"/ | ||||
| > discuss the use of AES in the CMS. | ||||
| </t> | ||||
| <t>The security considerations in <xref target="RFC8551" format="default"/ | ||||
| > apply to this profile, particularly the recommendation to use authenticated en | ||||
| cryption modes (i.e., use authenticated-enveloped-data with AES-GCM rather than | ||||
| enveloped-data with AES-CBC). | ||||
| </t> | ||||
| </section> | ||||
| <!-- sec-considerations --> | ||||
| </section> <!-- iana-considerations --> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
| <name>IANA Considerations</name> | ||||
| <t>This document has no IANA actions. | ||||
| </t> | ||||
| </section> | ||||
| <!-- iana-considerations --> | ||||
| </middle> | </middle> | |||
| <!-- *****END MIDDLE MATTER ***** --> | ||||
| <!-- *****END MIDDLE MATTER ***** --> | ||||
| <!-- *****BACK MATTER ***** --> | <!-- *****BACK MATTER ***** --> | |||
| <back> | <back> | |||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <references title="Normative References"> | <reference anchor="CNSA" target="https://www.cnss.gov/CNSS/Issuances/Pol | |||
| icies.cfm"> | ||||
| <reference anchor="CNSA" target="https://www.cnss.gov/CNSS/Issuances/Polic | <front> | |||
| ies.htm"> | <title>Use of Public Standards for Secure Information Sharing</title | |||
| <front> | > | |||
| <title>Use of Public Standards for Secure Information Sharing</title> | <seriesInfo name="CNSS Policy" value="15"/> | |||
| <author><organization>Committee for National Security Systems</organiz | <author> | |||
| ation></author> | <organization>Committee for National Security Systems</organizatio | |||
| <date month="October" year="2016"></date> | n> | |||
| </front> | </author> | |||
| <seriesInfo name="CNSSP" value="15"></seriesInfo> | <date month="October" year="2016"/> | |||
| </reference> <!-- CNSA --> | </front> | |||
| </reference> | ||||
| <!-- CNSA --> | ||||
| <reference anchor="FIPS197" target="https://csrc.nist.gov/publications/det ail/fips/197/final"> | <reference anchor="FIPS197" target="https://csrc.nist.gov/publications/det ail/fips/197/final"> | |||
| <front> | <front> | |||
| <title>Advanced Encryption Standard (AES)</title> | <title>Advanced Encryption Standard (AES)</title> | |||
| <seriesInfo name="DOI" value="10.6028/NIST.FIPS.197"/> | ||||
| <seriesInfo name="FIPS PUB" value="197"/> | ||||
| <author> | <author> | |||
| <organization>National Institute of Standards and Technology</org anization> | <organization>National Institute of Standards and Technology</orga nization> | |||
| </author> | </author> | |||
| <date month="November" year="2001" /> | <date month="November" year="2001"/> | |||
| </front> | </front> | |||
| <seriesInfo name="Federal Information Processing Standard" value="19 | </reference> | |||
| 7" /> | <!-- FIPS197 --> | |||
| </reference> <!-- FIPS197 --> | ||||
| <reference anchor="SP80038A" target="https://csrc.nist.gov/publications/de tail/sp/800-38a/final"> | <reference anchor="SP80038A" target="https://csrc.nist.gov/publications/de tail/sp/800-38a/final"> | |||
| <front> | <front> | |||
| <title>Recommendation for Block Cipher Modes of Operation: Methods a | <title>Recommendation for Block Cipher Modes of Operation: Methods | |||
| nd Techniques</title> | and Techniques</title> | |||
| <author> | <seriesInfo name="DOI" value="10.6028/NIST.SP.800-38A"/> | |||
| <organization>National Institute of Standards and Technology</org | <seriesInfo name="Special Publication" value="800-38A"/> | |||
| anization> | <author fullname="Morris Dworkin" initials="M." surname="Dworkin"/> | |||
| </author> | <date month="December" year="2001"/> | |||
| <date month="December" year="2001" /> | </front> | |||
| </front> | </reference> | |||
| <seriesInfo name="Special Publication" value="800-38A" /> | <!-- SP80038A --> | |||
| </reference> <!-- SP80038A --> | ||||
| <reference anchor="SP80038D" target="https://csrc.nist.gov/publications/de tail/sp/800-38d/final"> | <reference anchor="SP80038D" target="https://csrc.nist.gov/publications/de tail/sp/800-38d/final"> | |||
| <front> | <front> | |||
| <title>Recommendation for Block Cipher Modes of Operation: Galois/Co | <title>Recommendation for Block Cipher Modes of Operation: | |||
| unter Mode (GCM) and GMAC</title> | Galois/Counter Mode (GCM) and GMAC</title> | |||
| <author> | <seriesInfo name="DOI" value="10.6028/NIST.SP.800-38D"/> | |||
| <organization>National Institute of Standards and Technology</org | <seriesInfo name="Special Publication" value="800-38D"/> | |||
| anization> | <author fullname="Morris Dworkin" initials="M." surname="Dworkin"/> | |||
| </author> | <date month="November" year="2007"/> | |||
| <date month="November" year="2007" /> | </front> | |||
| </front> | </reference> | |||
| <seriesInfo name="Special Publication" value="800-38D" /> | <!-- SP80038D --> | |||
| </reference> <!-- SP80038D --> | ||||
| <reference anchor="SP80038F" target="https://csrc.nist.gov/publications/de tail/sp/800-38f/final"> | <reference anchor="SP80038F" target="https://csrc.nist.gov/publications/de tail/sp/800-38f/final"> | |||
| <front> | <front> | |||
| <title>Recommendation for Block Cipher Modes of Operation: Methods f | <title>Recommendation for Block Cipher Modes of Operation: Methods | |||
| or Key Wrapping</title> | for Key Wrapping</title> | |||
| <author> | <seriesInfo name="DOI" value="10.6028/NIST.SP.800-38F"/> | |||
| <organization>National Institute of Standards and Technology</org | <seriesInfo name="Special Publication" value="800-38F"/> | |||
| anization> | <author fullname="Morris Dworkin" initials="M." surname="Dworkin"/> | |||
| </author> | <date month="December" year="2012"/> | |||
| <date month="December" year="2012" /> | </front> | |||
| </front> | </reference> | |||
| <seriesInfo name="Special Publication" value="800-38F" /> | <!-- SP80038F --> | |||
| </reference> <!-- SP80038F --> | ||||
| <reference anchor="FIPS180" target="https://csrc.nist.gov/publications/det ail/fips/180/4/final"> | <reference anchor="FIPS180" target="https://csrc.nist.gov/publications/det ail/fips/180/4/final"> | |||
| <front> | <front> | |||
| <title>Secure Hash Standard (SHS)</title> | <title>Secure Hash Standard (SHS)</title> | |||
| <seriesInfo name="Federal Information Processing Standard" value="18 0-4"/> | ||||
| <author> | <author> | |||
| <organization>National Institute of Standards and Technology</org anization> | <organization>National Institute of Standards and Technology</orga nization> | |||
| </author> | </author> | |||
| <date month="August" year="2015" /> | <date month="August" year="2015"/> | |||
| </front> | </front> | |||
| <seriesInfo name="Federal Information Processing Standard" value="18 | </reference> | |||
| 0-4" /> | <!-- FIPS180 --> | |||
| </reference> <!-- FIPS180 --> | ||||
| <reference anchor="FIPS186" target="https://csrc.nist.gov/publications/det ail/fips/186/4/final"> | <reference anchor="FIPS186" target="https://csrc.nist.gov/publications/det ail/fips/186/4/final"> | |||
| <front> | <front> | |||
| <title>Digital Signature Standard</title> | <title>Digital Signature Standard (DSS)</title> | |||
| <author> | <seriesInfo name="DOI" value="10.6028/NIST.FIPS.186-4"/> | |||
| <organization>National Institute of Standards and Technology</organi | <seriesInfo name="FIPS PUB" value="186-4"/> | |||
| zation> | <author> | |||
| </author> | <organization>National Institute of Standards and Technology</orga | |||
| <date month="July" year="2013" /> | nization> | |||
| </front> | </author> | |||
| <seriesInfo name="Federal Information Processing Standard" value="186-4" | <date month="July" year="2013"/> | |||
| /> | </front> | |||
| </reference> <!-- FIPS186 --> | </reference> | |||
| <!-- FIPS186 --> | ||||
| <reference anchor="SEC1" target="https://www.secg.org/sec1-v2.pdf"> | <reference anchor="SEC1" target="https://www.secg.org/sec1-v2.pdf"> | |||
| <front> | <front> | |||
| <title>SEC1: Elliptic Curve Cryptography</title> | <title>SEC1: Elliptic Curve Cryptography</title> | |||
| <author> | <author> | |||
| <organization>Standards for Efficient Cryptography Group</organizati | <organization>Standards for Efficient Cryptography Group</organiza | |||
| on> | tion> | |||
| </author> | </author> | |||
| <date month="May" year="2009"/> | <date month="May" year="2009"/> | |||
| </front> | </front> | |||
| </reference> <!-- SEC1 --> | </reference> | |||
| <!-- SEC1 --> | ||||
| &rfc2119; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
| &rfc2631; | xml"/> | |||
| &rfc3370; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc3560; | FC.2631.xml"/> | |||
| &rfc3565; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc4055; | FC.3370.xml"/> | |||
| &rfc4056; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc5083; | FC.3560.xml"/> | |||
| &rfc5084; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc5480; | FC.3565.xml"/> | |||
| &rfc5649; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc5652; | FC.4055.xml"/> | |||
| &rfc5753; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc5754; | FC.4056.xml"/> | |||
| &rfc8017; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc8174; | FC.5083.xml"/> | |||
| &rfc8551; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| &rfc8603; | FC.5084.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5480.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5649.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5652.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5753.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5754.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8017.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8551.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8603.x | ||||
| ml"/> | ||||
| <reference anchor="X208" target="https://www.itu.int/rec/T-REC-X.208-19881 | <reference anchor="X208" target="https://www.itu.int/rec/T-REC-X.208-198 | |||
| 1-W/en"> | 811-W/en"> | |||
| <front> | <front> | |||
| <title>Recommendation X.208: Specification of Abstract Syntax Notation | <title>Specification of Abstract Syntax Notation One (ASN.1)</title> | |||
| One (ASN.1)</title> | <seriesInfo name="CCITT Recommendation" value="X.208"/> | |||
| <author> | <author> | |||
| <organization>CCITT</organization> | <organization>CCITT</organization> | |||
| </author> | </author> | |||
| <date month="" year="1988"/> | <date year="1988"/> | |||
| </front> | </front> | |||
| </reference> <!-- X208 --> | </reference> | |||
| <!-- X208 --> | ||||
| <reference anchor="X209" target="https://www.itu.int/rec/T-REC-X.209-19881 1-W/en"> | <reference anchor="X209" target="https://www.itu.int/rec/T-REC-X.209-19881 1-W/en"> | |||
| <front> | <front> | |||
| <title>Recommendation X.209: Specification of Basic Encoding Rules for | <title>Specification of Basic Encoding Rules | |||
| Abstract Syntax Notation One (ASN.1)</title> | for Abstract Syntax Notation One (ASN.1)</title> | |||
| <author> | <seriesInfo name="CCITT Recommendation" value="X.209"/> | |||
| <organization>CCITT</organization> | <author> | |||
| </author> | <organization>CCITT</organization> | |||
| <date month="" year="1988"/> | </author> | |||
| </front> | <date year="1988"/> | |||
| </reference> <!-- X209 --> | </front> | |||
| </reference> | ||||
| <!-- X209 --> | ||||
| <reference anchor="X509" target="https://www.itu.int/rec/T-REC-X.509-19881 1-S"> | <reference anchor="X509" target="https://www.itu.int/rec/T-REC-X.509-19881 1-S"> | |||
| <front> | <front> | |||
| <title>Recommendation X.509: The Directory - Authentication Framework< | <title>The Directory - Authentication Framework</title> | |||
| /title> | <seriesInfo name="CCITT Recommendation" value="X.509"/> | |||
| <author> | <author> | |||
| <organization>CCITT</organization> | <organization>CCITT</organization> | |||
| </author> | </author> | |||
| <date month="" year="1988"/> | <date year="1988"/> | |||
| </front> | </front> | |||
| </reference> <!-- X509 --> | </reference> | |||
| <!-- X509 --> | ||||
| </references> <!-- Normative --> | ||||
| <references title="Informative References"> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <reference anchor="SP80059" target="https://csrc.nist.gov/publications/d etail/sp/800-59/final"> | <reference anchor="SP80059" target="https://csrc.nist.gov/publications/d etail/sp/800-59/final"> | |||
| <front> | <front> | |||
| <title>Guideline for Identifying an Information System as a Nation | <title>Guideline for Identifying an Information System as a | |||
| al Security System</title> | National Security System</title> | |||
| <author> | <seriesInfo name="DOI" value="10.6028/NIST.SP.800-59"/> | |||
| <organization>National Institute of Standards and Technology</ | <seriesInfo name="Special Publication" value="800-59"/> | |||
| organization> | <author fullname="William Barker" initials="W." surname="Barker"/> | |||
| </author> | <date month="August" year="2003"/> | |||
| <date month="August" year="2003" /> | ||||
| </front> | </front> | |||
| <seriesInfo name="Special Publication 800-59" value="" /> | </reference> | |||
| </reference> <!-- SP-800-57 --> | <!-- SP-800-57 --> | |||
| &rfc4086; | ||||
| </references> <!-- Informative --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4086. | |||
| xml"/> | ||||
| </references> | ||||
| </references> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 148 change blocks. | ||||
| 837 lines changed or deleted | 754 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/ | ||||