<?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.31 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-mls-private-external-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="MLS Private External Messages">Private External Message extensions for Messaging Layer Security (MLS)</title>
    <seriesInfo name="Internet-Draft" value="draft-mahy-mls-private-external-01"/>
    <author fullname="Rohan Mahy">
      <organization/>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Mojtaba Chenani">
      <organization>XMTP Labs</organization>
      <address>
        <email>chenani@outlook.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Security</area>
    <workgroup>Messaging Layer Security</workgroup>
    <keyword>private external proposal</keyword>
    <keyword>private external commit</keyword>
    <keyword>private external join</keyword>
    <keyword>private GroupContext</keyword>
    <keyword>private ratchet tree</keyword>
    <keyword>external proposal privacy</keyword>
    <keyword>external commit privacy</keyword>
    <keyword>external join privacy</keyword>
    <keyword>GroupContext privacy</keyword>
    <keyword>ratchet tree privacy</keyword>
    <abstract>
      <?line 46?>

<t>MLS groups that use private handshakes lose member privacy when sending external proposals. This document addresses this shortcoming by encrypting external proposals using an HPKE public key derived from the epoch secret. It also provides a mechanism to share this key and protect it from tampering by a malicious intermediary.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rohanmahy.github.io/mls-private-external/draft-mahy-mls-private-external.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mahy-mls-private-external/"/>.
      </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/rohanmahy/mls-private-external"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The MLS protocol <xref target="RFC9420"/> was designed to support both a model where the Distribution Service (DS) sees the contents of MLS handshake messages and often assumes a policy enforcement role, and a model where the DS is merely responsible for forwarding handshake messages and possibly enforcing ordering of messages.
In the first model clients send every handshake as a PublicMessage (or a SemiPrivateMessage <xref target="I-D.mahy-mls-semiprivatemessage"/>), whereas in the second model the clients send in-group handshakes as a PrivateMessage.
As of this writing there are non-trivial commercial deployments using both the PublicMessage model (ex: Cisco, Amazon, Ring Central, Wire) and the PrivateMessage model (ex: XMTP, Germ).</t>
      <t>In the PrivateMessage model, group members enjoy substantially more privacy from the DS.
In the PublicMessage model, the DS usually can provide (authorized) non-members with enough information that they can join a group via an external commit.
Even in the PublicMessage model, some (usually large) groups use external proposals to join.
In the PrivateMessage model, (authorized) non-members can also join using external proposals (or rarely using external commits if the GroupInfo is shared by an existing member), however the joiner is currently forced to send the proposal (or commit) as a PublicMessage and therefore reveal potentially private information such as their credential and capabilities to the DS.</t>
      <t>This extension allows groups using PrivateMessage to maintain the privacy of external handshake messages by encrypting them to a public key derived from the group's epoch secret.
It also provides a way to convey that public key safely to prevent active attacks.</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?>

</section>
    <section anchor="mechanism">
      <name>Mechanism</name>
      <section anchor="external-encryption-key-derivation">
        <name>External Encryption Key Derivation</name>
        <t>Groups using this extension derive a dedicated HPKE <xref target="RFC9180"/> key pair from the next epoch secret for encrypting external messages.
When creating a provisional commit, the committer first computes the epoch secret that will result from processing the provisional commit, then derives the external encryption key from that epoch secret.</t>
        <t>This ensures that removed members cannot decrypt external messages, as they do not have access to the next epoch secret.</t>
        <section anchor="computing-the-next-epoch-secret">
          <name>Computing the Next Epoch Secret</name>
          <t>When a member creates a provisional commit, they compute the next epoch secret before sending the commit, following the key schedule defined in <xref section="8" sectionFormat="comma" target="RFC9420"/>.</t>
          <t>The next epoch secret is derived through the standard MLS key schedule: the <tt>commit_secret</tt> (from the commit's UpdatePath) and the current epoch's <tt>init_secret</tt> produce the <tt>joiner_secret</tt>, which is combined with any PSK secrets to produce the <tt>epoch_secret</tt> for the new epoch. This document refers to this value as <tt>epoch_secret_next</tt>.</t>
        </section>
        <section anchor="deriving-the-external-encryption-key">
          <name>Deriving the External Encryption Key</name>
          <t>The external encryption key is then derived from the next epoch secret:</t>
          <artwork><![CDATA[
external_encryption_secret =
    ExpandWithLabel(epoch_secret_next, "external encryption", "", KDF.Nh)

(external_encryption_private_key, external_encryption_public_key) =
    KEM.DeriveKeyPair(external_encryption_secret)
]]></artwork>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>epoch_secret_next</tt> is the epoch secret computed for the next epoch</t>
            </li>
            <li>
              <t><tt>ExpandWithLabel</tt> is defined in <xref section="8" sectionFormat="of" target="RFC9420"/></t>
            </li>
            <li>
              <t><tt>KEM.DeriveKeyPair</tt> is defined in <xref section="4" sectionFormat="of" target="RFC9180"/></t>
            </li>
            <li>
              <t><tt>KDF.Nh</tt> is the size of an output from <tt>KDF.Extract</tt> for the cipher suite, as defined in <xref section="8" sectionFormat="of" target="RFC9420"/></t>
            </li>
          </ul>
          <t>The <tt>epoch</tt> field in <tt>ExternalEncryptionInfo</tt> <bcp14>MUST</bcp14> be set to <tt>current_epoch + 1</tt>.</t>
          <t>The public key is made available to external senders via the <tt>ExternalEncryptionInfo</tt> structure (<xref target="ext-info"/>). All group members in the new epoch can derive the same key pair from their shared next epoch secret.</t>
        </section>
      </section>
      <section anchor="ext-info">
        <name>Additional information shared in every commit</name>
        <t>Groups participating in this mechanism include a <tt>root_private_signature_key</tt> component (see <xref section="4.6" sectionFormat="of" target="I-D.ietf-mls-extensions"/>) in the GroupContext of type <tt>RootPrivateSignature</tt>, containing a unique random private signature key corresponding to the group's cipher suite.
Whenever a commit removes a member from a group, this component <bcp14>MUST</bcp14> be replaced with a new unique random private signature key.</t>
        <t>Members sending a commit need to calculate the future <tt>epoch_secret</tt>, <tt>external_encryption_secret</tt>, and <tt>external_encryption_public_key</tt> for the new epoch that would result if the commit is accepted.
The commit sender includes one additional Additional Authentication Data (AAD) component (see <xref section="4.9" sectionFormat="of" target="I-D.ietf-mls-extensions"/>) of type <tt>ExternalEncryptionInfo</tt> in every commit (including commits sent in a <tt>PrivateExternalMessage</tt>).
The <tt>ExternalEncryptionInfo</tt> includes the <tt>external_encryption_public_key</tt> for the future epoch.</t>
        <ul empty="true">
          <li>
            <t>Note: SafeSignWithLabel is not used, because there are two different component IDs represented.</t>
          </li>
        </ul>
        <sourcecode type="tls"><![CDATA[
struct {
    opaque root_private_signature_key<V>;
} RootPrivateSignature;

struct {
    ProtocolVersion version = mls10;
    opaque group_id<V>;
    uint64 epoch;
    CipherSuite ciphersuite;
    HPKEPublicKey external_encryption_public_key;
    SignaturePublicKey root_public_signature_key;
} ExternalEncryptionInfoTBS;

struct {
    CipherSuite ciphersuite;
    HPKEPublicKey external_encryption_public_key;
    SignaturePublicKey root_public_signature_key;
    /* SignWithLabel(root_private_signature_key, */
    /*    "ExternalEncryptionInfoTBS", ExternalEncryptionInfoTBS) */
    opaque external_encryption_signature<V>;
} ExternalEncryptionInfo;
]]></sourcecode>
        <t>The <tt>epoch</tt> field in <tt>ExternalEncryptionInfoTBS</tt> indicates the epoch for which the external encryption key is valid.
Since the key is derived from the next epoch secret, this field <bcp14>MUST</bcp14> be set to <tt>current_epoch + 1</tt>, where <tt>current_epoch</tt> is the epoch number at the time the provisional commit is created.
Once the commit is processed and the group advances to the new epoch, the <tt>epoch</tt> field will match the group's current epoch.</t>
      </section>
      <section anchor="sending-an-external-proposal-or-external-commit-to-the-group">
        <name>Sending an external proposal or external commit to the group</name>
        <t>A non-member client that wishes to send a message to the group first obtains the <tt>ExternalEncryptionInfo</tt> from the group's most recent commit. Before using the <tt>external_encryption_public_key</tt>, the external sender <bcp14>MUST</bcp14> verify the <tt>external_encryption_signature</tt> by computing <tt>VerifyWithLabel</tt> using the embedded <tt>root_public_signature_key</tt> and the label <tt>"ExternalEncryptionInfoTBS"</tt> over the reconstructed <tt>ExternalEncryptionInfoTBS</tt>. If verification fails, the <tt>ExternalEncryptionInfo</tt> <bcp14>MUST</bcp14> be rejected.</t>
        <t>The external sender then constructs a <tt>PublicMessage</tt> called <tt>external_message_plaintext</tt>. The <tt>sender_type</tt> in the inner <tt>PublicMessage</tt> <bcp14>MUST NOT</bcp14> be <tt>member</tt>, since this mechanism is for external senders only.</t>
        <t>The <tt>PrivateExternalMessage</tt> wire format wraps that <tt>external_message_plaintext</tt> by encrypting it to the <tt>external_encryption_public_key</tt>.</t>
        <t>The <tt>PrivateExternalMessageContext</tt> is an empty struct, serialized to a zero-length byte string:</t>
        <sourcecode type="tls"><![CDATA[
struct {
} PrivateExternalMessageContext;

struct {
    opaque group_id<V>;
    uint64 epoch;
    ContentType content_type;
    opaque authenticated_data<V>;
    HPKECiphertext encrypted_public_message;
} PrivateExternalMessage;
]]></sourcecode>
        <t>The encryption and message construction are as follows:</t>
        <artwork><![CDATA[
encrypted_public_message = EncryptWithLabel(external_encryption_public_key,
    "PrivateExternalMessageContent", PrivateExternalMessageContext,
    external_message_plaintext)

PrivateExternalMessage.authenticated_data =
   external_message_plaintext.content.authenticated_data
]]></artwork>
        <t>The <tt>PrivateExternalMessage</tt> is sent as a new variant of <tt>MLSMessage</tt>:</t>
        <sourcecode type="tls"><![CDATA[
struct {
    ProtocolVersion version = mls10;
    WireFormat wire_format;
    select (MLSMessage.wire_format) {
        case mls_public_message:
            PublicMessage public_message;
        case mls_private_message:
            PrivateMessage private_message;
        case mls_private_external_message:
            PrivateExternalMessage private_external_message;
    };
} MLSMessage;
]]></sourcecode>
      </section>
      <section anchor="decryption-and-verification-by-members">
        <name>Decryption and verification by members</name>
        <t>Members receiving a <tt>PrivateExternalMessage</tt> <bcp14>MUST</bcp14> verify that the <tt>group_id</tt> matches a known group and that the <tt>epoch</tt> field matches their current epoch. If either check fails, the message <bcp14>MUST</bcp14> be rejected.</t>
        <t>To decrypt the message, members derive the external encryption key pair from their current epoch secret. Since the <tt>ExternalEncryptionInfo</tt> was created using the next epoch secret (which is now the members' current epoch secret), the derivation will produce the correct key:</t>
        <artwork><![CDATA[
external_encryption_secret =
    ExpandWithLabel(epoch_secret, "external encryption", "", KDF.Nh)

(external_encryption_private_key, external_encryption_public_key) =
    KEM.DeriveKeyPair(external_encryption_secret)

external_message_plaintext = DecryptWithLabel(
    external_encryption_private_key,
    "PrivateExternalMessageContent", PrivateExternalMessageContext,
    encrypted_public_message.kem_output,
    encrypted_public_message.ciphertext)
]]></artwork>
        <t>If decryption fails, the message <bcp14>MUST</bcp14> be rejected.</t>
        <t>Members then verify that the following values in the <tt>PrivateExternalMessage</tt> match their corresponding field in the <tt>external_message_plaintext.content</tt>:</t>
        <ul spacing="normal">
          <li>
            <t><tt>group_id</tt>,</t>
          </li>
          <li>
            <t><tt>epoch</tt>,</t>
          </li>
          <li>
            <t><tt>content_type</tt>, and</t>
          </li>
          <li>
            <t><tt>authenticated_data</tt></t>
          </li>
        </ul>
        <t>If any of these checks fail, the message <bcp14>MUST</bcp14> be rejected.</t>
        <t>Members <bcp14>MUST</bcp14> also verify that the <tt>sender_type</tt> in the decrypted <tt>external_message_plaintext</tt> is not <tt>member</tt>. Messages from group members <bcp14>MUST NOT</bcp14> be wrapped in a <tt>PrivateExternalMessage</tt>.</t>
        <t>Finally, they process the <tt>external_message_plaintext</tt> as if it were a regular <tt>PublicMessage</tt>.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>An established MLS group which only exchanges handshakes using MLS PrivateMessage enjoys a high level of privacy for its members.
The GroupContext and the ratchet tree, including the contents of the credentials in MLS leaf nodes is not visible to outsiders nor to the DS.
However, during the process of joining, private information is often leaked to the DS.
This mechanism focuses on improving the privacy for the external joining mechanisms.</t>
      <t>There are three mechanisms for potential new members to join an MLS group: an existing member gets a KeyPackage (KP) for the new member and commits an Add proposal with the KP; the joiner sends an external proposal asking to join the group that needs to be committed by an existing member; or the joiner fetches the GroupInfo of the group (usually from the DS) and sends an external commit.
In the base MLS protocol <xref target="RFC9420"/>, an external join or external commit needs to be sent as an MLS PublicMessage, which greatly reduces the privacy of the group.</t>
      <section anchor="security-of-external-proposals">
        <name>Security of External Proposals</name>
        <t>External Add proposals in <xref target="RFC9420"/> are sent using an MLS PublicMessage, which is integrity protected but reveals the public signature key, MLS capabilities, MLS credential to the DS, and KeyPackageRef (used to correlate Welcome messages).
If a public key representing the entire target MLS group is available, the external proposer can encrypt this information to all group members without revealing it to the DS.
The external proposer needs a way to get this public key and not the key of an active attacker, and the DS and members need a reasonable authorization and rate limiting mechanisms to prevent from being overwhelmed by such encrypted requests.</t>
        <t>The <tt>ExternalEncryptionInfo</tt> defined in <xref target="ext-info"/> contains a per-group, per-epoch signature key shared by all members of the group.
The <tt>ExternalEncryptionInfo</tt> could be posted in transparency ledger, shared as gossip, or additionally signed by a specific member.
The specific mechanism can be tailored to a specific application as needed.</t>
        <t>Application protocols above the MLS layer would also need to provide authorization. For example, in the MIMI protocol <xref target="I-D.ietf-mimi-protocol"/> this could be a join code. Other techniques such as using single or limited use pseudonymous tokens, privacy pass <xref target="RFC9576"/>, or anonymous credit tokens <xref target="I-D.schlesinger-cfrg-act"/> are all reasonable options.
The privacy of some of these techniques could also be reinforced by using Oblivious HTTP <xref target="RFC9458"/>.</t>
      </section>
      <section anchor="use-of-next-epoch-secret">
        <name>Use of Next Epoch Secret</name>
        <t>This specification derives the external encryption key from the next epoch secret (the epoch that results from processing the commit) rather than the current epoch secret. This design choice is critical for maintaining post-compromise security.</t>
        <t>If the external encryption key were derived from the current epoch secret, removed members would be able to decrypt external messages sent after their removal, because they possess the current epoch secret. By deriving the key from the next epoch secret, removed members do not have access to the keying material and cannot decrypt external messages.</t>
        <t>This approach follows the same pattern as Welcome messages in <xref target="RFC9420"/>, which are encrypted using keys from the new epoch rather than the current epoch.</t>
      </section>
      <section anchor="security-of-external-commits">
        <name>Security of External Commits</name>
        <t>External commits in <xref target="RFC9420"/> are sent as PublicMessage and reveal the joiner's credential, public signature key, capabilities, and UpdatePath (including HPKE public keys for every node on the joiner's direct path). This allows the DS to learn the identity of the joiner and correlate it with other group memberships.</t>
        <t>When wrapped in a <tt>PrivateExternalMessage</tt>, the DS can only observe the <tt>group_id</tt>, <tt>epoch</tt>, <tt>content_type</tt>, and <tt>authenticated_data</tt> fields in the outer wrapper. The joiner's credential, signature key, capabilities, and UpdatePath are encrypted and visible only to group members.</t>
        <t>However, some metadata leakage remains:</t>
        <ul spacing="normal">
          <li>
            <t>The DS can observe that an external commit occurred (from the <tt>content_type</tt> field and the subsequent epoch change).</t>
          </li>
          <li>
            <t>The DS can observe the size of the encrypted message, which may reveal information about the joiner's credential size or the depth of the ratchet tree.</t>
          </li>
          <li>
            <t>The Welcome message sent back to the joiner is a separate message that the DS can observe and correlate with the external commit.</t>
          </li>
        </ul>
        <t>The <tt>ExternalEncryptionInfo</tt> signature prevents a malicious DS from substituting its own HPKE public key to perform an active attack. Without this signature, the DS could decrypt the external commit, inspect the joiner's credentials, then re-encrypt with the legitimate key and forward it, completely defeating the privacy goal.</t>
        <t>Note that the <tt>external_pub</tt> key (used for the ExternalInit proposal within the commit) and the <tt>external_encryption_public_key</tt> (used for the PrivateExternalMessage encryption) serve different purposes. The former is part of the MLS key schedule for deriving the <tt>init_secret</tt>; the latter protects the confidentiality of the external commit message itself. Both are derived from the epoch secret but from different labeled expansions.</t>
      </section>
      <section anchor="security-of-keypackages">
        <name>Security of KeyPackages</name>
        <t>In the classical usage of MLS, a member of a group fetches a KeyPackage, commits an Add proposal containing that KeyPackage, then sends a Welcome to the new member.
In order to forward a Welcome message to the correct recipient, the DS needs to be able to associate the <tt>KeyPackageRef</tt> with some resource that eventually delivers to the appropriate client.</t>
        <t>As long as KeyPackages are exchanged securely out-of-band, this extension extends the privacy of the MLS GroupContext and ratchet tree to external joiners.</t>
        <t>When the DS knows the relationship between a fetched KeyPackage and the requesting user or target group, the DS can then link an added member (via its <tt>KeyPackageRef</tt>) to the requesting user or target group.
An appropriate privacy-preserving mechanism (e.g., via Oblivious HTTP <xref target="RFC9458"/>) can associate a <tt>KeyPackageRef</tt> with the target member, without a correlation to the requesting user or target group.</t>
        <t>Applications <bcp14>SHOULD</bcp14> consider using such privacy-preserving mechanisms for KeyPackage retrieval when deploying this extension.</t>
      </section>
      <section anchor="security-of-welcomes">
        <name>Security of Welcomes</name>
        <t>Welcome messages in <xref target="RFC9420"/> are encrypted to the new member's KeyPackage and contain the <tt>GroupInfo</tt> and <tt>path_secret</tt> values needed to initialize the new member's state. The Welcome message itself does not reveal group contents to the DS. However, the DS can observe:</t>
        <ul spacing="normal">
          <li>
            <t>That a Welcome message was sent (confirming a successful join).</t>
          </li>
          <li>
            <t>The <tt>KeyPackageRef</tt> in the Welcome, which allows the DS to correlate the Welcome with a previously fetched KeyPackage and identify the new member.</t>
          </li>
        </ul>
        <t>This extension does not modify the Welcome message format. Applications concerned about Welcome correlation <bcp14>SHOULD</bcp14> consider additional measures such as using pseudonymous KeyPackage distribution or Oblivious HTTP <xref target="RFC9458"/> for Welcome delivery.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA, please replace the value RFC XXXX with the name of this document.</t>
      <section anchor="mls-wire-formats">
        <name>MLS Wire Formats</name>
        <t>This document requests the addition of a new entry to the "MLS Wire Formats" registry defined in <xref section="17.2" sectionFormat="of" target="RFC9420"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">mls_private_external_message</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="mls-signature-labels">
        <name>MLS Signature Labels</name>
        <t>This document requests the addition of a new entry to the "MLS Signature Labels" registry defined in <xref section="17.6" sectionFormat="of" target="RFC9420"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ExternalEncryptionInfoTBS</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="mls-public-key-encryption-labels">
        <name>MLS Public Key Encryption Labels</name>
        <t>This document requests the addition of a new entry to the "MLS Public Key Encryption Labels" registry defined in <xref section="17.7" sectionFormat="of" target="RFC9420"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">PrivateExternalMessageContent</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="mls-extension-types">
        <name>MLS Extension Types</name>
        <t>This document requests the addition of a new entry to the "MLS Extension Types" registry defined in <xref section="17.3" sectionFormat="of" target="RFC9420"/>. This extension type is used to identify the <tt>ExternalEncryptionInfo</tt> AAD component (see <xref section="4.9" sectionFormat="of" target="I-D.ietf-mls-extensions"/>):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Message(s)</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD2</td>
              <td align="left">external_encryption_info</td>
              <td align="left">GI</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="mls-component-types">
        <name>MLS Component Types</name>
        <t>This document registers two new MLS Component Types in the Specification Required range:</t>
        <section anchor="rootprivatesignaturekey-mls-component-type">
          <name>root_private_signature_key MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD3 (suggested value 0x000A)</t>
            </li>
            <li>
              <t>Name: root_private_signature_key</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="externalencryptionpublickey-mls-component-type">
          <name>external_encryption_public_key MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD4 (suggested value 0x000B)</t>
            </li>
            <li>
              <t>Name: external_encryption_public_key</t>
            </li>
            <li>
              <t>Where: AD</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
      </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="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="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="I-D.ietf-mls-extensions">
          <front>
            <title>The Messaging Layer Security (MLS) Extensions</title>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="21" month="July" year="2025"/>
            <abstract>
              <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-extensions-08"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.mahy-mls-semiprivatemessage">
          <front>
            <title>Semi-Private Messages in the Messaging Layer Security (MLS) Protocol</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <date day="16" month="October" year="2025"/>
            <abstract>
              <t>   This document defines a SemiPrivateMessage for the Messaging Layer
   Security (MLS) protocol.  It allows members to share otherwise
   private commits and proposals with a designated list of external
   receivers rather than send these handshakes in a PublicMessage.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mahy-mls-semiprivatemessage-06"/>
        </reference>
        <reference anchor="I-D.ietf-mimi-protocol">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) using HTTPS and MLS</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Matthew Hodgson" initials="M." surname="Hodgson">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Konrad Kohbrok" initials="K." surname="Kohbrok">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document specifies the More Instant Messaging Interoperability
   (MIMI) transport protocol, which allows users of different messaging
   providers to interoperate in group chats (rooms), including to send
   and receive messages, share room policy, and add participants to and
   remove participants from rooms.  MIMI describes messages between
   providers, leaving most aspects of the provider-internal client-
   server communication up to the provider.  MIMI integrates the
   Messaging Layer Security (MLS) protocol to provide end-to-end
   security assurances, including authentication of protocol
   participants, confidentiality of messages exchanged within a room,
   and agreement on the state of the room.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-protocol-05"/>
        </reference>
        <reference anchor="RFC9576">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="A. Davidson" initials="A." surname="Davidson"/>
            <author fullname="J. Iyengar" initials="J." surname="Iyengar"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="June" year="2024"/>
            <abstract>
              <t>This document specifies the Privacy Pass architecture and requirements for its constituent protocols used for authorization based on privacy-preserving authentication mechanisms. It describes the conceptual model of Privacy Pass and its protocols, its security and privacy goals, practical deployment models, and recommendations for each deployment model, to help ensure that the desired security and privacy goals are fulfilled.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9576"/>
          <seriesInfo name="DOI" value="10.17487/RFC9576"/>
        </reference>
        <reference anchor="I-D.schlesinger-cfrg-act">
          <front>
            <title>Anonymous Credit Tokens</title>
            <author fullname="Samuel Schlesinger" initials="S." surname="Schlesinger">
              <organization>Google</organization>
            </author>
            <author fullname="Jonathan Katz" initials="J." surname="Katz">
              <organization>Google</organization>
            </author>
            <date day="13" month="February" year="2026"/>
            <abstract>
              <t>   This document specifies Anonymous Credit Tokens (ACT), a privacy-
   preserving authentication protocol that enables numerical credit
   systems without tracking individual clients.  Based on keyed-
   verification anonymous credentials and privately verifiable BBS-style
   signatures, the protocol allows issuers to grant tokens containing
   credits that clients can later spend anonymously with that issuer.

   The protocol's key features include: (1) unlinkable transactions -
   the issuer cannot correlate credit issuance with spending, or link
   multiple spends by the same client, (2) partial spending - clients
   can spend a portion of their credits and receive anonymous change,
   and (3) double-spend prevention through cryptographic nullifiers that
   preserve privacy while ensuring each token is used only once.

   Anonymous Credit Tokens are designed for modern web services
   requiring rate limiting, usage-based billing, or resource allocation
   while respecting user privacy.  Example applications include rate
   limiting and API credits.

   This document is a product of the Crypto Forum Research Group (CFRG)
   in the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schlesinger-cfrg-act-01"/>
        </reference>
        <reference anchor="RFC9458">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
cBAZyp9F/wNn0zIppFEAAA==

-->

</rfc>
