<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mls-extensions-11" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="MLS">The Messaging Layer Security (MLS) Extensions</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mls-extensions-11"/>
    <author initials="R." surname="Robert" fullname="Raphael Robert">
      <organization>Phoenix R&amp;D</organization>
      <address>
        <email>ietf@raphaelrobert.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Security</area>
    <workgroup>Messaging Layer Security</workgroup>
    <keyword>messaging layer security</keyword>
    <keyword>end-to-end encryption</keyword>
    <keyword>application api</keyword>
    <keyword>extension</keyword>
    <keyword>extensibility</keyword>
    <abstract>
      <?line 55?>

<t>The Messaging Layer Security (MLS) protocol is an asynchronous group
authenticated key exchange protocol. MLS provides a number of capabilities to
applications, as well as several extension points internal to the protocol. This
document provides a consolidated application API, guidance for how the
protocol's extension points should be used, and a few concrete examples of both
core protocol extensions and uses of the application API.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mlswg.github.io/mls-extensions/draft-ietf-mls-extensions.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-mls-extensions/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Messaging Layer Security Working Group mailing list (<eref target="mailto:mls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mlswg/mls-extensions"/>.</t>
    </note>
  </front>
  <middle>
    <?line 64?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines extensions to MLS <xref target="RFC9420"/> that are not part of the
main protocol specification, and uses them to explain how to extend the core
operation of the MLS protocol. It also describes how applications can safely
interact with MLS to take advantage of security features of MLS.</t>
      <t>The MLS protocol is designed to be integrated into applications in order to
provide security services that the application requires. There are two
questions to answer when designing such an integration:</t>
      <ol spacing="normal" type="1"><li>
          <t>How does the application provide the services that MLS requires?</t>
        </li>
        <li>
          <t>How does the application use MLS to get security benefits?</t>
        </li>
      </ol>
      <t>The MLS Architecture <xref target="I-D.ietf-mls-architecture"/> describes the requirements
for the first of these questions, namely the structure of the Delivery Service
and Authentication Service that MLS requires. The next section of this document
focuses on the second question.</t>
      <t>MLS itself offers some basic functions that applications can use, such as the
secure message encapsulation (PrivateMessage), the MLS exporter, and the epoch
authenticator. Current MLS applications make use of these mechanisms to achieve
a variety of confidentiality and authentication properties.</t>
      <t>As application designers become familiar with MLS, there is interest in
leveraging other cryptographic tools that an MLS group provides:</t>
      <ul spacing="normal">
        <li>
          <t>HPKE (Hybrid Public Key Encryption <xref target="RFC9180"/>) and signature key pairs for
each member, where the private key is known only to that member, and the
public key is authenticated to the other members.</t>
        </li>
        <li>
          <t>A pre-shared key mechanism that can allow an application to inject data into
the MLS key schedule.</t>
        </li>
        <li>
          <t>An exporter mechanism that allows applications to derive secrets from the MLS
key schedule.</t>
        </li>
        <li>
          <t>Association of data with Commits as a synchronization mechanism.</t>
        </li>
        <li>
          <t>Binding of information to the GroupContext to confirm group agreement.</t>
        </li>
      </ul>
      <t>There is also interest in exposing an MLS group to multiple loosely coordinated
components of an application. To accommodate such cases, the above mechanisms
need to be exposed in such a way that the usage of different components do not
conflict with each other, or with MLS itself.</t>
      <t>This document defines a set of mechanisms that application components can use to
ensure that their use of these facilities is properly domain-separated from MLS
itself, and from other application components that might be using the same MLS
group.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document makes heavy use of the terminology and the names of structs in the
MLS specification <xref target="RFC9420"/>. In addition, we introduce the following new
terms:</t>
      <dl>
        <dt>Application:</dt>
        <dd>
          <t>The system that instantiates, manages, and uses an MLS group. Each MLS group
is used by exactly one application, but an application may maintain multiple
groups. This does not imply that it need be part of the Application Layer of
the networking stack.</t>
        </dd>
        <dt>Application component:</dt>
        <dd>
          <t>A subsystem of an application that has access to an MLS group.</t>
        </dd>
        <dt>Component ID:</dt>
        <dd>
          <t>An identifier for an application component. These identifiers are assigned by
the application.</t>
        </dd>
      </dl>
    </section>
    <section anchor="developing-extensions-for-the-mls-protocol">
      <name>Developing Extensions for the MLS Protocol</name>
      <t>MLS is highly extensible and was designed to be used in a variety of different
applications. As such, it is important to separate extensions that change the
behavior of an MLS stack, and application usages of MLS that just take advantage
of features of MLS or specific extensions (hereafter referred to as
<em>components</em>). Furthermore, it is essential that application components do not
change the security properties of MLS or require new security analysis of the
MLS protocol itself.</t>
    </section>
    <section anchor="the-safe-application-interface">
      <name>The Safe Application Interface</name>
      <t>The mechanisms in this section take MLS mechanisms that are either not
inherently designed to be used by applications, or not inherently designed to be
used by multiple application components, and adds a domain separator that
separates application usage from MLS usage, and application components' usage
from each other:</t>
      <ul spacing="normal">
        <li>
          <t>Public-key encryption operations are tagged so that encrypted data
will only decrypt in the context of a given component.</t>
        </li>
        <li>
          <t>Signing operations are similarly tagged so that signatures will only verify
in the context of a given component.</t>
        </li>
        <li>
          <t>Exported values include an identifier for the component to which they are
being exported, so that different components will get different exported
values.</t>
        </li>
        <li>
          <t>Pre-shared keys are identified as originating from a specific component, so
that different components' contributions to the MLS key schedule will not
collide.</t>
        </li>
        <li>
          <t>Additional Authenticated Data (AAD) can be domain separated by component.</t>
        </li>
      </ul>
      <t>Similarly, the content of application messages (<tt>application_data</tt>) can be
distinguished and routed to different parts of an application according to
the media type of that content using the content negotiation mechanism defined
in <xref target="content-advertisement"/>.</t>
      <t>We also define new general mechanisms that allow applications to take advantage
of the extensibility mechanisms of MLS without having to define extensions
themselves:</t>
      <ul spacing="normal">
        <li>
          <t>An <tt>app_data_dictionary</tt> extension type that associates application data with
MLS messages or with the state of the group.</t>
        </li>
        <li>
          <t>An AppEphemeral proposal type that enables arbitrary application data to
be associated with a Commit.</t>
        </li>
        <li>
          <t>An AppDataUpdate proposal type that enables efficient updates to
an <tt>app_data_dictionary</tt> GroupContext extension.</t>
        </li>
      </ul>
      <t>As with the above, information carried in these proposals and extensions is
marked as belonging to a specific application component, so that components can
manage their information independently.</t>
      <t>The separation between components is achieved by the application assigning each
component a unique component ID number. These numbers are then incorporated into
the appropriate calculations in the protocol to achieve the required separation.</t>
      <section anchor="component-ids">
        <name>Component IDs</name>
        <t>A component ID is a two-byte value that uniquely identifies a component within
the scope of an application.</t>
        <artwork><![CDATA[
uint16 ComponentID;
]]></artwork>
        <t>When a label is required for an operation, the byte string resulting from the
TLS Presentation Language encoding of the following data structure is used. The
<tt>base_label</tt> field is always the fixed string "MLS Component". The<tt>component_id</tt>
field identifies the component performing the operation. The <tt>label</tt> field
identifies the operation being performed.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque base_label<V>; /* = "MLS Component" */
  ComponentID component_id;
  opaque label<V>;
} ComponentOperationLabel;
]]></sourcecode>
      </section>
      <section anchor="safe-hpke">
        <name>Hybrid Public Key Encryption (HPKE) Keys</name>
        <t>This part of the Safe Application Interface allows components to make use of the
HPKE key pairs generated by MLS. A component identified by a ComponentID can use
any HPKE key pair for any operation defined in <xref target="RFC9180"/>, such as encryption,
exporting keys, and the PSK mode, as long as the <tt>info</tt> input to <tt>Setup&lt;MODE&gt;S</tt>
and <tt>Setup&lt;MODE&gt;R</tt> is set to ComponentOperationLabel with <tt>component_id</tt> set to
the appropriate ComponentID. The <tt>context</tt> can be set to an arbitrary Context
specified by the application designer and can be empty if not needed. For
example, a component can use a key pair PublicKey, PrivateKey to encrypt data as
follows:</t>
        <sourcecode type="tls"><![CDATA[
SafeEncryptWithLabel(PublicKey, ComponentID, Label, Context, Plaintext) =
  EncryptWithLabel(PublicKey, ComponentOperationLabel, Context, Plaintext)

SafeDecryptWithLabel(PrivateKey, ComponentID, Label, Context, KEMOutput,
  Ciphertext) =
  DecryptWithLabel(PrivateKey, ComponentOperationLabel, Context,
    KEMOutput, Ciphertext)
]]></sourcecode>
        <t>Where the fields of ComponentOperationLabel are set to</t>
        <sourcecode type="tls"><![CDATA[
component_id = ComponentID
label = Label
]]></sourcecode>
        <t>For operations involving the secret key, ComponentID <bcp14>MUST</bcp14> be set to the
ComponentID of the component performing the operation, and not to the ID of any
other component. In particular, this means that a component cannot decrypt data
meant for another component, while components can encrypt data that other
components can decrypt.</t>
        <t>In general, a ciphertext encrypted with a PublicKey can be decrypted by any
entity who has the corresponding PrivateKey at a given point in time according
to the MLS protocol (or application component). For convenience, the following
list summarizes lifetimes of MLS key pairs.</t>
        <ul spacing="normal">
          <li>
            <t>The key pair of a non-blank ratchet tree node. The PrivateKey of such a key
pair is known to all members in the node’s subtree. In particular, a
PrivateKey of a leaf node is known only to the member in that leaf. A member
in the subtree stores the PrivateKey for a number of epochs, as long as the
PublicKey does not change. The key pair of the root node <bcp14>SHOULD NOT</bcp14> be used,
since the external key pair recalled below gives better security.</t>
          </li>
          <li>
            <t>The external_priv, external_pub key pair used for external initialization. The
external_priv key is known to all group members in the current epoch. A member
stores external_priv only for the current epoch. Using this key pair gives
better security guarantees than using the key pair of the root of the ratchet
tree and should always be preferred.</t>
          </li>
          <li>
            <t>The init_key in a KeyPackage and the corresponding secret key. The secret key
is known only to the owner of the KeyPackage and is deleted immediately after
it is used to join a group.</t>
          </li>
        </ul>
      </section>
      <section anchor="signature-keys">
        <name>Signature Keys</name>
        <t>MLS session states contain a number of signature keys including the ones in the
LeafNode structs. Application components can safely sign content and verify
signatures using these keys via the SafeSignWithLabel and SafeVerifyWithLabel
functions, respectively, much like how the basic MLS protocol uses SignWithLabel
and VerifyWithLabel.</t>
        <t>In more detail, a component identified by ComponentID should sign and verify
using:</t>
        <sourcecode type="tls"><![CDATA[
SafeSignWithLabel(SignatureKey, ComponentID, Label, Content) =
  SignWithLabel(SignatureKey, ComponentOperationLabel, Content)

SafeVerifyWithLabel(VerificationKey, ComponentID, Label, Content,
  SignatureValue) =
  VerifyWithLabel(VerificationKey, ComponentOperationLabel, Content,
  SignatureValue)
]]></sourcecode>
        <t>Where the fields of ComponentOperationLabel are set to</t>
        <sourcecode type="tls"><![CDATA[
component_id = ComponentID
label = Label
]]></sourcecode>
        <t>For signing operations, the ComponentID <bcp14>MUST</bcp14> be set to the ComponentID of the
component performing the signature, and not to the ID of any other component.
This means that a component cannot produce signatures in place of another
component. However, components can verify signatures computed by other
components. Domain separation is ensured by explicitly including the ComponentID
with every operation.</t>
      </section>
      <section anchor="exported-secrets">
        <name>Exported Secrets</name>
        <t>The MLS Exporter functionality described in <xref section="8.5" sectionFormat="of" target="RFC9420"/> does not
provide forward security for exported secrets, because the <tt>exporter_secret</tt> is
not deleted after a secret has been derived.  In this section, we define a
forward-secure exporter for use by application components.</t>
        <t>The safe exporter is constructed from an Exporter Tree, a tree of secrets with
the same structure as the Secret Tree defined in <xref section="9" sectionFormat="of" target="RFC9420"/>, with
two differences: First, an Exporter Tree always has 2<sup>16</sup> leaves,
corresponding to the 16 bits of a ComponentID value. (As with the Secret Tree,
the nodes of the tree can be generated on-demand, for space-efficiency.) Second,
the root of the Exporter Tree is the <tt>application_export_secret</tt>, an additional
secret derived from the <tt>epoch_secret</tt> at the beginning of the epoch in the same
way as the other secrets listed in Table 4 of <xref target="RFC9420"/> using the label
<tt>"application_export"</tt>.</t>
        <t>This tree defines one exported secret per ComponentID.  The secret for a
ComponentID is the <tt>tree_node_secret</tt> at the leaf node for that ComponentID:</t>
        <artwork><![CDATA[
SafeExportSecret(ComponentID) = tree_node_[LeafIndex(ComponentID)]_secret
]]></artwork>
        <t>Upon generating an exported secret for a component, the MLS implementation <bcp14>MUST</bcp14>
regard that component's exported secret as "consumed", and delete any source key
material according to the deletion schedule in <xref section="9.2" sectionFormat="of" target="RFC9420"/>.</t>
      </section>
      <section anchor="pre-shared-keys-psks">
        <name>Pre-Shared Keys (PSKs)</name>
        <t>PSKs represent key material that is injected into the MLS key schedule when
creating or processing a commit as defined in <xref section="8.4" sectionFormat="of" target="RFC9420"/>. Its
injection into the key schedule means that all group members have to agree on
the value of the PSK.</t>
        <t>While PSKs are typically cryptographic keys which due to their properties add to
the overall security of the group, the PSK mechanism can also be used to ensure
that all members of a group agree on arbitrary pieces of data represented as
octet strings (without the necessity of sending the data itself over the wire).
For example, a component can use the PSK mechanism to enforce that all group
members have access to and agree on a password or a shared file.</t>
        <t>This is achieved by creating a new epoch via a PSK proposal. Transitioning to
the new epoch requires using the information agreed upon.</t>
        <t>To facilitate using PSKs safely, this document defines a new PSKType for
application components. This provides domain separation between pre-shared keys
used by the core MLS protocol and applications, and between those used by
different components.</t>
        <sourcecode type="tls-presentation"><![CDATA[
enum {
  // ...
  application(3),
  (255)
} PSKType;

struct {
  PSKType psktype;
  select (PreSharedKeyID.psktype) {
    // ...
    case application:
      ComponentID component_id;
      opaque psk_id<V>;
  };
  opaque psk_nonce<V>;
} PreSharedKeyID;
]]></sourcecode>
      </section>
      <section anchor="app-data">
        <name>Attaching Application Data to MLS Messages</name>
        <t>The MLS GroupContext, LeafNode, KeyPackage, and GroupInfo objects each have an
<tt>extensions</tt> field that can carry additional data not defined by the MLS
specification. The <tt>app_data_dictionary</tt> extension provides a generic container
that applications can use to attach application data to these messages. Each
usage of the extension serves a slightly different purpose:</t>
        <ul spacing="normal">
          <li>
            <t>GroupContext: Confirms that all members of the group agree on the application
data, and automatically distributes it to new joiners.</t>
          </li>
          <li>
            <t>KeyPackage and LeafNode: Associates the application data to a particular
client, and advertises it to the other members of the group.</t>
          </li>
          <li>
            <t>GroupInfo: Distributes the application data confidentially to the new joiners
for whom the GroupInfo is encrypted (as a Welcome message).</t>
          </li>
        </ul>
        <t>The content of the <tt>app_data_dictionary</tt> extension is a serialized
AppDataDictionary object:</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {
    ComponentID component_id;
    opaque data<V>;
} ComponentData;

struct {
    ComponentData component_data<V>;
} AppDataDictionary;
]]></sourcecode>
        <t>The entries in the <tt>component_data</tt> <bcp14>MUST</bcp14> be sorted by <tt>component_id</tt>, and there
<bcp14>MUST</bcp14> be at most one entry for each <tt>component_id</tt>.</t>
        <t>An <tt>app_data_dictionary</tt> extension in a LeafNode, KeyPackage, or GroupInfo can
be set when the object is created. The creator of the group can set an
<tt>app_data_dictionary</tt> extension in the GroupContext unilaterally. Thereafter,
the AppDataUpdate proposal described in the next section is the only way to
change it. A GroupContextExtensions proposal leaves it as it is.</t>
        <t>Every implementation that advertises support for the <tt>app_data_dictionary</tt>
extension <bcp14>MUST</bcp14> understand the <tt>app_components</tt> component defined in
<xref target="negotiation"/> and the <tt>safe_aad</tt> component defined in <xref target="safe-aad"/>.</t>
      </section>
      <section anchor="appdataupdate">
        <name>Updating Application Data in the GroupContext</name>
        <t>Updating the <tt>app_data_dictionary</tt> with a GroupContextExtensions proposal is
cumbersome. The application data needs to be transmitted in its entirety, along
with any other extensions, whether or not they are being changed. And a
GroupContextExtensions proposal always requires an UpdatePath, which updating
application state never should.</t>
        <t>The AppDataUpdate proposal allows the <tt>app_data_dictionary</tt> extension to be
updated without these costs. Instead of sending the whole value of the
extension, it sends only an update, which is interpreted by the application to
provide the new content for the <tt>app_data_dictionary</tt> extension. No other
extensions are sent or updated, and no UpdatePath is required.</t>
        <artwork><![CDATA[
enum {
    invalid(0),
    update(1),
    remove(2),
    (255)
} AppDataUpdateOperation;

struct {
    ComponentID component_id;
    AppDataUpdateOperation op;

    select (AppDataUpdate.op) {
        case update: opaque update<V>;
        case remove: struct{};
    };
} AppDataUpdate;
]]></artwork>
        <t>An AppDataUpdate proposal is invalid if its <tt>component_id</tt> references a
component that is not known to the application, or if it specifies the removal
of state for a <tt>component_id</tt> that has no state present. A proposal list is
invalid if it includes multiple AppDataUpdate proposals that <tt>remove</tt> state for
the same <tt>component_id</tt>, or proposals that both <tt>update</tt> and <tt>remove</tt> state for
the same <tt>component_id</tt>. In other words, for a given <tt>component_id</tt>, a proposal
list is valid only if it contains (a) a single <tt>remove</tt> operation or (b) one or
more <tt>update</tt> operations. The rules in <xref target="negotiation"/> further restrict which
components the <tt>app_data_dictionary</tt> extension in the GroupContext can include.
The components defined in this document are updated as described in
<xref target="builtin-updates"/>.</t>
        <t>AppDataUpdate proposals are processed after any default proposals (i.e., those
defined in <xref target="RFC9420"/>), and any AppEphemeral proposals (defined in
<xref target="app-ephemeral"/>).</t>
        <t>A GroupContextExtensions proposal <bcp14>MUST NOT</bcp14> add, remove, or modify the
<tt>app_data_dictionary</tt> GroupContext extension, whether or not the AppDataUpdate
proposal type is listed in the <tt>proposal_types</tt> list of the group's
<tt>required_capabilities</tt> extension. A GroupContextExtensions proposal replaces
the whole <tt>extensions</tt> list of the GroupContext
(<xref section="12.1.7" sectionFormat="of" target="RFC9420"/>), so it carries the <tt>app_data_dictionary</tt>
extension of the GroupContext of the current epoch unchanged, or omits it if
that GroupContext has none. A GroupContextExtensions proposal is invalid if its
<tt>app_data_dictionary</tt> extension is not identical to the one in the GroupContext
of the current epoch, or if only one of the two has such an extension. This
way, every change to the state of a component goes through the AppDataUpdate
processing described below. Changing the <tt>app_data_dictionary</tt> extension after
creation therefore requires that every member that processes the Commit
supports the AppDataUpdate proposal, except members removed by that
Commit (<xref section="12.2" sectionFormat="of" target="RFC9420"/>).</t>
        <t>A commit can contain a GroupContextExtensions proposal which modifies
GroupContext extensions other than <tt>app_data_dictionary</tt>, and
zero or more AppDataUpdate proposals. This allows modifications to both the
<tt>app_data_dictionary</tt> extension (via AppDataUpdate) and other extensions (via
GroupContextExtensions) in the same Commit.</t>
        <t>A client applies AppDataUpdate proposals by component ID. For each
<tt>component_id</tt> field that appears in an AppDataUpdate proposal in the Commit,
the client assembles a list of AppDataUpdate proposals with that <tt>component_id</tt>,
in the order in which they appear in the Commit, and processes them in the
following way:</t>
        <ul spacing="normal">
          <li>
            <t>If the list comprises a single proposal with the <tt>op</tt> field set to <tt>remove</tt>:  </t>
            <ul spacing="normal">
              <li>
                <t>If there is an entry in the <tt>component_data</tt> vector in the
<tt>app_data_dictionary</tt> extension with the specified <tt>component_id</tt>, remove
it.</t>
              </li>
              <li>
                <t>Otherwise, the proposal is invalid.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the list comprises one or more proposals, all with <tt>op</tt> field set to
<tt>update</tt>:  </t>
            <ul spacing="normal">
              <li>
                <t>Provide the application logic registered to the <tt>component_id</tt> value with
the content of the <tt>update</tt> field from each proposal, in the order
specified.</t>
              </li>
              <li>
                <t>The application logic returns either an opaque value <tt>new_data</tt> that will
be stored as the new application data for this component, or else an
indication that it considers this update invalid.</t>
              </li>
              <li>
                <t>If the application logic considers the update invalid, the MLS client <bcp14>MUST</bcp14>
consider the proposal list invalid.</t>
              </li>
              <li>
                <t>If no <tt>app_data_dictionary</tt> extension is present in the GroupContext, add
one to the end of the <tt>extensions</tt> list in the GroupContext.</t>
              </li>
              <li>
                <t>If there is an entry in the <tt>component_data</tt> vector in the
<tt>app_data_dictionary</tt> extension with the specified <tt>component_id</tt>, then
set its <tt>data</tt> field to the specified <tt>new_data</tt>.</t>
              </li>
              <li>
                <t>Otherwise, insert a new entry in the <tt>component_data</tt> vector with the
specified <tt>component_id</tt> and the <tt>data</tt> field set to the <tt>new_data</tt> value.
The new entry is inserted at the proper point to keep the
<tt>component_data</tt> vector sorted by <tt>component_id</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Otherwise, the proposal list is invalid.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>NOTE: Putting large amounts of data into the <tt>app_data_dictionary</tt>
GroupContext extension may have a performance impact.</t>
          </li>
        </ul>
        <t>AppDataUpdate proposals do not require an UpdatePath. An AppDataUpdate proposal
can be sent by an external sender. Likewise, AppDataUpdate proposals can be
included in an external Commit. Applications can make more restrictive validity
rules for the update of their components, such that some components would not be
valid at the application when sent in an external Commit or via an external
proposer.</t>
        <t>To avoid storing large amounts of data in the <tt>app_data_dictionary</tt> GroupContext
extension, implementations <bcp14>MAY</bcp14> offer storing only a hash of the actual data in
the GroupContext extension.</t>
      </section>
      <section anchor="app-ephemeral">
        <name>Attaching Application Data to a Commit</name>
        <t>The AppEphemeral proposal type allows an application component to associate
application data to a Commit, so that the member processing the Commit knows
that all other group members will be processing the same data. AppEphemeral
proposals are ephemeral in the sense that they do not change any persistent
state related to MLS, aside from their appearance in the transcript hash.</t>
        <t>The content of an AppEphemeral proposal is a single <tt>component_id</tt> and the
<tt>data</tt> for that component. The proposal type is set in <xref target="iana-considerations"/>.</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {
    ComponentID component_id;
    opaque data<V>;
} AppEphemeral;
]]></sourcecode>
        <t>An AppEphemeral proposal is invalid if it contains a <tt>component_id</tt> that is
unknown to the application, or if the <tt>data</tt> field is considered invalid by the
application logic registered to the indicated <tt>component_id</tt>.</t>
        <t>AppEphemeral proposals <bcp14>MUST</bcp14> be processed after any default proposals (i.e.,
those defined in <xref target="RFC9420"/>), but before any AppDataUpdate proposals.</t>
        <t>A client applies an AppEphemeral proposal by providing the <tt>data</tt> field to the
component identified by the <tt>component_id</tt>.
If a Commit references more than one AppEphemeral proposal for the same
<tt>component_id</tt> value, then they <bcp14>MUST</bcp14> be processed in the order in which they are
specified in the Commit.</t>
        <t>AppEphemeral proposals do not require an UpdatePath. An AppEphemeral proposal
can be sent by an external sender. Likewise, AppEphemeral proposals can be
included in an external Commit. Applications can make more restrictive validity
rules for ephemeral updates of their components, such that some components would
not be valid at the application when sent in an external Commit or via an
external proposer.</t>
      </section>
      <section anchor="safe-aad">
        <name>Safe Additional Authenticated Data (AAD)</name>
        <t>Both MLS <tt>PublicMessage</tt> and <tt>PrivateMessage</tt> messages can contain arbitrary
additional application-specific data. The corresponding <tt>authenticated_data</tt>
field that conveys this application-specific data appears in the
<tt>FramedContent</tt> struct for <tt>PublicMessage</tt> and directly in the <tt>PrivateMessage</tt>
struct.</t>
        <t>In an MLS <tt>PrivateMessage</tt>, the <tt>authenticated_data</tt> is also present in
intermediary structs: in the <tt>FramedContent</tt>, which is used to generate the
message signature and tags, and in the <tt>PrivateContentAAD</tt>, which is used as
the AAD input to the <tt>PrivateMessage.ciphertext</tt>.</t>
        <t>The Safe AAD framing allows multiple application components
to add AAD safely to the <tt>authenticated_data</tt> without conflicts or ambiguity.</t>
        <t>If the <tt>safe_aad</tt> component in the <tt>app_data_dictionary</tt> extension is present in
the GroupContext (see <xref target="negotiation"/>), the entire <tt>authenticated_data</tt> field is
framed as a <tt>SafeAAD</tt> struct such that the elements of <tt>aad_items</tt> are sorted in
increasing numerical order of the <tt>component_id</tt>. The struct is described below:</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {
  ComponentID component_id;
  opaque aad_item_data<V>;
} SafeAADItem;

struct {
  SafeAADItem aad_items<V>;
} SafeAAD;
]]></sourcecode>
        <t>If <tt>safe_aad</tt> is present, but none of the "safe" AAD components have data to
send in a particular message, the <tt>aad_items</tt> is a zero-length vector.</t>
      </section>
    </section>
    <section anchor="negotiation">
      <name>Negotiating Extensions and Components</name>
      <t>MLS defines a <tt>Capabilities</tt> struct for LeafNodes (in turn used in
KeyPackages), which describes which extensions are supported by the
associated node.</t>
      <t>However, that struct (defined in <xref section="7.2" sectionFormat="of" target="RFC9420"/>) only has
fields for a subset of the extensions possible in MLS, as reproduced below.</t>
      <sourcecode type="tls-presentation"><![CDATA[
struct {
    ProtocolVersion versions<V>;
    CipherSuite cipher_suites<V>;
    ExtensionType extensions<V>;
    ProposalType proposals<V>;
    CredentialType credentials<V>;
} Capabilities;
]]></sourcecode>
      <ul empty="true">
        <li>
          <t>The "MLS Extension Types" registry represents extensibility of four
  core structs (<tt>GroupContext</tt>, <tt>GroupInfo</tt>, <tt>KeyPackage</tt>, and <tt>LeafNode</tt>)
  that have far reaching effects on the use of the protocol. The majority of
  MLS extensions in <xref target="RFC9420"/> extend one or more of these core structs.</t>
        </li>
      </ul>
      <t>Likewise, the <tt>required_capabilities</tt> GroupContext extension (defined in
<xref section="11.1" sectionFormat="of" target="RFC9420"/> and reproduced below) contains all non-default
extensions that are mandatory to support in its <tt>extension_types</tt> vector. Its
<tt>proposal_types</tt> vector contains any Proposals that are mandatory to support.
Its <tt>credential_types</tt> vector contains any mandatory credential types.</t>
      <artwork><![CDATA[
struct {
   ExtensionType extension_types<V>;
   ProposalType proposal_types<V>;
   CredentialType credential_types<V>;
} RequiredCapabilities;
]]></artwork>
      <t>Due to an oversight in <xref target="RFC9420"/>, the Capabilities struct does not include
MLS Wire Formats. Instead, this document defines two extensions:
<tt>supported_wire_formats</tt> (which can appear in LeafNodes), and
<tt>required_wire_formats</tt> (which can appear in the GroupContext).</t>
      <sourcecode type="tls-presentation"><![CDATA[
struct {
   WireFormat wire_formats<V>;
} WireFormats;

WireFormats supported_wire_formats;
WireFormats required_wire_formats;
]]></sourcecode>
      <t>This document also defines new components of the <tt>app_data_dictionary</tt> extension
for supported and required Safe AAD, media types, and components.</t>
      <t>The <tt>safe_aad</tt> component contains a list of component IDs. When present (in an
<tt>app_data_dictionary</tt> extension) in a LeafNode, the semantics are the list of
supported components that use Safe AAD. When present (in an
<tt>app_data_dictionary</tt> extension) in the GroupContext, the semantics are the list
of required Safe AAD components (those that must be understood by the entire
group). If the <tt>safe_aad</tt> component is present, even with an empty list, (in the
<tt>app_data_dictionary</tt> extension) in the GroupContext, then the
<tt>authenticated_data</tt> field is a SafeAAD struct as defined in
<xref target="safe-aad"/>.</t>
      <sourcecode type="tls-presentation"><![CDATA[
struct {
    ComponentID component_ids<V>;
} ComponentsList;

ComponentsList safe_aad;
]]></sourcecode>
      <t>The list of required and supported components follows the same model with the
new component <tt>app_components</tt>. When present in a LeafNode, the semantics are
the list of supported components. When present in the GroupContext, the
semantics are the list of required components.</t>
      <sourcecode type="tls-presentation"><![CDATA[
ComponentsList app_components;
]]></sourcecode>
      <t>A LeafNode that does not list a component in <tt>app_components</tt> is treated as not
supporting it. A <tt>safe_aad</tt> or <tt>app_components</tt> component that is absent from a
LeafNode is equivalent to one with an empty list. Support for the
<tt>app_components</tt> and <tt>safe_aad</tt> components themselves is implied by support for
the <tt>app_data_dictionary</tt> extension (see <xref target="app-data"/>), so they are not listed,
and an entry for either of them in a list is ignored. A component that uses
Safe AAD is listed in both <tt>app_components</tt> and <tt>safe_aad</tt>.</t>
      <t>A LeafNode is invalid if its <tt>app_data_dictionary</tt> extension contains an entry
for a component other than <tt>app_components</tt> and <tt>safe_aad</tt> that is not listed
in its <tt>app_components</tt> component, just as it is invalid if it contains a
non-default extension that its <tt>capabilities</tt> field does not list
(<xref section="7.3" sectionFormat="of" target="RFC9420"/>). This check is part of LeafNode validation, so it
applies wherever a LeafNode is validated, including the LeafNode in a
KeyPackage.</t>
      <t>The required components in the GroupContext are enforced in the same way as the
<tt>required_capabilities</tt> extension (<xref section="11.1" sectionFormat="of" target="RFC9420"/>):</t>
      <ul spacing="normal">
        <li>
          <t>A LeafNode in a group is invalid if the <tt>app_components</tt> or <tt>safe_aad</tt>
component in the GroupContext lists a component that the corresponding
component in the LeafNode does not list. This check is part of LeafNode
validation (<xref section="7.3" sectionFormat="of" target="RFC9420"/>), so it applies wherever a LeafNode is
validated, against the GroupContext of the epoch in which the validation takes
place. A LeafNode in a proposal or in the UpdatePath of a Commit is therefore
checked against the GroupContext before the Commit.</t>
        </li>
        <li>
          <t>A client <bcp14>MUST NOT</bcp14> join a group whose GroupContext requires a component that
the client does not support.</t>
        </li>
        <li>
          <t>A Commit is invalid if the GroupContext of the resulting epoch requires a
component that a member of the resulting epoch does not list in the
corresponding component of its LeafNode.</t>
        </li>
        <li>
          <t>A GroupContext is invalid if its <tt>app_data_dictionary</tt> extension contains an
entry for a component other than <tt>app_components</tt> and <tt>safe_aad</tt> that is not
listed in <tt>app_components</tt>. This applies when a group is created, to the
GroupContext of the epoch resulting from a Commit, and to the GroupContext a
new member receives. Because a Commit is judged by its resulting epoch, a
single Commit can both require a component and set its state, in any order of
proposals.</t>
        </li>
      </ul>
      <t>Finally, the supported and required media types (formerly called MIME types) are
communicated in the <tt>content_media_types</tt> component (see
<xref target="content-advertisement"/>).</t>
      <section anchor="builtin-updates">
        <name>Updating the Components Defined in This Document</name>
        <t>The <tt>app_components</tt>, <tt>safe_aad</tt>, and <tt>content_media_types</tt> entries in the
GroupContext are updated with AppDataUpdate proposals, following the rules in
<xref target="appdataupdate"/>. For these components, the MLS implementation takes the place
of the application logic:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>update</tt> field of an <tt>update</tt> proposal contains the complete new value of
the entry, encoded as the entry itself is: a ComponentsList for
<tt>app_components</tt> and <tt>safe_aad</tt>, and a MediaTypeList for
<tt>content_media_types</tt>. The proposal is invalid if the field does not decode as
such.</t>
          </li>
          <li>
            <t>If a Commit contains several <tt>update</tt> proposals for one of these components,
the value of the last one in the Commit becomes the new entry.</t>
          </li>
          <li>
            <t>A <tt>remove</tt> proposal deletes the entry.</t>
          </li>
        </ul>
      </section>
      <section anchor="grease">
        <name>GREASE</name>
        <t>The "Generate Random Extensions And Sustain Extensibility" (GREASE) approach is
described in <xref section="13.5" sectionFormat="of" target="RFC9420"/>. Further, <xref section="7.2" sectionFormat="of" target="RFC9420"/>
says that:</t>
        <ul empty="true">
          <li>
            <t>"As discussed in Section 13, unknown values in <tt>capabilities</tt> <bcp14>MUST</bcp14> be ignored,
and the creator of a <tt>capabilities</tt> field <bcp14>SHOULD</bcp14> include some random GREASE
values to help ensure that other clients correctly ignore unknown values."</t>
          </li>
        </ul>
        <t>This specification adds the following locations where GREASE values for
components can be included:</t>
        <ul spacing="normal">
          <li>
            <t>LeafNode.extensions.app_data_dictionary.safe_aad</t>
          </li>
          <li>
            <t>LeafNode.extensions.app_data_dictionary.app_components</t>
          </li>
          <li>
            <t>LeafNode.extensions.app_data_dictionary</t>
          </li>
          <li>
            <t>KeyPackage.extensions.app_data_dictionary</t>
          </li>
          <li>
            <t>GroupInfo.extensions.app_data_dictionary</t>
          </li>
        </ul>
        <t>Unknown values (including GREASE values) in any of these fields <bcp14>MUST</bcp14> be ignored
by receivers. A random selection of GREASE values <bcp14>SHOULD</bcp14> be included in any of
these fields that would otherwise be present. Ignoring an unknown component
does not skip the LeafNode check in <xref target="negotiation"/>. A GREASE entry in a
LeafNode's <tt>app_data_dictionary</tt> extension is therefore listed in the
LeafNode's <tt>app_components</tt> as well.</t>
      </section>
    </section>
    <section anchor="extensions">
      <name>Extensions</name>
      <section anchor="appack">
        <name>AppAck</name>
        <t>An AppAck object is used to acknowledge receipt of application messages. Though
this information implies no change to the group, it is conveyed inside an
AppEphemeral Proposal with a component ID <tt>app_ack</tt>, so that it is included in
the group's transcript by being included in Commit messages.</t>
        <sourcecode type="tls"><![CDATA[
struct {
    uint32 sender;
    uint32 first_generation;
    uint32 last_generation;
} MessageRange;

struct {
    MessageRange received_ranges<V>;
} AppAck;
]]></sourcecode>
        <t>An AppAck represents a set of messages received by the sender in the current
epoch. Messages are represented by the <tt>sender</tt> and <tt>generation</tt> values in the
PrivateMessage for the message. Each MessageRange represents receipt of a span
of messages whose <tt>generation</tt> values form a continuous range from
<tt>first_generation</tt> to <tt>last_generation</tt>, inclusive.</t>
        <t>AppAck objects are sent as a guard against the Delivery Service dropping
application messages. The sequential nature of the <tt>generation</tt> field provides a
degree of loss detection, since gaps in the <tt>generation</tt> sequence indicate
dropped messages. AppAck completes this story by addressing the scenario where
the Delivery Service drops all messages after a certain point, so that a later
generation is never observed. Obviously, there is a risk that AppAck messages
could be suppressed as well, but their inclusion in the transcript means that if
they are suppressed then the group cannot advance at all.</t>
      </section>
      <section anchor="content-advertisement">
        <name>Content Advertisement</name>
        <section anchor="description">
          <name>Description</name>
          <t>This section defines a minimal framing format so MLS clients can signal which
media type is being sent inside the MLS <tt>application_data</tt> object when multiple
formats are permitted in the same group.</t>
          <t>It also defines a new <tt>content_media_types</tt> application component which is used
to indicate support for specific formats, using the extensive IANA Media Types
registry (formerly called MIME types). When the <tt>content_media_types</tt> component
is present (in the <tt>app_data_dictionary</tt> extension) in a LeafNode, it indicates
that node's support for a particular (non-empty) list of media types. When the
<tt>content_media_types</tt> component is present (in the <tt>app_data_dictionary</tt>
extension) in the GroupContext, it indicates a (non-empty) list of media types
that need to be supported by all members of that MLS group, <em>and</em> that the
<tt>application_data</tt> will be framed using the application framing format described
later in <xref target="app-framing"/>. This allows clients to confirm that all members of a
group can communicate.</t>
          <ul empty="true">
            <li>
              <t>Note that when the membership of a group changes, or when the policy of the
 group changes, it is responsibility of the committer to ensure that the
 membership and policies are compatible.</t>
            </li>
          </ul>
          <t>As clients are upgraded to support new formats they can use these extensions to
detect when all members support a new or more efficient encoding, or select the
relevant format or formats to send.</t>
          <t>Vendor-specific media subtypes starting with <tt>vnd.</tt> can be registered with IANA
without standards action as described in <xref target="RFC6838"/>. Implementations which
wish to send multiple formats in a single application message, may be interested
in the <tt>multipart/alternative</tt> media type defined in <xref target="RFC2046"/> or may use or
define another type with similar semantics (for example using TLS Presentation
Language syntax <xref target="RFC8446"/>).</t>
          <ul empty="true">
            <li>
              <t>Note that the usage of IANA media types in general does not imply the usage of
 MIME Headers <xref target="RFC2045"/> for framing.</t>
            </li>
          </ul>
        </section>
        <section anchor="syntax">
          <name>Syntax</name>
          <t>MediaType is a TLS encoding of a single IANA media type (including top-level
type and subtype) and any of its parameters. A <tt>parameter_value</tt> consists of
US-ASCII visible characters (hex 0x21 to 0x7E), space (0x20), and horizontal tab
(0x09). Even if the <tt>parameter_value</tt> would have required formatting as a
<tt>quoted-string</tt> or <tt>quoted-pair</tt> in a text encoding, only the unescaped,
unquoted contents are included in <tt>parameter_value</tt>.  MediaTypeList is an
ordered list of MediaType objects.</t>
          <sourcecode type="tls"><![CDATA[
struct {
    opaque parameter_name<V>;
    /* Note: parameter_value never includes the quotation marks of */
    /* an RFC 2045 quoted-string or the first "\" of a quoted-pair */
    opaque parameter_value<V>;
} Parameter;

struct {
    /* type is an IANA top-level media type, a "/" character,
     * and the IANA media subtype */
    opaque type<V>;

    /* a list of zero or more parameters defined for the subtype */
    Parameter parameters<V>;
} MediaType;

struct {
    /* must contain at least one item */
    MediaType media_type_list<V>;
} MediaTypeList;

MediaTypeList content_media_types;
]]></sourcecode>
          <t>Example IANA media types with optional parameters:</t>
          <sourcecode type="artwork"><![CDATA[
  image/png
  text/plain ;charset="UTF-8"
  application/json
  application/vnd.example.msgbus+cbor
]]></sourcecode>
          <t>For the example media type for <tt>text/plain</tt>, the <tt>media_type.type</tt> field would
be <tt>text/plain</tt>, <tt>media_type.parameters</tt> would contain a single Parameter with a
<tt>parameter_name</tt> of <tt>charset</tt> and a <tt>parameter_value</tt> of <tt>UTF-8</tt>.</t>
        </section>
        <section anchor="expected-behavior">
          <name>Expected Behavior</name>
          <t>An MLS client which implements this section <bcp14>SHOULD</bcp14> include the
<tt>content_media_types</tt> component (in the <tt>app_data_dictionary</tt> extension) in its
LeafNodes, with a <tt>media_type_list</tt> vector listing all the media types it can
receive. As <xref target="negotiation"/> requires, the client also includes
<tt>content_media_types</tt> in the <tt>app_components</tt> list (in the <tt>app_data_dictionary</tt>
extension), and support for
the <tt>app_data_dictionary</tt> extension in its <tt>capabilities.extensions</tt> field in
its LeafNodes (including in LeafNodes inside its KeyPackages).</t>
          <t>When creating a new MLS group for an application using this specification, the
group <bcp14>MAY</bcp14> include a <tt>content_media_types</tt> component (in the
<tt>app_data_dictionary</tt> extension) in the GroupContext. In that case the
GroupContext also lists <tt>content_media_types</tt> in its <tt>app_components</tt> component,
as <xref target="negotiation"/> requires. Later changes to the component use AppDataUpdate
proposals as described in <xref target="builtin-updates"/>. (The creating client also
includes its <tt>content_media_types</tt> component in its own LeafNode as described in
the previous paragraph.)</t>
          <t>MLS clients <bcp14>SHOULD NOT</bcp14> add an MLS client to an MLS group with
<tt>content_media_types</tt> in its GroupContext unless all the members (after taking
into account any membership changes in the valid pending Proposals) advertise
support for all the required media types. As an exception, a client could be
preconfigured to know that certain clients support the required types. Likewise,
an MLS client is already forbidden from issuing or committing a
GroupContextExtensions Proposal which introduces required extensions which are
not supported by all members in the resulting epoch.</t>
        </section>
        <section anchor="app-framing">
          <name>Framing of application_data</name>
          <t>When an MLS group contains the <tt>content_media_types</tt> component (in the
<tt>app_data_dictionary</tt> extension) in its GroupContext, the <tt>application_data</tt>
sent in that group is interpreted as <tt>ApplicationFraming</tt> as defined below:</t>
          <sourcecode type="tls"><![CDATA[
  struct {
      MediaType media_type;
      opaque inner_application_content<V>;
  } ApplicationFraming;
]]></sourcecode>
          <t>The <tt>media_type.type</tt> <bcp14>MAY</bcp14> be zero length, in which case, the media type of the
<tt>inner_application_content</tt> is interpreted as the first MediaType specified in
the <tt>content_media_types</tt> component in the GroupContext.</t>
        </section>
      </section>
      <section anchor="selfremove-proposal">
        <name>SelfRemove Proposal</name>
        <t>The design of the MLS protocol prevents a member of an MLS group from removing
itself immediately from the group. (To cause an immediate change in the group, a
member must send a Commit message. However, the sender of a Commit message knows
the keying material of the new epoch and therefore needs to be part of the
group.) Instead, a member wishing to remove itself can send a Remove Proposal
and wait for another member to Commit its Proposal.</t>
        <t>Unfortunately, MLS clients that join via an external Commit ignore pending, but
otherwise valid, Remove Proposals. The member trying to remove itself has to
monitor the group and send a new Remove Proposal in every new epoch until the
member is removed. In a group with a burst of external joiners, a member
connected over a high-latency link (or one that is merely unlucky) might have to
wait several epochs to remove itself. A real-world situation in which this
happens is a member trying to remove itself from a conference call as several
dozen new participants are trying to join (often on the hour).</t>
        <t>This section describes a new <tt>SelfRemove</tt> proposal type. It is designed to be
included in external Commits.</t>
        <section anchor="proposal-description">
          <name>Proposal Description</name>
          <t>This document specifies a new MLS Proposal type called <tt>SelfRemove</tt>. Its syntax
is described using the TLS Presentation Language <xref target="RFC8446"/> below (its content
is an empty struct). It is allowed in external Commits and requires an
UpdatePath. SelfRemove proposals are only allowed in a Commit by reference.
SelfRemove cannot be sent as an external proposal.</t>
          <sourcecode type="tls-presentation"><![CDATA[
struct {} SelfRemove;

struct {
    ProposalType msg_type;
    select (Proposal.msg_type) {
        case add:                      Add;
        case update:                   Update;
        case remove:                   Remove;
        case psk:                      PreSharedKey;
        case reinit:                   ReInit;
        case external_init:            ExternalInit;
        case group_context_extensions: GroupContextExtensions;
        case self_remove:              SelfRemove;
    };
} Proposal;
]]></sourcecode>
          <t>The struct above reproduces the <tt>Proposal</tt> type from <xref target="RFC9420"/> with the
<tt>self_remove</tt> case added to show where SelfRemove fits. It is not the complete
extended set: the <tt>app_ephemeral</tt> and <tt>app_data_update</tt> proposal types defined
in this document extend the same enum.</t>
          <t>The description of behavior below only applies if all the members of a group
support this proposal in their capabilities; such a group is a
"self-remove-capable group".</t>
          <t>An MLS client which supports this proposal can send a SelfRemove Proposal
whenever it would like to remove itself from a self-remove-capable group.
Because the point of a SelfRemove Proposal is to be available to external
joiners (which are not yet members), these proposals <bcp14>MUST</bcp14> be sent in an MLS
PublicMessage.</t>
          <t>Whenever a member receives a SelfRemove Proposal, it includes it along with any
other pending Proposals when sending a Commit. It already <bcp14>MUST</bcp14> send a Commit of
pending Proposals before sending new application messages.</t>
          <t>When a member receives a Commit referencing one or more SelfRemove Proposals, it
treats the proposal like a Remove Proposal, except the leaf node to remove is
determined by looking in the Sender <tt>leaf_index</tt> of the original Proposal. The
member is able to verify that the Sender was a member.</t>
          <t>Whenever a new joiner is about to join a self-remove-capable group with an
external Commit, the new joiner <bcp14>MUST</bcp14> fetch any pending SelfRemove Proposals
along with the GroupInfo object, and include the SelfRemove Proposals in its
external Commit by reference. (An external Commit can contain zero or more
SelfRemove proposals). The new joiner <bcp14>MUST</bcp14> validate the SelfRemove Proposal
before including it by reference, except that it skips the validation of the
<tt>membership_tag</tt> because a non-member cannot verify membership.</t>
          <t>During validation, SelfRemove proposals are processed after Update proposals and
before Remove proposals. If there is a pending SelfRemove proposal for a
specific leaf node and a pending Remove proposal for the same leaf node, the
Remove proposal is invalid. A client <bcp14>MUST NOT</bcp14> issue more than one SelfRemove
proposal per epoch.</t>
          <t>The MLS Delivery Service (DS) needs to validate SelfRemove Proposals it receives
(except that it cannot validate the <tt>membership_tag</tt>). If the DS provides a
GroupInfo object to an external joiner, the DS <bcp14>SHOULD</bcp14> attach any SelfRemove
proposals known to the DS to the GroupInfo object.</t>
          <t>As with Remove proposals, clients need to be able to receive a Commit message
which removes them from the group via a SelfRemove. If the DS does not forward a
Commit to a removed client, it needs to inform the removed client out-of-band.</t>
        </section>
      </section>
      <section anchor="last-resort-keypackages">
        <name>Last-Resort KeyPackages</name>
        <t>Type: KeyPackage component</t>
        <section anchor="description-1">
          <name>Description</name>
          <t><xref section="10" sectionFormat="of" target="RFC9420"/> details that clients are required to pre-publish
KeyPackages so that other clients can add them to groups asynchronously. It also
states that they should not be re-used:</t>
          <ul empty="true">
            <li>
              <t>KeyPackages are intended to be used only once and <bcp14>SHOULD NOT</bcp14> be reused except
in the case of a "last resort" KeyPackage (see Section 16.8). Clients <bcp14>MAY</bcp14>
generate and publish multiple KeyPackages to support multiple cipher suites.</t>
            </li>
          </ul>
          <t><xref section="16.8" sectionFormat="of" target="RFC9420"/> then introduces the notion of last-resort
KeyPackages as follows:</t>
          <ul empty="true">
            <li>
              <t>An application <bcp14>MAY</bcp14> allow for reuse of a "last resort" KeyPackage in order to
prevent denial-of-service attacks.</t>
            </li>
          </ul>
          <t>However, <xref target="RFC9420"/> does not specify how to distinguish regular KeyPackages
from last-resort ones. The last_resort_key_package KeyPackage application
component defined in this section fills this gap and allows clients to
specifically mark KeyPackages as KeyPackages of last resort that <bcp14>MAY</bcp14> be used
more than once in scenarios where all other KeyPackages have already been used.</t>
          <t>The component allows clients that pre-publish KeyPackages to signal to the
Delivery Service which KeyPackage(s) are meant to be used as last-resort
KeyPackages.</t>
          <t>An additional benefit of using a component rather than communicating the
information out-of-band is that the component is still present in Add proposals.
Clients processing such Add proposals can authenticate that a KeyPackage is a
last-resort KeyPackage and <bcp14>MAY</bcp14> make policy decisions based on that information.</t>
        </section>
        <section anchor="format">
          <name>Format</name>
          <t>The purpose of the application component is simply to mark a given KeyPackage,
which means it carries no additional data.</t>
          <t>As a result, a <tt>last_resort_key_package</tt> component contains the <tt>component_id</tt>
with an empty <tt>data</tt> field.</t>
        </section>
      </section>
      <section anchor="multi-credentials">
        <name>Multi-Credentials</name>
        <t>Multi-credentials address use cases where there might not be a single credential
that captures all of a client's authenticated attributes. For example, an
enterprise messaging client may wish to provide attributes both from its
messaging service, to prove that its user has a given handle in that service,
and from its corporate owner, to prove that its user is an employee of the
corporation. Multi-credentials can also be used in migration scenarios, where
some clients in a group might wish to rely on a newer type of credential, but
other clients haven't yet been upgraded.</t>
        <t>New credential types <tt>MultiCredential</tt> and <tt>WeakMultiCredential</tt> are defined as
shown below. These credential types are indicated with the values <tt>multi</tt> and
<tt>weak-multi</tt> (see <xref target="iana-creds"/>).</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {
  CipherSuite cipher_suite;
  Credential credential;
  SignaturePublicKey credential_key;

  /* SignWithLabel(., "CredentialBindingTBS", CredentialBindingTBS) */
  opaque signature<V>;
} CredentialBinding;

struct {
  CredentialBinding bindings<V>;
} MultiCredential;

struct {
  CredentialBinding bindings<V>;
} WeakMultiCredential;
]]></sourcecode>
        <t>The two types of credentials are processed in exactly the same way. The only
difference is in how they are treated when evaluating support by other clients,
as discussed below.</t>
        <section anchor="credential-bindings">
          <name>Credential Bindings</name>
          <t>A multi-credential consists of a collection of "credential bindings". Each
credential binding is a signed statement by the holder of the credential that
the signature key in the LeafNode belongs to the holder of that credential.
Specifically, the signature is computed using the MLS <tt>SignWithLabel</tt> function,
with label <tt>"CredentialBindingTBS"</tt> and with a content that covers the contents
of the CredentialBinding, plus the <tt>signature_key</tt> field from the LeafNode in
which this credential will be embedded.</t>
          <sourcecode type="tls-presentation"><![CDATA[
struct {
  CipherSuite cipher_suite;
  Credential credential;
  SignaturePublicKey credential_key;
  SignaturePublicKey signature_key;
} CredentialBindingTBS;
]]></sourcecode>
          <t>The <tt>cipher_suite</tt> for a credential is NOT <bcp14>REQUIRED</bcp14> to match the cipher suite
for the MLS group in which it is used, but <bcp14>MUST</bcp14> meet the support requirements
with regard to support by group members discussed below.</t>
        </section>
        <section anchor="verifying-a-multi-credential">
          <name>Verifying a Multi-Credential</name>
          <t>A credential binding is supported by a client if the client supports the
credential type and cipher suite of the binding. A credential binding is valid
in the context of a given LeafNode if all of the following are true:</t>
          <ul spacing="normal">
            <li>
              <t>The <tt>credential</tt> is valid according to the MLS Authentication Service.</t>
            </li>
            <li>
              <t>The <tt>credential_key</tt> corresponds to the specified <tt>credential</tt>, in the same
way that the <tt>signature_key</tt> would have to correspond to the credential if
the credential were presented in a LeafNode.</t>
            </li>
            <li>
              <t>The <tt>signature</tt> field is valid with respect to the <tt>signature_key</tt> value in
the leaf node.</t>
            </li>
          </ul>
          <t>A client that receives a credential of type <tt>multi</tt> in a LeafNode <bcp14>MUST</bcp14> verify
that all of the following are true:</t>
          <ul spacing="normal">
            <li>
              <t>All members of the group support credential type <tt>multi</tt>.</t>
            </li>
            <li>
              <t>For each credential binding in the multi-credential:  </t>
              <ul spacing="normal">
                <li>
                  <t>Every member of the group supports the cipher suite and credential type
values for the binding.</t>
                </li>
                <li>
                  <t>The binding is valid in the context of the LeafNode.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>A client that receives a credential of type <tt>weak-multi</tt> in a LeafNode <bcp14>MUST</bcp14>
verify that all of the following are true:</t>
          <ul spacing="normal">
            <li>
              <t>All members of the group support credential type <tt>weak-multi</tt>.</t>
            </li>
            <li>
              <t>Each member of the group supports at least one binding in the
multi-credential. (Different members may support different subsets.)</t>
            </li>
            <li>
              <t>Every binding that this client supports is valid in the context of the
LeafNode.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests the addition of various new values under the heading of
"Messaging Layer Security". Each registration is organized under the relevant
registry Type.</t>
      <t>This document also requests the creation of a new "MLS Component Types"
registry as described in <xref target="iana-components"/>.</t>
      <t>RFC EDITOR: Please replace XXXX throughout with the RFC number assigned to this
document</t>
      <section anchor="mls-extension-types">
        <name>MLS Extension Types</name>
        <section anchor="appdatadictionary-mls-extension">
          <name>app_data_dictionary MLS Extension</name>
          <t>The <tt>app_data_dictionary</tt> MLS Extension Type is used inside KeyPackage,
LeafNode, GroupContext, or GroupInfo objects. It contains a sorted list of
application component data objects (at most one per component).</t>
          <ul spacing="normal">
            <li>
              <t>Value: 0x0006 (suggested)</t>
            </li>
            <li>
              <t>Name: app_data_dictionary</t>
            </li>
            <li>
              <t>Message(s): KP: This extension may appear in KeyPackage objects
            LN: This extension may appear in LeafNode objects
            GC: This extension may appear in GroupContext objects
            GI: This extension may appear in GroupInfo objects</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="supportedwireformats-mls-extension">
          <name>supported_wire_formats MLS Extension</name>
          <t>The <tt>supported_wire_formats</tt> MLS Extension Type is used inside LeafNode objects.
It contains a list of non-default Wire Formats supported by the client node.</t>
          <ul spacing="normal">
            <li>
              <t>Value: 0x0007 (suggested)</t>
            </li>
            <li>
              <t>Name: supported_wire_formats</t>
            </li>
            <li>
              <t>Message(s): LN: This extension may appear in LeafNode objects</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="requiredwireformats-mls-extension">
          <name>required_wire_formats MLS Extension</name>
          <t>The <tt>required_wire_formats</tt> MLS Extension Type is used inside GroupContext
objects. It contains a list of non-default Wire Formats that are mandatory for
all MLS members of the group to support.</t>
          <ul spacing="normal">
            <li>
              <t>Value: 0x0008 (suggested)</t>
            </li>
            <li>
              <t>Name: required_wire_formats</t>
            </li>
            <li>
              <t>Message(s): GC: This extension may appear in GroupContext objects</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="mls-proposal-types">
        <name>MLS Proposal Types</name>
        <section anchor="appdataupdate-proposal">
          <name>AppDataUpdate Proposal</name>
          <t>The <tt>app_data_update</tt> MLS Proposal Type is used to efficiently update
application component data stored in the <tt>app_data_dictionary</tt> GroupContext
extension.</t>
          <ul spacing="normal">
            <li>
              <t>Value: 0x0008 (suggested)</t>
            </li>
            <li>
              <t>Name: app_data_update</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>External: Y</t>
            </li>
            <li>
              <t>Path Required: N</t>
            </li>
          </ul>
        </section>
        <section anchor="appephemeral-proposal">
          <name>AppEphemeral Proposal</name>
          <t>The <tt>app_ephemeral</tt> MLS Proposal Type is used to send opaque ephemeral
 application data that needs to be synchronized with a specific MLS epoch.</t>
          <ul spacing="normal">
            <li>
              <t>Value: 0x0009 (suggested)</t>
            </li>
            <li>
              <t>Name: app_ephemeral</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>External: Y</t>
            </li>
            <li>
              <t>Path Required: N</t>
            </li>
          </ul>
        </section>
        <section anchor="selfremove-proposal-1">
          <name>SelfRemove Proposal</name>
          <t>The <tt>self_remove</tt> MLS Proposal Type is used for a member to remove itself from a
group more efficiently than using a <tt>remove</tt> proposal type, as the <tt>self_remove</tt>
type is permitted in external Commits.</t>
          <ul spacing="normal">
            <li>
              <t>Value: 0x000a (suggested)</t>
            </li>
            <li>
              <t>Name: self_remove</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>External: N</t>
            </li>
            <li>
              <t>Path Required: Y</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="iana-creds">
        <name>MLS Credential Types</name>
        <section anchor="multi-credential">
          <name>Multi-Credential</name>
          <ul spacing="normal">
            <li>
              <t>Value: 0x0003 (suggested)</t>
            </li>
            <li>
              <t>Name: multi</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="weak-multi-credential">
          <name>Weak Multi-Credential</name>
          <ul spacing="normal">
            <li>
              <t>Value: 0x0004 (suggested)</t>
            </li>
            <li>
              <t>Name: weak-multi</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="mls-signature-labels">
        <name>MLS Signature Labels</name>
        <section anchor="credentialbindingtbs">
          <name>CredentialBindingTBS</name>
          <ul spacing="normal">
            <li>
              <t>Label: "CredentialBindingTBS"</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="iana-components">
        <name>MLS Component Types</name>
        <t>This document requests the creation of a new IANA "MLS Component Types" registry
under the "Messaging Layer Security" group registry heading. Assignments to this
registry in the range 0x0000 to 0x7FFF are via Specification Required
policy <xref target="RFC8126"/> using the MLS Designated Experts. Assignments in the range
0x8000 to 0xFFFF are for private use.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>
            <t>Value: The numeric value of the component ID</t>
          </li>
          <li>
            <t>Name: The name of the component</t>
          </li>
          <li>
            <t>Where: The object(s) in which the component may appear,
       drawn from the following list:
            </t>
            <ul spacing="normal">
              <li>
                <t>AD: SafeAAD objects</t>
              </li>
              <li>
                <t>AE: AppEphemeral proposals</t>
              </li>
              <li>
                <t>ES: Exporter Secret labels</t>
              </li>
              <li>
                <t>GC: GroupContext objects</t>
              </li>
              <li>
                <t>GI: GroupInfo objects</t>
              </li>
              <li>
                <t>HP: HPKE key labels</t>
              </li>
              <li>
                <t>KP: KeyPackage objects</t>
              </li>
              <li>
                <t>LN: LeafNode objects</t>
              </li>
              <li>
                <t>PS: PSK labels</t>
              </li>
              <li>
                <t>SK: Signature Key labels</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Recommended: Same as in <xref section="17.1" sectionFormat="of" target="RFC9420"/></t>
          </li>
          <li>
            <t>Reference: The document where this component is defined</t>
          </li>
        </ul>
        <t>The restrictions noted in the "Where" column are to be enforced by the
application. MLS implementations <bcp14>MUST NOT</bcp14> impose restrictions on where component
IDs are used in which parts of MLS, unless specifically directed to by the
application.</t>
        <t>Initial Contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Where</th>
              <th align="left">R</th>
              <th align="left">Ref</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">RESERVED</td>
              <td align="left">N/A</td>
              <td align="left">-</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">app_components</td>
              <td align="left">LN,GC</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">safe_aad</td>
              <td align="left">LN,GC</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">content_media_types</td>
              <td align="left">LN,GC</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0004</td>
              <td align="left">last_resort_key_package</td>
              <td align="left">KP</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0005</td>
              <td align="left">app_ack</td>
              <td align="left">AE</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x0A0A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x1A1A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x2A2A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x3A3A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x4A4A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x5A5A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x6A6A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x7A7A</td>
              <td align="left">GREASE</td>
              <td align="left">Note1</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
            <tr>
              <td align="left">0x8000 - 0xFFFF</td>
              <td align="left">Reserved for Private Use</td>
              <td align="left">N/A</td>
              <td align="left">N</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
        <ul empty="true">
          <li>
            <t>Note1: GREASE values for components <bcp14>MAY</bcp14> be present in GI, KP, and LN
objects.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <section anchor="safe-application-interface">
        <name>Safe Application Interface</name>
        <t>The Safe Application Interface provides the following security guarantee: If an
application uses MLS with application components, the security guarantees of the
base MLS protocol and the security guarantees of each application component
analyzed in isolation, still hold for the composed application of the MLS
protocol. In other words, the Safe Application Interface protects applications
from careless component developers. It is not possible that a combination of
components (the developers of which did not know about each other) impedes the
security of the base MLS protocol or any other component. No further analysis of
the combination is necessary. This also means that any security vulnerabilities
introduced by one component do not spread to other components or the base MLS
implementation.</t>
      </section>
      <section anchor="appack-1">
        <name>AppAck</name>
        <t>When AppAck objects are received, they allow clients to detect if the Delivery
Service (or an intermediary) dropped application messages, since gaps in the
<tt>generation</tt> sequence indicate dropped messages. When AppAck messages are
accepted by the Delivery Service, but not received by some members, the members
who have missed the corresponding AppEphemeral proposals will not be able to
send or receive a commit message, because the proposal is included in the
transcript hash. Likewise, if AppAck objects and/or commits are sent
periodically by every member, other members will be able to detect a member that
is no longer sending on that schedule or whose handshake messages are being
suppressed by the DS.</t>
        <ul empty="true">
          <li>
            <t>Note: External Commits do not typically contain pending proposals (including
AppEphemeral proposals). Clients that send an AppAck component in an
AppEphemeral proposal will need to send a new AppAck component in an
AppEphemeral proposal (in the new epoch) after receiving an external Commit
until it has been incorporated into an accepted Commit.</t>
          </li>
        </ul>
        <t>The schedule on which AppAck objects are sent in AppEphemeral proposals is up to
the application, and determines which cases of loss/suppression are detected.
For example:</t>
        <ul spacing="normal">
          <li>
            <t>The application might have the committer include an AppAck whenever a Commit
is sent, so that other members could know when one of their messages did not
reach the committer.</t>
          </li>
          <li>
            <t>The application could have a client send an AppAck whenever an application
message is sent, covering all messages received since its last AppAck. This
would provide a complete view of any losses experienced by active members.</t>
          </li>
          <li>
            <t>The application could simply have clients send AppAck proposals on a timer, so
that all participants' state would be known.</t>
          </li>
        </ul>
        <t>An application using AppAck to guard against loss/suppression of application
messages also needs to ensure that AppAck messages and the Commits that
reference them are not dropped. One way to do this is to always encrypt Proposal
and Commit messages, to make it more difficult for the Delivery Service to
recognize which messages contain AppAcks. The application can also have clients
enforce an AppAck schedule, reporting loss if an AppAck is not received at the
expected time.</t>
      </section>
      <section anchor="content-advertisement-1">
        <name>Content Advertisement</name>
        <t>Use of the <tt>content_media_types</tt> component could leak some private information
visible in KeyPackages and inside an MLS group. This could be used to infer a
specific implementation, platform, or even version. Clients should carefully
consider the privacy implications in their environment of making a list of
acceptable media types available.</t>
        <t>Implementations need to be prepared to parse media types containing long
parameter lists, potentially containing characters which would be escaped or
quoted in <xref target="RFC5322"/>.</t>
      </section>
      <section anchor="selfremove">
        <name>SelfRemove</name>
        <t>An external recipient of a SelfRemove Proposal cannot verify the
<tt>membership_tag</tt>. However, an external joiner also has no way to completely
validate a GroupInfo object that it receives. An insider can prevent an External
Join by providing either an invalid GroupInfo object or an invalid SelfRemove
Proposal. The security properties of external joins do not change with the
addition of this proposal type.</t>
      </section>
      <section anchor="multi-credentials-1">
        <name>Multi-Credentials</name>
        <t>Using a Weak Multi Credential reduces the overall credential security to the
security of the least secure of its credential bindings.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. 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="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </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="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC5322">
          <front>
            <title>Internet Message Format</title>
            <author fullname="P. Resnick" initials="P." role="editor" surname="Resnick"/>
            <date month="October" year="2008"/>
            <abstract>
              <t>This document specifies the Internet Message Format (IMF), a syntax for text messages that are sent between computer users, within the framework of "electronic mail" messages. This specification is a revision of Request For Comments (RFC) 2822, which itself superseded Request For Comments (RFC) 822, "Standard for the Format of ARPA Internet Text Messages", updating it to reflect current practice and incorporating incremental changes that were specified in other RFCs. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5322"/>
          <seriesInfo name="DOI" value="10.17487/RFC5322"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-mls-architecture">
          <front>
            <title>The Messaging Layer Security (MLS) Architecture</title>
            <author fullname="Benjamin Beurdouche" initials="B." surname="Beurdouche">
              <organization>Inria &amp; Mozilla</organization>
            </author>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Windy Hill Systems, LLC</organization>
            </author>
            <author fullname="Emad Omara" initials="E." surname="Omara">
         </author>
            <author fullname="Srinivas Inguva" initials="S." surname="Inguva">
         </author>
            <author fullname="Alan Duric" initials="A." surname="Duric">
              <organization>Wire</organization>
            </author>
            <date day="3" month="August" year="2024"/>
            <abstract>
              <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).

   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.

   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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-architecture-15"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC2045">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2045"/>
          <seriesInfo name="DOI" value="10.17487/RFC2045"/>
        </reference>
      </references>
    </references>
    <?line 1478?>

<section anchor="change-log">
      <name>Change Log</name>
      <t>RFC EDITOR PLEASE DELETE THIS SECTION.</t>
      <t>draft-11</t>
      <ul spacing="normal">
        <li>
          <t>enforce the required components in the GroupContext in the same way as the
<tt>required_capabilities</tt> extension</t>
        </li>
        <li>
          <t>support for the <tt>app_components</tt> and <tt>safe_aad</tt> components is implied by
support for the <tt>app_data_dictionary</tt> extension, and they are no longer
listed in either component</t>
        </li>
        <li>
          <t>the <tt>app_data_dictionary</tt> extension in a GroupContext or LeafNode can only
contain entries for components listed in its <tt>app_components</tt> component,
including GREASE entries</t>
        </li>
        <li>
          <t>a GroupContextExtensions proposal can no longer change the
<tt>app_data_dictionary</tt> extension, whether or not AppDataUpdate is a required
proposal type</t>
        </li>
        <li>
          <t>define how AppDataUpdate proposals update the <tt>app_components</tt>, <tt>safe_aad</tt>,
and <tt>content_media_types</tt> components</t>
        </li>
        <li>
          <t>clarify that proposal order does not matter for GroupContextExtensions and
AppDataUpdate proposals in the same Commit</t>
        </li>
        <li>
          <t>restrict the characters allowed in a media type <tt>parameter_value</tt></t>
        </li>
      </ul>
      <t>draft-10</t>
      <ul spacing="normal">
        <li>
          <t>remove AppAck ProposalType as it is now a Component conveyed in AppEphemeral
Proposals</t>
        </li>
        <li>
          <t>be more pedantic when discussing that a proposal in required_capabilities
implies all clients support it but not vice versa.</t>
        </li>
        <li>
          <t>correct location of GREASE values for advertising safe_add and
app_components in LeafNodes; only allow GREASE in GI, LN, and KP.</t>
        </li>
        <li>
          <t>the app_components component is now mandatory to implement if
app_data_dictionary is supported.</t>
        </li>
        <li>
          <t>the safe_add component is now mandatory to understand if
app_data_dictionary is supported.</t>
        </li>
        <li>
          <t>rename MediaType.media_type to MediaType.type, and
MediaTypeList.media_types to MediaTypeList.media_type_list</t>
        </li>
        <li>
          <t>clarify the behavior of an "empty" media type in application framing: if
media_type.type is zero length.</t>
        </li>
        <li>
          <t>unsafe AAD is no longer allowed when the safe_aad component is present in
the GroupContext</t>
        </li>
        <li>
          <t>rename "Safe Application API" to "Safe Application Interface"</t>
        </li>
        <li>
          <t>fix IANA registry names ("MLS Component Types", "MLS Extension Types") and
restore missing registry section headers</t>
        </li>
        <li>
          <t>correct stale field and struct names in prose (component_data,
app_data_dictionary, authenticated_data, required_wire_formats)</t>
        </li>
        <li>
          <t>reclassify last-resort KeyPackages as a KeyPackage component and fix various
inconsistencies and typos</t>
        </li>
      </ul>
      <t>draft-09</t>
      <ul spacing="normal">
        <li>
          <t>rename the component base label from "Application" to "MLS Component"</t>
        </li>
      </ul>
      <t>draft-08</t>
      <ul spacing="normal">
        <li>
          <t>clarify that SelfRemove is a proposal type, not an extension</t>
        </li>
      </ul>
      <t>draft-07</t>
      <ul spacing="normal">
        <li>
          <t>add AppAck to IANA considerations</t>
        </li>
        <li>
          <t>adapt Safe AAD scope</t>
        </li>
        <li>
          <t>remove targeted messages altogether with intention to publish it as a
separate document</t>
        </li>
        <li>
          <t>assign self_remove proposal to a non duplicate number (0x000a)</t>
        </li>
        <li>
          <t>refactor TargetedMessage to no longer use structs removed from when it
was a "safe extension"</t>
        </li>
        <li>
          <t>remove the no-longer needed targeted_messages_capability (now signaled using
support_wire_formats and required_wire_formats)</t>
        </li>
        <li>
          <t>add TargetedMessageTBS and CredentialBundleTBS to MLS Signature Labels IANA
registry</t>
        </li>
        <li>
          <t>add GREASE values for components</t>
        </li>
        <li>
          <t>fix safe exporter definition</t>
        </li>
        <li>
          <t>resolve TODOs from -06</t>
        </li>
        <li>
          <t>fix numerous typos</t>
        </li>
      </ul>
      <t>draft-06</t>
      <ul spacing="normal">
        <li>
          <t>Integrate notion of Application API from draft-barnes-mls-appsync</t>
        </li>
      </ul>
      <t>draft-05</t>
      <ul spacing="normal">
        <li>
          <t>Include definition of ExtensionState extension</t>
        </li>
        <li>
          <t>Add safe use of AAD to Safe Extensions framework</t>
        </li>
        <li>
          <t>Clarify how capabilities negotiation works in Safe Extensions framework</t>
        </li>
      </ul>
      <t>draft-04</t>
      <ul spacing="normal">
        <li>
          <t>No changes (prevent expiration)</t>
        </li>
      </ul>
      <t>draft-03</t>
      <ul spacing="normal">
        <li>
          <t>Add Last Resort KeyPackage extension</t>
        </li>
        <li>
          <t>Add Safe Extensions framework</t>
        </li>
        <li>
          <t>Add SelfRemove Proposal</t>
        </li>
      </ul>
      <t>draft-02</t>
      <ul spacing="normal">
        <li>
          <t>No changes (prevent expiration)</t>
        </li>
      </ul>
      <t>draft-01</t>
      <ul spacing="normal">
        <li>
          <t>Add Content Advertisement extensions</t>
        </li>
      </ul>
      <t>draft-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial adoption of draft-robert-mls-protocol-00 as a WG item.</t>
        </li>
        <li>
          <t>Add Targeted Messages extension (*)</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="J." surname="Alwen" fullname="Joel Alwen">
        <organization>Amazon</organization>
        <address>
          <email>alwenjo@amazon.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>Rohan Mahy Consulting Services</organization>
        <address>
          <email>rohan.ietf@gmail.com</email>
        </address>
      </contact>
      <contact initials="M." surname="Mularczyk" fullname="Marta Mularczyk">
        <organization>Amazon</organization>
        <address>
          <email>mulmarta@amazon.com</email>
        </address>
      </contact>
      <contact initials="R." surname="Barnes" fullname="Richard Barnes">
        <organization>Cisco Systems</organization>
        <address>
          <email>rlb@ipv.sx</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81963LjRpbm/3yKHDliLXlI1sXXlrvdLZdUbY3rNiXZ3o6Z
jSJIQiJaJMAGQKlkT03sa+y/fZZ9lH2SPdfMkwAoye2ZmHVEt4okkNeT5/qd
k+Px2LVFu8oP/fky9y/zpskui/LSv8hu89qf5fNtXbS3fv/li7MDf/K+zcum
qMrGZbNZnV8fevjeLap5ma2hiUWdXbTjIm8vxutVM87D4+MnT1yzna2LBj+2
txt4+PTk/LmbZ21+WdW3h75pF86V2/Usrw/dAr4+dHN4ExrYNoe+rbe5g+4+
dVmdZ4d+T0e2526q+uqyrrYb+HbX+PfcVX4LDy4OnR/7dXhqRU818hT+lpeL
cVuN4Q/8c17fbloYMP6QbTarAoYLH+HfBT2r8zMfZsUKW7rOyy3MwPv7R+Y9
r8feTzARfODP+Ap+v86KFXwPS/knXNNJVV/i11k9X8LXy7bdNIePHuFT+FVx
nU/0sUf4xaNZXd00+SN4/xG+d1m0y+2MG7y5fJTuED6wglVvWts0Pjjh9yZF
1Xnl0c7tnizb9WrPuWzbLqua1twXJWzj24l/W8EOt9Cb90w0b7PNMstX9geY
QVYWP9NiH/o3yyovi/f+7X87pl9zXhfs9081v1zTu5N5tXZINW1dzLat9My9
/FMFXRytbvLScQeH3h+ts58r+ixN+gwf+Gv1p4x+ofZCC99XZZ0t4M8S1vUq
ttIZnjZ1RY9PrvjxPwFFZ82yLsp8sshjo2+rZVb6l9nyNjYYv/PPYDG3qxap
4iyvr4t53tg+anySNv1Pl/hVOuCXWd1m/uUWqePn26u75r3ertb49ODE3xbz
ZVYv/LdZXXL/1MyzoplX/uy2afO1HVW9mv2p2FxPmvdwnqt6Dbt4DUfBFeWF
+TQew5GaNW2dzVvnHsB7NnXVVvNq5YvGw/JkzW05X9ZVWW0bPmREbXnZ4iHN
Fx4OPJxJGHl5mYeXJ8iv8NN1scihHc8Mx1cXfp5tMjq8BfzQVs6c92YE3fmb
fLXCv01+ndfZKp5+v6mKsm2Awtu8LuGXtvIwEtPp+bJokEtu1zA+2z1yuGpV
LGjElsMcvTkd+cst/FLOcw8L55fVDbbqtNWPm/4ImmW1XS38LPfbJl/AqIGL
Zf4iv8GO5nXe5vBOtt6soHOY8qxql3Bc6jjU2GRDL0Mz9CROpzO8Ce/hulgs
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
UEcx/V3r7qLAMFstM26wTta6c3AtrJpE8MokK++Z53S59jjf0fV/0is+KOBF
Oj95jyXZclmtTHVre0awIg6tVqiEDvTWq2uEc4Pu1XS0zSEPD+1N3JnR0yQk
HlqWC8q2bRL3ovywhLJBEm1LzkFkQbXCb/10mNqZX4QkX06Dk0L413o5mcK4
tcpGr6WR36y2IirDiPHsJVfCJYtSlC6GTu2ial4QGv2Lhd7o/V/CNwYfSuY3
ePhhXS0gxY5oqrWA4qhg9mgBvj355x9O354cs87TSlEpa3o59f1E/EaIPxch
j5zTJ8nLs85z1ij1DIrZTHhYpg2wXtA7YKw+oPn0rp/hM/ojudlY+e2qO3TT
yeAZS6FVAfV1YYGr9lpU1xFIXFrVrIkeSumD/FyDPZNHSXNr5rHskWohkS4v
VJkiQE8oT8E8bpvHgjJzI1rDndsI26slfyRslrkeg8DHrOJMBlriMxMLVgWm
Ya+Ii/2GexXpchZPxeOCHdE9iSYFhPLhtI+A6TQ0qVVu7LnM61CzQcPXSems
86RPU9mUV0boDScS73noDJGTMIpSeg/+TXt5Ds3PhDzMEHHTkEpUL0nGKJ5r
oltzu9Wd+3zUTXJU35ueli59Ss+0Hnrf6yBFSiphR6TRpZ2fYCpPvEB4qN+m
xxz4ZKSjoXBwzMlPDgp3dB6/iRvVPySWcf/arbBqYX8/nI3k/Gfsh+meNoUK
Hty5sklmSbpfsGbdHZv4/WPRi+ItzWg16YgW4Ve+kqBBuLFusTYvZ7Zoekzw
7l2BAZl9cR9xdsqz5DqxLgQHhUDeCAmpqYztXaOVs21isauGSyuz0pJnkjzn
9l4GO+9Fdgu/n+XzLRbgF/1KrxEIxQKq+jIri59RbwntaeJnzPVGn/FksH53
MuJw+zYxbxwr3WUQqmzJXQax3T4IXe5cUyg81VPGLK6T49Pz128P/Rvc/1yv
j/f/Hf7zcrs4xg2DFYTvlFsipayJaCnCgukM2B/Qv2yBpegAgDd92FRw6wF9
+62GWjKSDWHdJTGVPYUDA1/oxjIYrmFqk8vlL1oxfNhrQ0hnrdCxj/W5KzlE
GEEKzx3QMfwR6evQP37/+PHjL8Bc3F5eUvbrAfz2CmTZ4dDSwG8S3t9vDg79
928OOdk7vfoz1q03HiwZl0uhMy9e3dNC4FXD7//52T3vp0UWh9s4fUgbdndg
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
7DcKKLH+AAA=

-->

</rfc>
