<?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-semiprivatemessage-08" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.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-08"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="01"/>
    <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 (suggested value 0x0011)</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 0x0007)</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="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>
    <?line 307?>

<section anchor="change-log">
      <name>Change log</name>
      <section anchor="changes-from-draft-mahy-mls-semiprivatemessage-07-to-08">
        <name>Changes from draft-mahy-mls-semiprivatemessage-07 to -08</name>
        <ul spacing="normal">
          <li>
            <t>updated suggested IANA values to prevent conflicts</t>
          </li>
        </ul>
      </section>
      <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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
fnDI/geYmooPCy0AAA==

-->

</rfc>
