<?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-04" 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-04"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="20"/>
    <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 (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;

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

-->

</rfc>
