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

<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 75?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A large reliable quantum computer (often termed a Cryptographically Relevant Quantum Computer or CRQC) would be able to break protocols which rely on the traditional RSA, DH, or ECDH methods of securely exchanging keys.  Even though we do not believe, 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 potential threat, NIST has standardized ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism), which is standardized in FIPS 203 <xref target="FIPS203"/>.  ML-KEM is used to generate a shared secret key between two parties. One party (Alice) generates a public/private keypair, and sends the public key to the other party (Bob).  Bob uses the public key and some randomness to generate both the shared secret key and a ciphertext. Bob then sends the ciphertext to Alice, who uses her private key to generate the same shared secret key. NIST plans to standardize one or more code-based KEMs in the future.</t>
      <t>The fundamental security property 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 and observe the resulting shared key. Submitting invalid ciphertexts to a ML-KEM.Decaps 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 is what is termed a Key Encapsulation Mechanism. One common misunderstanding of that term is the expectation that Bob freely chooses the shared secret, and encrypts that when sending to Alice. What 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. This is different from RSA-KEM <xref target="RFC5990"/>, where Bob cannot select the value, but can encapsulate the same shared secret to many recipients.</t>
      <t>A KEM (such as ML-KEM) sounds like it may be a drop-in replacement for Diffie-Hellman, however this is not 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 a 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"/>. 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. Furthermore ML-KEM is not a drop-in replacement for RSA-KEM as RSA-KEM can encapsulate the same shared secret to many recipients whereas ML-KEM cannot.</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, this function is termed ML-KEM.KeyGen() (see section 7.1 of <xref target="FIPS203"/>).  It internally calls the random number generator for a seed and produces both a public key (termed an encapsulation key in FIPS 203) and a private key (termed a decapsulation key). The seed can be securely retained, but must be treated with the same safeguards as the private key. Other intermediate data ust 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 must be kept secret.</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 the 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 must be securely deleted (with the possible exception of "matrix data" which does not depend on Bob's seed and can be reused over multiple encapsulations with the same public 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; you should check whether the library you 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 Bob would perform the what FIPS 203 terms as ML-KEM.Decaps() (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, implicitly rejecting ciphertexts that were not. Although not necessary for the correctness of the key establishment, this step should not be skipped as maliciously generated ciphertexts could induce decapsulation failures with insecure probability.  Intermediate data other than the shared secret key must be securely deleted (with the possible exception of "matrix data" whichcan be reused over multiple decapsulations with the same public 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; you should check whether the library you are using does.</t>
      </section>
      <section anchor="ml-kem-parameter-sets">
        <name>ML-KEM Parameter Sets</name>
        <t>ML-KEM comes with three parameter sets; ML-KEM-512, ML-KEM-768 and ML-KEM-1024.  It is assumed that Alice and Bob both know which parameter sets they use (either by negotiation or by having one selection fixed in the protocol).</t>
        <t><xref target="par-sets"/> shows a summary of how those parameter sets differ:</t>
        <table anchor="par-sets">
          <name>pk = public key, sk = private key, 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 <xref target="EBACS"/>:</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>As can be seen from <xref target="par-sets"/> and <xref target="par-sets"/>, 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>To use a KEM, you need to use a high-quality source of entropy during both the key-pair 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 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.</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 that the ciphertext that Alice receives 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 transcript.</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>To use ML-KEM, you need a source of random bits with security strength equal to greater than the security strength of the KEM during both key generation and encapsulation steps.  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).  It is recommended that she zeroizes her private key when she will have no further need of it. 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 ML-KEM.Decaps 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 allows it (if Alice and Bob exchange messages anyways) that Alice generates a fresh keypair each time (and zeroize the private key immediately after) to obtain Perfect Forward Secrecy. Be noted that generally key generation of ML-KEM is very fast, see <xref target="par-perf"/>. That is, 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 cryptographical libraries that Alice and Bob use may automatically perform such checks; if so, that should be verified.</t>
      <t>The shared secret key for all three parameter sets, ML-KEM-512, ML-KEM-768 and ML-KEM-1024 are 32 bytes which are indistinguishable from 32-byte pseudorandom byte-strings of 128, 192 and 256 bits of strengths respectively. As such, it is suitable both to use directly as a symmetric key (for use by a symmetric cipher such as AES or a MAC), and for inserting 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>It is essential that the public key is generated correctly when the initial key generation is performed. Lattice public keys are 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="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="RFC5990">
          <front>
            <title>Use of the RSA-KEM Key Transport Algorithm in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="J. Randall" initials="J." surname="Randall"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Brainard" initials="J." surname="Brainard"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="September" year="2010"/>
            <abstract>
              <t>The RSA-KEM Key Transport Algorithm is a one-pass (store-and-forward) mechanism for transporting keying data to a recipient using the recipient's RSA public key. ("KEM" stands for "key encapsulation mechanism".) This document specifies the conventions for using the RSA-KEM Key Transport Algorithm with the Cryptographic Message Syntax (CMS). The ASN.1 syntax is aligned with an expected forthcoming change to American National Standard (ANS) X9.44.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5990"/>
          <seriesInfo name="DOI" value="10.17487/RFC5990"/>
        </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="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 179?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
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
9pS9NXVNlmT7ZuhAvDFjKX9pSu6eDnOr0KxkiDGl6/RFnVBKF7+F/f9dsP8a
kg92cz+SK4Lym7+OzPRJL0twFlU6MUbTMv8pJA8V8p9Bcoye7xKaKqCT1plu
bWjOghsdBEVVTR3es3jve/f55MnJqW9MTp49PWN23Z8ncrZ/00pnxnaE3lGX
2ie7LLTbslq7oD1cSY5+qd461IY3N6fIsKyoxcLWwHdQWDJCltr189hszZ9y
7BofNZOOP33CIhMij8oWElxzt7wrChIY9cNpfICOVraZkS7U+Wj0WcX/Pqv6
Fnr/qOnSusvPKm37mzZc8jlzw00Xqz6D0vkk/MNjd3UeLs+HN893Lt2foNQr
hRbif2cPH8rlydNHp/4macrvoL97cT2bnJyexZToRff45OTssVyePvY01cnD
s3spPT+NKZE1+I+e+OUfnQRG+ps7lE6fPAWlT+fqO681GVn54QBS/2GQ+Fq+
ER9gQQc/RDCHV+z/lHNbf/+D/NcfHyLEwGVzXS7bFbdAyMftwRdvLhQ6e3NB
5fpnUhC4wF6c07jgmiBDQYTkCZ0vX/YYS4QbZKaft6LT5y1n/9s2sscSTh9D
aay1kyeP3BVN3/DlHn2fPD717z8M7588erz1ftDqycPn/q1nz/yVei43g+5I
QF53M/hrrrl3NBAcBE8n5i5Qy8FUJbn7xesr9X7zEQnNM16FdHNh+1IfDzjV
GLg3wUx8I5yj8MCHWZYcvEsK2N/uc0ow47EbaiMgyECTVZXFO+CO0demX0eS
LjmQoukAGZ6p5NjgK2dg9ojEI6aTU5mX5l22pzXl+vgE/dxFaP1tOouc0JkJ
sWWrrknZfjWdmtYIv+AX1MK0AUQwoSZTbK1DicRPuPFFiL91xk/6oYmEOxeZ
XCE6N62bd8GeHLZLimNDg8NlsLs0ts7I/v6abqtDV7xvsTj7l+AVahM6a92Z
PfFsSewjUgUStczHPwuaH3VTUUDY/lTOGik7pwSC+6VlpRbSGxVtVnSM3h8z
bVvBEQnvjpMQfLnVOyZli6iJp67k+/iUJ3ymu2Lk5MJ1Xf2XW+fIPlONEmfO
EumYYl1GIwS7M01SzIZTfWkWUUcKgKjvOeIejI3xHR7/kfOHnIIDJxX9eB32
Yhab6OOedRpwchM2KaWCjB59drKvKIgSGOhVmzsdf0tLH4YZGG5vtmEQLvR2
SbWugui1IAc0VE3N6BiBuY7PYgZFMDKedDCP6YcA/RFEZpaG55DosKHl3J3b
PK8vLiOZUJ9o2bhBhoFg++NC6mGkjamlE/6Nwf57oC3USNSRwvK+dU5CppTY
lSs8iARO/ISVA7rpTss9AFsSgVjs4jJ84JlEusVRXY6LuRnJZV1cm+y86yTC
Z48RLG7FbjcssJWaW66J9ZaOfEYu9kG5Q8HnDk6mJAg/a8VS3NoZ14B9Z49O
qBbQ64prU+kOcMYSqqowyKI5TllKV9yLXlb8vim/uStprA++8oVH5W0/4dMw
QA9Wff/ipwCVzM5XYFIdsmD9Axkl4PqSyRZVFhzhKNQTX8PU3VnAvwyqkOl9
0zJlxpCGrGHF9ZTAblxf9OuxXTstkEvBH0gV29vpq81vAEzAFjrPgRp1aPdF
RZEtKH+N6bvaSOCbh+IcNjtgkpI7zExEg4Tjewr2iDk4PfPmC92u5F5FvnWe
sp8E7cUhL1R6Ue4ZXYsQPKMCrKDieP/kWtQo2bOg7/ltj7YNJh6HQ382fCHi
1Ps61WHqgAiAjboLxzPDGcNwGtcmt/4AJtAd9v5MCSrSKhgMVHFXY3iGFpob
NLMtgONHL0tgUJKF6Yzg2XzOL5hx/4GiIEaCrfUz2c6Rk82eM0kWcZnGk9vu
REtUvT0Y4mbyaZWwBfhSVWw1ysYx2+HNHTXQzn9bmVyHsRg6vfO5ww5MmK04
B5ehcg5vH5rFVmMixMCCmnJLHtfYrJMNsvDID+Ipa5GtFyQLkSfq+WDPZ3zb
YGEK1zSj7uICln5EGnfTp+8Q8smsX1bNmk73Z7TxFOD/gvuHflsuUoLCFpL3
xSmkwWFgkViqgrVWcVkbjZmZfqjH8q88pAU2vyPFZDHioJ5wXkOpRa6XCK7g
EmHCI4jv6cbZJnXgZDTYG/jh3I3ou9y64hEB0F2549fY5QmtpaS5tx5guzgK
AcjrkxE5boD3rXg5sz/8xkninplUHkL9RpN/uxvuAeloX5YAEfY9wT3dMhIT
ZwpdW5FEJKfyu+L0j3uBls+YbDX24dH/6kQSy3AsvYtrfB6Y53v7fuO/2Pfj
CPno1KUKgpQSNDNjyaM74APDO4c231Ctre6yKkozJpLbcO/75PRsrKirRGtR
T4gzPToTcSkbmRVlmjKGxbNNJA+PBbYzLS8p5a1klJmhqJHzkTCSyQ18kTr9
MmlAkqCX2NT7Z6LLkGpfXM9Cbn0kGEcfUpe8caPoPHhONnGl2fHJRF66qOCP
TwwnYjwNCg+VWfWtIaJD95Ofo75DMo4Gml0M4jnIPUIWsYbgQtW1/xnMbmWE
F6JTAomtuUukxCP5B6HbcENjCr5ImSr3k5lhQ4VmZei3Pa236sQb38pkmQyz
U37SNFRYIu6zISdhJNA9cSVRmPfORMxb2xh0J5KldudhjBjS1Hcj3JHvSvV/
p2mpko9mXFSPx1nd17A09UfHP7OMspSdiZE3FVnexh3UyPB0smci5EFdGVuV
Onsg1iW/n3K/MvlKdyMOJzr6oRfnezQYV9c6aUKOBDvjH6vmsG4IhQu7m4s3
F/urufC7PEJjYDO/mbDtWveLOjrcJiIXKfXxc50tubIZfTqXaQOd/XCwSHKr
D76M/gW7fuSTJj4AAA==

-->

</rfc>
