<?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 4.0.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-mls-private-external-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.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-02"/>
    <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="November" day="01"/>
    <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">0x0012</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">0x0011</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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9420.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="6" month="July" year="2026"/>
            <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-10"/>
        </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="19" month="April" year="2026"/>
            <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-07"/>
        </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="25" month="April" year="2026"/>
            <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-06"/>
        </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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
3ptwEBnKoEX/A98Enm+mUQAA

-->

</rfc>
