<?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.21 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sfluhrer-cfrg-ml-kem-security-considerations-02" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="ML-KEM Security">ML-KEM Security Considerations</title>
    <seriesInfo name="Internet-Draft" value="draft-sfluhrer-cfrg-ml-kem-security-considerations-02"/>
    <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>Quantinuum</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="2024" month="November" day="19"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>ML-KEM</keyword>
    <abstract>
      <?line 102?>

<t>NIST standardized ML-KEM as FIPS 203 in August 2024.  This document discusses
how to use ML-KEM - that is, what problem it solves, and how to use it
securely.</t>
    </abstract>
  </front>
  <middle>
    <?line 108?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A Cryptographically Relevent 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 recovered the shared secret key that Alice and Bob learns.
Hence, Alice and Bob can use their shared secret key to establish secure symmetric communication.</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. What actually happens in
ML-KEM is that randomness from both sides are 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 secrets shared with two parties 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 only 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 encapulation 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"/> and SSH <xref target="RFC4253"/> 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 it within the Hybrid Public Key Encryption framework <xref target="RFC9180"/> to perform the operations.
You can use draft-connolly-cfrg-hpke-mlkem, which is three ML-KEM perameter sets that has 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 must be securely deleted.</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>
      </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 and shared secret key (and the "matrix data" internal to ML-KEM, which can be deduced from the public key) must be securely deleted.</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 Decapsulation Key Check on
Bob's ciphertext as outlined at the beginning of section 7.3 of <xref target="FIPS203"/>.
If that test passes, 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 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 data" internal to ML-KEM, which can be deduced from the public key) must be securely deleted.</t>
        <t>If the exchange is successful, the 32-byte key generated on both sides will
be the same. The shared secret key is always 32 bytes for all parameter sets.</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-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 operation per second 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>Alice needs to keep her private key secret. It is recommended that she
zeroize her private key when she will have no further need of it,
that is, when she knows she never needs 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 digital signatures 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 used 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 copy of the public key for both Alice and Bob, 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. As decryption failures can leak information about the secret
decapulation 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 come from an approved RBG.</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, she 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 Key Check steps (the Encapsulation Key Check
on the public key for Bob, the Decapsulation Key Check on the ciphertext for
Alice).  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>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 will never be seen for any ML-KEM exchange anywhere (not only for your protocol, but over all protocols that uses ML-KEM).</t>
      <t>If the adversary has control over the ML-KEM private key, it has been shown that 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 could be able to 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 authenticate the public key and ciphertext as well.</t>
    </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="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="26" month="September" year="2024"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of CoAP messages exchanged 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 any 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-23"/>
        </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 375?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+Vc2W4cR5Z9j68I0EAPCVSVSGqxRMGAKZKy2LJktUqG4afp
rMyoqmzmUs7IJFWmBfRn9DzNx8yf9JfMufdGREZmlWT3YIB5GD2IyVxiueu5
S3A6nao2bwtzpg/efD99ffVGz03aNXm71Rd1ZfPMNEmb4+pAJYtFY253XzxQ
adKaVd1sz3ReLWulsjqtkhJjZk2ybKd2WXTrxjTTdNmspmUxvTHl1Lqvp+lg
mmmBsWyrbLcoc2txq91uMNL1+w8vFb1qKtvZM902nVEZ3j1TWNJDlTQmwdLo
tQN1Vzc3q6buNrhz0Ww3ba1f1k1XHijbJlX270lRV8aNkW8avrLt6fHxs+NT
dWO2+D47U3qqZaeYN8ur1Zn+8cPL6VOlkq5d182ZmuplVxSy03lat61+KRtV
WtfNKqnyX3lTZ/oit2mt51vbmtLiqSmTvDjTnjDfpvR8ltblYMy/dNtqrS+T
arUz4Fv+mRT6urLgX9caXS/1nHaXNJnV+Kk/mHRd1UW92uJzz7y31/MP/QJ4
hhnN8G2V23a2qm+xgrzK2zwpQOU/z/Cu7RpZz7vGdP/1n/pN0rbW1hUeyf0/
1+tqz0Os+ExfNXnqfndz/g1vz0r32rfGPd/Z/Gtzm1f6TV5Ue+j5ly6p2rzq
urIf9yYp+eVv/cUsTQYjYpu5KfR8nXc7A543v+StDNuVIGraj5vxZzOLz75N
6LVZd6NUVTfYQ34L+cOrL6/fzU+PH0Jm8K9NmpVpz/S6bTf27MGDrM5nmO3B
yfHsyfHp0wfEghl9McMn8oVo4Js66woz/R60yVMzfZFYk4EO2+lVlSYb2xW8
WP0GfMWabBn4zYNYkNJYUkBZhtYHNNMBdIAm05jsgB+w1ujzbgWZx93TR0op
+ize0PuXF49OH2NDX9Hl42fPjs/0z3XX6NZ8bHVWG1v9W6uhwY2p2mKrG7M0
uEyNbte5lQGenH799Ewunz569MRdPjt5euwvH5/yC9fTy1lu2iVMQWOmteUf
rL8QipLeuLh8c+qp66zVa2M2UEr940bf5e0a8xoNXYXQztumrlam6S3Z25pt
i8Ye+R1WD2hxjR2DxAkUaWtzSyqEx9MFE37T1G2d1oU92MtVs2nyqp3lSdow
d0HIhw9Onj18ONtky4jOdJ9/9VZDeDN1PzW0DWu+mOmLxpSmseG+CO1FYnee
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
mYNP6r8BUXYkjxxNAAA=

-->

</rfc>
