<?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-06" 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-06"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="16"/>
    <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-extension-type">
        <name>External Receivers Extension 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 (to be assigned by IANA)</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="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>
    <?line 307?>

<section anchor="change-log">
      <name>Change log</name>
      <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>
