<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.22 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sfluhrer-ipsecme-ikev2-mldsa-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.26.0 -->
  <front>
    <title abbrev="IKEv2 ML-DSA">IKEv2 Support of ML-DSA</title>
    <seriesInfo name="Internet-Draft" value="draft-sfluhrer-ipsecme-ikev2-mldsa-00"/>
    <author fullname="Scott Fluhrer">
      <organization>Cisco Systems</organization>
      <address>
        <email>sfluhrer@cisco.com</email>
      </address>
    </author>
    <date year="2025" month="January" day="31"/>
    <area>sec</area>
    <workgroup>IPsecME</workgroup>
    <keyword>ML-DSA</keyword>
    <abstract>
      <?line 47?>

<t>One IPsec area that would be impacted by Cryptographically Relevant
Quantum Computer (CRQC) is IKEv2 authentication based on traditional
asymmetric cryptograph algorithms: e.g RSA, ECDSA; which are widely
deployed authentication options of IKEv2.
NIST has recently standardized ML-DSA, which is a signature algorithm believed to be secure against Quantum Computers.
This document describes how to use ML-DSA with IKEv2 as an auhentication scheme.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://sfluhrer.github.io/ikev2-mldsa-support/draft-sfluhrer-ikev2-mldsa-support.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-sfluhrer-ipsecme-ikev2-mldsa/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        IP Security Maintenance and Extensions Security Area mailing list (<eref target="mailto:cfrg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ipsecme/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cfrg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/sfluhrer/ikev2-mldsa-support"/>.</t>
    </note>
  </front>
  <middle>
    <?line 56?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A Cryptographically Relevant Quantum Computer (CRQC) could break
   traditional asymmetric cryptograph algorithms: e.g RSA, ECDSA; which
   are widely deployed authentication options of IKEv2.
   NIST has recently published the postquantum digitial signature algorithm ML-DSA <xref target="FIPS204"/>.</t>
      <t>This document describes how to use this algorithm for authentication within IKEv2 <xref target="RFC7296"/>, as a replacement for the traditional signature algorithms (RSA, ECDSA).</t>
      <t>Each IPsec peer announce the support for ML-DSA authentication via
   SUPPORTED_AUTH_METHODS notification as defined in <xref target="RFC9593"/>,
   generates and verifies AUTH payload using ML-DSA.</t>
      <section anchor="background-on-ml-dsa">
        <name>Background on ML-DSA</name>
        <t>ML-DSA (as specified in FIPS 204) is a signature algorithm that is believed to be secure against attackers who have a Quantum Computer available to them.
   There are three strengths defined for it (with the parameter sets being known as ML-DSA-44, ML-DSA-65 and ML-DSA-87).
   In addition, for each defined parameter set, there are two versions, the 'pure' version (where ML-DSA directly signs the message) and a 'prehashed' version (where ML-DSA signs a hash that was computed outside of ML-DSA).
   For this protocol, we will always use the pure version.</t>
        <t>In addition, ML-DSA also has a 'context' input, which is a short string that is common to the sender and the recceiver.
   It is intended to allow for domain separation between separate uses of the same public key.</t>
        <t>FIPS 204 also allows ML-DSA to be run in either determanistic or 'hedged' mode (where randomness is applied to the signature operation).
   We place no requirement on which is used; the implementation should select based on the quality of their random number source.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="protocol-changes">
      <name>Protocol Changes</name>
      <section anchor="initial-negotiation">
        <name>Initial Negotiation</name>
        <t>Both sides will need to inform the other that they implement ML-DSA signatures.
To do so, they will use the <xref target="RFC9593"/> mechanism to specify support for ML-DSA signatures, using the Multi-octet Announcement, with the following Algorithm Idenfifiers:</t>
        <ul spacing="normal">
          <li>
            <t>ML-DSA-44 -&gt; <tt>30 0b 06 09 60 86 48 01 65 03 04 03 11</tt></t>
          </li>
          <li>
            <t>ML-DSA-65 -&gt; <tt>30 0b 06 09 60 86 48 01 65 03 04 03 12</tt></t>
          </li>
          <li>
            <t>ML-DSA-87 -&gt; <tt>30 0b 06 09 60 86 48 01 65 03 04 03 13</tt></t>
          </li>
        </ul>
        <t>TODO: Verify that these are the DER OID values that NIST has specified</t>
        <t>If an implementation supports multiple ML-DSA parameter sets, it will list every parameter set it does support.</t>
        <t>If the peer has not specified support for a parameter set in a SUPPORTED_AUTH_METHODS notify, that ML-DSA parameter set <bcp14>MUST NOT</bcp14> be used.</t>
        <t>In addition, the SIGNATURE_HASH_ALGORITHMS Notify payload must also be sent (see <xref target="RFC7427"/>), listing the supported hash functions.</t>
      </section>
      <section anchor="auth-payload-generation">
        <name>Auth Payload Generation</name>
        <t>If this implementation has an ML-DSA private key and the corresponding ML-DSA public certificate, and the peer has indicated support for the parameter set, the implementation will generate the AUTH payload as specified in section 3 of <xref target="RFC7427"/>, using the ML-DSA algorithm as the signature algorithm, and using the fixed context string "IKEv2 AUTH" (<tt>49 4b 45 76 32 20 41 55 54 48</tt>).</t>
        <t>That is, the implementation would take either the InitiatorSignedOctets string or the ResponderSignedOctets string (depending on whether they are the initiator or the responder, see section 2.15 of RFC 7296 for how those strings are constructed), compute the hash of that string (using one of the hashes listed in the peer's SIGNATURE_HASH_ALGORITHMS notify).
Then, the implementation hands that hash to ML-DSA to be signed (in pure mode, using the fixed context string "IKEv2 AUTH".
The resulting signature is the Signature Value.
Note that ML-DSA will hash the message to be signed again; this is expected.</t>
        <t>TODO: We've defined the method two different ways - if we keep both, we need to make sure that they are equivalent.</t>
      </section>
      <section anchor="auth-payload-validation">
        <name>Auth Payload Validation</name>
        <t>If this implementation receives a certificate with an ML-DSA public key, it will process the AUTH payload as implied by RFC7427.
That is, it will recover the hash function from the AlgorithmIdentifier ASN.1 object.
Then, it will take the ResponderSignedOctets or InitiatorSignedOctets string (depending on the whether they are the initiator or the responder), and then hash the string.
Then, it will before an ML-DSA verification, using the hash as the message, the public key from the certificate, the string "IKEv2 AUTH" as the context string, and the signature value from the AUTH payload.
If this signature verification fails, the implementation <bcp14>MUST</bcp14> reject the IKEv2 message.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The only security consideration that this adds is that the user must trust the strength of the ML-DSA signature operation.</t>
    </section>
    <section anchor="discussion">
      <name>Discussion</name>
      <t>We made several arbitrary design decisions in this draft.
This section contains the reasoning behind those design decision, and why we did not select the alternative possibilities.
Of course, these decisions are open to change - this is just a first cut.</t>
      <section anchor="ml-dsa-and-prehashing">
        <name>ML-DSA and Prehashing</name>
        <t>The signature architecture within IKE was designed around RSA (and later extended to ECDSA).
In this architecture, the actual message (the SignedOctets) are first hashed (using a hash that the verifier has indicated support for), and then passed for the remaining part of the signature generation processing.
That is, it is designed for signature algorithms that first apply one of a number of hash functions to the message and then perform processing on that hash.
ML-DSA doesn't fit cleanly into this architecture; internally it adds a prepend to the message to be signed, and then does a fixed SHAKE256 (generating 64 bytes).</t>
        <t>We see three ways to address this mismatch</t>
        <t>The first is to note that ML-DSA has prehashed parameter sets; that is, ones designed to sign a message that has been hashed by an external source.
At first place, this would appear to be an ideal solution, however it turns out that there are a number of practical issues.
The first is that the prehashed version of ML-DSA would appear to be rarely used, and so it is not unlikely that support for it within crypto libraries may be lacking.
The second is that the public keys for the prehashed versions of ML-DSA parameter sets use different OIDs; this means that the certificates for IKEv2 would necessarily be different than certificates for other protocols (and some CAs might not support issuing certificates for prehashed ML-DSA, again because of the lack of use).
The third is that some users have expressed a desire not to use the prehashed parameter sets of ML-DSA.</t>
        <t>The second is to note that, while IKEv2 normally acts this way, it doesn't always.
EdDSA has a similar constraint on not working cleanly with the standard 'hash and then sign' paradigm, and so the existing <xref target="RFC8420"/> provides an alternative method, which ML-DSA would cleanly fit into.
We could certainly adopt this same strategy; our concern would be that it might be more difficult for IKEv2 implementors which do not already have support for EdDSA.</t>
        <t>The third way (which this current draft adopts) is what we can refer to as 'fake prehashing'; IKEv2 would generate the hash as current, but instead of running ML-DSA in prehash mode, we have ML-DSA sign it in pure mode as if it was the message.
This is a violation of the spirit, if not the letter of FIPS 204.
However, it is secure (assuming the hash function is strong), and fits in cleanly with both the existing IKEv2 architecture, and what crypto libraries provide.
Because this doesn't have any practical downsides, we opted for this option.</t>
      </section>
      <section anchor="ml-dsa-context">
        <name>ML-DSA Context</name>
        <t>An additional feature that ML-DSA provides it allows the signer and the verifier to provide a 'context string'.
The signature would verify only if the context strings that are provided by both the signer and the verifier match.
The reason behind this is to ensure that if a public key is used for multiple purposes, a signature for one purpose cannot be used by an adversary in another.
In our case, if the same certificate where used to sign both IKEv2 and TLS exchanges, an adversary could not possibly take the signature from an TLS exchange and try to use it within an IKEv2 exchange.</t>
        <t>This really is not a necessary security safe guard; the messages that are actually signed in both cases are distinct enough that an adversary could not actually take advantage of this, even without the protection.</t>
        <t>However, given that ML-DSA does provide such a service, and it appears that crypto libraries do support a nonempty context, we cannot see a reason not to use it.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
      <t>The additional OIDs that this uses have been defined by NIST and do not need to be registered by IANA</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS204" target="https://doi.org/10.6028/NIST.FIPS.204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="NIST" value="FIPS 204"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7296">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="RFC7427">
          <front>
            <title>Signature Authentication in the Internet Key Exchange Version 2 (IKEv2)</title>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <author fullname="J. Snyder" initials="J." surname="Snyder"/>
            <date month="January" year="2015"/>
            <abstract>
              <t>The Internet Key Exchange Version 2 (IKEv2) protocol has limited support for the Elliptic Curve Digital Signature Algorithm (ECDSA). The current version only includes support for three Elliptic Curve groups, and there is a fixed hash algorithm tied to each group. This document generalizes IKEv2 signature support to allow any signature method supported by PKIX and also adds signature hash algorithm negotiation. This is a generic mechanism and is not limited to ECDSA; it can also be used with other signature algorithms.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7427"/>
          <seriesInfo name="DOI" value="10.17487/RFC7427"/>
        </reference>
        <reference anchor="RFC8420">
          <front>
            <title>Using the Edwards-Curve Digital Signature Algorithm (EdDSA) in the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes the use of the Edwards-curve Digital Signature Algorithm (EdDSA) in the Internet Key Exchange Protocol Version 2 (IKEv2).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8420"/>
          <seriesInfo name="DOI" value="10.17487/RFC8420"/>
        </reference>
        <reference anchor="RFC9593">
          <front>
            <title>Announcing Supported Authentication Methods in the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="V. Smyslov" initials="V." surname="Smyslov"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>This specification defines a mechanism that allows implementations of the Internet Key Exchange Protocol Version 2 (IKEv2) to indicate the list of supported authentication methods to their peers while establishing IKEv2 Security Associations (SAs). This mechanism improves interoperability when IKEv2 partners are configured with multiple credentials of different types for authenticating each other.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9593"/>
          <seriesInfo name="DOI" value="10.17487/RFC9593"/>
        </reference>
      </references>
    </references>
    <?line 195?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>No acknowledgements yet (no one has actually seen this draft until now)</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
AA==

-->

</rfc>
