<?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-group-anchors-00" submissionType="IETF" category="info" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" consensus="true">

<front>
<title abbrev="MLS Group Credential Anchors">Per-group Credential Anchors for Message Layer Security (MLS)</title><seriesInfo value="draft-mahy-mls-group-anchors-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>credential anchor</keyword>
<keyword>trust root</keyword>
<keyword>groupcontext</keyword>
<keyword>per-group</keyword>

<abstract>
<t>This document describes a Message Layer Security (MLS) GroupContext extension
to restrict the set of trust anchors used for identity validation in MLS
groups. It is useful in federated or interoperability environments to
allow a specific federated domain to assert identities for its own identifiers
but not for the identifiers of other domains.</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>A typical desktop or mobile operating system may have hundreds of root
certificates configured. Not all of these certificates are appropriate
to make identity assertions about every domain which participates in a
federated MLS group. The members of a federated group should be able to
restrict the specific trust anchors expected, on a per-domain basis.
The root of the trust anchor still needs to be among the operating system
or application trusted root certificates.</t>
<t>In addition, this extension allows the domain validation to be restricted
to an intermediary certificate which is anchored in one of the trusted root
certificates. For example, the domain <tt>example.com</tt> might use the Certificate
Authority &quot;Large Commercial Certificate Authority LLC&quot; as the root for its domain
certificates, but only the intermediate certificate <tt>ca.messaging.example.com</tt>
actually makes assertions about MLS identities for that domain.</t>
<t>While this extension initially only specifies behavior for X.509 certificates
and the <tt>x509</tt> credential type in MLS, other credential types with strong
cryptographic verification, such as VerifiableCredentials, could extend this
extension to include the relevant notion of trust anchors.</t>
</section>

<section anchor="example-use"><name>Example Use</name>
<t>Consider an MLS group containing MLS clients from three domains: alpha.example,
beta.example, and charlie.example. All three use compatible MLS-based instant
messaging services which are federated [I-D.ietf-mls-federation].</t>

<ul spacing="compact">
<li>alpha.example is a very large company or national government with their own root
certificate authority which is already present in most operating systems.</li>
<li>beta.example is a large company which uses certificate authority yankee.example.</li>
<li>charlie.example is a small organization whose service is hosted by a cloud
provider cirrus.example. Their certificates (both charlie and cirrus) are issued
by the certificate authority zulu.example.</li>
</ul>
<t>Alice is a user on alpha.example, and creates a private federated MLS group,
inviting Andy (from alpha.example), Bob and Betty (from beta.example), and
Cathy and Chuck (from charlie.example). Every client in the group would like
to verify the identities of the other clients. If alpha.example is compromised,
we don't want an attacker to be able to impersonate Bob, Betty, Cathy, or Chuck
without detection. Likewise if yankee.example is compromised, we don't want an
attacker to be able to impersonate Alice, Andy, Cathy, or Chuck without detection.</t>
<t>With this extension, the clients in an MLS group maintain a list of identity domains
and each of their corresponding trust anchors. This does not replace the operating system
or application trusted root certificates, it just associates a specific domain with
a specific trust anchor.</t>
</section>

<section anchor="extension-description"><name>Extension Description</name>
<t>This document specifies a GroupContext MLS extension <tt>group_trust_anchors</tt>
of type PerDomainTrustAnchors. The syntax is described using
the TLS Presentation Language <xref target="RFC8446"></xref>.</t>
<t>Each PerDomainTrustAnchor represents a specific identity domain which is
expected and authorized to participate in the MLS group. It contains the
domain name and the specific trust anchor used to validate identities for
members in that domain.</t>

<sourcecode type="tls">struct {
    opaque domain_name&lt;V&gt;;
    CredentialType credential_type;
    select (Credential.credential_type) {
        case x509:
            Certificate chain&lt;V&gt;;
    };
} PerDomainTrustAnchor;
    
struct {
    PerDomainTrustAnchor domain_anchors&lt;V&gt;;  
} PerDomainTrustAnchors;

PerDomainTrustAnchors group_trust_anchors;
</sourcecode>
<t>An MLS client which implements this specification SHOULD include the
<tt>group_trust_achors</tt> extension in the <tt>extensions</tt> field in the
GroupContext of groups it creates. It includes the per-domain trust
anchors for all the domains expected and authorized to participate in
the group. As new members of the group are added or removed, the member
which Commits these membership changes is expected to maintain the list
of trust roots up-to-date by also including an appropriate
GroupContextExtensions Proposal any time the list of expected federated
domains changes. Likewise, when any of the trust anchors used in a domain
changes, an appropriate member needs to Commit a GroupContextExtensions
Proposal updating the list of trust roots.</t>
</section>

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

<section anchor="group-trust-anchors-mls-extension-type"><name>group_trust_anchors MLS Extension Type</name>
<t>The <tt>group_trust_anchors</tt> MLS Extension Type is used inside GroupContext objects. It
contains a PerDomainTrustAnchors object representing the trust anchors which are expected
for identity validation inside the MLS group.</t>

<artwork>  Template:
  Value: 0x000A
  Name: group_trust_anchors
  Message(s): This extension may appear in GroupContext objects
  Recommended: Y
  Reference: RFC XXXX
</artwork>
</section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>The Security Considerations of MLS apply.</t>
<t>Improper use of the extension in this document could allow the creator of an
MLS group or the sender of a GroupContextExtensions Proposal to maliciously
add or remove authorized domains from a group, and to impersonate members from
specific domains. Therefore it is vital that all clients which implement this
extension validate that changes to their own domain trust anchors conform to their
domain policies.</t>
</section>

</middle>

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

</back>

</rfc>
