<?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.17 (Ruby 3.3.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-mls-semiprivatemessage-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.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-03"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="August" day="25"/>
    <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 Safe Extension (see <xref section="2.1.7.1" sectionFormat="of" target="I-D.ietf-mls-extensions"/>, 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>SemiPrivateMessage</tt> wire format Safe Extension also has an
extension type which is carried in the GroupContext <tt>required_capabilities</tt>
to indicate use of the wire format in a group, and in the Capabilities of
LeafNodes)</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 (PrivateMessage.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;

/* IANA-registered value for semi_private_message */
extension_type = TBD2
SemiPrivateMessage extension_data;
]]></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>
        <t>Finally, as a safe wire format extension, the <tt>SemiPrivateMessage</tt> is
wrapped in an <tt>ExtensionContent</tt> struct.</t>
      </section>
      <section anchor="decryption-of-semiprivatemessage-as-a-member">
        <name>Decryption of SemiPrivateMessage as a member</name>
        <t>After stripping off the the <tt>ExtensionContent</tt> struct, 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>After stripping off the the <tt>ExtensionContent</tt> struct, 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>
        <t>The <tt>semi_private_message</tt> MLS Extension Type is used to signal support
for the <tt>SemiPrivateMessage</tt> Wire Format (a Safe Extension).</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD1 (to be assigned by IANA)</t>
          </li>
          <li>
            <t>Name: semi_private_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>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9420">
        <front>
          <title>The Messaging Layer Security (MLS) Protocol</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
          <author fullname="R. Robert" initials="R." surname="Robert"/>
          <author fullname="J. Millican" initials="J." surname="Millican"/>
          <author fullname="E. Omara" initials="E." surname="Omara"/>
          <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
          <date month="July" year="2023"/>
          <abstract>
            <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9420"/>
        <seriesInfo name="DOI" value="10.17487/RFC9420"/>
      </reference>
      <reference anchor="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="24" month="April" year="2024"/>
          <abstract>
            <t>   This document describes extensions to the Messaging Layer Security
   (MLS) protocol.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/mlswg/mls-extensions.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-mls-extensions-04"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 294?>

<section anchor="change-log">
      <name>Change log</name>
      <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>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
eikAAA==

-->

</rfc>
