<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-mahy-mls-selfremove-00" submissionType="IETF" category="info" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" consensus="true">

<front>
<title abbrev="MLS SelfRemove Proposal">The SelfRemove Proposal for Message Layer Security (MLS)</title><seriesInfo value="draft-mahy-mls-selfremove-00" stream="IETF" status="informational" name="Internet-Draft"></seriesInfo>
<author initials="R." surname="Mahy" fullname="Rohan Mahy"><organization>Wire</organization><address><postal><street></street>
</postal><email>rohan.mahy@wire.com</email>
</address></author><date/>
<area>sec</area>
<workgroup>MLS</workgroup>
<keyword>mls</keyword>
<keyword>SelfRemove</keyword>
<keyword>self remove</keyword>
<keyword>leave</keyword>
<keyword>proposal</keyword>

<abstract>
<t>This document describes the SelfRemove Message Layer Security (MLS) Proposal
type, which improves handling of a client removing itself from an MLS group.</t>
</abstract>

</front>

<middle>

<section anchor="terminology"><name>Terminology</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;,
&quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to
be interpreted as described in RFC 2119 <xref target="RFC2219"></xref>.</t>
<t>The terms MLS client, MLS group, LeafNode, GroupContext, KeyPackage,
GroupContextExtensions Proposal, Credential, CredentialType, and
RequiredCapabilities have the same meanings as in the MLS
protocol <xref target="I-D.ietf-mls-protocol"></xref>.</t>
</section>

<section anchor="introduction"><name>Introduction</name>
<t>RFC EDITOR: PLEASE REMOVE THE FOLLOWING PARAGRAPH. The source for
this draft is maintained in GitHub. Suggested changes should be
submitted as pull requests at <eref target="https://github.com/rohan-wire/ietf-drafts">https://github.com/rohan-wire/ietf-drafts</eref>.
Editorial changes can be managed in GitHub, but any substantive
change should be discussed on the MLS mailing list (mls@ietf.org).</t>
<t>The design of the MLS protocol prevents a member of
an MLS group from removing itself immediately from the group. To cause
an immediate change in the group, a member must send a Commit message.
However the sender of a Commit message knows the keying material of the
new epoch and therefore needs to be part of the group. Instead a member
wishing to remove itself can send a Remove Proposal and wait for another
member to Commit its Proposal.</t>
<t>Unfortunately, MLS clients that join via an External Commit ignore
pending, but otherwise valid, Proposals. The member trying to remove itself has
to monitor the group and send a new Proposal in any new epoch until the member is
removed. In a
group with a burst of external joiners, a member connected over a
high-latency link (or one that is merely unlucky) might have to wait
several epochs to remove itself. A real-world situation in which this happens
is a member trying to remove itself from a conference call as several dozen
new participants are trying to join (often on the hour).</t>
<t>This document described a new <tt>SelfRemove</tt> Proposal extension type. It is
designed to be included in External Commits.</t>
</section>

<section anchor="extension-description"><name>Extension Description</name>
<t>This document specifies a new MLS Proposal type called <tt>SelfRemove</tt>. Its syntax
is described using the TLS Presentation Language <xref target="RFC8446"></xref> below (its contents
is an empty struct). It is allowed in External Commits and requires an UpdatePath.</t>

<sourcecode type="tls-presentation"><![CDATA[struct {} SelfRemove;

struct {
    ProposalType msg_type;
    select (Proposal.msg_type) {
        case add:                      Add;
        case update:                   Update;
        case remove:                   Remove;
        case psk:                      PreSharedKey;
        case reinit:                   ReInit;
        case external_init:            ExternalInit;
        case group_context_extensions: GroupContextExtensions;
        case self_remove:              SelfRemove;
    };
} Proposal;
]]>
</sourcecode>
<t>The description of behavior below only applies if all the
members of a group support this extension in their
capabilities; such a group is a &quot;self-remove-capable group&quot;.</t>
<t>An MLS client which implements this specification can send a
SelfRemove Proposal whenever it would like to remove itself
from a self-remove-capable group. Because the point of a
SelfRemove Proposal is to be available to external joiners
(which are not yet members), these proposals MUST be sent
as an MLS PublicMessage.</t>
<t>Whenever a member receives a SelfRemove Proposal, it includes
it along with any other pending Propsals when sending a Commit.
It already MUST send a Commit of pending Proposals before sending
new application messages.</t>
<t>When a member receives a Commit with an embedded SelfRemove Proposal,
it treats the proposal like a Remove Proposal, except the leaf node to remove
is determined by looking in the Sender <tt>leaf_index</tt> of the original Proposal.
The member is able to verify that the Sender was a member.</t>
<t>Whenever a new joiner is about to join a self-remove-capable group with an
External Commit, the new joiner MUST fetch any pending SelfRemove Proposals
along with the GroupInfo object, and include the SelfRemove Proposals
in its External Commit by reference. The new joiner validates the SelfRemove
Proposal before including it by reference, except that it skips the validation
of the <tt>membership_tag</tt> because a non-member cannot verify membership.</t>
<t>The MLS Distribution Service (DS) needs to validate SelfRemove Proposals it
receives (except that it cannot validate the <tt>membership_tag</tt>). If the DS
provides a GroupInfo object to an external joiner, the DS SHOULD attach any
SelfRemove proposals known to the DS to the GroupInfo object.</t>
<t>As with Remove proposals, clients need to be prepared to receive the Commit
message which removes them from the group via a SelfRemove. If the DS does
not forward a Commit to a removed client, it needs to inform the removed
client out-of-band.</t>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>This document proposes registration of a new MLS Proposal Type.</t>
<t>RFC EDITOR: Please replace XXXX throughout with the RFC number assigned to this document</t>

<section anchor="self-remove-mls-proposal-type"><name>self_remove MLS Proposal Type</name>
<t>The <tt>self_remove</tt> MLS Proposal Type is used for a member to remove itself
from a group more efficiently than using a <tt>remove</tt> proposal type, as the
<tt>self_remove</tt> type is permitted in External Commits.</t>

<artwork><![CDATA[  Template:
  Value: 0x0008
  Name: self_remove
  Recommended: Y
  External: Y
  Path Required: Y
  Reference: RFC XXXX
]]>
</artwork>
</section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>The Security Considerations of MLS apply.</t>
<t>An external recipient of a SelfRemove Proposal cannot verify the
<tt>membership_tag</tt>. However, an external joiner also has no way to
completely validate a GroupInfo object that it receives. An insider
can prevent an External Join by providing either an invalid GroupInfo object
or an invalid SelfRemove Proposal. The security properties of external joins
does not change with the addition of this proposal type.</t>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-mls-protocol.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2219.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>
</references>

</back>

</rfc>
