<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-mls-semiprivatemessage-07" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="MLS SemiPrivateMessage">Semi-Private Messages in the Messaging Layer Security (MLS) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-mahy-mls-semiprivatemessage-07"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="19"/>
    <area>Security</area>
    <workgroup>Messaging Layer Security</workgroup>
    <keyword>SemiPrivateMessage</keyword>
    <abstract>
      <?line 34?>

<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>
    <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-semiprivatemessage/draft-mahy-mls-semiprivatemessage.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mahy-mls-semiprivatemessage/"/>.
      </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-semiprivatemessage"/>.</t>
    </note>
  </front>
  <middle>
    <?line 41?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines two extensions of MLS <xref target="RFC9420"/>. The first is the
<tt>SemiPrivateMessage</tt> wire format, which allows an otherwise PrivateMessage
to be shared with a predefined list of external receivers. It is restricted
for use only with commits or proposals. The second is the
<tt>external_receivers</tt> GroupContext extension that contains the list of
external receivers and allows members to agree on that list.</t>
      <t>SemiPrivateMessages are expected to be useful in federated environments
where messages routinely cross multiple administrative domains, but the MLS
Distribution Service needs to see the content of commits and proposals where
group members would otherwise send handshakes using PublicMessage.</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 uses terminology extensively from MLS <xref target="RFC9420"/> and
the Safe Extensions framework, defined in <xref section="2" sectionFormat="of" target="I-D.ietf-mls-extensions"/>.</t>
      <t>Whenever a hash function is mentioned, it refers to the hash function
defined in the cipher suite in use for the relevant MLS group.</t>
    </section>
    <section anchor="syntax-and-usage">
      <name>Syntax and Usage</name>
      <t>The <tt>external_receivers</tt> GroupContext extension is used for all members
to agree on the list of external receivers in the current epoch. Its
construction mirrors the syntax of the <tt>external_senders</tt> extension in
<xref target="RFC9420"/>.</t>
      <sourcecode type="tls"><![CDATA[
struct {
  HPKEPublicKey external_receiver_public_key;
  Credential credential;
} ExternalReceiver;
]]></sourcecode>
      <t>The <tt>mls_semiprivate_message</tt> wire format is advertised in the
<tt>supported_wire_formats</tt> list in <tt>LeafNode.capabilities.extensions</tt>,
(defined in <xref section="5" sectionFormat="of" target="I-D.ietf-mls-extensions"/>).
For SemiPrivateMessage to be used in a group, <tt>mls_semiprivate_message</tt> needs to
be in the <tt>required_wire_formats</tt> list in the <tt>GroupContext.extension_types</tt> of
that group, and there needs to be at least one entry in the <tt>external_receivers</tt>
GroupContext extension.</t>
      <t>SemiPrivateMessage substantially reuses the construction of PrivateMessage,
but like a Welcome message also contains information (<tt>key_and_nonces</tt>)
necessary to identify the sender leaf node and decrypt the
<tt>SemiPrivateMessage</tt> struct's <tt>ciphertext</tt>.  Note that the
<tt>encrypted_sender_data</tt> cannot be decrypted by an external receiver,
but the <tt>sender_leaf_index</tt> is included with <tt>key_and_nonces</tt> and is
verified in another step. <tt>key_and_nonces</tt> is encrypted once for each
external receiver in the <tt>external_receivers</tt> extension.</t>
      <section anchor="encryption-of-a-semiprivatemessage">
        <name>Encryption of a SemiPrivateMessage</name>
        <t>As with a <tt>PrivateMessage</tt>, the sending client chooses an unused generation
in its own handshake ratchet and derives a <tt>key</tt> and <tt>nonce</tt>. It also
generates a fresh random four-byte <tt>reuse_guard</tt>.
The snippet below shows the syntax and encryption and decryption
construction of <tt>keys_and_nonces</tt> into <tt>encrypted_keys_and_nonces</tt>
for each external receiver.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque key<V>;
  opaque nonce<V>;
  opaque reuse_guard[4];
  uint32 sender_leaf_index;
} PerMessageKeyAndNonces;

partial_context_hash = hash(sender_leaf_index || nonce)

struct {
  opaque group_id<V>;
  uint64 epoch;
  opaque partial_context_hash<V>;
} SemiPrivateMessageContext;

PerMessageKeyAndNonces key_and_nonces;
SemiPrivateMessageContext semi_private_message_context;

encrypted_key_and_nonces = EncryptWithLabel(
  external_receiver_public_key,
  "SemiPrivateMessageReceiver",
  semi_private_message_context,   /* context */
  keys_and_nonces)

key_and_nonces = DecryptWithLabel(
  external_receiver_private_key,
  "SemiPrivateMessageReceiver",
  semi_private_message_context,  /* context */
  encrypted_keys_and_nonces.kem_output,
  encrypted_keys_and_nonces.ciphertext)
]]></sourcecode>
        <t>The <tt>KeyForExternalReceiver</tt> structure contains a hash of the
<tt>ExternalReceiver</tt> as a reference and the <tt>encrypted_key_and_nonces</tt>.</t>
        <sourcecode type="tls"><![CDATA[
ExternalReceiverRef = hash(ExternalReceiver)

struct {
  ExternalReceiverRef external_receiver_ref;
  HPKECiphertext encrypted_keys_and_nonces;
} KeyForExternalReceiver;
]]></sourcecode>
        <t>The <tt>SemiPrivateMessage</tt> struct extends the <tt>PrivateMessage</tt> struct, adding
the <tt>keys_for_external_receivers</tt> list, the <tt>partial_context_hash</tt> needed
for its decryption context, and the hash of the <tt>FramedContentTBS</tt> to insure
that the sender cannot encrypt content to the external receivers that is
different from the other members, without detection.</t>
        <t>The <tt>SemiPrivateContentAAD</tt> struct likewise extends the <tt>PrivateContentAAD</tt>
struct, adding the <tt>keys_for_external_receivers</tt> list, the
<tt>partial_context_hash</tt> and the <tt>framed_content_tbs_hash</tt>.</t>
        <t>The <tt>SemiPrivateMessageContent</tt> struct is the same as
<tt>PrivateMessageContent</tt> except application messages are not included.</t>
        <sourcecode type="tls"><![CDATA[
framed_content_tbs_hash = hash(FramedContentTBS)

struct {
    opaque group_id<V>;
    uint64 epoch;
    ContentType content_type;
    opaque authenticated_data<V>;
    opaque partial_context_hash<V>;
    KeyForExternalReceiver keys_for_external_receivers<V>;
    opaque framed_content_tbs_hash<V>;
    opaque encrypted_sender_data<V>;
    opaque ciphertext<V>;
} SemiPrivateMessage;

struct {
    select (SemiPrivateMessage.content_type) {
        case proposal:
          Proposal proposal;
        case commit:
          Commit commit;
    };
    FramedContentAuthData auth;
    opaque padding[length_of_padding];
} SemiPrivateMessageContent;

struct {
    opaque group_id<V>;
    uint64 epoch;
    ContentType content_type;
    opaque authenticated_data<V>;
    opaque partial_context_hash<V>;
    KeyForExternalReceiver keys_for_external_receivers<V>;
    opaque framed_content_tbs_hash<V>;
} SemiPrivateContentAAD;

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_semiprivate_message_:
            SemiPrivateMessage semiprivate_message;
    };
} MLSMessage;
]]></sourcecode>
        <t>Encryption of the <tt>ciphertext</tt> uses the cipher suite's AEAD algorithm using
the <tt>key</tt>, <tt>nonce</tt> xored with the <tt>reuse_guard</tt>, the
<tt>SemiPrivateMessageContent</tt> as the plaintext, and the
<tt>SemiPrivateContentAAD</tt> as the authenticated data.</t>
        <t>Encryption of the <tt>encrypted_sender_data</tt> proceeds in the
same way for <tt>SemiPrivateMessage</tt> as for <tt>PrivateMessage</tt>.</t>
      </section>
      <section anchor="decryption-of-semiprivatemessage-as-a-member">
        <name>Decryption of SemiPrivateMessage as a member</name>
        <t>When receiving a <tt>SemiPrivateMessage</tt>, a member receiver derives the
<tt>sender_data_key</tt> and <tt>sender_data_nonce</tt> and decrypts the <tt>encrypted_sender_data</tt>, just as for a <tt>PrivateMessage</tt>.</t>
        <t>The receiver uses the <tt>SenderData</tt> to lookup the <tt>key</tt> and <tt>nonce</tt> for
the correct <tt>generation</tt> in the (non-blank) sender's handshake ratchet.
The receiver verifies the <tt>partial_context_hash</tt>.</t>
        <t>After xoring the <tt>nonce</tt> with the <tt>reuse_guard</tt>, the member decrypts the
<tt>ciphertext</tt>. It verifies the padding consists of the appropriate number of
zero bytes, and verifies that the <tt>framed_content_tbs_hash</tt> is correct.
Finally, it verifies that the signature in the FramedContentAuthData is
valid.</t>
      </section>
      <section anchor="decryption-of-semiprivatemessage-as-an-external-receiver">
        <name>Decryption of SemiPrivateMessage as an external receiver</name>
        <t>When receiving a <tt>SemiPrivateMessage</tt>, an external receiver
looks in the <tt>keys_for_external_receivers</tt> field for its
<tt>external_receiver_ref</tt>. It calculates the <tt>semi_private_message_context</tt>
and uses HPKE to decrypt the <tt>encrypted_keys_and_nonces</tt>. Using the <tt>nonce</tt>
and <tt>sender_leaf_node</tt> it verifies the <tt>partial_context_hash</tt>.</t>
        <t>After xoring the <tt>nonce</tt> with the <tt>reuse_guard</tt>, the member decrypts the
<tt>ciphertext</tt>. It verifies the padding consists of the appropriate number of
zero bytes, and verifies that the <tt>framed_content_tbs_hash</tt> is correct.
If the external receiver has a copy of the <tt>GroupContext</tt>, it verifies that
the signature in the FramedContentAuthData is valid.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>These two extensions provide a privacy improvement over sending
handshake messages using PublicMessage. The handshake is shared
with a specific list of receivers, and that list is visible as
part of the GroupContext.</t>
      <t>TODO More Security.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="semiprivatemessage-wire-format">
        <name>SemiPrivateMessage Wire Format</name>
        <ul spacing="normal">
          <li>
            <t>Value: TBD1 (to be assigned by IANA)</t>
          </li>
          <li>
            <t>Name: mls_semiprivate_message</t>
          </li>
          <li>
            <t>Recommended: Y</t>
          </li>
          <li>
            <t>Reference: RFC XXXX</t>
          </li>
        </ul>
      </section>
      <section anchor="external-receivers-mls-component-type">
        <name>External Receivers MLS Component Type</name>
        <t>The <tt>external_receivers</tt> extension contains a list of external receivers
targeted in a SemiPrivateMessage.</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD2 (suggested value 0x0008)</t>
          </li>
          <li>
            <t>Name: external_receivers</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 anchor="semiprivatemessagereceiver-public-key-encryption-label">
        <name>SemiPrivateMessageReceiver Public Key Encryption Label</name>
        <ul spacing="normal">
          <li>
            <t>Label: "SemiPrivateMessageReceiver"</t>
          </li>
          <li>
            <t>Recommended: Y</t>
          </li>
          <li>
            <t>Reference: RFC XXXX</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <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="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="2" month="March" 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-09"/>
      </reference>
    </references>
    <?line 307?>

<section anchor="change-log">
      <name>Change log</name>
      <section anchor="changes-from-draft-mahy-mls-semiprivatemessage-06-to-07">
        <name>Changes from draft-mahy-mls-semiprivatemessage-06 to -07</name>
        <t>None</t>
      </section>
      <section anchor="changes-from-draft-mahy-mls-semiprivatemessage-05-to-06">
        <name>Changes from draft-mahy-mls-semiprivatemessage-05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>fix a typo in the change log</t>
          </li>
          <li>
            <t>refresh almost expired document</t>
          </li>
        </ul>
      </section>
      <section anchor="changes-from-draft-mahy-mls-semiprivatemessage-04-to-05">
        <name>Changes from draft-mahy-mls-semiprivatemessage-04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>remove the "safe extension" wire format</t>
          </li>
          <li>
            <t>use the supported/required_wire_formats extensions in mls-extensions</t>
          </li>
          <li>
            <t>register SemiPrivateMessageReceiver Public Key Encryption Label</t>
          </li>
        </ul>
      </section>
      <section anchor="changes-from-draft-mahy-mls-semiprivatemessage-03-to-04">
        <name>Changes from draft-mahy-mls-semiprivatemessage-03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>corrected a typo in SemiPrivateMessageContent</t>
          </li>
        </ul>
      </section>
      <section anchor="changes-from-draft-mahy-mls-semiprivatemessage-02-to-03">
        <name>Changes from draft-mahy-mls-semiprivatemessage-02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>do not attempt to decrypt <tt>SenderData</tt> for external receivers; instead also encrypt the <tt>sender_leaf_index</tt> and <tt>reuse_guard</tt>.</t>
          </li>
          <li>
            <t>make the <tt>encrypted_key_and_nonces</tt> context include the <tt>group_id</tt>, <tt>epoch</tt>, and a the hash of the <tt>sender_leaf_index</tt> and <tt>nonce</tt>. include that <tt>partial_context_hash</tt> in the AAD.</t>
          </li>
          <li>
            <t>add a hash of the FramedContentTBS to the AAD to make sure the content encrypted to the external receiver is the same as that sent to members.</t>
          </li>
          <li>
            <t>add explicit instructions about encryption and decryption.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
