<?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.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mls-architecture-13" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title abbrev="MLS Architecture">The Messaging Layer Security (MLS) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mls-architecture-13"/>
    <author initials="B." surname="Beurdouche" fullname="Benjamin Beurdouche">
      <organization>Inria &amp; Mozilla</organization>
      <address>
        <email>ietf@beurdouche.com</email>
      </address>
    </author>
    <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
      <organization>Mozilla</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>
    <author initials="E." surname="Omara" fullname="Emad Omara">
      <organization/>
      <address>
        <email>emad.omara@gmail.com</email>
      </address>
    </author>
    <author initials="S." surname="Inguva" fullname="Srinivas Inguva">
      <organization/>
      <address>
        <email>singuva@yahoo.com</email>
      </address>
    </author>
    <author initials="A." surname="Duric" fullname="Alan Duric">
      <organization>Wire</organization>
      <address>
        <email>alan@wire.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="22"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 222?>

<t>The Messaging Layer Security (MLS) protocol (I-D.ietf-mls-protocol)
provides a Group Key Agreement protocol for messaging applications.
MLS is meant to protect against eavesdropping, tampering, message
forgery, and provide Forward Secrecy (FS) and Post-Compromise Security
(PCS).</t>
      <t>This document describes the architecture for using MLS in a general
secure group messaging infrastructure and defines the security goals
for MLS.  It provides guidance on building a group messaging system
and discusses security and privacy tradeoffs offered by multiple
security mechanisms that are part of the MLS protocol (e.g., frequency
of public encryption key rotation). The document also provides
guidance for parts of the infrastructure that are not standardized by
MLS and are instead left to the application.</t>
      <t>While the recommendations of this document are not mandatory to follow in order
to interoperate at the protocol level, they affect the overall security
guarantees that are achieved by a messaging application. This is especially true
in the case of active adversaries that are able to compromise clients, the
delivery service, or the authentication service.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  MLS Working Group mailing list (mls@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mls/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/mlswg/mls-architecture"/>.</t>
    </note>
  </front>
  <middle>
    <?line 245?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>RFC EDITOR: PLEASE REMOVE THE FOLLOWING PARAGRAPH</t>
      <t>The source for this draft is maintained in GitHub.  Suggested changes should
be submitted as pull requests at https://github.com/mlswg/mls-architecture.
Instructions are on that page as well.  Editorial changes can be
managed in GitHub, but any substantive change should be discussed on
the MLS mailing list.</t>
      <t>End-to-end security is a used in the vast majority of instant messaging systems,
and also deployed in systems for other purposes such as calling and conferencing.
In this context, "end-to-end" captures
the notion that users of the system enjoy some level of security -- with the
precise level depending on the system design -- even in the face of malicious
actions by the operator of the messaging system.</t>
      <t>Messaging Layer Security (MLS) specifies an architecture (this document) and a
protocol <xref target="I-D.ietf-mls-protocol"/> for providing end-to-end security in this
setting. MLS is not intended as a full instant messaging protocol but rather is
intended to be embedded in concrete protocols, such as XMPP <xref target="RFC6120"/>.
Implementations of the MLS protocol will interoperate at the cryptographic
level, though they may have incompatibilities in terms of how protected messages
are delivered, contents of protected messages, and identity/authentication
infrastructures.
The MLS protocol has been designed to provide the same security guarantees to
all users, for all group sizes, including groups of only two clients.</t>
    </section>
    <section anchor="general-setting">
      <name>General Setting</name>
      <section anchor="protocol-overview">
        <name>Protocol Overview</name>
        <t>MLS provides a way for <em>clients</em> to form <em>groups</em> within which they can
communicate securely.  For example, a set of users might use clients on their
phones or laptops to join a group and communicate with each other. A group may
be as small as two clients (e.g., for simple person to person messaging) or as
large as hundreds of thousands.  A client that is part of a group is a <em>member</em>
of that group. As groups change membership and group or member properties, they
advance from one <em>epoch</em> to another and the cryptographic state of the group
evolves.</t>
        <t>The group is represented as a tree, which represents the members as the leaves
of a tree. It is used to efficiently encrypt to subsets of the members. Each
member has a state called a <em>LeafNode</em> object holding the client's identity,
credentials, and capabilities.</t>
        <t>Various messages are used in the evolution from epoch to epoch.
A <em>Proposal</em> message proposes
a change to be made in the next epoch, such as adding or removing a member.
A <em>Commit</em> message initiates a new epoch by instructing members of the group to
implement a collection of proposals. Proposals and Commits are collectively
called <em>Handshake messages</em>.
A <em>KeyPackage</em> provides keys that can be used to add the client to a group,
including its LeafNode, and <em>Signature Key</em>.
A <em>Welcome</em> message provides a new member to the group with the information to
initialize their state for the epoch in which they were added.</t>
        <t>Of course most (but not all) applications use MLS to send encrypted group messages.
An <em>application message</em> is an MLS message with an arbitrary application payload.</t>
        <t>Finally, a <em>PublicMessage</em> contains an integrity-protected MLS Handshake message,
while a <em>PrivateMessage</em> contains a confidential, integrity-protected Handshake
or application message.</t>
        <t>For a more detailed explanation of these terms, please consult the MLS protocol
specification <xref target="RFC9420"/>.</t>
      </section>
      <section anchor="abstract-services">
        <name>Abstract Services</name>
        <t>MLS is designed to operate within the context of a messaging service, which
may be a single service provider, a federated system, or some kind of
peer-to-peer system. The service needs to provide two services that
facilitate client communication using MLS:</t>
        <ul spacing="normal">
          <li>
            <t>An Authentication Service (AS) which is responsible for
attesting to bindings between application-meaningful identifiers and the
public key material used for authentication in the MLS protocol. The
AS must also be able to generate credentials that encode these
bindings and validate credentials provided by MLS clients.</t>
          </li>
          <li>
            <t>A Delivery Service (DS)  which can receive and distribute
messages between group members. In the case of group messaging, the delivery
service may also be responsible for acting as a "broadcaster" where the sender
sends a single message which is then forwarded to each recipient in the group
by the DS. The DS is also responsible for storing and delivering initial
public key material required by MLS clients in order to proceed with the group
secret key establishment that is part of the MLS protocol.</t>
          </li>
        </ul>
        <t>For presentation purposes, this document treats the AS and DS as conventional
network services, however MLS does not require a specific implementation
for the AS or DS. These services may reside on the same server or different
servers, they may be distributed between server and client components, and they
may even involve some action by users.  For example:</t>
        <ul spacing="normal">
          <li>
            <t>Several secure messaging services today provide a centralized DS, and rely on
manual comparison of clients' public keys as the AS.</t>
          </li>
          <li>
            <t>MLS clients connected to a peer-to-peer network could instantiate a
decentralized DS by transmitting MLS messages over that network.</t>
          </li>
          <li>
            <t>In an MLS group using a Public Key Infrastructure (PKI) for authentication,
the AS would comprise the certificate issuance and validation processes,
both of which involve logic inside MLS clients as well as various
existing PKI roles (ex: Certification Authorities).</t>
          </li>
        </ul>
        <t>It is important to note that the Authentication Service can be
completely abstract in the case of a Service Provider which allows MLS
clients to generate, distribute, and validate credentials themselves.
As with the AS, the Delivery Service can be completely abstract if
users are able to distribute credentials and messages without relying
on a central Delivery Service (as in a peer-to-peer system).  Note,
though, that in such scenarios, clients will need to implement logic
that assures the delivery properties required of the DS (see
<xref target="delivery-guarantees"/>).</t>
        <figure anchor="fig-mls-overview">
          <name>A Simplified Messaging System</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="456" viewBox="0 0 456 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 80,144 L 80,176" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,80" fill="none" stroke="black"/>
                <path d="M 168,144 L 168,176" fill="none" stroke="black"/>
                <path d="M 184,32 L 184,80" fill="none" stroke="black"/>
                <path d="M 208,144 L 208,176" fill="none" stroke="black"/>
                <path d="M 248,80 L 248,144" fill="none" stroke="black"/>
                <path d="M 296,144 L 296,176" fill="none" stroke="black"/>
                <path d="M 304,32 L 304,80" fill="none" stroke="black"/>
                <path d="M 336,144 L 336,176" fill="none" stroke="black"/>
                <path d="M 424,144 L 424,176" fill="none" stroke="black"/>
                <path d="M 8,32 L 144,32" fill="none" stroke="black"/>
                <path d="M 184,32 L 304,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 144,80" fill="none" stroke="black"/>
                <path d="M 184,80 L 304,80" fill="none" stroke="black"/>
                <path d="M 80,144 L 168,144" fill="none" stroke="black"/>
                <path d="M 208,144 L 296,144" fill="none" stroke="black"/>
                <path d="M 336,144 L 424,144" fill="none" stroke="black"/>
                <path d="M 80,176 L 168,176" fill="none" stroke="black"/>
                <path d="M 208,176 L 296,176" fill="none" stroke="black"/>
                <path d="M 336,176 L 424,176" fill="none" stroke="black"/>
                <path d="M 304,80 L 336,144" fill="none" stroke="black"/>
                <path d="M 152,144 L 184,80" fill="none" stroke="black"/>
                <g class="text">
                  <text x="76" y="52">Authentication</text>
                  <text x="244" y="52">Delivery</text>
                  <text x="56" y="68">Service</text>
                  <text x="108" y="68">(AS)</text>
                  <text x="224" y="68">Service</text>
                  <text x="276" y="68">(DS)</text>
                  <text x="432" y="100">Group</text>
                  <text x="212" y="116">........</text>
                  <text x="284" y="116">........</text>
                  <text x="388" y="116">................</text>
                  <text x="184" y="132">.</text>
                  <text x="448" y="132">.</text>
                  <text x="184" y="148">.</text>
                  <text x="448" y="148">.</text>
                  <text x="116" y="164">Client</text>
                  <text x="152" y="164">1</text>
                  <text x="184" y="164">.</text>
                  <text x="244" y="164">Client</text>
                  <text x="280" y="164">2</text>
                  <text x="372" y="164">Client</text>
                  <text x="408" y="164">3</text>
                  <text x="448" y="164">.</text>
                  <text x="184" y="180">.</text>
                  <text x="448" y="180">.</text>
                  <text x="184" y="196">.</text>
                  <text x="236" y="196">Member</text>
                  <text x="272" y="196">1</text>
                  <text x="364" y="196">Member</text>
                  <text x="400" y="196">2</text>
                  <text x="448" y="196">.</text>
                  <text x="184" y="212">.</text>
                  <text x="448" y="212">.</text>
                  <text x="316" y="228">..................................</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
     +----------------+    +--------------+
     | Authentication |    |   Delivery   |
     |  Service (AS)  |    | Service (DS) |
     +----------------+    +-------+------+
                          /        |       \            Group
                         / ........|........\................
                        /  .       |         \              .
              +--------+-+ .  +----+-----+    +----------+  .
              | Client 1 | .  | Client 2 |    | Client 3 |  .
              +----------+ .  +----------+    +----------+  .
                           .   Member 1        Member 2     .
                           .                                .
                           ..................................
]]></artwork>
          </artset>
        </figure>
        <t><xref target="fig-mls-overview"/> shows the relationship of these concepts,
with three clients and one group, and clients 2 and 3 being
part of the group and client 1 not being part of any group.</t>
      </section>
    </section>
    <section anchor="overview-of-operation">
      <name>Overview of Operation</name>
      <t><xref target="fig-group-formation-example"/> shows the formation of an example
group consisting of Alice, Bob, and Charlie, with Alice
driving the creation of the group.</t>
      <figure anchor="fig-group-formation-example">
        <name>Group Formation Example</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="592" viewBox="0 0 592 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 528,64 L 528,144" fill="none" stroke="black"/>
              <path d="M 528,176 L 528,208" fill="none" stroke="black"/>
              <path d="M 528,240 L 528,320" fill="none" stroke="black"/>
              <path d="M 528,352 L 528,448" fill="none" stroke="black"/>
              <path d="M 128,64 L 392,64" fill="none" stroke="black"/>
              <path d="M 8,80 L 304,80" fill="none" stroke="black"/>
              <path d="M 208,96 L 392,96" fill="none" stroke="black"/>
              <path d="M 88,112 L 304,112" fill="none" stroke="black"/>
              <path d="M 288,128 L 392,128" fill="none" stroke="black"/>
              <path d="M 168,144 L 304,144" fill="none" stroke="black"/>
              <path d="M 200,176 L 480,176" fill="none" stroke="black"/>
              <path d="M 280,192 L 480,192" fill="none" stroke="black"/>
              <path d="M 360,208 L 480,208" fill="none" stroke="black"/>
              <path d="M 264,240 L 392,240" fill="none" stroke="black"/>
              <path d="M 8,256 L 168,256" fill="none" stroke="black"/>
              <path d="M 144,272 L 480,272" fill="none" stroke="black"/>
              <path d="M 104,288 L 480,288" fill="none" stroke="black"/>
              <path d="M 88,304 L 344,304" fill="none" stroke="black"/>
              <path d="M 88,320 L 368,320" fill="none" stroke="black"/>
              <path d="M 296,352 L 392,352" fill="none" stroke="black"/>
              <path d="M 8,368 L 136,368" fill="none" stroke="black"/>
              <path d="M 176,384 L 480,384" fill="none" stroke="black"/>
              <path d="M 152,400 L 480,400" fill="none" stroke="black"/>
              <path d="M 88,416 L 312,416" fill="none" stroke="black"/>
              <path d="M 176,432 L 312,432" fill="none" stroke="black"/>
              <path d="M 176,448 L 336,448" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="488,400 476,394.4 476,405.6" fill="black" transform="rotate(0,480,400)"/>
              <polygon class="arrowhead" points="488,384 476,378.4 476,389.6" fill="black" transform="rotate(0,480,384)"/>
              <polygon class="arrowhead" points="488,288 476,282.4 476,293.6" fill="black" transform="rotate(0,480,288)"/>
              <polygon class="arrowhead" points="488,272 476,266.4 476,277.6" fill="black" transform="rotate(0,480,272)"/>
              <polygon class="arrowhead" points="488,208 476,202.4 476,213.6" fill="black" transform="rotate(0,480,208)"/>
              <polygon class="arrowhead" points="488,192 476,186.4 476,197.6" fill="black" transform="rotate(0,480,192)"/>
              <polygon class="arrowhead" points="488,176 476,170.4 476,181.6" fill="black" transform="rotate(0,480,176)"/>
              <polygon class="arrowhead" points="400,352 388,346.4 388,357.6" fill="black" transform="rotate(0,392,352)"/>
              <polygon class="arrowhead" points="400,240 388,234.4 388,245.6" fill="black" transform="rotate(0,392,240)"/>
              <polygon class="arrowhead" points="400,128 388,122.4 388,133.6" fill="black" transform="rotate(0,392,128)"/>
              <polygon class="arrowhead" points="400,96 388,90.4 388,101.6" fill="black" transform="rotate(0,392,96)"/>
              <polygon class="arrowhead" points="400,64 388,58.4 388,69.6" fill="black" transform="rotate(0,392,64)"/>
              <polygon class="arrowhead" points="184,448 172,442.4 172,453.6" fill="black" transform="rotate(180,176,448)"/>
              <polygon class="arrowhead" points="184,432 172,426.4 172,437.6" fill="black" transform="rotate(180,176,432)"/>
              <polygon class="arrowhead" points="176,144 164,138.4 164,149.6" fill="black" transform="rotate(180,168,144)"/>
              <polygon class="arrowhead" points="96,416 84,410.4 84,421.6" fill="black" transform="rotate(180,88,416)"/>
              <polygon class="arrowhead" points="96,320 84,314.4 84,325.6" fill="black" transform="rotate(180,88,320)"/>
              <polygon class="arrowhead" points="96,304 84,298.4 84,309.6" fill="black" transform="rotate(180,88,304)"/>
              <polygon class="arrowhead" points="96,112 84,106.4 84,117.6" fill="black" transform="rotate(180,88,112)"/>
              <polygon class="arrowhead" points="16,368 4,362.4 4,373.6" fill="black" transform="rotate(180,8,368)"/>
              <polygon class="arrowhead" points="16,256 4,250.4 4,261.6" fill="black" transform="rotate(180,8,256)"/>
              <polygon class="arrowhead" points="16,80 4,74.4 4,85.6" fill="black" transform="rotate(180,8,80)"/>
              <g class="text">
                <text x="24" y="36">Alice</text>
                <text x="96" y="36">Bob</text>
                <text x="192" y="36">Charlie</text>
                <text x="396" y="36">AS</text>
                <text x="476" y="36">DS</text>
                <text x="28" y="68">Create</text>
                <text x="88" y="68">account</text>
                <text x="356" y="84">Credential</text>
                <text x="108" y="100">Create</text>
                <text x="168" y="100">account</text>
                <text x="556" y="100">Step</text>
                <text x="584" y="100">1</text>
                <text x="356" y="116">Credential</text>
                <text x="188" y="132">Create</text>
                <text x="248" y="132">account</text>
                <text x="356" y="148">Credential</text>
                <text x="32" y="180">Initial</text>
                <text x="92" y="180">Keying</text>
                <text x="156" y="180">Material</text>
                <text x="112" y="196">Initial</text>
                <text x="172" y="196">Keying</text>
                <text x="236" y="196">Material</text>
                <text x="556" y="196">Step</text>
                <text x="584" y="196">2</text>
                <text x="192" y="212">Initial</text>
                <text x="252" y="212">Keying</text>
                <text x="316" y="212">Material</text>
                <text x="16" y="244">Get</text>
                <text x="48" y="244">Bob</text>
                <text x="96" y="244">Initial</text>
                <text x="156" y="244">Keying</text>
                <text x="220" y="244">Material</text>
                <text x="192" y="260">Bob</text>
                <text x="240" y="260">Initial</text>
                <text x="300" y="260">Keying</text>
                <text x="364" y="260">Material</text>
                <text x="16" y="276">Add</text>
                <text x="48" y="276">Bob</text>
                <text x="76" y="276">to</text>
                <text x="112" y="276">Group</text>
                <text x="556" y="276">Step</text>
                <text x="584" y="276">3</text>
                <text x="32" y="292">Welcome</text>
                <text x="84" y="292">(Bob</text>
                <text x="368" y="308">Add</text>
                <text x="400" y="308">Bob</text>
                <text x="428" y="308">to</text>
                <text x="464" y="308">Group</text>
                <text x="408" y="324">Welcome</text>
                <text x="464" y="324">(Bob)</text>
                <text x="16" y="356">Get</text>
                <text x="64" y="356">Charlie</text>
                <text x="128" y="356">Initial</text>
                <text x="188" y="356">Keying</text>
                <text x="252" y="356">Material</text>
                <text x="176" y="372">Charlie</text>
                <text x="240" y="372">Initial</text>
                <text x="300" y="372">Keying</text>
                <text x="364" y="372">Material</text>
                <text x="16" y="388">Add</text>
                <text x="64" y="388">Charlie</text>
                <text x="108" y="388">to</text>
                <text x="144" y="388">Group</text>
                <text x="32" y="404">Welcome</text>
                <text x="104" y="404">(Charlie)</text>
                <text x="556" y="404">Step</text>
                <text x="584" y="404">4</text>
                <text x="336" y="420">Add</text>
                <text x="384" y="420">Charlie</text>
                <text x="428" y="420">to</text>
                <text x="464" y="420">Group</text>
                <text x="336" y="436">Add</text>
                <text x="384" y="436">Charlie</text>
                <text x="428" y="436">to</text>
                <text x="464" y="436">Group</text>
                <text x="376" y="452">Welcome</text>
                <text x="448" y="452">(Charlie)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
Alice     Bob       Charlie                     AS        DS

Create account --------------------------------->                |
<------------------------------------- Credential                |
          Create account ----------------------->                | Step 1
          <--------------------------- Credential                |
                    Create account ------------->                |
                    <----------------- Credential                |

Initial Keying Material ----------------------------------->     |
          Initial Keying Material ------------------------->     | Step 2
                    Initial Keying Material --------------->     |

Get Bob Initial Keying Material ---------------->                |
<-------------------- Bob Initial Keying Material                |
Add Bob to Group ------------------------------------------>     | Step 3
Welcome (Bob)---------------------------------------------->     |
          <-------------------------------- Add Bob to Group     |
          <----------------------------------- Welcome (Bob)     |

Get Charlie Initial Keying Material ------------>                |
<---------------- Charlie Initial Keying Material                |
Add Charlie to Group -------------------------------------->     |
Welcome (Charlie) ----------------------------------------->     | Step 4
          <---------------------------- Add Charlie to Group     |
                     <----------------- Add Charlie to Group     |
                     <-------------------- Welcome (Charlie)     |
]]></artwork>
        </artset>
      </figure>
      <t>This process proceeds as follows.</t>
      <section anchor="step-1-account-creation">
        <name>Step 1: Account Creation</name>
        <t>Alice, Bob, and Charlie create accounts with a service provider and obtain
credentials from the AS. This is a one-time setup phase.</t>
      </section>
      <section anchor="step-2-initial-keying-material">
        <name>Step 2: Initial Keying Material</name>
        <t>Alice, Bob, and Charlie authenticate to the DS and store some initial
keying material which can be used to send encrypted messages to them
for the first time. This keying material is authenticated with their
long-term credentials. Although in principle this keying material
can be reused for multiple senders, in order to provide forward secrecy
it is better for this material to be regularly refreshed so that each
sender can use a new key.</t>
      </section>
      <section anchor="step-3-adding-bob-to-the-group">
        <name>Step 3: Adding Bob to the Group</name>
        <t>When Alice wants to create a group including Bob, she first uses the DS to look
up his initial keying material. She then generates two messages:</t>
        <ul spacing="normal">
          <li>
            <t>A message to the entire group (which at this point is just her and Bob)
that adds Bob to the group.</t>
          </li>
          <li>
            <t>A <em>Welcome</em> message just to Bob encrypted with his initial keying material that
includes the secret keying information necessary to join the group.</t>
          </li>
        </ul>
        <t>She sends both of these messages to the Delivery Services, which is responsible
for sending them to the appropriate people. Note that the security of MLS
does not depend on the DS forwarding the Welcome message only to Bob, as it
is encrypted for him; it is simply not necessary for other group members
to receive it.</t>
      </section>
      <section anchor="step-4-adding-charlie-to-the-group">
        <name>Step 4: Adding Charlie to the Group</name>
        <t>If Alice then wants to add Charlie to the group, she follows a similar procedure
as with Bob: she first uses the DS to look
up his initial keying material and then generates two messages:</t>
        <ul spacing="normal">
          <li>
            <t>A message to the entire group (consisting of her, Bob, and Charlie) adding
Charlie to the group.</t>
          </li>
          <li>
            <t>A <em>Welcome</em> message just to Charlie encrypted with his initial keying material that
includes the secret keying information necessary to join the group.</t>
          </li>
        </ul>
        <t>At the completion of this process, we have a group with Alice, Bob, and Charlie,
which means that they share a single encryption key which can be used to
send messages or to key other protocols.</t>
      </section>
      <section anchor="other-group-operations">
        <name>Other Group Operations</name>
        <t>Once the group has been created, clients can perform other actions,
such as:</t>
        <ul spacing="normal">
          <li>
            <t>sending a message to everyone in the group</t>
          </li>
          <li>
            <t>receiving a message from someone in the group</t>
          </li>
          <li>
            <t>adding one or more clients to an existing group</t>
          </li>
          <li>
            <t>remove one or more members from an existing group</t>
          </li>
          <li>
            <t>updating their own key material</t>
          </li>
          <li>
            <t>leave a group (by asking to be removed)</t>
          </li>
        </ul>
        <t>Importantly, MLS does not itself enforce any access control on group
operations. For instance, any member of the group can send a message
to add a new member or to evict an existing member.
This is in contrast to some designs in which there is a single group
controller who can modify the group. MLS-using applications are
responsible for setting their own access control policies. For instance,
if only the group administrator is allowed to change group members,
then it is the responsibility of the application to inform members
of this policy and who the administrator is.</t>
      </section>
      <section anchor="proposals-and-commits">
        <name>Proposals and Commits</name>
        <t>The general pattern for any change in the group state (e.g., to add or remove
a user) is that it consists of two messages:</t>
        <dl>
          <dt>Proposal</dt>
          <dd>
            <t>This message describes the change to be made (e.g., add Bob to the group)
but does not effect a change.</t>
          </dd>
          <dt>Commit</dt>
          <dd>
            <t>This message changes the group state to include the changes described in
a set of proposals.</t>
          </dd>
        </dl>
        <t>The simplest pattern is for a client to just send a Commit which contains one or
more Proposals, for instance Alice could send a Commit with the Proposal
Add(Bob) embedded to add Bob to the group. However, there are situations in
which one client might send a proposal and another might send the commit. For
instance, Bob might wish to remove himself from the group and send a Remove
Proposal to do so (see <xref section="12.1.3" sectionFormat="of" target="RFC9420"/>). Because Bob cannot send
the Commit, an existing member must do so.  Commits can apply to multiple valid
Proposals, in which case all the listed changes are applied.</t>
        <t>It is also possible for a Commit to apply to an empty set of Proposals
in which case it just updates the cryptographic state of the group
without changing its membership.</t>
      </section>
      <section anchor="group-members">
        <name>Users, Clients, and Groups</name>
        <t>While it's natural to think of a messaging system as consisting of groups of
users, possibly using different devices, in MLS the basic unit of operation is
not the user but rather the "client".  Formally, a client is a set of
cryptographic objects composed of public values such as a name (an identity), a
public encryption key, and a public signature key. As usual, a user demonstrates
ownership of the client by demonstrating knowledge of the associated secret
values.</t>
        <t>In some messaging systems, clients belonging to the same user must all share the
same signature key pair, but MLS does not assume this; instead a user may have
multiple clients with the same identity and different keys. In this case, each
client will have its own cryptographic state, and it is up to the application to
determine how to present this situation to users. For instance, it may render
messages to and from a given user identically regardless of which client they
are associated with, or may choose to distinguish them.</t>
        <t>When a client is part of a Group, it is called a Member.  A group in MLS is
defined as the set of clients that have knowledge of the shared group secret
established in the group key establishment phase.  Note that until a client has
been added to the group and contributed to the group secret in a manner
verifiable by other members of the group, other members cannot assume that the
client is a member of the group; for instance, the newly added member might not
have received the Welcome message or been unable to decrypt it for some reason.</t>
      </section>
    </section>
    <section anchor="authentication-service">
      <name>Authentication Service</name>
      <t>The Authentication Service (AS) has to provide three services:</t>
      <ol spacing="normal" type="1"><li>
          <t>Issue credentials to clients that attest to bindings between identities and
signature key pairs</t>
        </li>
        <li>
          <t>Enable a client to verify that a credential presented by another client is
valid with respect to a reference identifier</t>
        </li>
        <li>
          <t>Enable a group member to verify that a credential represents the same client
as another credential</t>
        </li>
      </ol>
      <t>A member with a valid credential authenticates its MLS messages by signing them
with the private key corresponding to the public key bound by its credential.</t>
      <t>The AS is considered an abstract layer by the MLS specification and part of this
service could be, for instance, running on the members' devices, while another
part is a separate entity entirely.  The following examples illustrate the
breadth of this concept:</t>
      <ul spacing="normal">
        <li>
          <t>A PKI could be used as an AS <xref target="RFC5280"/>.  The issuance function would be
provided by the certificate authorities in the PKI, and the verification
function would correspond to certificate verification by clients.</t>
        </li>
        <li>
          <t>Several current messaging applications rely on users verifying each other's
key fingerprints for authentication.  In this scenario, the issuance function
is simply the generation of a key pair (i.e., a credential is just an
identifier and public key, with no information to assist in verification).
The verification function is the application function that enables users
to verify keys.</t>
        </li>
        <li>
          <t>In a system based on <xref target="CONIKS"/> end user Key Transparency (KT) <xref target="KT"/>, the
issuance function would correspond to the insertion of a key in a KT log under
a user's identity. The verification function would correspond to verifying a
key's inclusion in the log for a claimed identity, together with the KT log's
mechanisms for a user to monitor and control which keys are associated with
their identity.</t>
        </li>
      </ul>
      <t>By the nature of its roles in MLS authentication, the AS is invested with a
large amount of trust and the compromise of one the AS could
allow an adversary to, among other things, impersonate group members. We discuss
security considerations regarding the compromise of the different AS
functions in detail in <xref target="as-compromise"/>.</t>
      <t>The association between members' identities and signature keys is fairly
flexible in MLS.  As noted above, there is no requirement that all clients
belonging to a given user use the same key pair (in fact, such key reuse is
forbidden to ensure clients have independent cryptographic state).  A member can
also rotate the signature key they use within a group.  These mechanisms allow
clients to use different signature keys in different contexts and at different
points in time, providing unlinkability and post-compromise security benefits.
Some security trade-offs related to this flexibility are discussed in the
security considerations.</t>
      <t>In many applications, there are multiple MLS clients that represent a single
entity, for example a human user with a mobile and desktop version of an
application. Often the same set of clients is represented in exactly the same
list of groups. In applications where this is the intended situation, other
clients can check that a user is consistently represented by the same set of
clients.  This would make it more difficult for a malicious AS to issue fake
credentials for a particular user because clients would expect the credential to
appear in all groups of which the user is a member. If a client credential does
not appear in all groups after some relatively short period of time, clients
have an indication that the credential might have been created without the
user's knowledge. Due to the asynchronous nature of MLS, however, there may be
transient inconsistencies in a user's client set, so correlating users' clients
across groups is more of a detection mechanism than a prevention mechanism.</t>
    </section>
    <section anchor="delivery-service">
      <name>Delivery Service</name>
      <t>The Delivery Service (DS) plays two major roles in MLS:</t>
      <ul spacing="normal">
        <li>
          <t>As a directory service providing the initial keying material for
clients to use. This allows a client to establish a shared key and send
encrypted messages to other clients even if they're offline.</t>
        </li>
        <li>
          <t>Routing MLS messages among clients.</t>
        </li>
      </ul>
      <t>While MLS depends on correct behavior by the Authentication Service in
order to provide endpoint authentication and hence confidentiality of
the group key, these properties do not depend on correct behavior by
the DS; even a malicious DS cannot add itself to groups or recover
the group key. However, depending precisely on how MLS is used, the DS may
be able to determine group membership or prevent changes to the
group from taking place (e.g., by blocking group change messages).</t>
      <section anchor="key-storage-and-retrieval">
        <name>Key Storage and Retrieval</name>
        <t>Upon joining the system, each client stores its initial cryptographic key
material with the Delivery Service. This key material, called a KeyPackage,
advertises the functional abilities of the client such as supported protocol
versions, supported extensions, and the following cryptographic information:</t>
        <ul spacing="normal">
          <li>
            <t>A credential from the Authentication Service attesting to the binding between
the identity and the client's signature key.</t>
          </li>
          <li>
            <t>The client's asymmetric encryption public key.</t>
          </li>
        </ul>
        <t>All the parameters in the KeyPackage are signed with the signature
private key corresponding to the credential.
As noted in <xref target="group-members"/>, users may own multiple clients, each
with their own keying material. Each KeyPackage is specific to an MLS version
and ciphersuite, but a client may want to offer support for multiple protocol
versions and ciphersuites. As such, there may be multiple KeyPackages stored by
each user for a mix of protocol versions, ciphersuites, and end-user devices.</t>
        <t>When a client wishes to establish a group or add clients to a group, it first
contacts the Delivery Service to request KeyPackages for each other client,
authenticates the KeyPackages using the signature keys, includes the KeyPackages
in Add Proposals, encrypts the information needed to join the group
(the <em>GroupInfo</em> object) with an ephemeral key, then separately encrypts the
ephemeral key with the <tt>init_key</tt> from each KeyPackage.
When a client requests a KeyPackage in order to add a user to a group, the
Delivery Service should provide the minimum number of KeyPackages necessary to
satisfy the request.  For example, if the request specifies the MLS version, the
DS might provide one KeyPackage per supported ciphersuite, even if it has
multiple such KeyPackages to enable the corresponding client to be added to
multiple groups before needing to upload more fresh KeyPackages.</t>
        <t>In order to avoid replay attacks and provide forward secrecy for messages sent
using the initial keying material, KeyPackages are intended to be used only
once. The Delivery Service is responsible for ensuring that each KeyPackage is
only used to add its client to a single group, with the possible exception of a
"last resort" KeyPackage that is specially designated by the client to be used
multiple times. Clients are responsible for providing new KeyPackages as
necessary in order to minimize the chance that the "last resort" KeyPackage will
be used.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Ensure that "last resort" KeyPackages don't get used by
provisionning enough standard KeyPackages.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Rotate "last resort" KeyPackages as soon as possible
after being used or if they have been stored for a prolonged period of time.
Overall, avoid reusing last resort KeyPackages as much as possible.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Ensure that the client for which a last resort KeyPackage
has been used is updating leaf keys as early as possible.</t>
          </li>
        </ul>
        <t>Overall, it needs to be noted that key packages need to be updated when
signature keys are changed.</t>
      </section>
      <section anchor="delivery-guarantees">
        <name>Delivery of Messages</name>
        <t>The main responsibility of the Delivery Service is to ensure delivery of
messages. Some MLS messages need only be delivered to specific clients (e.g., a
Welcome message initializing a new member's state), while others need to be
delivered to all the members of a group.  The Delivery Service may enable the
latter delivery pattern via unicast channels (sometimes known as "client
fanout"), broadcast channels ("server fanout"), or a mix of both.</t>
        <t>For the most part, MLS does not require the Delivery Service to deliver messages
in any particular order. Applications can set policies that control their
tolerance for out-of-order messages (see <xref target="operational-requirements"/>), and
messages that arrive significantly out-of-order can be dropped without otherwise
affecting the protocol. There are two exceptions to this. First, Proposal
messages should all arrive before the Commit that references them.  Second,
because an MLS group has a linear history of epochs, the members of the group
must agree on the order in which changes are applied.  Concretely, the group
must agree on a single MLS Commit message that ends each epoch and begins the
next one.</t>
        <t>In practice, there's a realistic risk of two members generating Commit messages
at the same time, based on the same epoch, and both attempting to send them to
the group at the same time. The extent to which this is a problem, and the
appropriate solution, depends on the design of the Delivery Service. Per the CAP
theorem <xref target="CAPBR"/>, there are two general classes of distributed system that the
Delivery Service might fall into:</t>
        <ul spacing="normal">
          <li>
            <t>Consistent and Partition-tolerant, or Strongly Consistent, systems can provide
a globally consistent view of data but has the inconvenient of clients needing
to handle rejected messages;</t>
          </li>
          <li>
            <t>Available and Partition-tolerant, or Eventually Consistent, systems continue
working despite network issues but may return different views of data to
different users.</t>
          </li>
        </ul>
        <t>Strategies for sequencing messages in strongly and eventually consistent systems
are described in the next two subsections. Most Delivery Service will use the
Strongly Consistent paradigm but this remains a choice that can be handled in
coordination with the client and advertized in the KeyPackages.</t>
        <t>However, note that a malicious Delivery Service could also reorder messages or
provide an inconsistent view to different users.  The "generation" counter in
MLS messages provides per-sender loss detection and ordering that cannot be
manipulated by the DS, but this does not provide complete protection against
partitioning.  A DS can cause a partition in the group by partitioning key
exchange messages; this can be detected only by out-of-band comparison (e.g.,
confirming that all clients have the same <tt>epoch_authenticator</tt> value`). A
mechanism for more robust protections is discussed in
<xref target="I-D.ietf-mls-extensions"/>.</t>
        <t>Other forms of Delivery Service misbehavior are still possible that are not easy
to detect. For instance, a Delivery Service can simply refuse to relay messages
to and from a given client. Without some sort of side information, other clients
cannot generally detect this form of Denial of Service (DoS) attack.</t>
        <section anchor="strongly-consistent">
          <name>Strongly Consistent</name>
          <t>With this approach, the Delivery Service ensures that some types of incoming
messages have a linear order and all members agree on that order.  The Delivery
Service is trusted to break ties when two members send a Commit message at the
same time.</t>
          <t>As an example, there could be an "ordering server" Delivery Service that
broadcasts all messages received to all users and ensures that all clients see
handshake messages in the same order. Clients that send a Commit would then wait
to apply it until it's broadcast back to them by the Delivery Service, assuming
they don't receive another Commit first.</t>
          <t>The Delivery Service can rely on the <tt>epoch</tt> and <tt>content_type</tt> fields of an
MLSMessage for providing an order only to handshake messages, and possibly even
filter or reject redundant Commit messages proactively to prevent them from
being broadcast. Alternatively, the Delivery Service could simply apply an order
to all messages and rely on clients to ignore redundant Commits.</t>
        </section>
        <section anchor="eventually-consistent">
          <name>Eventually Consistent</name>
          <t>With this approach, the Delivery Service is built in a way that may be
significantly more available or performant than a strongly consistent system,
but offers weaker consistency guarantees. Messages may arrive to different
clients in different orders and with varying amounts of latency, which means
clients are responsible for reconciliation.</t>
          <t>This type of Delivery Service might arise, for example, when group members are
sending each message to each other member individually, or when a distributed
peer-to-peer network is used to broadcast messages.</t>
          <t>Upon receiving a Commit from the Delivery Service, clients can either:</t>
          <ol spacing="normal" type="1"><li>
              <t>Pause sending new messages for a short amount of time to account for a
reasonable degree of network latency and see if any other Commits are
received for the same epoch. If multiple Commits are received, the clients
can use a deterministic tie-breaking policy to decide which to accept, and
then resume sending messages as normal.</t>
            </li>
            <li>
              <t>Accept the Commit immediately but keep a copy of the previous group state for
a short period of time. If another Commit for a past epoch is received,
clients use a deterministic tie-breaking policy to decide if they should
continue using the Commit they originally accepted or revert and use the
later one. Note that any copies of previous or forked group states must be
deleted within a reasonable amount of time to ensure the protocol provides
forward-secrecy.</t>
            </li>
          </ol>
          <t>If the Commit references an unknown proposal, group members may need to solicit
the Delivery Service or other group members individually for the contents of the
proposal.</t>
        </section>
      </section>
    </section>
    <section anchor="functional-requirements">
      <name>Functional Requirements</name>
      <t>MLS is designed as a large-scale group messaging protocol and hence aims to
provide both performance and security (e.g. integrity and confidentiality)
to its users. Messaging systems that implement MLS provide support for
conversations involving two or more members, and aim to scale to groups with
tens of thousands of members, typically including many users using multiple devices.</t>
      <section anchor="membership-changes">
        <name>Membership Changes</name>
        <t>MLS aims to provide agreement on group membership, meaning that all group
members have agreed on the list of current group members.</t>
        <t>Some applications may wish to enforce ACLs to limit addition or removal of group
members, to privileged clients or users. Others may wish to require
authorization from the current group members or a subset thereof.  Such policies
can be implemented at the application layer, on top of MLS. Regardless, MLS does
not allow for or support addition or removal of group members without informing
all other members.</t>
        <t>Membership of an MLS group is managed at the level of individual clients.  In
most cases, a client corresponds to a specific device used by a user. If a user
has multiple devices, the user will generally be represented in a group by
multiple clients (although applications could choose to have devices share
keying material).  If an application wishes to implement operations at the level
of users, it is up to the application to track which clients belong to a given
user and ensure that they are added / removed consistently.</t>
        <t>MLS provides two mechanisms for changing the membership of a group.  The primary
mechanism is for an authorized member of the group to send a Commit that adds or
removes other members.  The second mechanism is an "external join": A member of
the group publishes certain information about the group, which a new member can
use to construct an "external" Commit message that adds the new member to the
group.  (There is no similarly unilateral way for a member to leave the group;
they must be removed by a remaining member.)</t>
        <t>With both mechanisms, changes to the membership are initiated from inside the
group.  When members perform changes directly, this is clearly the case.
External joins are authorized indirectly, in the sense that a member publishing
a GroupInfo object authorizes anyone to join who has access to the GroupInfo
object, subject to whatever access control policies the application applies
for external joins.</t>
        <t>Both types of joins are done via a Commit message, which could be
blocked by the DS or rejected by clients if the join is not authorized.  The
former approach requires that Commits be visible to the DS; the latter approach
requires that clients all share a consistent policy. In the unfortunate event
that an unauthorized member is able to join, MLS enables any member to remove
them.</t>
        <t>Application setup may also determine other criteria for membership validity. For
example, per-device signature keys can be signed by an identity key recognized
by other participants. If a certificate chain is used to authenticate device
signature keys, then revocation by the owner adds an alternative mechanism to prompt
membership removal.</t>
        <t>An MLS group's secrets change on every change of membership, so each client only
has access to the secrets used by the group while they are a member.  Messages
sent before a client joins or after they are removed are protected with keys
that are not accessible to the client.  Compromise of a member removed from a
group does not affect the security of messages sent after their removal.
Messages sent during the client's membership are also secure as long as the
client has properly implemented the MLS deletion schedule, which calls for the
secrets used to encrypt or decrypt a message to be deleted after use, along with
any secrets that could be used to derive them.</t>
      </section>
      <section anchor="parallel-groups">
        <name>Parallel Groups</name>
        <t>Any user or client may have membership in several groups simultaneously.  The
set of members of any group may or may not form a subset of the members of
another group. MLS guarantees that the FS and PCS goals within a given group are
maintained and not weakened by user membership in multiple groups. However,
actions in other groups likewise do not strengthen the FS and PCS guarantees
within a given group, e.g., key updates within a given group following a device
compromise does not provide PCS healing in other groups; each group must be
updated separately to achieve these security objectives.  This also applies to
future groups that a member has yet to join, which are likewise unaffected by
updates performed in current groups.</t>
        <t>Applications can strengthen connectivity among parallel groups by requiring
periodic key updates from a user across all groups in which they have
membership.</t>
        <t>MLS provides a pre-shared key (PSK) that can be used to link healing properties
among parallel groups.  For example, suppose a common member M of two groups A
and B has performed a key update in group A but not in group B.  The key update
provides PCS with regard to M in group A.  If a PSK is exported from group A and
injected into group B, then some of these PCS properties carry over to group B,
since the PSK and secrets derived from it are only known to the new, updated
version of M, not to the old, possibly compromised version of M.</t>
      </section>
      <section anchor="asynchronous-usage">
        <name>Asynchronous Usage</name>
        <t>No operation in MLS requires two distinct clients or members to be online
simultaneously. In particular, members participating in conversations protected
using MLS can update the group's keys, add or remove new members, and send
messages without waiting for another user's reply.</t>
        <t>Messaging systems that implement MLS have to provide a transport layer for
delivering messages asynchronously and reliably.</t>
      </section>
      <section anchor="access-control">
        <name>Access Control</name>
        <t>Because all clients within a group (members) have access to the shared
cryptographic material, MLS protocol allows each member of the messaging group
to perform operations, However, every service/infrastructure has control over
policies applied to its own clients. Applications managing MLS clients can be
configured to allow for specific group operations. On the one hand, an
application could decide that a group administrator will be the only member to
perform add and remove operations. On the other hand, in many settings such as
open discussion forums, joining can be allowed for anyone.</t>
        <t>While MLS Application messages are always encrypted,
MLS handshake messages can be sent either encrypted (in an MLS
PrivateMessage) or unencrypted (in an MLS PublicMessage). Applications
may be designed such that intermediaries need to see handshake
messages, for example to enforce policy on which commits are allowed,
or to provide MLS ratchet tree data in a central location. If
handshake messages are unencrypted, it is especially important that
they be sent over a channel with strong transport encryption
(see <xref target="security-and-privacy-considerations"/>) in order to prevent external
attackers from monitoring the status of the group. Applications that
use unencrypted handshake messages may take additional steps to reduce
the amount of metadata that is exposed to the intermediary. Everything
else being equal, using encrypted handshake messages provides stronger
privacy properties than using unencrypted handshake messages,
as it prevents intermediaries from learning about the structure
of the group.</t>
        <t>If handshake messages are encrypted, any access
control policies must be applied at the client, so the application must ensure
that the access control policies are consistent across all clients to make sure
that they remain in sync.  If two different policies were applied, the clients
might not accept or reject a group operation and end-up in different
cryptographic states, breaking their ability to communicate.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Avoid using inconsistent access control policies in the
case of encrypted group operations.</t>
          </li>
        </ul>
        <t>MLS allows actors outside the group to influence the group in two ways: External
signers can submit proposals for changes to the group, and new joiners can use
an external join to add themselves to the group.  The <tt>external_senders</tt>
extension ensures that all members agree on which signers are allowed to send
proposals, but any other policies must be assured to be consistent as above.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Have an explicit group policy setting the conditions under
which external joins are allowed.</t>
          </li>
        </ul>
      </section>
      <section anchor="handling-authentication-failures">
        <name>Handling Authentication Failures</name>
        <t>Within an MLS group, every member is authenticated to every other member by
means of credentials issued and verified by the Authentication Service.  MLS
does not prescribe what actions, if any, an application should take in the event
that a group member presents an invalid credential.  For example, an application
may require such a member to be immediately evicted, or may allow some grace
period for the problem to be remediated. To avoid operational problems, it is
important for all clients in a group to have a consistent view of which
credentials in a group are valid, and how to respond to invalid credentials.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Have a uniform credential validation process to ensure
that all group members evaluate other members' credentials in the same way.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Have a uniform policy for how invalid credentials are
handled.</t>
          </li>
        </ul>
        <t>In some authentication systems, it is possible for a previously-valid credential
to become invalid over time.  For example, in a system based on X.509
certificates, credentials can expire or be revoked.  The MLS update mechanisms
allow a client to replace an old credential with a new one. This is best done
before the old credential becomes invalid.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Proactively rotate credentials, especially if a credential
is about to become invalid.</t>
          </li>
        </ul>
      </section>
      <section anchor="state-loss">
        <name>Recovery After State Loss</name>
        <t>Group members whose local MLS state is lost or corrupted can reinitialize their
state by re-joining the group as a new member and removing the member
representing their earlier state.  An application can require that a client
performing such a reinitialization prove its prior membership with a PSK that
was exported from the prevoius state.</t>
        <t>There are a few practical challenges to this approach.  For example, the
application will need to ensure that all members have the required PSK,
including any new members that have joined the group since the epoch in which
the PSK was issued.  And of course, if the PSK is lost or corrupted along with
the member's other state, then it cannot be used to recover.</t>
        <t>Reinitializing in this way does not provide the member with access to group
messages from during the state loss window, but enables proof of prior
membership in the group. Applications may choose various configurations for
providing lost messages to valid group members that are able to prove prior
membership.</t>
      </section>
      <section anchor="support-for-multiple-devices">
        <name>Support for Multiple Devices</name>
        <t>It is typically expected for users within a group to own various devices. A new
device can be added to a group and be considered as a new client by the
protocol. This client will not gain access to the history even if it is owned by
someone who owns another member of the group.  MLS does not provide direct
support for restoring history in this case, but applications can elect to
provide such a mechanism outside of MLS.  Such mechanisms, if used, may reduce
the FS and PCS guarantees provided by MLS.</t>
      </section>
      <section anchor="extensibility">
        <name>Extensibility</name>
        <t>The MLS protocol provides several extension points where additional information
can be provided.  Extensions to KeyPackages allow clients to disclose additional
information about their capabilities.  Groups can also have extension data
associated with them, and the group agreement properties of MLS will confirm
that all members of the group agree on the content of these extensions.</t>
      </section>
      <section anchor="application-data-framing-and-type-advertisements">
        <name>Application Data Framing and Type Advertisements</name>
        <t>Application messages carried by MLS are opaque to the protocol; they can contain
arbitrary data. Each application which uses MLS needs to define the format of
its <tt>application_data</tt> and any mechanism necessary to determine the format of
that content over the lifetime of an MLS group. In many applications this means
managing format migrations for groups with multiple members who may each be
offline at unpredictable times.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Use the default content mechanism defined in
<xref section="2.3" sectionFormat="of" target="I-D.ietf-mls-extensions"/>, unless the specific application defines another
mechanism which more appropriately addresses the same requirements for that
application of MLS.</t>
          </li>
        </ul>
        <t>The MLS framing for application messages also provides a field where clients can
send information that is authenticated but not encrypted.  Such information can
be used by servers that handle the message, but group members are assured that
it has not been tampered with.</t>
      </section>
      <section anchor="federation">
        <name>Federation</name>
        <t>The protocol aims to be compatible with federated environments. While this
document does not specify all necessary mechanisms required for federation,
multiple MLS implementations can interoperate to form federated systems if they
use compatible authentication mechanisms, ciphersuites, application content, and
infrastructure functionalities. Federation is described in more detail in
<xref target="I-D.ietf-mls-federation"/>.</t>
      </section>
      <section anchor="compatibility-with-future-versions-of-mls">
        <name>Compatibility with Future Versions of MLS</name>
        <t>It is important that multiple versions of MLS be able to coexist in the
future. Thus, MLS offers a version negotiation mechanism; this mechanism
prevents version downgrade attacks where an attacker would actively rewrite
messages with a lower protocol version than the ones originally offered by the
endpoints. When multiple versions of MLS are available, the negotiation protocol
guarantees that the version agreed upon will be the highest version supported in
common by the group.</t>
        <t>In MLS 1.0, the creator of the group is responsible for selecting the best
ciphersuite supported across clients. Each client is able to verify availability
of protocol version, ciphersuites and extensions at all times once he has at
least received the first group operation message.</t>
        <t>Each member of an MLS group advertises the protocol functionality they support.
These capability advertisements can be updated over time, e.g., if client
software is updated while the client is a member of a group. Thus, in addition
to preventing downgrade attacks, the members of a group can also observe when it
is safe to upgrade to a new ciphersuite or protocol version.</t>
      </section>
    </section>
    <section anchor="operational-requirements">
      <name>Operational Requirements</name>
      <t>MLS is a security layer that needs to be integrated with an application. A
fully-functional deployment of MLS will have to make a number of decisions about
how MLS is configured and operated.  Deployments that wish to interoperate will
need to make compatible decisions. This section lists all of the dependencies of
an MLS deployment that are external to the protocol specification, but would
still need to be aligned within a given MLS deployment, or for two deployments
to potentially interoperate.</t>
      <t>The protocol has a built-in ability to negotiate protocol versions,
ciphersuites, extensions, credential types, and additional proposal types. For
two deployments to interoperate, they must have overlapping support in each of
these categories. The <tt>required_capabilities</tt> extension (Section 7.2 of
<xref target="RFC9420"/>) can promote interoperability with a wider set of clients by
ensuring that certain functionality continues to be supported by a group, even
if the clients in the group aren't currently relying on it.</t>
      <t>MLS relies on the following network services, that need to be compatible in
order for two different deployments based on them to interoperate.</t>
      <ul spacing="normal">
        <li>
          <t>An <strong>Authentication Service</strong>, described fully in <xref target="authentication-service"/>,
defines the types of credentials which may be used in a deployment and
provides methods for:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Issuing new credentials with a relevant credential lifetime,</t>
            </li>
            <li>
              <t>Validating a credential against a reference identifier,</t>
            </li>
            <li>
              <t>Validating whether or not two credentials represent the same client, and</t>
            </li>
            <li>
              <t>Optionally revoking credentials which are no longer authorized.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>A <strong>Delivery Service</strong>, described fully in <xref target="delivery-service"/>, provides
methods for:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Delivering messages for a group to all members in the group.</t>
            </li>
            <li>
              <t>Delivering Welcome messages to new members of a group.</t>
            </li>
            <li>
              <t>Uploading new KeyPackages for a user's own clients.</t>
            </li>
            <li>
              <t>Downloading KeyPackages for specific clients. Typically, KeyPackages are
used once and consumed.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>Additional services may or may not be required depending on the application
design:  </t>
          <ul spacing="normal">
            <li>
              <t>In cases where group operations are not encrypted, the DS has the ability to
observe and maintain a copy of the public group state. In particular, this
is useful for clients that do not have the ability to send the full public
state in a Welcome message when inviting auser or for client that need to
recover from a loss of their state. Such public state can contain privacy
sensitive information such as group members' credentials and related public
keys, hence services need to be carefully evaluate the privacy impact of
storing this data on the DS.</t>
            </li>
            <li>
              <t>If external joiners are allowed, there must be a method to publish a
serialized <tt>GroupInfo</tt> object (with an <tt>external_pub</tt> extension) that
corresponds to a specific group and epoch, and keep that object in sync with
the state of the group.</t>
            </li>
            <li>
              <t>If an application chooses not to allow external joining, it may
instead provide a method for external users to solicit group members (or a
designated service) to add them to a group.</t>
            </li>
            <li>
              <t>If the application uses PSKs that members of a group may not have access to
(e.g., to control entry into the group or to prove membership in the group
in the past, as in <xref target="state-loss"/>) there must be a method for distributing
these PSKs to group members who might not have them, for instance if they
joined the group after the PSK was generated.</t>
            </li>
            <li>
              <t>If an application wishes to detect and possibly discipline members that send
malformed commits with the intention of corrupting a group's state, there
must be a method for reporting and validating malformed commits.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>MLS requires the following parameters to be defined, which must be the same for
two implementations to interoperate:</t>
      <ul spacing="normal">
        <li>
          <t>The maximum total lifetime that is acceptable for a KeyPackage.</t>
        </li>
        <li>
          <t>How long to store the resumption PSK for past epochs of a group.</t>
        </li>
        <li>
          <t>The degree of tolerance that's allowed for out-of-order message delivery:  </t>
          <ul spacing="normal">
            <li>
              <t>How long to keep unused nonce and key pairs for a sender</t>
            </li>
            <li>
              <t>A maximum number of unused key pairs to keep.</t>
            </li>
            <li>
              <t>A maximum number of steps that clients will move a secret tree ratchet
forward in response to a single message before rejecting it.</t>
            </li>
            <li>
              <t>Whether to buffer messages that aren't able to be understood yet due to
other messages not arriving first, and if so, how many and for how long. For
example, Commit messages that arrive before a proposal they reference, or
application messages that arrive before the Commit starting an epoch.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>If implementations differ in these parameters, they will interoperate to some
extent but may experience unexpected failures in certain situations, such as
extensive message reordering.</t>
      <t>MLS provides the following locations where an application may store arbitrary
data. The format and intention of any data in these locations must align for two
deployments to interoperate:</t>
      <ul spacing="normal">
        <li>
          <t>Application data, sent as the payload of an encrypted message.</t>
        </li>
        <li>
          <t>Additional authenticated data, sent unencrypted in an otherwise encrypted
message.</t>
        </li>
        <li>
          <t>Group IDs, as decided by group creators and used to uniquely identify a group.</t>
        </li>
        <li>
          <t>Application-level identifiers of public key material (specifically
the <tt>application_id</tt> extension as defined in <xref section="5.3.3" sectionFormat="of" target="RFC9420"/>).</t>
        </li>
      </ul>
      <t>MLS requires the following policies to be defined, which restrict the set of
acceptable behavior in a group. These policies must be consistent between
deployments for them to interoperate:</t>
      <ul spacing="normal">
        <li>
          <t>A policy on which ciphersuites are acceptable.</t>
        </li>
        <li>
          <t>A policy on any mandatory or forbidden MLS extensions.</t>
        </li>
        <li>
          <t>A policy on when to send proposals and commits in plaintext instead of
encrypted.</t>
        </li>
        <li>
          <t>A policy for which proposals are valid to have in a commit, including but not
limited to:
          </t>
          <ul spacing="normal">
            <li>
              <t>When a member is allowed to add or remove other members of the group.</t>
            </li>
            <li>
              <t>When, and under what circumstances, a reinitialization proposal is allowed.</t>
            </li>
            <li>
              <t>When proposals from external senders are allowed and how to authorize
those proposals.</t>
            </li>
            <li>
              <t>When external joiners are allowed and how to authorize those external
commits.</t>
            </li>
            <li>
              <t>Which other proposal types are allowed.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>A policy of when members should commit pending proposals in a group.</t>
        </li>
        <li>
          <t>A policy of how to protect and share the GroupInfo objects needed for
external joins.</t>
        </li>
        <li>
          <t>A policy for when two credentials represent the same client. Note that many
credentials may be issued attesting the same identity but for different
signature keys, because each credential corresponds to a different client
owned by the same application user. However, one device may control multiple
signature keys -- for instance if they have keys corresponding to multiple
overlapping time periods -- but should still only be considered a single
client.</t>
        </li>
        <li>
          <t>A policy on how long to allow a member to stay in a group without updating its
leaf keys before removing them.</t>
        </li>
      </ul>
      <t>Finally, there are some additional application-defined behaviors that are
partially an individual application's decision but may overlap with
interoperability:</t>
      <ul spacing="normal">
        <li>
          <t>When and how to pad messages.</t>
        </li>
        <li>
          <t>When to send a reinitialization proposal.</t>
        </li>
        <li>
          <t>How often clients should update their leaf keys.</t>
        </li>
        <li>
          <t>Whether to prefer sending full commits or partial/empty commits.</t>
        </li>
        <li>
          <t>Whether there should be a <tt>required_capabilities</tt> extension in groups.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>MLS adopts the Internet threat model <xref target="RFC3552"/> and therefore assumes that the
attacker has complete control of the network. It is intended to provide the
security services described in <xref target="intended-security-guarantees"/> in the face of
attackers who can:</t>
      <ul spacing="normal">
        <li>
          <t>Monitor the entire network.</t>
        </li>
        <li>
          <t>Read unprotected messages.</t>
        </li>
        <li>
          <t>Can generate, inject and delete any message in the unprotected
transport layer.</t>
        </li>
      </ul>
      <t>While MLS should be run over a secure transport such as QUIC <xref target="RFC9000"/> or TLS
<xref target="RFC8446"/>, the security guarantees of MLS do not depend on the
transport. This departs from the usual design practice of trusting the transport
because MLS is designed to provide security even in the face of compromised
network elements, especially the DS.</t>
      <t>Generally, MLS is designed under the assumption that the transport layer is
present to keep metadata private from network observers, while the MLS protocol
provides confidentiality, integrity, and authentication guarantees for the
application data (which could pass through multiple systems). Additional
properties such as partial anonymity or deniability could also be achieved in
specific architecture designs.</t>
      <t>In addition, these guarantees are intended to degrade gracefully in the presence
of compromise of the transport security links as well as of both clients and
elements of the messaging system, as described in the remainder of this section.</t>
      <section anchor="assumptions-on-transport-security-links">
        <name>Assumptions on Transport Security Links</name>
        <t>As discussed above, MLS provides the highest level of security when its messages
are delivered over an encrypted transport.  The main use of the secure transport
layer for MLS is to protect the already limited amount of metadata. Very little
information is contained in the unencrypted header of the MLS protocol message
format for group operation messages, and application messages are always
encrypted in MLS.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Use transports that provide reliability and metadata
confidentiality whenever possible, e.g., by transmitting MLS messages over
a protocol such as TLS <xref target="RFC8446"/> or QUIC <xref target="RFC9000"/>.</t>
          </li>
        </ul>
        <t>MLS avoids needing to send the full list of recipients to the server for
dispatching messages because that list could potentially contain tens of
thousands of recipients. Header metadata in MLS messages typically consists of
an opaque <tt>group_id</tt>, a numerical value to determine the epoch of the group (the
number of changes that have been made to the group), and whether the message is
an application message, a proposal, or a commit.</t>
        <t>Even though some of this metadata information does not consist of sensitive
information, in correlation with other data a network observer might be able to
reconstruct sensitive information. Using a secure channel to transfer this
information will prevent a network attacker from accessing this MLS protocol
metadata if it cannot compromise the secure channel.</t>
        <section anchor="integrity-and-authentication-of-custom-metadata">
          <name>Integrity and Authentication of Custom Metadata</name>
          <t>MLS provides an authenticated "Additional Authenticated Data" (AAD) field for
applications to make data available outside a PrivateMessage, while
cryptographically binding it to the message.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Use the "Additional Authenticated Data" field of the
PrivateMessage instead of using other unauthenticated means of sending
metadata throughout the infrastructure. If the data should be kept private, the
infrastructure should use encrypted Application messages instead.</t>
            </li>
          </ul>
        </section>
        <section anchor="metadata-protection-for-unencrypted-group-operations">
          <name>Metadata Protection for Unencrypted Group Operations</name>
          <t>Having no secure channel to exchange MLS messages can have a serious impact on
privacy when transmitting unencrypted group operation messages. Observing the
contents and signatures of the group operation messages may lead an adversary to
extract information about the group membership.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Never use the unencrypted mode for group operations
without using a secure channel for the transport layer.</t>
            </li>
          </ul>
        </section>
        <section anchor="dos-protection">
          <name>DoS protection</name>
          <t>In general we do not consider Denial of Service (DoS) resistance to be the
responsibility of the protocol. However, it should not be possible for anyone
aside from the Delivery Service to perform a trivial DoS attack from which it is
hard to recover. This can be achieved through the secure transport layer.</t>
          <t>In the centralized setting, DoS protection can typically be performed by using
tickets or cookies which identify users to a service for a certain number of
connections. Such a system helps in preventing anonymous clients from sending
arbitrary numbers of group operation messages to the Delivery Service or the MLS
clients.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Use credentials uncorrellated with specific users to help
prevent DoS attacks, in a privacy preserving manner. Note that the privacy of
these mechanisms has to be adjusted in accordance with the privacy expected
from secure transport links. (See more discussion in the next section.)</t>
            </li>
          </ul>
        </section>
        <section anchor="message-suppression-and-error-correction">
          <name>Message Suppression and Error Correction</name>
          <t>As noted above, MLS is designed to provide some robustness in the face of
tampering within the secure transport, i.e., tampering by the Delivery Service.
The confidentiality and authenticity properties of MLS prevent the DS from
reading or writing messages.  MLS also provides a few tools for detecting
message suppression, with the caveat that message suppression cannot always be
distinguished from transport failure.</t>
          <t>Each encrypted MLS message carries a "generation" number which is a per-sender
incrementing counter.  If a group member observes a gap in the generation
sequence for a sender, then they know that they have missed a message from that
sender.  MLS also provides a facility for group members to send authenticated
acknowledgments of application messages received within a group.</t>
          <t>As discussed in <xref target="delivery-service"/>, the Delivery Service is trusted to select
the single Commit message that is applied in each epoch from among the ones sent
by group members.  Since only one Commit per epoch is meaningful, it's not
useful for the DS to transmit multiple Commits to clients.  The risk remains
that the DS will use the ability maliciously.</t>
          <t>While it is difficult or impossible to prevent a network adversary from
suppressing payloads in transit, in certain infrastructures such as banks or
governments settings, unidirectional transports can be used and be enforced via
electronic or physical devices such as diodes. This can lead to payload
corruption which does not affect the security or privacy properties of the MLS
protocol but does affect the reliability of the service. In that case specific
measures can be taken to ensure the appropriate level of redundancy and quality
of service for MLS.</t>
        </section>
      </section>
      <section anchor="intended-security-guarantees">
        <name>Intended Security Guarantees</name>
        <t>MLS aims to provide a number of security guarantees, covering authentication, as
well as confidentiality guarantees to different degrees in different scenarios.</t>
        <section anchor="message-secrecy-authentication">
          <name>Message Secrecy and Authentication</name>
          <t>MLS enforces the encryption of application messages and thus generally
guarantees authentication and confidentiality of application messages sent in a
group.</t>
          <t>In particular, this means that only other members of a given group can decrypt
the payload of a given application message, which includes information about the
sender of the message.</t>
          <t>Similarly, group members receiving a message from another group member can
authenticate that group member as the sender of the message and verify the
message's integrity.</t>
          <t>Message content can be deniable if the signature keys are exchanged over a
deniable channel prior to signing messages.</t>
          <t>Depending on the group settings, handshake messages can be encrypted as well. If
that is the case, the same security guarantees apply.</t>
          <t>MLS optionally allows the addition of padding to messages, mitigating the amount
of information leaked about the length of the plaintext to an observer on the
network.</t>
        </section>
        <section anchor="fs-and-pcs">
          <name>Forward and Post-Compromise Security</name>
          <t>MLS provides additional protection regarding secrecy of past messages and future
messages. These cryptographic security properties are Forward Secrecy (FS) and
Post-Compromise Security (PCS).</t>
          <t>FS means that access to all encrypted traffic history combined with access to
all current keying material on clients will not defeat the secrecy properties of
messages older than the oldest key of the compromised client.  Note that this
means that clients have the extremely important role of deleting appropriate
keys as soon as they have been used with the expected message, otherwise the
secrecy of the messages and the security for MLS is considerably weakened.</t>
          <t>PCS means that if a group member's state is compromised at some time t1 but the
group member subsequently performs an update at some time t2, then all MLS
guarantees apply to messages sent by the member after time t2, and by other
members after they have processed the update. For example, if an attacker learns
all secrets known to Alice at time t1, including both Alice's long-term secret
keys and all shared group keys, but Alice performs a key update at time t2, then
the attacker is unable to violate any of the MLS security properties after the
updates have been processed.</t>
          <t>Both of these properties are satisfied even against compromised DSs and ASs in
the case where some other mechanism for verifying keys is in use, such as Key
Transparency <xref target="KT"/>.</t>
          <t>Confidentiality is mainly ensured on the client side.  Because Forward Secrecy
(FS) and Post-Compromise Security (PCS) rely on the active deletion and
replacement of keying material, any client which is persistently offline may
still be holding old keying material and thus be a threat to both FS and PCS if
it is later compromised.</t>
          <t>MLS partially defends against this problem by active members including
freshness, however not much can be done on the inactive side especially in the
case where the client has not processed messages.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Mandate key updates from clients that are not otherwise
sending messages and evict clients which are idle for too long.</t>
            </li>
          </ul>
          <t>These recommendations will reduce the ability of idle compromised clients to
decrypt a potentially long set of messages that might have followed the point of
the compromise.</t>
          <t>The precise details of such mechanisms are a matter of local policy and beyond
the scope of this document.</t>
        </section>
        <section anchor="Non-Repudiation-vs-Deniability">
          <name>Non-Repudiation vs Deniability</name>
          <t>MLS provides strong authentication within a group, such that a group member
cannot send a message that appears to be from another group member.
Additionally, some services require that a recipient be able to prove to the
service provider that a message was sent by a given client, in order to report
abuse. MLS supports both of these use cases. In some deployments, these services
are provided by mechanisms which allow the receiver to prove a message's origin
to a third party. This is often called "non-repudiation".</t>
          <t>Roughly speaking, "deniability" is the opposite of "non-repudiation", i.e., the
property that it is impossible to prove to a third party that a message was sent
by a given sender.  MLS does not make any claims with regard to deniability.  It
may be possible to operate MLS in ways that provide certain deniability
properties, but defining the specific requirements and resulting notions of
deniability requires further analysis.</t>
        </section>
        <section anchor="associating-a-users-clients">
          <name>Associating a User's Clients</name>
          <t>When the same user uses multiple clients, it may be possible for other members
of a group to recognize all of those clients as belonging to the same user.  For
example, all of a user's clients might present credentials authenticating the
user's identity.  This association among devices might be considered a leak of
private information.  The remainder of this section describes several approaches
for addressing this.</t>
          <t>This risk only arises when the leaf nodes for the clients in question provide
data that can be used to correlate the clients.  So one way to mitigate this
risk is by only doing client-level authentication within MLS. If user-level
authentication is still desirable, the application would have to provide it
through some other mechanism.</t>
          <t>It is also possible to maintain user-level authentication while hiding
information about the clients that a user owns.  This can be done by having the
clients share cryptographic state, so that they appear as a single client within
the MLS group.  The application would need to provide a synchronization
mechanism so that the clients' state remained consistent across changes to the
MLS group.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Avoid sharing cryptographic state between clients to
improve resilience against compromises.  An attacker could use one compromised
device to establish ownership of a state across other devices and reduce the
ability of the user to recover.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="endpoint-compromise">
        <name>Endpoint Compromise</name>
        <t>The MLS protocol adopts a threat model which includes multiple forms of
endpoint/client compromise. While adversaries are in a strong position if
they have compromised an MLS client, there are still situations where security
guarantees can be recovered thanks to the PCS properties achieved by the MLS
protocol.</t>
        <t>In this section we will explore the consequences and recommendations regarding
the following compromise scenarios:</t>
        <ul spacing="normal">
          <li>
            <t>The attacker has access to a symmetric encryption key</t>
          </li>
          <li>
            <t>The attacker has access to a application ratchet secret</t>
          </li>
          <li>
            <t>The attacker has access to the group secrets for one group</t>
          </li>
          <li>
            <t>The attacker has access to a signature oracle for any group</t>
          </li>
          <li>
            <t>The attacker has access to the signature key for one group</t>
          </li>
          <li>
            <t>The attacker has access to all secrets of a user for all groups (full state
compromise)</t>
          </li>
        </ul>
        <section anchor="symmetric-key-compromise">
          <name>Compromise of Symmetric Keying Material</name>
          <t>As described above, each MLS epoch creates a new Group Secret.</t>
          <t>These group secrets are then used to create a per-sender Ratchet Secret, which
in turn is used to create a per-sender with additional data (AEAD) <xref target="RFC5116"/>
key that is then used to encrypt MLS Plaintext messages.  Each time a message is
sent, the Ratchet Secret is used to create a new Ratchet Secret and a new
corresponding AEAD key.  Because of the properties of the key derivation
function, it is not possible to compute a Ratchet Secret from its corresponding
AEAD key or compute Ratchet Secret n-1 from Ratchet Secret n.</t>
          <t>Below, we consider the compromise of each of these pieces of keying material in
turn, in ascending order of severity.  While this is a limited kind of
compromise, it can be realistic in cases of implementation vulnerabilities where
only part of the memory leaks to the adversary.</t>
          <section anchor="compromise-of-aead-keys">
            <name>Compromise of AEAD Keys</name>
            <t>In some circumstances, adversaries may have access to specific AEAD keys and
nonces which protect an Application or a Group Operation message. Compromise of
these keys allows the attacker to decrypt the specific message encrypted with
that key but no other; because the AEAD keys are derived from the Ratchet
Secret, it cannot generate the next Ratchet Secret and hence not the next AEAD
key.</t>
            <t>In the case of an Application message, an AEAD key compromise means that the
encrypted application message will be leaked as well as the signature over that
message. This means that the compromise has both confidentiality and privacy
implications on the future AEAD encryptions of that chain.  In the case of a
Group Operation message, only the privacy is affected, as the signature is
revealed, because the secrets themselves are protected by HPKE encryption.  Note
that under that compromise scenario, authentication is not affected in either of
these cases.  As every member of the group can compute the AEAD keys for all the
chains (they have access to the Group Secrets) in order to send and receive
messages, the authentication provided by the AEAD encryption layer of the common
framing mechanism is weak. Successful decryption of an AEAD encrypted message
only guarantees that some member of the group sent the message.</t>
            <t>Compromise of the AEAD keys allows the attacker to send an encrypted message
using that key, but cannot send a message to a group which appears to be from
any valid client since they cannot forge the signature. This applies to all the
forms of symmetric key compromise described in <xref target="symmetric-key-compromise"/>.</t>
          </section>
          <section anchor="compromise-of-ratchet-secret-material">
            <name>Compromise of Ratchet Secret material</name>
            <t>When a Ratchet Secret is compromised, the adversary can compute both the current
AEAD keys for a given sender as well as any future keys for that sender in this
epoch. Thus, it can decrypt current and future messages by the corresponding
sender. However, because it does not have previous Ratchet Secrets, it cannot
decrypt past messages as long as those secrets and keys have been deleted.</t>
            <t>Because of its Forward Secrecy guarantees, MLS will also retain secrecy of all
other AEAD keys generated for <em>other</em> MLS clients, outside this dedicated chain
of AEAD keys and nonces, even within the epoch of the compromise.  MLS provides
Post-Compromise Security against an active adaptive attacker across epochs for
AEAD encryption, which means that as soon as the epoch is changed, if the
attacker does not have access to more secret material they won't be able to
access any protected messages from future epochs.</t>
          </section>
          <section anchor="compromise-of-the-group-secrets-of-a-single-group-for-one-or-more-group-epochs">
            <name>Compromise of the Group Secrets of a single group for one or more group epochs</name>
            <t>An adversary who gains access to a set of Group secrets--as when a member of the
group is compromised--is significantly more powerful. In this section, we
consider the case where the signature keys are not compromised, which can occur
if the attacker has access to part of the memory containing the group secrets
but not to the signature keys which might be stored in a secure enclave.</t>
            <t>In this scenario, the adversary gains the ability to compute any number of
Ratchet Secrets for the epoch and their corresponding AEAD encryption keys and
thus can encrypt and decrypt all messages for the compromised epochs.</t>
            <t>If the adversary is passive, it is expected from the PCS properties of the MLS
protocol that, as soon as the compromised party remediates the compromise and
sends an honest Commit message, the next epochs will provide message secrecy.</t>
            <t>If the adversary is active, the adversary can engage in the protocol itself and
perform updates on behalf of the compromised party with no ability for an honest
group to recover message secrecy. However, MLS provides PCS against active
adaptive attackers through its Remove group operation. This means that, as long
as other members of the group are honest, the protocol will guarantee message
secrecy for all messages exchanged in the epochs after the compromised party has
been removed.</t>
          </section>
        </section>
        <section anchor="compromise-by-an-active-adversary-with-the-ability-to-sign-messages">
          <name>Compromise by an active adversary with the ability to sign messages</name>
          <t>If an active adversary has compromised an MLS client and can sign messages, two
different settings emerge. In the strongest compromise scenario, the attacker
has access to the signing key and can forge authenticated messages. In a weaker,
yet realistic scenario, the attacker has compromised a client but the client
signature keys are protected with dedicated hardware features which do not allow
direct access to the value of the private key and instead provide a signature
API.</t>
          <t>When considering an active adaptive attacker with access to a signature oracle,
the compromise scenario implies a significant impact on both the secrecy and
authentication guarantees of the protocol, especially if the attacker also has
access to the group secrets. In that case both secrecy and authentication are
broken.  The attacker can generate any message, for the current and future
epochs, until the compromise is remediated and the formerly compromised client
sends an honest update.</t>
          <t>Note that under this compromise scenario, the attacker can perform all
operations which are available to a legitimate client even without access to the
actual value of the signature key.</t>
        </section>
        <section anchor="compromise-of-the-authentication-with-access-to-a-signature-key">
          <name>Compromise of the authentication with access to a signature key</name>
          <t>The difference between having access to the value of the signature key and only
having access to a signing oracle is not about the ability of an active adaptive
network attacker to perform different operations during the time of the
compromise, the attacker can perform every operation available to a legitimate
client in both cases.</t>
          <t>There is a significant difference, however in terms of recovery after a
compromise.</t>
          <t>Because of the PCS guarantees provided by the MLS protocol, when a previously
compromised client recovers from compromise and performs an honest Commit, both
secrecy and authentication of future messages can be recovered as long as the
attacker doesn't otherwise get access to the key. Because the adversary doesn't
have the signing key, they cannot authenticate messages on behalf of the
compromised party, even if they still have control over some group keys by
colluding with other members of the group.</t>
          <t>This is in contrast with the case where the signature key is leaked. In that
case the compromised endpoint needs to refresh its credentials and invalidate
the old credentials before the attacker will be unable to authenticate messages.</t>
          <t>Beware that in both oracle and private key access, an active adaptive attacker
can follow the protocol and request to update its own credential. This in turn
induces a signature key rotation which could provide the attacker with part or
the full value of the private key depending on the architecture of the service
provider.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Signature private keys should be compartmentalized from
other secrets and preferably protected by an HSM or dedicated hardware
features to allow recovery of the authentication for future messages after a
compromise.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> When the credential type supports revocation, the users of
a group should check for revoked keys.</t>
            </li>
          </ul>
        </section>
        <section anchor="security-consideration-in-the-context-of-a-full-state-compromise">
          <name>Security consideration in the context of a full state compromise</name>
          <t>In real-world compromise scenarios, it is often the case that adversaries target
specific devices to obtain parts of the memory or even the ability to execute
arbitrary code in the targeted device.</t>
          <t>Also, recall that in this setting, the application will often retain the
unencrypted messages. If so, the adversary does not have to break encryption at
all to access sent and received messages. Messages may also be sent by using the
application to instruct the protocol implementation.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> If messages are stored on the device, they should be
protected using encryption at rest, and the keys used should be stored
securely using dedicated mechanisms on the device.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> If the threat model of the system is against an adversary
which can access the messages on the device without even needing to attack
MLS, the application should delete plaintext and ciphertext messages as soon
as practical after encryption or decryption.</t>
            </li>
          </ul>
          <t>Note that this document makes a clear distinction between the way signature keys
and other group shared secrets must be handled.  In particular, a large set of
group secrets cannot necessarily be assumed to be protected by an HSM or secure
enclave features. This is especially true because these keys are frequently used
and changed with each message received by a client.</t>
          <t>However, the signature private keys are mostly used by clients to send a
message. They also provide strong authentication guarantees to other clients,
hence we consider that their protection by additional security mechanisms should
be a priority.</t>
          <t>Overall there is no way to detect or prevent these compromises, as discussed in
the previous sections, performing separation of the application secret states
can help recovery after compromise, this is the case for signature keys but
similar concern exists for client's encryption private keys.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> The secret keys used for public key encryption should be
stored similarly to the way the signature keys are stored, as keys can be used
to decrypt the group operation messages and contain the secret material used
to compute all the group secrets.</t>
            </li>
          </ul>
          <t>Even if secure enclaves are not perfectly secure, or even completely broken,
adopting additional protections for these keys can ease recovery of the secrecy
and authentication guarantees after a compromise where, for instance, an
attacker can sign messages without having access to the key. In certain
contexts, the rotation of credentials might only be triggered by the AS through
ACLs, hence be outside of the capabilities of the attacker.</t>
        </section>
      </section>
      <section anchor="service-node-compromise">
        <name>Service Node Compromise</name>
        <section anchor="general-considerations">
          <name>General considerations</name>
          <section anchor="privacy-of-the-network-connections">
            <name>Privacy of the network connections</name>
            <t>There are many scenarios leading to communication between the application on a
device and the Delivery Service or the Authentication Service. In particular
when:</t>
            <ul spacing="normal">
              <li>
                <t>The application connects to the Authentication Service to generate or validate
a new credential before distributing it.</t>
              </li>
              <li>
                <t>The application fetches credentials at the Delivery Service prior to creating
a messaging group (one-to-one or more than two clients).</t>
              </li>
              <li>
                <t>The application fetches service provider information or messages on the
Delivery Service.</t>
              </li>
              <li>
                <t>The application sends service provider information or messages to the Delivery
Service.</t>
              </li>
            </ul>
            <t>In all these cases, the application will often connect to the device via a
secure transport which leaks information about the origin of the request such as
the IP address and depending on the protocol the MAC address of the device.</t>
            <t>Similar concerns exist in the peer-to-peer use cases of MLS.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> In the case where privacy or anonymity is
important, using adequate protection such as MASQUE
<xref target="I-D.schinazi-masque-proxy"/>, ToR, or a VPN can improve metadata
protection.</t>
              </li>
            </ul>
            <t>More generally, using anonymous credentials in an MLS based architecture might
not be enough to provide strong privacy or anonymity properties.</t>
          </section>
          <section anchor="storage-of-metadata-and-ecryption-at-rest-on-the-servers">
            <name>Storage of Metadata and Ecryption at rest on the Servers</name>
            <t>In the case where private data or metadata has to be persisted on the servers
for functionality (mappings between identities and push tokens, group
metadata...), it should be stored encrypted at rest and only decrypted upon need
during the execution. Honest Service Providers can rely on such encryption at
rest mechanism to be able to prevent access to the data when not using it.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Store cryptographic material used for server-side
decryption of sensitive meta-data on the clients and only send it when needed.
The server can use the secret to open and update encrypted data containers
after which they can delete these keys until the next time they need it, in
which case those can be provided by the client.</t>
              </li>
            </ul>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Rely on group secrets exported from the MLS session for
server-side encryption at rest and update the key after each removal from the
group. Rotate those keys on a regular basis otherwise.</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="delivery-service-compromise">
          <name>Delivery Service Compromise</name>
          <t>MLS is intended to provide strong guarantees in the face of compromise of the
DS. Even a totally compromised DS should not be able to read messages or inject
messages that will be acceptable to legitimate clients. It should also not be
able to undetectably remove, reorder or replay messages.</t>
          <t>However, a malicious DS can mount a variety of DoS attacks on the system,
including total DoS attacks (where it simply refuses to forward any messages)
and partial DoS attacks (where it refuses to forward messages to and from
specific clients).  As noted in <xref target="delivery-guarantees"/>, these attacks are only
partially detectable by clients without an out-of-band channel. Ultimately,
failure of the DS to provide reasonable service must be dealt with as a customer
service matter, not via technology.</t>
          <t>Because the DS is responsible for providing the initial keying material to
clients, it can provide stale keys. This does not inherently lead to compromise
of the message stream, but does allow it to attack forward security to a limited
extent. This threat can be mitigated by having initial keys expire.</t>
          <t>Initial keying material (KeyPackages) using the <tt>basic</tt> Credential type is more
vulnerable to replacement by a malicious or compromised DS, as there is no
built-in cryptographic binding between the identity and the public key of the
client.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Prefer a Credential type in KeyPackages which includes a
strong cryptographic binding between the identity and its key (for example the
<tt>x509</tt> Credential type). When using the <tt>basic</tt> Credential type take extra
care to verify the identity (typically out-of-band).</t>
            </li>
          </ul>
          <section anchor="privacy-of-delivery-and-push-notifications">
            <name>Privacy of delivery and push notifications</name>
            <t>An important mechanism that is often ignored from the privacy considerations are
the push-tokens. In many modern messaging architectures, applications are using
push notification mechanisms typically provided by OS vendors. This is to make
sure that when messages are available at the Delivery Service (or by other
mechanisms if the DS is not a central server), the recipient application on a
device knows about it. Sometimes the push notification can contain the
application message itself which saves a round trip with the DS.</t>
            <t>To "push" this information to the device, the service provider and the OS
infrastructures use unique per-device, per-application identifiers called
push-tokens. This means that the push notification provider and the service
provider have information on which devices receive information and at which
point in time. Alternatively, non-mobile applications could use a websocket or
persistent connection for notifications directly from the DS.</t>
            <t>Even though they can't necessarily access the content, which is typically
encrypted MLS messages, the service provider and the push notification provider
have to be trusted to avoid making correlation on which devices are recipients
of the same message.</t>
            <t>For secure messaging systems, push notifications are often sent real-time as it
is not acceptable to create artificial delays for message retrieval.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> If real time notifications are not necessary, one can
delay notifications randomly across recipient devices using a mixnet or other
techniques.</t>
              </li>
            </ul>
            <t>Note that with a legal request to ask the service provider for the push-token
associated with an identifier, it is easy to correlate the token with a second
request to the company operating the push-notification system to get information
about the device, which is often linked with a real identity via a cloud
account, a credit card or other information.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> If stronger privacy guarantees are needed with regard to
the push notification provider, the client can choose to periodically connect
to the Delivery Service without the need of a dedicated push notification
infrastructure.</t>
              </li>
            </ul>
            <t>Applications can also consider anonymous systems for server fanout (for
example <xref target="Loopix"/>).</t>
          </section>
        </section>
        <section anchor="as-compromise">
          <name>Authentication Service Compromise</name>
          <t>The Authentication Service design is left to the infrastructure designers. In
most designs, a compromised AS is a serious matter, as the AS can serve
incorrect or attacker-provided identities to clients.</t>
          <ul spacing="normal">
            <li>
              <t>The attacker can link an identity to a credential</t>
            </li>
            <li>
              <t>The attacker can generate new credentials</t>
            </li>
            <li>
              <t>The attacker can sign new credentials</t>
            </li>
            <li>
              <t>The attacker can publish or distribute credentials</t>
            </li>
          </ul>
          <t>An attacker that can generate or sign new credentials may or may not have access
to the underlying cryptographic material necessary to perform such
operations. In that last case, it results in windows of time for which all
emitted credentials might be compromised.</t>
          <ul empty="true">
            <li>
              <t><strong>RECOMMENDATION:</strong> Use HSMs to store the root signature keys to limit the
ability of an adversary with no physical access to extract the top-level
signature private key.</t>
            </li>
          </ul>
          <t>Note that historically some systems generate signature keys on the
Authentication Service and distribute the private keys to clients along with
their credential. This is a dangerous practice because it allows the AS or an
attacker who has compromised the AS to silently impersonate the client.</t>
          <section anchor="authentication-compromise-ghost-users-and-impersonations">
            <name>Authentication compromise: Ghost users and impersonations</name>
            <t>One important property of MLS is that all Members know which other members are
in the group at all times. If all Members of the group and the Authentication
Service are honest, no parties other than the members of the current group can
read and write messages protected by the protocol for that Group.</t>
            <t>This guarantee applies to the the cryptographic identities of the members.
Details about how to verify the identity of a client depend on the MLS
Credential type used. For example, cryptographic verification of credentials can
be largely performed autonomously (e.g., without user interaction) by the
clients themselves for the <tt>x509</tt> Credential type.</t>
            <t>In contrast, when MLS clients use the <tt>basic</tt> Credential type, then some other
mechanism must be used to verify identities. For instance the Authentication
Service could operate some sort of directory server to provide keys, or users
could verify keys via an out-of-band mechanism.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Select the MLS Credential type with the strongest security
which is supported by all target members of an MLS group.</t>
              </li>
            </ul>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Do not use the same signature keypair across
groups. Update all keys for all groups on a regular basis. Do not preserve
keys in different groups when suspecting a compromise.</t>
              </li>
            </ul>
            <t>If the AS is compromised, it could validate a (or generate a new) signature
keypair for an attacker. The attacker could then use this keypair to join a
group as if it were another of the user's clients.  Because a user can have many
MLS clients running the MLS protocol, it possibly has many signature keypairs
for multiple devices. These attacks could be very difficult to detect,
especially in large groups where the UI might not reflect all the changes back
to the users. If the application participates in a key transparency mechanism in
which it is possible to determine every key for a given user, then this then
this would allow for the detection of surreptitiously created false credentials.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Make sure that MLS clients reflect all the membership
changes to the users as they happen. If a choice has to be made because the
number of notifications is too high, the client should provide a log of state
of the device so that the user can examine it.</t>
              </li>
            </ul>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Provide a key transparency mechanism for the
Authentication Services to allow public verification of the credentials
authenticated by this service.</t>
              </li>
            </ul>
            <t>While the ways to handle MLS credentials are not defined by the protocol or the
architecture documents, the MLS protocol has been designed with a mechanism that
can be used to provide out-of-band authentication to users. The
"authentication_secret" generated for each user at each epoch of the group is a
one-time, per client, authentication secret which can be exchanged between users
to prove their identity to each other. This can be done for instance using a QR
code that can be scanned by the other parties.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Provide one or more out-of-band authentication mechanisms
to limit the impact of an Authentication Service compromise.</t>
              </li>
            </ul>
            <t>We note, again, that as described prior to that section, the Authentication
Service may not be a centralized system, and could be realized by many
mechanisms such as establishing prior one-to-one deniable channels, gossiping,
or using trust on first use (TOFU) for credentials used by the MLS Protocol.</t>
            <t>Another important consideration is the ease of redistributing new keys on client
compromise, which helps recovering security faster in various cases.</t>
          </section>
          <section anchor="privacy-of-the-group-membership">
            <name>Privacy of the Group Membership</name>
            <t>Group membership is itself sensitive information and MLS is designed to limit
the amount of persistent metadata. However, large groups often require an
infrastructure which provides server fanout.  In the case of client fanout, the
destination of a message is known by all clients, hence the server usually does
not need this information.  However, they may learn this information through
traffic analysis.  Unfortunately, in a server-side fanout model, the Delivery
Service can learn that a given client is sending the same message to a set of
other clients. In addition, there may be applications of MLS in which the group
membership list is stored on some server associated with the Delivery Service.</t>
            <t>While this knowledge is not a breach of the protocol's authentication or
confidentiality guarantees, it is a serious issue for privacy.</t>
            <t>Some infrastructure keep a mapping between keys used in the MLS protocol and
user identities. An attacker with access to this information due to compromise
or regulation can associate unencrypted group messages (e.g., Commits and
Proposals) with the corresponding user identity.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Use encrypted group operation messages to limit privacy
risks whenever possible.</t>
              </li>
            </ul>
            <t>In certain cases, the adversary can access specific bindings between public keys
and identities. If the signature keys are reused across groups, the adversary
can get more information about the targeted user.</t>
            <ul empty="true">
              <li>
                <t><strong>RECOMMENDATION:</strong> Ensure that the linking between public keys and identities
only happen in expected scenarios. Otherwise privilege a stronger separation.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
      <section anchor="considerations-for-attacks-outside-of-the-threat-model">
        <name>Considerations for attacks outside of the threat model</name>
        <t>Physical attacks on devices storing and executing MLS principals are not
considered in depth in the threat model of the MLS protocol.  While
non-permanent, non-invasive attacks can sometimes be equivalent to software
attacks, physical attacks are considered outside of the MLS threat model.</t>
        <t>Compromise scenarios typically consist of a software adversary, which can
maintain active adaptive compromise and arbitrarily change the behavior of the
client or service.</t>
        <t>On the other hand, security goals consider that honest clients will always run
the protocol according to its specification. This relies on implementations of
the protocol to securely implement the specification, which remains non-trivial.</t>
        <ul empty="true">
          <li>
            <t><strong>RECOMMENDATION:</strong> Additional steps should be taken to protect the device and
the MLS clients from physical compromise. In such settings, HSMs and secure
enclaves can be used to protect signature keys.</t>
          </li>
        </ul>
      </section>
      <section anchor="cryptographic-analysis-of-the-mls-protocol">
        <name>Cryptographic Analysis of the MLS Protocol</name>
        <t>Various academic works have analyzed MLS and the different security guarantees
it aims to provide. The security of large parts of the protocol has been
analyzed by <xref target="BBN19"/> (draft 7), <xref target="ACDT21"/> (draft 11) and <xref target="AJM20"/> (draft 12).</t>
        <t>Individual components of various drafts of the MLS protocol have been analyzed
in isolation and with differing adversarial models, for example, <xref target="BBR18"/>,
<xref target="ACDT19"/>, <xref target="ACCKKMPPWY19"/>, <xref target="AJM20"/>, <xref target="ACJM20"/>, and <xref target="AHKM21"/> analyze the
ratcheting tree sub-protocol of MLS that facilitates key agreement, <xref target="WPBB22"/>
analyzes the sub-protocol of MLS for group state agreement and authentication,
while <xref target="BCK21"/> analyzes the key derivation paths in the ratchet tree and key
schedule. Finally, <xref target="CHK21"/> analyzes the authentication and cross-group healing
guarantees provided by MLS.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document makes no requests of IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-mls-protocol">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Benjamin Beurdouche" initials="B." surname="Beurdouche">
              <organization>Inria &amp; Mozilla</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Jon Millican" initials="J." surname="Millican">
              <organization>Meta Platforms</organization>
            </author>
            <author fullname="Emad Omara" initials="E." surname="Omara">
              <organization>Google</organization>
            </author>
            <author fullname="Katriel Cohn-Gordon" initials="K." surname="Cohn-Gordon">
              <organization>University of Oxford</organization>
            </author>
            <date day="27" month="March" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages.  Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time.  In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-protocol-20"/>
        </reference>
        <reference anchor="RFC9420">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="KT">
          <front>
            <title>Key Transparency Architecture</title>
            <author fullname="Brendan McMillion" initials="B." surname="McMillion">
         </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document defines the terminology and interaction patterns
   involved in the deployment of Key Transparency (KT) in a general
   secure group messaging infrastructure, and specifies the security
   properties that the protocol provides.  It also gives more general,
   non-prescriptive guidance on how to securely apply KT to a number of
   common applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-keytrans-architecture-01"/>
        </reference>
        <reference anchor="CONIKS" target="https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-melara.pdf">
          <front>
            <title>CONIKS: Bringing Key Transparency to End Users</title>
            <author initials="M." surname="Melara" fullname="Marcela Melara">
              <organization/>
            </author>
            <author initials="A." surname="Blankstein" fullname="Aaron Blankstein">
              <organization/>
            </author>
            <author initials="J." surname="Bonneau" fullname="Joseph Bonneau">
              <organization/>
            </author>
            <author initials="E." surname="Felten" fullname="Edward Felten">
              <organization/>
            </author>
            <author initials="M." surname="Freedman" fullname="Michael Freedman">
              <organization/>
            </author>
            <date year="2015"/>
          </front>
        </reference>
        <reference anchor="CAPBR">
          <front>
            <title>Towards robust distributed systems (abstract)</title>
            <author fullname="Eric A. Brewer" initials="E." surname="Brewer">
              <organization>UC Berkeley and Inktomi</organization>
            </author>
            <date month="July" year="2000"/>
          </front>
          <seriesInfo name="Proceedings of the nineteenth annual ACM symposium on Principles of distributed" value="computing"/>
          <seriesInfo name="DOI" value="10.1145/343477.343502"/>
          <refcontent>ACM</refcontent>
        </reference>
        <reference anchor="ACCKKMPPWY19" target="https://eprint.iacr.org/2019/1489">
          <front>
            <title>Security Analysis and Improvements for the IETF MLS Standard for Group Messaging</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="M." surname="Capretto" fullname="Margarita Capretto">
              <organization/>
            </author>
            <author initials="M." surname="Cueto" fullname="Miguel Cueto">
              <organization/>
            </author>
            <author initials="C." surname="Kamath" fullname="Chethan Kamath">
              <organization/>
            </author>
            <author initials="K." surname="Klein" fullname="Karen Klein">
              <organization/>
            </author>
            <author initials="I." surname="Markov" fullname="Ilia Markov">
              <organization/>
            </author>
            <author initials="G." surname="Pascual-Perez" fullname="Guillermo Pascual-Perez">
              <organization/>
            </author>
            <author initials="K." surname="Pietrzak" fullname="Krzysztof Pietrzak">
              <organization/>
            </author>
            <author initials="M." surname="Walter" fullname="Michael Walter">
              <organization/>
            </author>
            <author initials="M." surname="Yeo" fullname="Michelle Yeo">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="ACDT19" target="https://eprint.iacr.org/2019/1189.pdf">
          <front>
            <title>Security Analysis and Improvements for the IETF MLS Standard for Group Messaging</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="S." surname="Coretti" fullname="Sandro Coretti">
              <organization/>
            </author>
            <author initials="Y." surname="Dodis" fullname="Yevgeniy Dodis">
              <organization/>
            </author>
            <author initials="Y." surname="Tselekounis" fullname="Yiannis Tselekounis">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="ACDT21" target="https://eprint.iacr.org/2021/1083.pdf">
          <front>
            <title>Modular Design of Secure Group Messaging Protocols and the Security of MLS</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="S." surname="Coretti" fullname="Sandro Coretti">
              <organization/>
            </author>
            <author initials="Y." surname="Dodis" fullname="Yevgeniy Dodis">
              <organization/>
            </author>
            <author initials="Y." surname="Tselekounis" fullname="Yiannis Tselekounis">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="ACJM20" target="https://eprint.iacr.org/2020/752.pdf">
          <front>
            <title>Continuous Group Key Agreement with Active Security</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="S." surname="Coretti" fullname="Sandro Coretti">
              <organization/>
            </author>
            <author initials="D." surname="Jost" fullname="Daniel Jost">
              <organization/>
            </author>
            <author initials="M." surname="Mularczyk" fullname="Marta Mularczyk">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="AHKM21" target="https://eprint.iacr.org/2021/1456.pdf">
          <front>
            <title>Server-Aided Continuous Group Key Agreement</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="D." surname="Hartmann" fullname="Dominik Hartmann">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="M." surname="Mularczyk" fullname="Marta Mularczyk">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="AJM20" target="https://eprint.iacr.org/2020/1327.pdf">
          <front>
            <title>On The Insider Security of MLS</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="D." surname="Jost" fullname="Daniel Jost">
              <organization/>
            </author>
            <author initials="M." surname="Mularczyk" fullname="Marta Mularczyk">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="BBN19" target="https://hal.laas.fr/INRIA/hal-02425229v1/file/mls-treekem.pdf">
          <front>
            <title>Formal Models and Verified Protocols for Group Messaging: Attacks and Proofs for IETF MLS</title>
            <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
              <organization/>
            </author>
            <author initials="B." surname="Beurdouche" fullname="Benjamin Beurdouche">
              <organization/>
            </author>
            <author initials="P." surname="Naldurg" fullname="Prasad Naldurg">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="BBR18" target="https://hal.inria.fr/hal-02425247/file/treekem+%281%29.pdf">
          <front>
            <title>TreeKEM: Asynchronous Decentralized Key Management for Large Dynamic Groups A protocol proposal for Messaging Layer Security (MLS)</title>
            <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
              <organization/>
            </author>
            <author initials="R." surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="BCK21" target="https://eprint.iacr.org/2021/137.pdf">
          <front>
            <title>Cryptographic Security of the MLS RFC, Draft 11</title>
            <author initials="C." surname="Brzuska" fullname="Chris Brzuska">
              <organization/>
            </author>
            <author initials="E." surname="Cornelissen" fullname="Eric Cornelissen">
              <organization/>
            </author>
            <author initials="K." surname="Kohbrok" fullname="Konrad Kohbrok">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="CHK21" target="https://www.usenix.org/system/files/sec21-cremers.pdf">
          <front>
            <title>The Complexities of Healing in Secure Group Messaging: Why Cross-Group Effects Matter</title>
            <author initials="C." surname="Cremers" fullname="Cas Cremers">
              <organization/>
            </author>
            <author initials="B." surname="Hale" fullname="Britta Hale">
              <organization/>
            </author>
            <author initials="K." surname="Kohbrok" fullname="Konrad Kohbrok">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="WPBB22" target="https://eprint.iacr.org/2022/1732.pdf">
          <front>
            <title>TreeSync: Authenticated Group Management for Messaging Layer Security</title>
            <author initials="T." surname="Wallez" fullname="Théophile Wallez">
              <organization/>
            </author>
            <author initials="J." surname="Protzenko" fullname="Jonathan Protzenko">
              <organization/>
            </author>
            <author initials="B." surname="Beurdouche" fullname="Benjamin Beurdouche">
              <organization/>
            </author>
            <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
              <organization/>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="Loopix">
          <front>
            <title>The Loopix Anonymity System</title>
            <author initials="A. M." surname="Piotrowska" fullname="Ania M. Piotrowska">
              <organization/>
            </author>
            <author initials="J." surname="Hayes" fullname="Jamie Hayes">
              <organization/>
            </author>
            <author initials="T." surname="Elahi" fullname="Tariq Elahi">
              <organization/>
            </author>
            <author initials="S." surname="Meiser" fullname="Sebastian Meiser">
              <organization/>
            </author>
            <author initials="G." surname="Danezis" fullname="George Danezis">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        <reference anchor="RFC6120">
          <front>
            <title>Extensible Messaging and Presence Protocol (XMPP): Core</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <date month="March" year="2011"/>
            <abstract>
              <t>The Extensible Messaging and Presence Protocol (XMPP) is an application profile of the Extensible Markup Language (XML) that enables the near-real-time exchange of structured yet extensible data between any two or more network entities. This document defines XMPP's core protocol methods: setup and teardown of XML streams, channel encryption, authentication, error handling, and communication primitives for messaging, network availability ("presence"), and request-response interactions. This document obsoletes RFC 3920. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6120"/>
          <seriesInfo name="DOI" value="10.17487/RFC6120"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="I-D.ietf-mls-extensions">
          <front>
            <title>The Messaging Layer Security (MLS) Extensions</title>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document describes extensions to the Messaging Layer Security
   (MLS) protocol.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/mlswg/mls-extensions.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-extensions-03"/>
        </reference>
        <reference anchor="I-D.ietf-mls-federation">
          <front>
            <title>The Messaging Layer Security (MLS) Federation</title>
            <author fullname="Emad Omara" initials="E." surname="Omara">
              <organization>Google</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="9" month="September" year="2023"/>
            <abstract>
              <t>   This document describes how the Messaging Layer Security (MLS)
   protocol can be used in a federated environment.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/mlswg/mls-federation.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-federation-03"/>
        </reference>
        <reference anchor="RFC3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="B. Korver" initials="B." surname="Korver"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak. This document provides guidelines to RFC authors on how to write a good Security Considerations section. 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="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </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="I-D.schinazi-masque-proxy">
          <front>
            <title>The MASQUE Proxy</title>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="28" month="February" year="2024"/>
            <abstract>
              <t>   MASQUE (Multiplexed Application Substrate over QUIC Encryption) is a
   set of protocols and extensions to HTTP that allow proxying all kinds
   of Internet traffic over HTTP.  This document defines the concept of
   a "MASQUE Proxy", an Internet-accessible node that can relay client
   traffic in order to provide privacy guarantees.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schinazi-masque-proxy-02"/>
        </reference>
      </references>
    </references>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="R." surname="Barnes" fullname="Richard Barnes">
        <organization>Cisco</organization>
        <address>
          <email>rlb@ipv.sx</email>
        </address>
      </contact>
      <contact initials="K." surname="Cohn-Gordon" fullname="Katriel Cohn-Gordon">
        <organization>Meta Platforms</organization>
        <address>
          <email>me@katriel.co.uk</email>
        </address>
      </contact>
      <contact initials="C." surname="Cremers" fullname="Cas Cremers">
        <organization>CISPA Helmholtz Center for Information Security</organization>
        <address>
          <email>cremers@cispa.de</email>
        </address>
      </contact>
      <contact initials="B." surname="Hale" fullname="Britta Hale">
        <organization>Naval Postgraduate School</organization>
        <address>
          <email>britta.hale@nps.edu</email>
        </address>
      </contact>
      <contact initials="A." surname="Kwon" fullname="Albert Kwon">
        <organization>Badge Inc.</organization>
        <address>
          <email>kwonalbert@badgeinc.com</email>
        </address>
      </contact>
      <contact initials="K." surname="Kohbrok" fullname="Konrad Kohbrok">
        <organization>Phoenix R&amp;D</organization>
        <address>
          <email>konrad.kohbrok@datashrine.de</email>
        </address>
      </contact>
      <contact initials="R." surname="Mahy" fullname="Rohan Mahy">
        <organization>Wire</organization>
        <address>
          <email>rohan.mahy@wire.com</email>
        </address>
      </contact>
      <contact initials="B." surname="McMillion" fullname="Brendan McMillion">
        <organization/>
        <address>
          <email>brendanmcmillion@gmail.com</email>
        </address>
      </contact>
      <contact initials="T. van der" surname="Merwe" fullname="Thyla van der Merwe">
        <organization/>
        <address>
          <email>tjvdmerwe@gmail.com</email>
        </address>
      </contact>
      <contact initials="J." surname="Millican" fullname="Jon Millican">
        <organization>Meta Platforms</organization>
        <address>
          <email>jmillican@meta.com</email>
        </address>
      </contact>
      <contact initials="R." surname="Robert" fullname="Raphael Robert">
        <organization>Phoenix R&amp;D</organization>
        <address>
          <email>ietf@raphaelrobert.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
bl6cqm5WHvBGgTXptzib8Bc3VaYywav6GrtZwMbssSOt/s3O0H3sUNmHDblm
oKH1vlnChpK9DtIGetXDqE+leRaGcEpVY9Pek5R/t8XT1r0L9DT8kL6Dnve6
tnKr8O/6dc3D5iZIt8fPyRNUdXgUWI0JoEOw1ga6AsxpVbyrdu1iTWtZNnwH
qGc+OXioug2Vnlx6T6iu28017nPa6Nb9DuzOqsdIu4gddNvMZFfYl73IWOo/
Tf0a5TraFoGmA5+ao6INTdKtB12sViuQ3fA07GpRW/FjvG6rqIFKo2D9waIH
mYo1dYVHgZcadq5490NVrn5sl9W7or34FRW8dcv6O00ArdTd3g78LIDUo7+X
G5EFcM+VKm5gIv4G6hn68FRgkGLh72ycsz3dhrQENPs0MvzLPJwW716L9+6d
NiL+PJRVuuwskbdgJmi7DVzB3EiUxOWSL8cOZn0L55jMEp4OehPYXKBKxffU
DQwD5gcnqqlupHMXB7oySFWCFnTF/E5A6VSrjIeHQY5sKrpcRYzSgGBBdGzs
8eX38xzpIyDdD0HW5933eGjW5VVl8/mOOg5G7etycQUfvIsSCmwX0YtZP7NN
A9PglpM+4W7PQhSZ2A/dDLyy785BQpd0e8P7+MU/VxuQLFWyNCofccZkr4n1
wnOjyktRO8QJThjNNjp5WbLJ3tSQIk9+Kk1vKtT48RKGrfZqBZO270BGbsGA
Lu7h5Y1XPszd/cSiJzmKwhxPCmoOcnKqZWKj4v49bYp37lH95h1JpYYVVRk5
DYvUnIsaDFawMPyDu/KwaUvs5rO6QcMGRfy712RwvtRG8a5FlwI2gzf/JV56
J/HWxdeNtsAs3JAZiM2hvTxUE+2RqlrLSZ1NNm4NB5Tc4zFj1/EbmF3SEKBl
3JPVb7sN6P26t2FZYHJJx5gVcADQYoN392Csj1ScIOqhvIdVpL9+ySoS3sGn
4goqztkY64P6Yry6oOqRXLa0s1kF52vEqa1q8tEWCqgn4XVHcLFNpV/rHu5w
iVYg3jrykLLOS+YiKeZXNeycdhV2VdWhCor/VcWYHAXaXFPhtef1mptWv+QD
GkAVR5FJopgPZbyvcWrMh/MIzNECNuVpaqzK/BT3TkHp5vNB906/g6mv0SKG
UxSKAj3ZPUktFJg12QqogA03qIO5RT9BZxd8CQqyCHvQ4jsLUkNT4iu5In0T
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
8T2cVGWAoHIAEoeHK5lLQeCaErGeUTmlioV0IxJuRapx7MPdPoHRTzGPG3n7
I9otvkckqPYNKQyNaQxWvVwJwiopmIvam85HNMnl+fiUNDw/+oSgo30GOVn9
lHRQat17wqsLeJ02klYPiQT+4uIQfm4dr+BwGCZL4f+B+/KzaMC4U/ZU8Sjn
WieTSP1jqPMTSnNoYddi9t6SAmKsnUgwWFn/W6FqpxAF06bjXMLJ7lsqMiiB
pWZpOCxcBbZrsUGDeOQ0iJ4G3vKbo3XMUGMxANDUp9YmIyQTLeFulBfCwdUT
KVxsBM7ODwobbyJDe19eS8xvWsrcvY/h9CD84UoTjdgBMLtx2+2bCCQQjCel
YYkBbAU8+5klmcg9fR3XXXiNkdo3Z0pJZIZmPHjPtZ8u6BofVYtsBo5svo2x
RVpbLwtxcTW5gicmvob55NFVoyZwuMWLQaLHR2mx2ZlkhYvrszxQVR72kI5K
JuaqfhrYcs15qD+jaa1qQGyVDK3YLqPDnj/p6erktCNyPYh/kp3ZvfK+kV62
b+p/22MkQOzTQyLf3FhPmMQomrFMCGdl3WLdyXvmJAO9U6rJJXHjeuldNtRV
DYu6oOhX8y84LPrP0YPzBzeO0YJM3TeI7+hqy+4nrdfdEcaR7Osas496hNB2
6FYtmud3jUBuR54S3j7jZKHEh99V7uaa509QoB2L6HD5BTJdpAI0kXB4DEL+
Lq4STWZTxNcL5/WWKyliMceaqi+bnkq2QYy0Js3GUjWuQUXyGhpYbEN8h1ZO
I3JYjuJC60RcRtvxkV4GTXTW173H0qf5mwkgd0Jhx5ZY2tN1wXjvRd0t9lvW
74hvawphyCI8vju255MTqHSa6uySOJCg/x2Y2bwtopm2UkuUmnLN32ZhTbYn
bVl2FZtFoqFxs7XRo6a+2wzf73fMineMsUgzCJ7bLWLZUZ0Kd2rydqS/kqrL
abbESIOLlRMI9VoXj3k3RyQ+o90nbNcf5S/zxJZ452N5XPeceBM1vyDWydRW
jDcG9y4bHJrIU4xqBGoVFWZXic7BkcXqKp9zPKswrFt8dWawda4KLGLhBKxH
GEWxwzTmOupacXIyaePwaWXSnLyipmvMe+5J4eZEA2oW50V2CgdEtNqShwlq
NXNlQh2JqrXTgxUHHvMgoNMHnzqgSdpWAasm8tlYB8uUzohcRlaSZxy69sVK
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
O/AzrU4INorJU6g4oBSp+xhWUBbm/Hb2ypSw8kxVFhIJ47TSo9VlNJLw5Hxe
kNZdFlRANwtZPjnPuJj1UCClqrusO6kQFImUyKpUb7srsAjPjoKPPZVLkheR
gctvC/oExkNRypKTl3EUM60mynUAd5vy4L33Zn2XkWoSR4Pbimt0lKBmdXXF
sT7HCWwCkCughMjDwxWG/U/vsXxFeYa+NarzSoni0OeV0XzFjt0nI0LLzUy3
NNGE11soLk1cl+pRNb2LoOTM5ptylfrSUcqjoC9GhZqCpZ6ERea68g4Jiw03
WsT4Qv0iWD2g+GnDawpXaBDqWlU5mEtUdylsnb7l8IsqbOoxWlblRkJKlL67
oGIDVWdkFMz7MaP9gToWdHTdtJv28uBCk/JKiswL57ik53EX9OKQKmmjtKGh
DT6/n2KydsLKjVjwUjBKvb11s6bo7+ZghJ3OoZ6R+sFBrcrtzFFuUgCCyxMo
Q7ksvrleOOrLiUlSqVc6If5NEZmai750edRuqCQO645V3ekJuBdrZPf3o5O5
+AXF1eKX4iyLXyAoC663oKlOKiIiIRG5xuJBbLtMymgmh3qMwsW+3gwnGGhM
rkwt5OBNOyvHqLacc5VovPT2W+M117QrxwNrXLnwPs8kLsnpQiL3H+wlhvew
e/dWkS5M7o1ffvvq87+Opvj+nKNHf7wWyLdKJHMUlKIIZusIJGM/7kXeeXee
78/HJrnKkajcIevGSnN/CAkcyeycGiWpk2wo1ZcNKXp2B6sinHoECLzDq9iv
T1iLJHObrH504XeNs0u9Ao7OQ18+BAfPFPqjTns/ZpwHr2y8OodZa5Zt59zH
A9cjCUJkWw5aHNUXVDKUxjFT+x6suWOXs37UKye5CAygJQREObkvjh6j7jnm
1EBWuV6MStBJi3OQoah4SW3q0WRw5oU58MJUspkAS/kI9OyVK0DHwTPX1buI
A6CidG/b4g6+5444U52tmxjKWrUvs9v1JL86DzlNMwp4rlZNKb3aDP7dd9sX
qGbmnpBsqKkEuPHEjDqUB7i1tLFzMxgrc6XESxQeSO39hswczlpmwANOPSzR
vDjdUK1b1PTRGkWeoG17QSwEfnNHggbER170LRaJwFB+5HRz/jO6/ZJTWzBc
cXNwRTTOs2pLqtbfTcMxLh4mhLNGtetOk0te9IVd/mDFj69BsHhq5ZnVqZoX
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

-->

</rfc>
