<?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.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mls-architecture-14" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="MLS Architecture">The Messaging Layer Security (MLS) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mls-architecture-14"/>
    <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>Windy Hill Systems, LLC</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="July" day="08"/>
    <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 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 480,240" fill="none" stroke="black"/>
              <path d="M 8,256 L 256,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 480,352" fill="none" stroke="black"/>
              <path d="M 8,368 L 224,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,352 476,346.4 476,357.6" fill="black" transform="rotate(0,480,352)"/>
              <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,240 476,234.4 476,245.6" fill="black" transform="rotate(0,480,240)"/>
              <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,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="280" y="260">Bob</text>
                <text x="328" y="260">Initial</text>
                <text x="388" y="260">Keying</text>
                <text x="452" 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="264" y="372">Charlie</text>
                <text x="328" y="372">Initial</text>
                <text x="388" y="372">Keying</text>
                <text x="452" 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 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 their signature keys is fairly
flexible in MLS.  As noted above, there is no requirement that all clients
belonging to a given user have the same signature key (in fact, having duplicate
signature keys in a group is forbidden). 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
provisioning 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 inconvenience 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 Services 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>
          <t>There is some risk associated with filtering.  Situations can arise where a
malicious or buggy client sends a Commit that is not accepted by some members of
the group, and the DS is not able to detect this and reject the Commit.  For
example, a buggy client might send a encrypted Commit with an invalid set of
proposals.  Or a malicious client might send a malformed Commit of the form
described in <xref section="16.12" sectionFormat="of" target="RFC9420"/>.</t>
          <t>In such situations, the DS might update its internal state under the assumption
that the Commit has succeeded and thus end up in a state inconsistent with the
members of the group.  For example, the DS might think that the current epoch is
now <tt>n+1</tt> and reject any commits from other epochs, while the members think the
epoch is <tt>n</tt>, and as a result, the group is stuck -- no member can send a Commit
that the DS will accept.</t>
          <t>Given these risks, it is effectively impossible for a strongly consistent DS to
know with absolute certainty when it is safe to update its internal state.  It
is up to the designers and operators of a DS to ensure that sufficient
mechanisms are in place to address these risks.</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 anchor="welcome-messages">
          <name>Welcome Messages</name>
          <t>Whenever a commit adds new members to a group, MLS requires the committer to
send a Welcome message to the new members. Applications should ensure that
Welcome messages are coupled with the tie-breaking logic for commits, discussed
in <xref target="strongly-consistent"/> and <xref target="eventually-consistent"/>. That is, when multiple
commits are sent for the same epoch, applications need to ensure that only
Welcome messages corresponding to the commit that "succeeded" are processed by
new members.</t>
          <t>This is particularly important when groups are being reinitialized. When a group
is reinitialized, it is restarted with a different protocol version and/or
ciphersuite but identical membership. Whenever an authorized member sends and
commits a ReInit proposal, this immediately freezes the existing group and
triggers the creation of a new group with a new <tt>group_id</tt>.</t>
          <t>Ideally, the new group would be created by the same member that committed the
<tt>ReInit</tt> proposal (including sending Welcome messages for the new group to all
of the previous group's members). However this operation is not always atomic,
so it's possible for a member to go offline after committing a ReInit proposal
but before creating the new group. If this happens, it's necessary for another
member to continue the reinitialization by creating the new group and sending
out Welcome messages.</t>
          <t>This has the potential to create a race condition, where multiple members try to
continue the reinitialization at the same time, and members receive multiple
Welcome messages for each attempt at reinitializing the same group. Ensuring
that all members agree on which reinitialization attempt is "correct" is key to
prevent this from causing forks.</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="3.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 a user, or for a client that needs to
recover from losing their state. Such public state can contain privacy
sensitive information such as group members' credentials and related public
keys, hence services need to 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 a user has multiple devices, the base MLS protocol only describes how to
operate each device as a distinct client in the MLS groups that the user is a
member of. As a result, the other members of the group will be able to identify
which of a user's devices sent each message, and therefore which device the user
was using at the time. Group members would also be able to detect when the user
adds or removes authorized devices from their account. For some applications,
this may be an unacceptable breach of the user's privacy.</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. Appearing as a single client has the privacy benefits of no
longer leaking which device was used to send a particular message, and no longer
leaking the user's authorized devices. However, the application would need to
provide a synchronization mechanism so that the clients' state remain consistent
across changes to the MLS group. Flaws in this synchronization mechanism may
impair the ability of the user to recover from a compromise of one of their
devices. In particular, state synchronization may make it easier for an attacker
to use one compromised device to establish exclusive control of a user's
account, locking them out entirely and preventing them from recovering.</t>
        </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 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
would allow for 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 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 linking between public keys and identities
only happens 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>Keep the Dirt: Tainted TreeKEM, Adaptively and Actively Secure Continuous Group Key Agreement</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://inria.hal.science/hal-02425229/document">
          <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="24" month="April" year="2024"/>
            <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-04"/>
        </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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
w2EUClR6i16FhbccjCsBEiXRM0sc/96Dn2OumEu3p1cmwsCJ1YhrpMJI4Vw4
hVlzYGrOUfucbka5c5Nq8ZTJ2Df7MYTQo31Pu0SvcFh4LzlwhpBHBEFZkee+
ILhDXdVbwupn97g0cizsSGoJSL2cTIwTmUKjLewi04ZqduPODQ66KqJc0gRc
ErkFKo74PIR1P5I7Bke3J55FZVeSmY4LxJOm+Iz/VdiV9LZtROH7/AohOTQG
ZKPype1FgKy0iGs4VtK4Rk6FbUk2G4UURKpFYui/d97+3ohSb4m1DTnDmbd8
y7GlSBmXqKjSbtQQ85dyKQCucpjhyp0kf99s6ElM9C08DNx0MAyMRVUvTnmg
n4Q2TtrLKJeDZuPG11NVubHFqAw8ZuwaPLAIoQ0WOLVTOTw0mrcNd8EWllOF
jRn1Dim1kN5IvvO3LP2/WkVJE1Yw2++UnMkvsUUiHEiknO/9jfjjuIzaLdTJ
WV83YLQZGzr5Y0+WohLDbMFh5I9C0caIYxA4nDiynlxhoaV4VoQu+KUdC4lR
ZUQ+mRfM340ZFmH2iJ7J/yLqhXW2oySsabJK5ZuV4NS0FmpmyT9Jm22tpPTI
zalU9ov4owSyKeeQ+sGlDrG4t0hP4VF6uxj7m5OaQgCHKWrdExzU5o3DkdtL
DmpgyjeLJS55wY6JFOcDIGwlOmspft5HARJYp1ojExrJ9Cju5p0VnD5NnZwn
a5BDM7dyomeJdJ8oksAI1HmwapMIDEN533k4cksXzqk17EO0w1JdYJ6TlFU0
GD2i6/8F6ANSjgxTXdwvc/qFwnDUMeUgQV1d1mugTqITY071YPMzpAAarTvg
bP42MzSLRQUsmeYgJ89hSCG502e011XzhPcDxQrHEakSdFp1ecMpB7NwpOU+
068/MtV8MuWv6A8ZHT2E2wrlQUqnv6Ue44LLjKdipeAktRnsCJpJ1rCIlKbp
82AtruKgHHlPjMJjDyAUQXdzoS3oo6KsFwnEsK8q1yVizT4VStAyT/6EKoCQ
JBpLtfJFehVf/Yv68K8KuRjsnOOE3nfeZTKEh6g1jqizHEpimVd1VIshMIrB
YPsP3lZMWjF0CHcqXY+hvU9pSVsQdtvovYz6zB7KqQWxDx8TslC8iHYLKHab
Mdq9OXj93wXr0XVH7rm1Dqjgolma8rZJR6s/FQpn4R2uM0CnAhdiaM/bgQ9L
gozYb2cwnbhpzpBgPgWQsv+d7RGoHW4gcsZ3qahwRRCpZpMc1rB0gwNcEWzK
a6TwYGyFpxqUhSFsWOaTisKRN59ufrs9QYxHMGxuI0d1ZuK4Ez5rLTUqWFQs
9cPSdVCsc1BMqChIIsp8bw8tp9VJFtemcez8rnIATHRcACcg+ozJvH04WdLV
ubaNPQV1+/wXRIpQ58bwQ2UnosdsGdcSWTARWgJM3KyxoHAuU/wIR7jwp8jr
474uujgmLcmeJb42t68OyKcGvUzWFGCHVtW6B3uRVTaz4oBWG/kEa5a6M2Ia
t4R2aBZtolo5JuCxXZVH44kc33Dpo4NWT2eLcdRiH6dmD4PBLbyt29aEjxA1
H0MccVkSGUrRydfSD/Jg3XDhKHqdYDDPONCyq+GlmFJgg5C8BqPjRZhaTAl8
kVVqArXhvRTYp0tthejR1tHF1PoFNdpiJb+vPOzORp5HcE02ln7hjCDn2g97
VqHwtB90SJW2gRVQq7bdCkBEXBagZ1qWaL8sFmvEMSD+Uc8UI2o45wxP8E2U
K7uc05cnC1WEvWU136oQr6BJNpwWafdW7+7AMxXFloeLHZzAi3UyGiZumhzd
5h3xxBG5g8KTH/q3o+XE8nd7mCJ6SomG6BiNLChXQyECibW5JsBeLR6GHVSQ
hEApWChGXhg01bAgRFvzk3B50I50syD7ZOqF0aZW/HyignJHx3Q/mFsJqXAT
D967X2sL4KHI7peWG/4gDh/C5HolwTrmNKqEZQa/g5tOFAvgludn62mh0vXI
oxbqFFE4phGLsdSmQVvSQTynMqWZVn0NRKf+LVDCRUT1XLC6IDCOz0hVQ05m
oa4qt9HDNM/Z0bPSe3tYnP5JExln0C8+zWsvhxoYJ8J/QSmgNT4+RXWtwiIg
VMxnVc73kZTW5JeWHfLE+f1DV9d2wDk32uL2wMD8gKPwqJFXDHzCZhMsw8e/
b+vNidIlNSYp1QYKtQyhSUPTngJhHBtoSfwDdI+Ajhpwk4z24ZvaBa6Qngyd
822DRcPAH2QxjmB5er/C/GazFRKf7IiPeYsRyg7sRPL4epUvsPwmGkhkLbcs
oOt4Do0xhvW99GT775UbyN7wuCw6eCaOdNgnjgHZLdZeoEANxbmE7DNW2FnH
ugzkniDOQpeRF7G8ZFC6GRZjawamkCmtY+PC7Sdn+PNxF+OnOVSAJxyO+CUq
cW9Kf3K8ef+Y8/uv+e3AwGJRUQxkvjOQQwr2XitszxIZnBYL4/Mz4TayIfyS
Q8ZA/99LVZP+9gN4X15cvB/9stsN3sxzjNUNfjoZ5j9Opm8/nY/sr6MROVnm
V36/Pv/RvXB+gufKPM/6fMuT0NQ4O3kAEnLjm9u+LcZprMq4oO9Rtc3KwmnS
DsO7Q6wWFkPIv4dbQUuUQK3Tw1V9HP282w0TXQtcIV3X9Orqeja7+6x/oeuh
F+XffKnvrq7xJvDA8MlmQwzKjRZQKXo4terBknepe4itH6Gth9UxxLaDbfxX
3D5fXu5mFxfn57udzAVrbvd8F1wXQ+8R9q5f0yPIM0xknpQvf3rlR05fH20K
8irpnhXOLj4feE2sf5va/Kf5dgXmtxVbD768TN/1fHWfrzwc9Kc09GdIV+un
dEDWiOhPrweXk/eT4rzkJlFBsK8bQb/gmoLPnaX/AJfI+8zwgwEA

-->

</rfc>
