<?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.39 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ralston-mimi-signaling-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="MIMI Signaling Protocol">MIMI Signaling Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-signaling-00"/>
    <author fullname="Travis Ralston">
      <organization>The Matrix.org Foundation C.I.C.</organization>
      <address>
        <email>travisr@matrix.org</email>
      </address>
    </author>
    <author fullname="Matthew Hodgson">
      <organization>The Matrix.org Foundation C.I.C.</organization>
      <address>
        <email>matthew@matrix.org</email>
      </address>
    </author>
    <date year="2023" month="September" day="23"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>mimi</keyword>
    <keyword>signaling</keyword>
    <keyword>protocol</keyword>
    <keyword>layer</keyword>
    <keyword>messaging</keyword>
    <abstract>
      <?line 45?>

<t>The MIMI signaling protocol describes a framework for user-level interactions in
the overall MIMI protocol stack. The event structure can be used by control protocols
described by <xref target="I-D.barnes-mimi-arch"/>.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://turt2live.github.io/ietf-mimi-signaling/draft-ralston-mimi-signaling.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ralston-mimi-signaling/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        More Instant Messaging Interoperability Working Group mailing list (<eref target="mailto:mimi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mimi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/turt2live/ietf-mimi-signaling"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The More Instant Messaging Interoperability (MIMI) working group is responsible for
specifying a protocol to achieve interoperability among modern messaging providers.
Most providers do not currently support Messaging Layer Security (MLS) <xref target="RFC9420"/>,
a chartered requirement of MIMI, but do support other forms of encryption alongside
their existing signaling.</t>
      <t>Within the MIMI stack of protocols, signaling is responsible for coordinating user-level
actions and participation. This document describes such a protocol, encompassing
a framework for control protocols to operate on top of.</t>
      <t>An overview of the architecture is described by <xref target="I-D.barnes-mimi-arch"/>. Specific
implementations of policy, participation, and security control protocols are <em>not</em>
described by this document.</t>
      <t>MIMI has a chartered requirement to use MLS in the encryption/security protocol, however
most existing messaging providers do not currently use MLS in their encryption. This
document describes an approach for enabling a given encryption/security protocol without
concerning itself with the specifics of such a protocol. This allows existing messaging
providers to insert their own encryption/security protocols external to the MIMI working
group.</t>
      <t>As described by <xref target="I-D.barnes-mimi-arch"/>, events are sent in rooms to accomplish state
changes and messaging. This document defines how events are copied between servers, and
where control protocols become involved.</t>
      <t>This document describes an extensible approach to room policy, similar to how different
encryption/security layers can be used within a room. The policy cannot change once set,
though it can be configured using state events.</t>
      <t>A create state event is used to set the policy and encryption/security protocol. This
create event is the very first event in the room - all other events are linearly placed
after it.</t>
      <t>Abstract concepts are used for transport and persistence of rooms/events. For example,
events can be persisted within an MLS group or serialized in a different format than
described in this document.</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>Terms from <xref target="I-D.barnes-mimi-arch"/> and <xref target="I-D.ralston-mimi-terminology"/> are used
throughout this document. <xref target="I-D.barnes-mimi-arch"/> takes precedence where there's conflict.</t>
      <t>Other terms include:</t>
      <t><em>Unpadded Base64</em>: Serialization as described by <xref section="4" sectionFormat="of" target="RFC4648"/> with padding (<tt>=</tt>
characters) removed.</t>
      <t><em>URL-Safe Base64</em>: As described by <xref section="5" sectionFormat="of" target="RFC4648"/>. May also be unpadded, as above.</t>
      <t><em>Redaction</em>: An algorithm to remove fields irrelevant to the overall protocol's operation.
This should not be confused with message deletion/removal, where a user wishes to delete
content they previously sent in the room. Redaction is reserved for protocol operation
exclusively. See <xref target="int-redactions"/>.</t>
      <t><em>Content Hash</em>: A SHA256 <xref target="RFC6234"/> hash covering the unredacted event. See <xref target="int-content-hash"/>.</t>
      <t><em>Reference Hash</em>: A SHA256 <xref target="RFC6234"/> hash covering the essential fields of an event,
including the content hash. See <xref target="int-reference-hash"/>.</t>
    </section>
    <section anchor="room-structure">
      <name>Room Structure</name>
      <t>Rooms consist of an identifier and linear linked-list of events. The first event <bcp14>MUST</bcp14> be
a create event (<xref target="int-ev-create"/>) to establish the policy and encryption/security protocol
the room uses. The second event <bcp14>MUST</bcp14> be the user participation event (<xref target="int-ev-user"/>) for
the creator. All other events follow, and are sequenced into the linked-list by the hub server.</t>
      <t>The linked-list represents the set of accepted events in the room. Rejected or illegal events
are excluded. The hub server <bcp14>MUST</bcp14> enforce the room's policy upon the room. Follower servers
<bcp14>SHOULD</bcp14> additionally enforce the policy, preventing the hub from accepting illegal events.</t>
      <t>Events point to their parent event, as sequenced by the hub, and the policy-configuring state
events which prove the event is allowed in the room (the event's "auth events"). The create
event <bcp14>MUST</bcp14> be included in the auth events, unless the event is the create event itself. Other
examples of auth events include the sender's participation event and current permissions event.</t>
      <t>This structure allows a server to discard events it no longer needs, but can easily be found
later. For example, a follower server might only persist the create event and a dozen most
recent events. If the server then has a need to "backfill" then it can simply use the <tt>prevEvent</tt>
pointer off the oldest (non-create) event it has until eventually hitting the intended mark
or create event.</t>
      <t>A hub server, however, <bcp14>MUST</bcp14> persist the auth events chain for the room. This is to guarantee
the room is portable in the event of a hub transfer.</t>
      <t><strong>OPEN QUESTION</strong>: Hub transfers as a whole are not concretely specified.</t>
      <t><strong>TODO(TR): Hash chaining discussion outcomes
(<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/7">GH issue</eref>)</strong></t>
      <t>In diagram form, a room looks as such:</t>
      <figure anchor="overview">
        <name>A room made up of events.</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="112" width="472" viewBox="0 0 472 112" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 64,72 L 64,96" fill="none" stroke="black"/>
              <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
              <path d="M 168,32 L 168,64" fill="none" stroke="black"/>
              <path d="M 232,72 L 232,96" fill="none" stroke="black"/>
              <path d="M 280,32 L 280,64" fill="none" stroke="black"/>
              <path d="M 312,32 L 312,64" fill="none" stroke="black"/>
              <path d="M 392,72 L 392,96" fill="none" stroke="black"/>
              <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 136,32" fill="none" stroke="black"/>
              <path d="M 168,32 L 280,32" fill="none" stroke="black"/>
              <path d="M 312,32 L 464,32" fill="none" stroke="black"/>
              <path d="M 144,48 L 160,48" fill="none" stroke="black"/>
              <path d="M 288,48 L 304,48" fill="none" stroke="black"/>
              <path d="M 8,64 L 136,64" fill="none" stroke="black"/>
              <path d="M 168,64 L 280,64" fill="none" stroke="black"/>
              <path d="M 312,64 L 464,64" fill="none" stroke="black"/>
              <path d="M 64,96 L 256,96" fill="none" stroke="black"/>
              <path d="M 352,96 L 392,96" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="296,48 284,42.4 284,53.6" fill="black" transform="rotate(180,288,48)"/>
              <polygon class="arrowhead" points="240,72 228,66.4 228,77.6" fill="black" transform="rotate(270,232,72)"/>
              <polygon class="arrowhead" points="152,48 140,42.4 140,53.6" fill="black" transform="rotate(180,144,48)"/>
              <polygon class="arrowhead" points="72,72 60,66.4 60,77.6" fill="black" transform="rotate(270,64,72)"/>
              <g class="text">
                <text x="72" y="52">m.room.create</text>
                <text x="224" y="52">m.room.user</text>
                <text x="388" y="52">m.room.encrypted</text>
                <text x="276" y="100">auth</text>
                <text x="324" y="100">events</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+---------------+   +-------------+   +------------------+
| m.room.create |<--| m.room.user |<--| m.room.encrypted |
+---------------+   +-------------+   +------------------+
       ^                    ^                   |
       +--------------------+---auth events-----+
]]></artwork>
        </artset>
      </figure>
      <t>The <tt>m.room.encrypted</tt> event (not specified in this document) has the <tt>m.room.user</tt> event
as its only previous event, but points at both the <tt>m.room.user</tt> and <tt>m.room.create</tt> events
as auth events. In practice, a room would likely have more <tt>m.room.user</tt> events to represent
other users in the room, rather than this example user conversing with themselves.</t>
      <t><strong>TODO(TR): Should we replace room IDs with the create event's ID?
(<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/1">GH issue</eref>)</strong></t>
    </section>
    <section anchor="int-events">
      <name>Events</name>
      <t>The concept of events is described by Section 5.1 of <xref target="I-D.barnes-mimi-arch"/>. An event is
authenticated against its TLS presentation language format (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
      <artwork><![CDATA[
// Consists of a server's signatures using their signing key. The transport
// specification defines which specific signing key algorithm is used. This
// document describes *what* a signature covers.
opaque Signatures;
struct {
  // where the event is sent to
  opaque roomId;

  // the type of event. Defines format for content
  // See "Event Types" IANA registry.
  opaque type;

  // if present, the event is a state event
  opaque [[stateKey]];

  // who or what sent this event
  opaque sender;

  // binary type-specific event content (TODO(TR): type??)
  opaque content;

  // the event IDs of the auth events
  opaque authEvents[];

  // the parent event ID
  opaque prevEvent;

  // the origin server's content hash of the event
  uint8 originContentHash[32];

  Signatures hubSignature;
  Signatures originSignature;
} Event;
]]></artwork>
      <t><strong>TODO(TR): Should we bring over origin_server_ts?
(<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/2">GH issue</eref>)</strong></t>
      <t><strong>TODO(TR): Maximum lengths? (or is this a transport/not-us problem?)
(<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/3">GH issue</eref>)</strong></t>
      <t>Note that an "event ID" is not specified on the object. The event ID for an event is the
sigil <tt>$</tt> followed by the URL-Safe Unpadded Base64-encoded reference hash (<xref target="int-reference-hash"/>)
of the event.</t>
      <t>The "origin server" of an event is the server denoted/implied by the <tt>sender</tt>.</t>
      <t><strong>TODO(TR): Do we need to describe how events are extensible? ie: being able to add things
to the m.room.create event content.
(<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/4">GH issue</eref>)</strong></t>
      <section anchor="int-reference-hash">
        <name>Reference Hash</name>
        <t>Events are referenced by ID in relation to each other, forming the room history and auth
chain. If the event ID was a sender-generated value, any server along the send or receive
path could "replace" that event with another perfectly legal event, both using the same ID.</t>
        <t>By using a calculated value, namely the reference hash, if a server does try to replace the
event then it would result in a completely different event ID. That event ID becomes impossible
to reference as it wouldn't be part of the proper room history.</t>
        <t>To calculate a reference hash, the event is first redacted (<xref target="int-redactions"/>) alongside
<tt>hubSignature</tt> and <tt>originSignature</tt> fields being removed. The resulting binary is then
hashed using SHA256 <xref target="RFC6234"/>.</t>
        <t>To further create an event ID, the resulting hash is encoded using URL-Safe Unpadded Base64
and prefixed with the <tt>$</tt> sigil.</t>
      </section>
      <section anchor="int-content-hash">
        <name>Content Hash</name>
        <t>An event's content hash prevents servers from modifying details of the event not covered
by the reference hash itself. For example, a room name state event doesn't have the name
itself covered by a reference hash because it's redacted, so it's instead covered by the
content hash, which is in turn covered by the reference hash. This allows the event to
later be redacted without affecting the event ID of that event.</t>
        <t>To calculate a content hash, the following fields are removed from the event first:</t>
        <ul spacing="normal">
          <li>
            <tt>originContentHash</tt></li>
          <li>
            <tt>hubSignature</tt></li>
          <li>
            <tt>originSignature</tt></li>
          <li>
            <tt>prevEvent</tt></li>
          <li>
            <tt>authEvents</tt></li>
        </ul>
        <t><tt>authEvents</tt> and <tt>prevEvent</tt> are removed because they are populated by the hub server. The
content hash is to preserve the origin server's event, not the hub server's.</t>
        <t>The resulting binary is then hashed using SHA256 <xref target="RFC6234"/>.</t>
      </section>
      <section anchor="int-redactions">
        <name>Redaction</name>
        <t>The process of removing fields from an event which aren't important for the overall protocol
to operate is known as "redaction". This document protects fields of events required for
signaling to work while a policy document or encryption/security protocol will define their
own fields. For example, the MLS ciphertext for a proposal or commit might be preserved through
redaction to avoid breaking the MLS group for future participants.</t>
        <t>The default behaviour for any event type is to remove all fields <em>not</em> specified by <xref target="int-events"/>,
excluding <tt>content</tt>. Individual event types <bcp14>MAY</bcp14> specify their own redaction behaviour for <tt>content</tt>.</t>
      </section>
    </section>
    <section anchor="room-metadata">
      <name>Room Metadata</name>
      <t>Information about the room such as its name, topic (description), avatar, etc is described by state
events. State events are also used for policy control configuration, as specified elsewhere in this
document.</t>
      <t>This document describes the following event types for room metadata purposes.</t>
      <section anchor="int-ev-name">
        <name><tt>m.room.name</tt></name>
        <t><strong>State key</strong>: Empty string.</t>
        <t><strong>Content</strong>:</t>
        <artwork><![CDATA[
struct {
  // human-readable name for the room. May be empty or missing to denote
  // no name.
  opaque name;
} MRoomNameEventContent;
]]></artwork>
        <t><strong>Redaction considerations</strong>: None. It is considered a feature that the room name can be redacted
to remove unwanted room names. A redacted <tt>m.room.name</tt> event is treated the same as a room without
an <tt>m.room.name</tt> event present.</t>
      </section>
      <section anchor="int-ev-avatar">
        <name><tt>m.room.avatar</tt></name>
        <t><strong>State key</strong>: Empty string.</t>
        <t><strong>Content</strong>:</t>
        <artwork><![CDATA[
struct {
  // human-usable image to differentiate the room visually.
  // TODO(TR): Do we know how images are being sent in MIMI?
  opaque mediaUri;
} MRoomAvatarEventContent;
]]></artwork>
        <t><strong>Redaction considerations</strong>: None. It is considered a feature that the room avatar can be redacted
to remove unwanted room avatars. A redacted <tt>m.room.avatar</tt> event is treated the same as a room without
an <tt>m.room.avatar</tt> event present.</t>
      </section>
      <section anchor="int-ev-topic">
        <name><tt>m.room.topic</tt></name>
        <t><strong>State key</strong>: Empty string.</t>
        <t><strong>Content</strong>:</t>
        <artwork><![CDATA[
struct {
  // human-readable description for the room.
  opaque topic;
} MRoomTopicEventContent;
]]></artwork>
        <t><strong>Redaction considerations</strong>: None. It is considered a feature that the room topic can be redacted
to remove unwanted room topics. A redacted <tt>m.room.topic</tt> event is treated the same as a room without
an <tt>m.room.topic</tt> event present.</t>
      </section>
    </section>
    <section anchor="protocol-events">
      <name>Protocol Events</name>
      <section anchor="int-ev-create">
        <name><tt>m.room.create</tt></name>
        <t><strong>State key</strong>: Empty string.</t>
        <t><strong>Content</strong>:</t>
        <artwork><![CDATA[
struct {
  // The policy envelope the room is using.
  // See the "Policy IDs" IANA registry.
  opaque policyId;

  // The encryption/security algorithm name in use for the room.
  // TODO(TR): Does this also need an IANA registry? Currently we expect
  // this to be `m.mls` or something, maybe with ciphersuite encoded or
  // defined adjacent?
  opaque encryptionAlgorithm;
} MRoomCreateEventContent;
]]></artwork>
        <t><strong>Redaction considerations</strong>: All <tt>content</tt> is <em>not</em> redacted.</t>
      </section>
      <section anchor="int-ev-user">
        <name><tt>m.room.user</tt></name>
        <t><strong>State key</strong>: The user ID the participation event affects.</t>
        <t><strong>Content</strong>:</t>
        <artwork><![CDATA[
opaque ParticipationState; // see policy envelope document
struct {
  // The participation state the user is in. Legal values are described by
  // the policy envelope for the room.
  ParticipationState participation;
} MRoomUserEventContent;
]]></artwork>
        <t><strong>Redaction considerations</strong>: <tt>participation</tt> under <tt>content</tt> is protected from redaction.</t>
      </section>
    </section>
    <section anchor="transport">
      <name>Transport</name>
      <t><strong>TODO(TR): Link to I-D.kohbrok-mimi-transport</strong> describes a series of REST endpoints
for communicating between servers. The following transaction types are defined with
respect to signaling.</t>
      <section anchor="sending-events">
        <name>Sending Events</name>
        <t><strong>TODO(TR): Specifics. (<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/5">GH issue</eref>)</strong></t>
        <ul spacing="normal">
          <li>One event at a time</li>
          <li>Mark whether it's hub-&gt;follower, or follower-&gt;hub</li>
          <li>
            <t>When follower-&gt;hub, mention that some fields are excluded on the event
            </t>
            <ul spacing="normal">
              <li>Hub then validates the event (proper shape, legal fields, enforce policy)</li>
              <li>If valid, hub appends its signatures and other fields, and adds it to the room</li>
              <li>Added events are then fanned out to all relevant servers</li>
            </ul>
          </li>
          <li>Unordered sequencing, re-assembled from <tt>prevEvent</tt></li>
        </ul>
      </section>
      <section anchor="retrieving-events">
        <name>Retrieving Events</name>
        <t>If a server notices that it missed an event, or simply wishes to re-request a
particular event, it can use the following operations.</t>
        <t><strong>TODO(TR): Specifics. (<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/5">GH issue</eref>)</strong></t>
        <ul spacing="normal">
          <li>Get event by ID</li>
          <li>Get state event by type &amp; state key</li>
          <li>Get batch of previous events?</li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA creates the following registries:</t>
      <ul spacing="normal">
        <li>Event Types</li>
        <li>Policy IDs</li>
      </ul>
      <section anchor="event-types-registry">
        <name>Event Types Registry</name>
        <t><strong>TODO(TR): Is this what IANA actually wants? (<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/6">GH issue</eref>)</strong></t>
        <t>An event type is used to determine the type of <tt>content</tt> being carried by an event. The type <bcp14>MAY</bcp14>
further influence policy, participation, or other aspects of the overall MIMI stack. For example,
an event type for sending an encrypted MLS application message may be specified.</t>
        <t>Event types <bcp14>MUST</bcp14> be prefixed with a reverse domain namespace (i.e.: <tt>org.example.my_event</tt>). Event
types starting with <tt>m.</tt> are reserved for use within the MIMI working group. Event types are issued
on a first-come first-serve basis.</t>
        <t>Each event type registration <bcp14>MUST</bcp14> be accompanied by a <tt>content</tt> definition. Registrations <bcp14>MUST</bcp14> also
indicate whether the event type is for a state event, and if so what describes a legal <tt>stateKey</tt>.
An event type <bcp14>MUST NOT</bcp14> be used for both a state event and non-state event.</t>
        <t>The following event types and their <tt>content</tt> definitions are reserved as the first entries in this
registry:</t>
        <ul spacing="normal">
          <li>
            <tt>m.room.create</tt> (<xref target="int-ev-create"/>)</li>
          <li>
            <tt>m.room.user</tt> (<xref target="int-ev-user"/>)</li>
          <li>
            <tt>m.room.name</tt> (<xref target="int-ev-name"/>)</li>
          <li>
            <tt>m.room.avatar</tt> (<xref target="int-ev-avatar"/>)</li>
          <li>
            <tt>m.room.topic</tt> (<xref target="int-ev-topic"/>)</li>
        </ul>
        <section anchor="mimi-namespace-conventions">
          <name>MIMI Namespace Conventions</name>
          <t>Events in the <tt>m.</tt> namespace <bcp14>SHOULD</bcp14> use <tt>m.room.</tt> as a prefix to account for future flexibility and
expansion.</t>
        </section>
      </section>
      <section anchor="policy-ids">
        <name>Policy IDs</name>
        <t><strong>TODO(TR): Is this what IANA actually wants?(<eref target="https://github.com/turt2live/ietf-mimi-signaling/issues/6">GH issue</eref>)</strong></t>
        <t>A policy ID is the identifier to describe the policy envelope the room is using. Policy IDs <bcp14>MUST</bcp14> be
prefixed with a reverse domain namespace (i.e.: <tt>org.example.my_event</tt>). Policy IDs starting with
<tt>m.</tt> are reserved for use within the MIMI working group. Policy IDs are issued on a first-come
first-serve basis.</t>
        <t>This document does not describe any initial entries for this registry.</t>
        <section anchor="mimi-namespace-conventions-1">
          <name>MIMI Namespace Conventions</name>
          <t>Policy IDs in the <tt>m.</tt> namespace <bcp14>SHOULD</bcp14> be suffixed with an integer to denote relative ordering/stability.
For example, <tt>m.0</tt> for an initial "version" of the policy envelope.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="I-D.barnes-mimi-arch">
          <front>
            <title>An Architecture for More Instant Messaging Interoperability (MIMI)</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="22" month="September" year="2023"/>
            <abstract>
              <t>   The More Instant Messaging Interoperability (MIMI) working group is
   defining a suite of protocols that allow messaging providers to
   interoperate with one another.  This document lays out an overall
   architecture enumerating the MIMI protocols and how they work
   together to enable an overall messaging experience.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-barnes-mimi-arch-01"/>
        </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>
        <reference anchor="I-D.ralston-mimi-terminology">
          <front>
            <title>MIMI Terminology</title>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document introduces a set of terminology to use when discussing
   or describing concepts within MIMI.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-terminology-02"/>
        </reference>
        <reference anchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <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>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
hXfKREUAAA==

-->

</rfc>
