<?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.38 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sfluhrer-cfrg-ml-kem-security-considerations-05" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="ML-KEM Security">ML-KEM Security Considerations</title>
    <seriesInfo name="Internet-Draft" value="draft-sfluhrer-cfrg-ml-kem-security-considerations-05"/>
    <author fullname="Scott Fluhrer">
      <organization>Cisco Systems</organization>
      <address>
        <email>sfluhrer@cisco.com</email>
      </address>
    </author>
    <author fullname="Quynh Dang">
      <organization abbrev="NIST">National Institute of Standards and Technology</organization>
      <address>
        <email>Quynh.Dang@nist.gov</email>
      </address>
    </author>
    <author initials="J." surname="Preuß Mattsson" fullname="John Preuß Mattsson">
      <organization>Ericsson</organization>
      <address>
        <email>john.mattsson@ericsson.com</email>
      </address>
    </author>
    <author fullname="Kevin Milner">
      <organization>Individual</organization>
      <address>
        <email>kamilner@kamilner.ca</email>
      </address>
    </author>
    <author fullname="Daniel Shiu">
      <organization>Arqit Quantum Inc</organization>
      <address>
        <email>daniel.shiu@arqit.uk</email>
      </address>
    </author>
    <date year="2026" month="May" day="13"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>ML-KEM</keyword>
    <abstract>
      <?line 110?>

<t>NIST standardized ML-KEM as FIPS 203 in August 2024.  This document discusses
how to use ML-KEM within protocols - that is, what problem it solves,
and what you need to do to use it securely.</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/ml-kem-security-considerations/draft-sfluhrer-cfrg-ml-kem-security-considerations.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-sfluhrer-cfrg-ml-kem-security-considerations/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Crypto Forum Research Group mailing list (<eref target="mailto:cfrg@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg/"/>.
        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/ml-kem-security-considerations"/>.</t>
    </note>
  </front>
  <middle>
    <?line 116?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A Cryptographically Relevant Quantum Computer (CRQC) is a large and reliable Quantum Computer that can break protocols which rely on the
traditional RSA, DH, or ECDH methods of securely exchanging keys.  Even
though it is not believed that, at the time of this writing, there exists a CRQC,
there still remains the possibility that an adversary may record the protocol
exchange, and then later (when they have access to a CRQC) go ahead and read
the traffic.</t>
      <t>Because of this threat, NIST has published FIPS 203 <xref target="FIPS203"/>, which standardizes a method for allowing two systems to securely exchange keying material and which is not vulnerable to a CRQC.
This method is based on module lattices, and is called ML-KEM.</t>
      <t>ML-KEM is a Key Encapsulation Mechanism (KEM), which can be used to generate a shared secret key between two parties.
A KEM is a public key mechanism where one side (Alice) can generate a public/private key pair, and send the public key to the other side (Bob).
Bob then can use it to generate both a ciphertext and a shared secret key.
Bob then sends the ciphertext to Alice, who uses her private key to generate the shared secret key.
The idea is that someone in the middle, listening into the exchanged public keys and ciphertexts will not be able to recover the shared secret key that Alice and Bob learn.
Hence, Alice and Bob can use their shared secret key to establish secure symmetric communication.
For ML-KEM, this shared secret is always 32 bytes, and is indistinguishable from random by an adversary (that is, it could be used directly as a symmetric key).</t>
      <t>One common misunderstanding of the term KEM is the expectation that Bob freely chooses the
shared secret, and encrypts that when sending to Alice.
While there do exist KEMs where this is true, this is not true for ML-KEM.
In ML-KEM, randomness from both sides is used to contribute to the
shared secret. That is, ML-KEM internally generates the shared secret in a
way that Bob cannot select the value. Now, Bob can generate a number of
ciphertext/shared secret pairs, and select the shared secret that he prefers,
but he cannot freely choose it or make the secrets across two different ML-KEM exchanges be
equal.</t>
      <t>A KEM (such as ML-KEM) sounds like it may be a drop-in replacement for
Diffie-Hellman (and in some scenarios, it can be).
However this is not always the case. In Diffie-Hellman, the parties
exchange two public keys, whereas in a KEM, the ciphertext is necessarily a
function of Alice's public key, and thus can only be useful with that
specific public key. Additionally, a KEM differs from Diffie-Hellman which is
asynchronous and non-interactive. In particular, for an 'ephemeral-ephemeral'
key establishment, an encapsulator cannot pre-emptively initiate a key
establishment, but requires an encapsulation key. Nor can participants compute
parts of the key establishment in parallel as is the case with
Diffie-Hellman. As long as the application can handle larger public keys and
ciphertexts, a KEM is a drop-in replacement for 'ephemeral-ephemeral' key
exchange in protocols like TLS <xref target="RFC8446"/>, SSH <xref target="RFC4253"/>, Wireguard <xref target="WIRE"/>, and EDHOC <xref target="RFC9528"/> as well as
'static-ephemeral' key exchange in protocols like ECIES/HPKE <xref target="RFC9180"/>,
that is, in cases where Alice has a long term public key, and Bob can use that long term public key to establish communication.
A KEM is not a drop-in replacement in applications such as the Diffie-Hellman
ratchet in Signal <xref target="SIGNAL"/>, implicit 'ephemeral-static' DH authentication
in Noise <xref target="NOISE"/>, WireGuard <xref target="WIRE"/>, and EDHOC <xref target="RFC9528"/>, and
'static-static' configurations in CMS <xref target="RFC6278"/> and Group OSCORE
<xref target="I-D.ietf-core-oscore-groupcomm"/>, where both sides have long-term public
keys.</t>
      <t>ML-KEM can also be used to perform public key encryption, that is, where a sender encrypts a message with a public key, and only the holder of the private key can decrypt the message.
To use ML-KEM for this task, it is recommended that you use it within the Hybrid Public Key Encryption framework <xref target="RFC9180"/> to perform the operations.
You can use <xref target="I-D.draft-ietf-hpke-pq"/>, which defines three ML-KEM parameter sets that have been proposed for HPKE.</t>
    </section>
    <section anchor="using-ml-kem">
      <name>Using ML-KEM</name>
      <t>To use ML-KEM, there are three steps involved:</t>
      <section anchor="ml-kem-key-generation">
        <name>ML-KEM Key Generation</name>
        <t>The first step for Alice is to generate a public and private keypair.</t>
        <t>In FIPS 203, the key generation function is <tt>ML-KEM.KeyGen()</tt> (see section 7.1 of
<xref target="FIPS203"/>).  It internally calls the random number generator for a seed and
produces both a public key (known as an encapsulation key in FIPS 203) and a
private key (known as a decapsulation key). The seed can be securely stored,
but must be treated with the same safeguards as the private key.
The seed format allows fast
reconstruction of the expanded key pair format, and elides the need for
format checks of the expanded key formats.
Other intermediate data besides the matrix A_hat must be securely deleted.
A_hat may be saved for repeated Decapsulation operation(s) with the same decapsulation key.</t>
        <t>The public key can be freely published (and Bob will need it for his part of
the process); this step may be performed simply by transmitting the key to
Bob.  However, the private key (in either format) must be kept secret.</t>
        <t>It is essential that the public key is generated correctly when the initial
key generation is performed. Lattice public keys consist of a lattice and a secret
hidden by an error term; if additional error can be introduced into the
public key generation stage, then the success of decapsulation can reveal
enough of the secret that successive queries determine the private
key. Notably, this means a public key can be 'poisoned' such that a future
adversary can recover the private key even though it will appear correct in
normal usage.</t>
        <t>To try to prevent such errors before a keypair is used, FIPS requires that an
approved implementation perform a Pair-wise Consistency Test (PCT) on each
freshly generated keypair: the implementation performs an encapsulation
followed by a decapsulation against the new keypair, and verifies that
both sides derive the same shared secret.  The purpose of the test is to
catch key generation errors that would result in a non-functional or
weakened keypair - whether from a software bug, a hardware fault, or
deliberate fault injection - before the keypair is exported or used for
any real exchange.  The PCT will reliably detect a keypair that is
non-functional, but it cannot rule out the more subtle 'poisoned' keys
described above, which decapsulate honestly generated ciphertexts
correctly while still leaking information through decapsulation failures
on adversarially chosen ciphertexts.</t>
      </section>
      <section anchor="ml-kem-encapsulation">
        <name>ML-KEM Encapsulation</name>
        <t>The second step is for Bob to generate a ciphertext and a shared secret key.</t>
        <t>To perform this step, Bob would first run the Encapsulation Key Check on
Alice's public key as outlined at the beginning of section 7.2 of
<xref target="FIPS203"/>.  If that test passes, then Bob would perform what FIPS 203
terms as ML-KEM.Encaps() (see section 7.2 of <xref target="FIPS203"/>).  This step takes
the validated public key, internally calls the random number generator for a
seed, and produces both a ciphertext and a 32-byte shared secret
key.
Intermediate data other than the ciphertext, shared secret key and the matrix A_hat (and the "matrix data" internal to ML-KEM, which can be deduced from the public key) must be securely deleted.
The matrix A_hat may be saved and reused for later encapsulation operations with the same encapsulation key.</t>
        <t>The ciphertext can be transmitted back to Alice; if the exchange is
successful, the 32-byte shared secret key will be the key shared with Alice.</t>
        <t>It may be that some libraries combine the validation and the encapsulation
step; implementations should determine whether the library they are using does. For static
public keys, the Encapsulation Key Check only needs to be performed once.</t>
      </section>
      <section anchor="ml-kem-decapsulation">
        <name>ML-KEM Decapsulation</name>
        <t>The third and final step is for Alice to take the ciphertext and generate the
shared secret key.</t>
        <t>To perform this step, Alice would first run the input validation steps at
the beginning of section 7.3 of <xref target="FIPS203"/>: a ciphertext type check on
Bob's ciphertext, and a decapsulation key type check and decapsulation key
hash check on her own private key.  If those tests pass, then Alice would
perform what FIPS 203 terms as <tt>ML-KEM.Decaps()</tt> (see section 7.3 of
<xref target="FIPS203"/>).  This step takes the
ciphertext from Bob and the private key that was previously generated by
Alice, and produces a 32-byte shared secret key. It also repeats some or all of the
encapsulation process to ensure that the ciphertext was created strictly
according to the specification, with invalid ciphertexts generating an unrelated 32 byte value that gives no information.
Although not necessary for the correctness of the key establishment,
this step should not be skipped as a maliciously generated ciphertext could
induce decapsulation failures that can allow an attacker to deduce the private key with a sufficient number of exchanges.
Intermediate data other than the shared secret key and the matrix A_hat must be securely deleted.
The matrix A_hat may be saved for later Decapsulation operations with the same decapsulation key.</t>
        <t>If the exchange is successful, the 32-byte key generated on both sides will
be the same.</t>
        <t>It may be that some libraries combine the validation and the decapsulation
step; implementations should determine whether the library they are using does.
For a static private key, the decapsulation key type and hash checks only need
to be performed once; the ciphertext type check is required for every incoming
ciphertext.</t>
      </section>
      <section anchor="ml-kem-parameter-sets">
        <name>ML-KEM Parameter Sets</name>
        <t>FIPS 203 specifies three parameter sets; ML-KEM-512, ML-KEM-768 and
ML-KEM-1024.  It is assumed that Alice and Bob both know which parameter set
they use (either by negotiation or by having one selection fixed in the
protocol).</t>
        <t><xref target="par-sets"/> shows the sizes of the cryptographic material of ML-KEM for each parameter set, as well as their relative cryptographic strength:</t>
        <table anchor="par-sets">
          <name>pk = public key, sk = private key, expanded form, ct = ciphertext, ss = shared key, all lengths in bytes</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="right">pk size</th>
              <th align="right">sk size</th>
              <th align="right">ct size</th>
              <th align="center">ss size</th>
              <th align="center">as strong as</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ML-KEM-512</td>
              <td align="right">800</td>
              <td align="right">1632</td>
              <td align="right">768</td>
              <td align="center">32</td>
              <td align="center">AES-128</td>
            </tr>
            <tr>
              <td align="left">ML-KEM-768</td>
              <td align="right">1184</td>
              <td align="right">2400</td>
              <td align="right">1088</td>
              <td align="center">32</td>
              <td align="center">AES-192</td>
            </tr>
            <tr>
              <td align="left">ML-KEM-1024</td>
              <td align="right">1568</td>
              <td align="right">3168</td>
              <td align="right">1568</td>
              <td align="center">32</td>
              <td align="center">AES-256</td>
            </tr>
          </tbody>
        </table>
        <t><xref target="par-perf"/> shows an example of ML-KEM performance of each parameter set on one specific platform:</t>
        <table anchor="par-perf">
          <name>Single-core performance in operations per second (higher is better) on AMD Ryzen 7 7700</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="right">key generation</th>
              <th align="right">encapsulation</th>
              <th align="right">decapsulation</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ML-KEM-512</td>
              <td align="right">244000</td>
              <td align="right">153000</td>
              <td align="right">202000</td>
            </tr>
            <tr>
              <td align="left">ML-KEM-768</td>
              <td align="right">142000</td>
              <td align="right">103000</td>
              <td align="right">134000</td>
            </tr>
            <tr>
              <td align="left">ML-KEM-1024</td>
              <td align="right">109000</td>
              <td align="right">77000</td>
              <td align="right">99000</td>
            </tr>
          </tbody>
        </table>
        <t>Data sourced from <xref target="EBACS"/></t>
        <t>As can be seen from <xref target="par-sets"/> and <xref target="par-perf"/>, ML-KEM has significantly
larger public keys and ciphertexts than ECDH but very good performance.</t>
      </section>
    </section>
    <section anchor="kem-security-considerations">
      <name>KEM Security Considerations</name>
      <t>This section pertains to KEM (Key Encapsulation Mechanisms) in general,
including ML-KEM.</t>
      <t>A KEM requires high-quality source of entropy during both
the keypair generation and ciphertext generation steps.  If an adversary can
recover the random bits used in either of these processes, they can recover
the shared secret.  If an adversary can recover the random bits used during
key generation, they can also recover the secret key.</t>
      <t>Standard cryptographical analysis assumes that the adversary has access only to the exchanged messages.
Depending on the deployment scenario, the adversary may have access to various side channels, such as the amount of time taken during the cryptographical computations, or possibly the power used or the electrical noise generated.
The implementor will need to assess this possibility, and possibly use an implementation that is resistant to such leakage.</t>
      <t>Alice needs to keep her private key secret. It is recommended that they
zeroize the private key when they will have no further need of it,
that is, when they know they never need to decapsulate any further ciphertexts with it.</t>
      <t>A KEM (including ML-KEM) provides no authentication of either communicating
party. If an adversary could replace either the public key or the ciphertext
with its own, it would generate a shared key with Alice or Bob.  Hence, it is
important that the protocol that uses a KEM lets Bob be able to verify that
the public key he obtains came from Alice and lets Alice verify that the ciphertext
came from Bob (that is, an entity that Alice is willing to
communicate with). Such verification can be performed by cryptographic
methods such as a digital signature or a MAC to verify integrity of the
protocol exchange.</t>
    </section>
    <section anchor="ml-kem-security-considerations">
      <name>ML-KEM Security Considerations</name>
      <t>This section pertains specifically to ML-KEM, and may not be true of KEMs in
general.</t>
      <t>The fundamental security property of ML-KEM is that someone listening to the exchanges
(and thus obtains both the public key and the ciphertext) cannot reconstruct
the shared secret key, and this is true even if the adversary has access to a
CRQC. ML-KEM is IND-CCA2 secure; that is, it remains secure even if an
adversary is able to submit arbitrary ciphertexts against a fixed public key and observe the resulting
shared key. Submitting invalid ciphertexts to <tt>ML-KEM.Decaps()</tt> does not help
the attacker obtain information about the decryption key of the PKE-Decrypt
function inside the ML-KEM.Decaps(). Substituting the public key Alice sends
Bob by another public key chosen by the attacker will not help the attacker
get any information about Alice's private key, it would just make Alice and
Bob not have a same shared secret key. However, if it is possible to
substitute the stored copy of the public key on both sides (Alice's copy,
which is bound into her decapsulation key, and Bob's copy, which he
encapsulates against), an attacker can introduce a malicious public key
where the same private key can be used for decapsulation, but the
probability of decryption failure is marginally higher.  This is the same
'poisoning' attack described in the Key Generation section above, but
performed against the stored public key after generation rather than
during generation itself; the consequence is the same in either case.  As decryption failures can leak information about the
secret decapsulation key, it is important that Alice keeps a secure copy
of the public key as part of her secret key. For practical purposes, IND-CCA2 means
that ML-KEM is secure to use with static public keys.</t>
      <t>ML-KEM requires that a source of random bits with security strength greater than or equal to the security strength of the ML-KEM parameter set be used when generating the keypair and ciphertext during ML-KEM.KeyGen() and ML-KEM.Encaps() respectively.
The cryptographic library that implements ML-KEM
may access this source of randomness internally. A fresh string of bytes must
be used for every sampling of random bytes in key generation and
encapsulation.
The random bytes should be generated securely <xref target="RFC4086"/>.</t>
      <t>Alice must keep her private key secret (both private and secure from
modification).  A copy of the public key and its hash are
included in the private key and must be protected from modification.</t>
      <t>If the ciphertext that Alice receives from Bob is tampered with (either by
small modification or by replacing it with an entirely different ciphertext),
the shared secret key that Alice derives will be uncorrelated with the shared
secret key that Bob obtains.  An attacker will not be able to determine any
information about the correct shared secret key or Alice's private key, even
if the attacker obtains Alice's modified shared secret key which is the
output of the <tt>ML-KEM.Decaps()</tt> function taking the modified ciphertext as input.</t>
      <t>It is secure to reuse a public key multiple times.  That is, instead of Alice
generating a fresh public and private keypair for each exchange, Alice may
generate a public key once, and then publish that public key, and use it for
multiple incoming ciphertexts, generating multiple shared secret keys.  While
this is safe, it is recommended that if the protocol already has Alice send Bob her unauthenticated public key, they should generate a fresh keypair each time
(and zeroize the private key immediately after ML-KEM.Decaps()) to obtain Perfect Forward
Secrecy. Generally key generation of ML-KEM is very fast (see
<xref target="par-perf"/>). Hence, if Alice generates a fresh ML-KEM key each time, then even if Alice's system is subverted (either by a hacker or
a legal warrant), the previous communications remain secure (because Alice no
longer has the information needed to recover the shared secret keys).</t>
      <t>Alice and Bob must perform the input validation steps in <xref target="FIPS203"/>: Bob
must perform the Encapsulation Key Check on Alice's public key, and Alice
must perform the ciphertext type check on Bob's ciphertext and the
decapsulation key type and hash checks on her own private key.  The
cryptographic libraries that Alice and Bob use may automatically perform such
checks; they should each verify that is the case.</t>
      <t>The shared secret key for all three parameter sets, ML-KEM-512, ML-KEM-768
and ML-KEM-1024 is 32 bytes which are indistinguishable from 32-byte
pseudorandom byte-strings of 128, 192 and 256 bits of strengths
respectively. As such, the 32-byte string is suitable for both directly as a symmetric key
(for use by a symmetric cipher such as AES or a MAC), and also as input into
a Key Derivation Function.  This is in contrast to a Diffie-Hellman (or ECDH)
operation, where the output is distinguishable from random.</t>
      <t>If the adversary has control over the ML-KEM private key, it has been shown that the adversary can cause a ‘misbinding’ between the shared key and either the ciphertext or the public key.
That is, by generating an impossible private key (a key that cannot occur with the standard ML-KEM key generation process), the adversary can create public keys for which different ciphertexts or public keys may result in the same shared secret (these security notions are called MAL-BIND-K-CT and MAL-BIND-K-PK in the cryptographical literature <xref target="CDM23"/> <xref target="KEMMY24"/>).
This is not a threat to normal uses of ML-KEM as a key exchange or a public key encryption method.
If ML-KEM is used as an authentication method where the shared key is used for authentication (and adversary control of the private key is possible), it may be advisable if the protocol also authenticates the public key and ciphertext as well.</t>
      <section anchor="issues-that-are-likely-not-a-concern">
        <name>Issues that are likely not a concern</name>
        <t>This section contains issues that you may have heard of, but are quite unlikely to be a concern in your use case.
This is here to discuss them, and show why they are not practical issues.
Readers who have not encountered these issues can safely skip this section.</t>
        <section anchor="decapsulation-failure">
          <name>Decapsulation failure</name>
          <t>With ML-KEM, there is a tiny probability of decapsulation failure.
That is, even if Alice and Bob perform their roles honestly and the public key and ciphertext are transmitted correctly, there is a tiny probability that Alice and Bob will not derive the same shared key.
However, even though that is a theoretical possibility, practically speaking this will never happen.
For all three parameter sets, the probability is so low that most likely an actual decapsulation failure because of this will never be seen for any ML-KEM exchange anywhere (not only for your protocol, but over all protocols that use ML-KEM).
Hence, the advice we give is to ignore the possibility.</t>
        </section>
        <section anchor="ml-kem-public-key-expansion-not-being-constant-time">
          <name>ML-KEM public key expansion not being constant time</name>
          <t>During the ML-KEM key generation and the encapsulation process, the public seed is expanded, and this involves rejection sampling of XOF (extendable-output function) output to achieve coefficient values that are uniformly distributed.
This means that a straight-forward implementation will perform a variable number of XOF calls to generate this output to find values that are in range.
Converting this into a constant time operation is expensive enough that it is rarely done.
One consequence of this is that public key expansion is not constant time and this timing sidechannel can be used to provide information about the seed (and the expanded key, which is a function of the seed) in cases where they are not publicly known.
On the other hand, this public seed is in the public key, which is almost always publicly known, and so this timing variation does not leak any information about any secret data.
One exception is in some methods that implement Password Authenticated Key Exchange with ML-KEM, where the public key may be encrypted with the password.
In this rather narrow use case, this variable timing needs to be taken into account.</t>
        </section>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS203" target="https://doi.org/10.6028/NIST.FIPS.203">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="NIST" value="FIPS 203"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC4253">
          <front>
            <title>The Secure Shell (SSH) Transport Layer Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell (SSH) is a protocol for secure remote login and other secure network services over an insecure network.</t>
              <t>This document describes the SSH transport layer protocol, which typically runs on top of TCP/IP. The protocol can be used as a basis for a number of secure network services. It provides strong encryption, server authentication, and integrity protection. It may also provide compression.</t>
              <t>Key exchange method, public key algorithm, symmetric encryption algorithm, message authentication algorithm, and hash algorithm are all negotiated.</t>
              <t>This document also describes the Diffie-Hellman key exchange method and the minimal set of algorithms that are needed to implement the SSH transport layer protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4253"/>
          <seriesInfo name="DOI" value="10.17487/RFC4253"/>
        </reference>
        <reference anchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC6278">
          <front>
            <title>Use of Static-Static Elliptic Curve Diffie-Hellman Key Agreement in Cryptographic Message Syntax</title>
            <author fullname="J. Herzog" initials="J." surname="Herzog"/>
            <author fullname="R. Khazan" initials="R." surname="Khazan"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes how to use the 'static-static Elliptic Curve Diffie-Hellman key-agreement scheme (i.e., Elliptic Curve Diffie- Hellman where both participants use static Diffie-Hellman values) with the Cryptographic Message Syntax. In this form of key agreement, the Diffie-Hellman values of both the sender and receiver are long-term values contained in certificates. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6278"/>
          <seriesInfo name="DOI" value="10.17487/RFC6278"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="23" month="December" year="2025"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of messages exchanged with the Constrained Application
   Protocol (CoAP) between members of a group, e.g., sent over IP
   multicast.  In particular, the described protocol defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with each other
   member of the group for pairwise OSCORE communication.  Group OSCORE
   can be used between endpoints communicating with CoAP or CoAP-
   mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-28"/>
        </reference>
        <reference anchor="I-D.draft-ietf-hpke-pq">
          <front>
            <title>Post-Quantum and Post-Quantum/Traditional Hybrid Algorithms for HPKE</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>Selkie Cryptography</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   Updating key exchange and public-key encryption protocols to resist
   attack by quantum computers is a high priority given the possibility
   of "harvest now, decrypt later" attacks.  Hybrid Public Key
   Encryption (HPKE) is a widely-used public key encryption scheme based
   on combining a Key Encapsulation Mechanism (KEM), a Key Derivation
   Function (KDF), and an Authenticated Encryption with Associated Data
   (AEAD) scheme.  In this document, we define KEM algorithms for HPKE
   based on both post-quantum KEMs and hybrid constructions of post-
   quantum KEMs with traditional KEMs, as well as a KDF based on SHA-3
   that is suitable for use with these KEMs.  When used with these
   algorithms, HPKE is resilient with respect to attacks by a quantum
   computer.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-hpke-pq-04"/>
        </reference>
        <reference anchor="CDM23" target="https://eprint.iacr.org/2023/1933.pdf">
          <front>
            <title>Keeping Up with the KEMs: Stronger Security Notions for KEMs and automated analysis of KEM-based protocols</title>
            <author initials="C." surname="Cremers" fullname="Cas Cremers">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="A." surname="Dax" fullname="Alexander Dax">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="N." surname="Medinger" fullname="Niklas Medinger">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="KEMMY24" target="https://eprint.iacr.org/2024/523.pdf">
          <front>
            <title>Unbindable Kemmy Schmidt: ML-KEM is neither MAL-BIND-K-CT nor MAL-BIND-K-PK</title>
            <author initials="S." surname="Schmieg" fullname="Sophie Schmieg">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SIGNAL" target="https://signal.org/docs/specifications/doubleratchet/">
          <front>
            <title>The Double Ratchet Algorithm</title>
            <author>
              <organization/>
            </author>
            <date year="2011" month="November"/>
          </front>
        </reference>
        <reference anchor="WIRE" target="https://www.wireguard.com/">
          <front>
            <title>WireGuard</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NOISE" target="http://www.noiseprotocol.org/">
          <front>
            <title>Noise Protocol Framework</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="EBACS" target="https://bench.cr.yp.to/results-kem/amd64-hertz.html">
          <front>
            <title>eBACS: ECRYPT Benchmarking of Cryptographic Systems</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 436?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Rebecca Guthrie and Thom Wiggers for their valuable comments and feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61c63LbRpb+30/RpVRNSVUkdfEljlypiiLZsSax47Gcys6v
GZBskhiBAIMGJDOOq+Yxdn/tw+ybzJPs+c453WiAlCczu/kRU7j05Vy/c2mM
x2PT5E3hzu3B6x/G3794bW/crK3zZmsvq9Lnc1dnTU6/Dkw2ndbubvfBAzPL
Gres6u25zctFZcy8mpXZmsac19miGftF0a5qV49ni3o5XhfjW7cee317POtN
My5oLN8Y307Xufd0qdluaKTrd+9fGjzqSt/6c9vUrTNzevbc0JIemax2GS0N
jx2Y+6q+XdZVu6Erl/V201T2ZVW36wPjm6yc/yUrqtLpGPmm5l++OTs5+erk
zNy6Lb0/Pzd2bGWnNO88L5fn9qf3L8fPzJ0rW5rW2v1TWCsrPnjnvMvq2cp+
h+dwY53lBd0AGb7J62YxqeolruMpur5qmo0/Pz7GY7iU37lJ7uSxY1w4ntbV
vXfHGOAYLy7zZtVO6dVA4uPPUxfvCIGT6cK7Exltklf/ZJTjf52tk1WzLg6M
ydpmVdXnZmwXbVGIkNzMqqaxL2UwWiDtNivzX/nFc3uZ+1llb7a+cWtPd50Q
MUz+zQz3J7Nq3RvzT+22XNmrrFzuDPiG/80Ke116Ev22cbZa2BsIRlbPvaV/
7Xs3W5VVUS234I7K/Zvrm/fdAniGCWb4psx9M1lWd7SCvMybPCtIQP84oWd9
W8t63tau/Z//tq+zpvG+KumWXP9jtSr33KQVn9sXdT7Tv3XOv9HTk7U+9o3T
+zub/97d5aV9nRflHnpel/P8Lp+3WdGNe5ut+eFvwo/JLOuNSNvMXWFvVnm7
M+BF/UveEDmysmnXNPysG3fOr008vfZNhscm7a0xZVXTHki4zw09+vL67c3Z
ySPoE2lOVi8dyWYQzXmVs/Cfnkyenpw9OwYLJnhjQq/IG2K8XlfztnDjH4g2
+cyNv828mxMdtuMX5Szb+LbgxdrXxFdak19HfvMgnkjpPGyXLMPaA8x0QEqC
ySxNdsA32ODYi3ZJ5oKunj02xuC1dEPvXl4+PnvCG8LPk2dP9efTsy+f6c9n
jx+Hq1+dPjsJP5+c8QPX4yvWe9Kh2o0rz/+wsSFOr8MTooT83Gpz68abX3Dn
8ur1WSCm2vXvnduQ+bI/bew9abhtVs6SVSMZvWnqqly6urP5bypWV0tb4mdY
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

-->

</rfc>
