<?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.6.10 (Ruby 3.0.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-robert-mls-extensions-00" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.7 -->
  <front>
    <title abbrev="MLS">The Messaging Layer Security (MLS) Extensions</title>
    <seriesInfo name="Internet-Draft" value="draft-robert-mls-extensions-00"/>
    <author initials="R." surname="Robert" fullname="Raphael Robert">
      <organization/>
      <address>
        <email>ietf@raphaelrobert.com</email>
      </address>
    </author>
    <date year="2022" month="May" day="27"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes extensions to the Messaging Layer Security (MLS) protocol.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/mlswg/mls-extensions"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes extensions to the Messaging Layer Security (MLS)
protocol that are not part of the main protocol specification. The protocol
specification includes a set of core extensions that are likely to be useful to
many applications. The extensions described in this document are intended to be
used by applications that need to extend the MLS protocol.</t>
    </section>
    <section anchor="extensions">
      <name>Extensions</name>
      <section anchor="appack">
        <name>AppAck</name>
        <t>Type: Proposal</t>
        <section anchor="description">
          <name>Description</name>
          <t>An AppAck proposal is used to acknowledge receipt of application messages.
Though this information implies no change to the group, it is structured as a
Proposal message so that it is included in the group's transcript by being
included in Commit messages.</t>
          <sourcecode type="tls"><![CDATA[
struct {
    uint32 sender;
    uint32 first_generation;
    uint32 last_generation;
} MessageRange;

struct {
    MessageRange received_ranges<V>;
} AppAck;
]]></sourcecode>
          <t>An AppAck proposal represents a set of messages received by the sender in the
current epoch.  Messages are represented by the <tt>sender</tt> and <tt>generation</tt> values
in the MLSCiphertext for the message.  Each MessageRange represents receipt of a
span of messages whose <tt>generation</tt> values form a continuous range from
<tt>first_generation</tt> to <tt>last_generation</tt>, inclusive.</t>
          <t>AppAck proposals are sent as a guard against the Delivery Service dropping
application messages.  The sequential nature of the <tt>generation</tt> field provides
a degree of loss detection, since gaps in the <tt>generation</tt> sequence indicate
dropped messages.  AppAck completes this story by addressing the scenario where
the Delivery Service drops all messages after a certain point, so that a later
generation is never observed.  Obviously, there is a risk that AppAck messages
could be suppressed as well, but their inclusion in the transcript means that if
they are suppressed then the group cannot advance at all.</t>
          <t>The schedule on which sending AppAck proposals are sent is up to the application,
and determines which cases of loss/suppression are detected.  For example:</t>
          <ul spacing="normal">
            <li>The application might have the committer include an AppAck proposal whenever a
Commit is sent, so that other members could know when one of their messages
did not reach the committer.</li>
            <li>The application could have a client send an AppAck whenever an application
message is sent, covering all messages received since its last AppAck.  This
would provide a complete view of any losses experienced by active members.</li>
            <li>The application could simply have clients send AppAck proposals on a timer, so
that all participants' state would be known.</li>
          </ul>
          <t>An application using AppAck proposals to guard against loss/suppression of
application messages also needs to ensure that AppAck messages and the Commits
that reference them are not dropped.  One way to do this is to always encrypt
Proposal and Commit messages, to make it more difficult for the Delivery Service
to recognize which messages contain AppAcks.  The application can also have
clients enforce an AppAck schedule, reporting loss if an AppAck is not received
at the expected time.</t>
        </section>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests the creation of the following new IANA registries:</t>
      <ul spacing="normal">
        <li>MLS Extension Types (<xref target="extended-mls-extension-types"/>)</li>
        <li>MLS Proposal Types (<xref target="extended-mls-proposal-types"/>)</li>
      </ul>
      <t>All of these registries should be under a heading of "Messaging Layer Security",
and assignments are made via the Specification Required policy <xref target="RFC8126"/>.</t>
      <t>RFC EDITOR: Please replace XXXX throughout with the RFC number assigned to
this document</t>
      <section anchor="extended-mls-extension-types">
        <name>Extended MLS Extension types</name>
        <t>This registry lists identifiers for extensions to the MLS protocol.  The
extension type field is two bytes wide, so valid extension type values are in
the range 0x0000 to 0xffff.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>Value: The numeric value of the extension type. Extended MLS extension types
start with the value 0x0100.</li>
          <li>Name: The name of the extension type</li>
          <li>
            <t>Message(s): The messages in which the extension may appear, drawn from the following
list:  </t>
            <ul spacing="normal">
              <li>KP: KeyPackage objects</li>
              <li>LN: LeafNode objects</li>
              <li>GC: GroupContext objects (and the <tt>group_context_extensions</tt> field of
GroupInfo objects)</li>
              <li>GI: The <tt>other_extensions</tt> field of GroupInfo objects</li>
            </ul>
          </li>
          <li>Recommended: Whether support for this extension is recommended by the IETF MLS
WG.  Valid values are "Y" and "N".  The "Recommended" column is assigned a
value of "N" unless explicitly requested, and adding a value with a
"Recommended" value of "Y" requires Standards Action <xref target="RFC8126"/>.  IESG Approval
is REQUIRED for a Y-&gt;N transition.</li>
          <li>Reference: The document where this extension is defined</li>
        </ul>
        <t>Initial contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Message(s)</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="extended-mls-proposal-types">
        <name>Extended MLS Proposal types</name>
        <t>This registry lists identifiers for types of proposals that can be made for
changes to an MLS group.  The extension type field is two bytes wide, so valid
extension type values are in the range 0x0000 to 0xffff.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>Value: The numeric value of the proposal type. Extended MLS proposal types start
with the value 0x0100.</li>
          <li>Name: The name of the proposal type</li>
          <li>Recommended: Whether support for this extension is recommended by the IETF MLS
WG.  Valid values are "Y" and "N".  The "Recommended" column is assigned a
value of "N" unless explicitly requested, and adding a value with a
"Recommended" value of "Y" requires Standards Action <xref target="RFC8126"/>.  IESG Approval
is REQUIRED for a Y-&gt;N transition.</li>
          <li>Path Required: Whether a Commit covering a proposal of this type is required
to have its <tt>path</tt> field populated.</li>
          <li>Reference: The document where this extension is defined</li>
        </ul>
        <t>Initial contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Recommended</th>
              <th align="left">Path Required</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0100</td>
              <td align="left">app_ack</td>
              <td align="left">Y</td>
              <td align="left">Y</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton">
            <organization/>
          </author>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <author fullname="T. Narten" initials="T." surname="Narten">
            <organization/>
          </author>
          <date month="June" year="2017"/>
          <abstract>
            <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
            <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
            <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
