<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;"> <!-- word joiner -->
  <!ENTITY mu      "&#956;"> <!-- Greek letter mu -->
]>

<rfc
      xmlns:xi="http://www.w3.org/2001/XInclude"
      category="info"
      docName="draft-becker-cnsa2-smime-profile-02"
      ipr="trust200902"
      obsoletes="8755"
      updates=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="4"
      symRefs="true"
      sortRefs="true"
      version="3"
	  consensus="true">


 <front>

   <title abbrev="CNSA2 S/MIME Profile">Commercial National Security Algorithm (CNSA) Suite 2.0 Profile for Secure/Multipurpose Internet Mail Extensions (S/MIME)</title>
    <seriesInfo name="Internet-Draft" value="draft-becker-cnsa2-smime-profile-02"/> <!-- stream="independent"/> -->

	<author fullname="Michael Jenkins" initials="M." surname="Jenkins">
      <organization abbrev="NSA-CCSS">National Security Agency</organization>
      <address>
        <email>mjjenki@cyber.nsa.gov</email>
      </address>
    </author>

	    <author fullname="Alison Becker" initials="A." surname="Becker">
      <organization></organization>
      <address>
        <email>aebecke@uwe.nsa.gov</email>
      </address>
    </author>
	
    <date year="2026"/>

   <abstract>
      <t>This document defines a base profile of S/MIME for use with the US Commercial National Security Algorithm (CNSA) 2.0 Suite, a cybersecurity advisory published by the United States Government which outlines quantum-resistant cryptographic algorithm policy for US national security applications.</t>
	  
	  <t>This profile applies to the capabilities, configuration, and operation of all components of US National Security Systems that employ S/MIME. It is also appropriate for all other US Government systems that process high-value information.</t>
	  
	  <t>This memo is not an IETF standard, and has not been shown to have IETF community consensus. This profile is made publicly available for use by developers and operators of these and any other system deployments.</t>

	    		
   </abstract>
  </front>
  
  <middle>
 
 
 <!--  ***** INTRO, TERMINOLOGY, CNSA ***** -->
 
    <section numbered="true" toc="default">
      <name>Introduction</name>
	    <t>This document specifies a profile of S/MIME <xref target="RFC8551" format="default"/> to comply with the National Security Agency's (NSA) Commercial National Security Algorithm (CNSA) 2.0 Suite <xref target="cnsafaq" format="default"/>. This profile applies to the capabilities, configuration, and operation of all components of US National Security Systems (NSS) <xref target="SP80059" format="default"/> that employ S/MIME. This profile is also appropriate for all other US Government systems that process high-value information, and is made publicly available for use by developers and operators of these and any other system deployments.  
	    </t>
		
		<t>This document does not define any cryptographic algorithm, and does not specify how to use any cryptographic algorithm not currently supported by S/MIME; instead, it profiles CNSA 2.0-compliant conventions for S/MIME, and uses algorithms already specified for use in S/MIME that are also allowed by the CNSA Suite 2.0. This document applies to all CNSA Suite solutions that make use of S/MIME. 
		</t>
		
		<t>The reader is assumed to have familiarity with <xref target="RFC8551" format="default"/>. 
		</t>
		
		<t>This memo is not an IETF standard, and does not represent IETF community consensus.</t>
		
	</section>
	
	<section numbered="true" toc="default"> 
	  <name>Terminology</name> 
		<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" format="default"/> <xref target="RFC8174" format ="default"/> when, and only when, they appear in all capitals, as shown here. Normative language does not apply beyond the scope of this profile.
	  </t>
	  
	  <t> This is a profile of S/MIME <xref target="RFC8551" format="default"/>. Therefore, the requirements language in this memo may be different than that found in the underlying standards. 
	  </t> 
	  
	  <t>All references to "CNSA" in this document refer to CNSA 2.0 <xref target="cnsafaq" format="default"/>, unless otherwise stated.</t>
	  
	</section>
	
	<section numbered="true" toc="default">
	  <name>The Commercial National Security Algorithm Suite</name>
		<t>The CNSA Suite is the set of approved commercial algorithms that can be used by vendors and IT users to meet cybersecurity and interoperability requirements for NSS. The initial suite of CNSA Suite algorithms, Suite B, established a baseline for use of commercial algorithms to protect classified information. The following suite, CNSA 1.0, served as a bridge between the original set and a fully quantum-resistant cryptographic capability. The current suite, CNSA 2.0, seeks to provide fully quantum-resistant protection <xref target="cnsafaq" format="default"/>. 
		</t>
		
	    <t>This profile uses CNSA 2.0 compliant algorithms: ML-DSA-87 <xref target="FIPS204" format="default"/> for signing, and ML-KEM-1024 <xref target="FIPS203" format="default"/> for key establishment. ML-DSA-87 and ML-KEM-1024 together with SHA-384, SHA-512, AES-256, LMS, and XMSS comprise the CNSA Suite 2.0. 
		</t>
		
		<t>The NSA is authoring a set of RFCs, including this one, to provide updated guidance for using the CNSA 2.0 Suite in certain IETF protocols. These RFCs can be used in conjunction with other RFCs and cryptographic guidance (e.g., NIST Special Publications) to properly protect Internet traffic and data-at-rest for US Government NSS. 
		</t>
 
	</section>


<!--  ***** CNSA 2.0 GENERAL GUIDANCE ***** -->

	<section numbered="true" toc="default">
	  <name>Requirements and Assumptions</name>
	  
	  <t> CMS values are generated using ASN.1 <xref target="X680" format="default"/> and the Distinguished Encoding Rules (DER) <xref target="X690" format="default"/>.</t>
	  
	  <t> For key agreement, CNSA compliant implementations MUST use ML-KEM-1024. Details provided in Section 7.</t>
	  
	  <t> For digital signature, CNSA compliant implementations MUST use ML-DSA-87.</t>
	  
	  <t> For CNSA Suite applications, public key certificates used to verify S/MIME signatures MUST be compliant with the CNSA Suite Certificate and Certificate Revocation List (CRL) profile specified in <xref target="I-D.jenkins-cnsa2-pkix-profile" format="default"/>. </t>
	  
	  <t>Within the CMS signed-data content type, signature algorithm identifiers are located in the signatureAlgorithm field of SignerInfo structures contained within the SignedData. In addition, signature algorithm identifiers are located in the SignerInfo signatureAlgorithm field of countersignature attributes. Specific requirements for digital signatures are given in Section 6; compliant implementations MUST consider signatures not meeting these requirements as invalid.  </t>
	  
	  <t> This document assumes that the required trust anchors have been securely provisioned to the client. </t>
	  
	  <t>All implementations MUST use SHA-384 or SHA-512 for hashing, AES-GCM for content encryption, and AES-KWP for key encryption. The requirements for these are given in the following sections.</t>
	  
	  </section>
	  
	<section numbered="true" toc="default">
	  <name>Message Digest</name>
		
		<t> CNSA-compliant implementations MUST use either SHA-384 or SHA-512 for message digest. </t>
		
		<t><xref target="RFC5754" format="default"/> specifies the conventions for using SHA-384 or SHA-512 with the Cryptographic Message Syntax (CMS). CNSA-compliant S/MIME implementations MUST follow the conventions in <xref target="RFC5754" format="default"/>. </t>
		
		<t> Within the CMS signed-data content type, message digest algorithm identifiers are located in the SignedData digestAlgorithms field and the SignerInfo digestAlgorithm field.</t>
		
		<t> The SHA-384 message digest algorithm is defined in FIPS 180 <xref target="SHS" format="default"/>, and the algorithm identifier for SHA-384 is defined in <xref target="RFC5754" format="default"/> as follows:</t>
		
		<t indent="3">id-sha384 OBJECT IDENTIFIER ::= {</t>
        <t indent="3">joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) </t>
        <t indent="3">csor(3) nistalgorithm(4) hashalgs(2) 2 }</t>
		
		<t>The SHA-512 message digest algorithm is defined in FIPS 180 <xref target="SHS" format="default"/>, and the algorithm identifier for SHA-512 is defined in <xref target="RFC5754" format="default"/> as follows:  </t>
		
		<t indent="3">id-sha512 OBJECT IDENTIFIER ::= {  </t>
        <t indent="3">joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) </t>
        <t indent="3"> csor(3) nistalgorithm(4) hashalgs(2) 3 } </t>

		<t> <xref target="RFC5754" format="default"/> defines the AlgorithmIdentifier parameters field as OPTIONAL. Implementations MUST accept SHA-384 and SHA-512 AlgorithmIdentifiers with absent parameters, or with NULL parameters.  As specified in <xref target="RFC5754" format="default"/>, implementations MUST generate SHA-384 or SHA-512 AlgorithmIdentifiers with absent parameters.  </t> 

	</section>


	<section numbered="true" toc="default">
      <name>Digital Signature</name>
	  
	  <t>When an S/MIME message includes signed attributes (signedAttrs) in the header, the input to the signing algorithm is signedAttrs, which MUST include the messageDigest representation of the encapsulated message, as described above.</t>
	  
	  <t>CNSA-compliant implementations MUST use ML-DSA-87 as the digital signature algorithm in S/MIME, using the identifier defined in <xref target="RFC9881"/>. The ML-DSA algorithm incorporates an internal hashing function, so there is no need to apply a hashing algorithm before signing. Where an application or implementation makes it more efficient to perform hashing externally, the external-μ mechanism described in Step 6 of Algorithm 7 of <xref target="FIPS204"/> and Section 8 of <xref target="RFC9881"/> MAY be used. HashML-DSA is not permitted.</t>
	  
	</section>
		    
	
	<section numbered="true" toc="default">
      <name>Key Establishment</name>
	
	  	<section numbered="true" toc="default">
			<name>KEM </name>
			<t> CNSA-compliant implementations MUST use ML-KEM-1024 for key agreement. </t> 
			
			<t> A CMS originator MUST implement the Encapsulate algorithm from ML-KEM, and a CMS responder MUST implement the Decapsulate algorithm from ML-KEM. </t>
			
			<t> CNSA-compliant implementations MUST NOT support the user keying material (ukm) field defined in <xref target="RFC9629" format="default"/>, and therefore ukm MUST NOT be included as input to the key-derivation function. </t>
			
		</section>
		
		<section numbered="true" toc="default">
			<name>KDF </name>
			<t> A CNSA compliant implementation MUST use HKDF as described in <xref target="RFC9936" /> with SHA-384 or SHA-512 for KDF computation.</t>
		</section>
		
		<section numbered="true" toc="default">
			<name>AES Key Wrap</name>
			<t> Within the CMS enveloped-data content type, key wrap algorithm identifiers are located in the KeyWrapAlgorithm parameters within the EnvelopedData RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm field.</t>
			
			<t> For CNSA-compliant implementations, the KeyWrapAlgorithm MUST be </t>
			<t indent="3"> id-aes256-wrap-pad </t>
			
			<t>The required algorithm identifier, specified in <xref target="RFC5649" format="default"/> is: </t>
			
			<t indent="3">id-aes256-wrap-pad OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) </t>
			<t indent="4"> country(16) us(840) organization(1) gov(101) csor(3)</t>
			<t indent="4"> nistAlgorithm(4) aes(1) 48 }</t>
			
		</section>
		
		
	</section>
	
		
		<section numbered="true" toc="default">
          <name>Content Encryption</name>
		    <t> CNSA-compliant S/MIME implementations using the authenticated-enveloped-data content type <xref target="RFC5083" format="default"/> MUST use AES <xref target="AES" format="default"/> in Galois Counter Mode (GCM) <xref target="GCM" format="default"/> as the content authenticated encryption algorithm and MUST follow the conventions for using AES-GCM with the CMS defined in <xref target="RFC5084" format="default"/>. </t>
			
			 <t>Within the CMS authenticated-enveloped-data content type, content authenticated-encryption algorithm identifiers are located in the AuthEnvelopedData EncryptedContentInfo contentEncryptionAlgorithm field. The content-encryption algorithm is used to encipher the content located in the AuthEnvelopedData EncryptedContentInfo encryptedContent field. </t>
			 
			 <t>The AES-GCM content authenticated-encryption algorithm is described in <xref target="AES" format="default"/> and <xref target="GCM" format="default"/>. The algorithm identifier for AES-256 in GCM mode is: </t>
			 
			 <t indent="3"> id-aes256-GCM OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) </t>
			  <t indent="4">country(16) us(840) organization(1) gov(101) csor(3)  </t>
			   <t indent="4"> nistAlgorithm(4) aes(1) 46 }</t>
			 
			 <t> The AlgorithmIdentifier parameters field MUST be present, and the parameters field must contain GCMParameters:</t>
			 
			  <t indent="3"> GCMParameters ::= SEQUENCE { ) </t>
			  <t indent="4">aes-nonce OCTET STRING,   </t>
			   <t indent="4">aes-ICVlen AES-GCM-ICVlen DEFAULT 12 }</t>
			   
			 <t>The authentication tag length (aes-ICVlen) SHALL be 16 (indicating a tag length of 128 bits).  </t>
			 
			 <t>The initialization vector (aes-nonce) MUST be 12 bytes in length and MUST be generated in accordance with Section 8.2 of <xref target="GCM" format="default"/>. AES-GCM loses security catastrophically if a nonce is reused with a given key on more than one distinct set of input data. Therefore, a fresh content encryption key MUST be generated for each message. <!-- Should we require this to be 12 bytes --> </t>
			 
			
		</section>
	

<!--  ***** Security Considerations ***** -->
	
	<section numbered="true" toc="default">
	  <name>Security Considerations</name>	
	    <t>Most of the security considerations for this document are described in <xref target="RFC8551" format="default"/> and <xref target="RFC9629" format="default"/>. Additional security considerations for the use of ML-KEM and ML-DSA in S/MIME can be found in <xref target="RFC9936"/> and <xref target="RFC9882"/>, respectively.</t>
		
		<t>Public-key certificates MUST be properly validated according to <xref target="RFC5280" />, including timely revocation checking by CRL or OSCP <xref target="RFC6960" />.
		</t>

	</section>	
	
	
	<section anchor="app-additional" numbered="true" toc="default">
      <name>IANA Considerations</name>
		<t>This document has no IANA actions</t>
	</section>
	
</middle>

 <back>
    <!-- References split into informative and normative -->

   <references>
      <name>References</name>
		<references>
		  <name>Normative References</name>
	   	
		<!--  ***** AES ***** -->
		<reference anchor="AES" target="https://nvlpubs.nist.gov/nistpubs/fips/NIST.FIPS.197.pdf" quoteTitle="true" derivedAnchor="AES">
          <front>
            <title>Announcing the ADVANCED ENCRYPTION STANDARD (AES)</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date month="November" year="2001"/>
          </front>
          <seriesInfo name="FIPS" value="197"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.197"/>
        </reference>
		
		<!--  ***** GCM ***** -->		
		<reference anchor="GCM" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf" quoteTitle="true" derivedAnchor="GCM">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
            <author fullname="Morris Dworkin" initials="M" surname="Dworkin"/>
            <date month="November" year="2007"/>
          </front>
          <seriesInfo name="NIST Special Publication" value="800-38D"/>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-38D"/>
        </reference>


		<!--  ***** SHA ***** -->
		<reference anchor="SHS" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf" quoteTitle="true" derivedAnchor="SHS">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date month="August" year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/>
          <seriesInfo name="FIPS PUB" value="180-4"/>
        </reference>

		<!--  ***** ML-KEM FIPS ***** -->
		<reference anchor="FIPS203" target="https://doi.org/10.6028/NIST.FIPS.203" quoteTitle="true" derivedAnchor="FIPS203">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
			<seriesInfo name="(Department of Commerce, Washington, D.C.)," value="Federal Information Processing Standards Publication (FIPS)"/>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology (2024)</organization>
            </author>
          </front>
          <seriesInfo name="NIST FIPS" value="203"/>
        </reference>		
		
		<!--  ***** ML-DSA FIPS ***** -->
		<reference anchor="FIPS204" target="https://doi.org/10.6028/NIST.FIPS.204" quoteTitle="true" derivedAnchor="FIPS204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
			<seriesInfo name="(Department of Commerce, Washington, D.C.)," value="Federal Information Processing Standards Publication (FIPS)"/>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology (2024)</organization>
            </author>
          </front>
          <seriesInfo name="NIST FIPS" value="204"/>
        </reference>

		<!--  ***** CNSA2 PKIX ***** 
		<reference anchor="I-D.jenkins-cnsa2-pkix-profile" target="https://datatracker.ietf.org/doc/draft-jenkins-cnsa2-pkix-profile/">
         <front>
            <title>Commercial National Security Algorithm Suite Certificate and Certificate Revocation List Profile</title>
            <author initials="M." surname="Jenkins" fullname="M. Jenkins">
              <organization/>
            </author>
			<author initials="A." surname="Becker" fullname="A. Becker">
              <organization/>
            </author>
            <date month="January" year="2025"/>
         </front>
		</reference>
-->

		<!--  ***** CNSA 2.0 ***** -->
		<reference anchor="cnsafaq" target="https://media.defense.gov/2022/Sep/07/2003071836/-1/-1/0/CSI_CNSA_2.0_FAQ_.PDF" quoteTitle="true" derivedAnchor="cnsafaq">
		  <front>
			<title>The Commercial National Security Algorithm Suite 2.0 and Quantum Computing FAQ</title>
			<seriesInfo name="December" value="2024"/>
			<author>
			  <organization showOnFrontPage="true">National Security Agency</organization>
			</author>
		  </front>
		</reference>
		
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.jenkins-cnsa2-pkix-profile.xml"/>
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <!-- RFC terms -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5083.xml"/> <!-- CMS AuthEnvData ct -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5084.xml"/> <!-- AES GCM for CMS -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml"/> <!-- PKIX Cert&CRL -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5649.xml"/> <!-- AES KW w pad -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5754.xml"/> <!-- SHA2 for CMS -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6960.xml"/> <!-- OCSP -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <!-- RFC terms2 -->	
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8551.xml"/> <!-- S/MIME v4 -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9629.xml"/> <!-- CMS KEM Recipient Info -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9881.xml"/> <!-- ML-DSA certificates -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9882.xml"/> <!-- ML-DSA for CMS -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9935.xml"/> <!-- ML-KEM certificates -->
		<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9936.xml"/> <!-- ML-KEM for CMS -->
		
     </references>
	 
	 <references>
	   <name>Informative References</name>

		<!--  ***** SP 800-59 ***** -->
		<reference anchor="SP80059" target="https://csrc.nist.gov/publications/detail/sp/800-59/final" quoteTitle="true" derivedAnchor="SP80059">
          <front>
            <title>Guideline for Identifying an Information System as a National Security System</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
          </front>
		  <seriesInfo name="Special Publication 59," value="DOI 10.6028/NIST.SP.800-59"/>
          <seriesInfo name="August" value="2003"/>
        </reference>

		<reference anchor="X680" target="https://www.itu.int/rec/T-REC-X.680-X.693-202102-I/en" quoteTitle="true" derivedAnchor="X680">
          <front>
            <title>Abstract Syntax Notation One (ASN.1)</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
          </front>
		  <seriesInfo name="ITU-T Recommendation X.680" value="2021"/>
         </reference>

		<reference anchor="X690" target="https://www.https://www.itu.int/rec/T-REC-X.690-202102-I/en" quoteTitle="true" derivedAnchor="X690">
          <front>
            <title>ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
          </front>
		  <seriesInfo name="ITU-T Recommendation X.690" value="2021"/>
         </reference>
		 
        </references>
	
   </references>




			
 </back>

</rfc>
	
 