<?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.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mimi-arch-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title abbrev="MIMI Architecture">An Architecture for More Instant Messaging Interoperability (MIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-arch-00"/>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <date year="2024" month="April" day="02"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>messaging</keyword>
    <keyword>end-to-end security</keyword>
    <abstract>
      <?line 35?>

<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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-mimi-arch/"/>.
      </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/bifurcation/mimi-arch"/>.</t>
    </note>
  </front>
  <middle>
    <?line 42?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Today, there are many providers of messaging functionality.  A provider
typically provides the client software (e.g., a mobile app) and the servers that
facilitate communications among clients.  The core function of MIMI is enabling
users to have messaging interactions across message providers.</t>
      <t>This overall goal breaks down into several sub-goals:</t>
      <ul spacing="normal">
        <li>
          <t>Message formats that enable the user-level features of a messaging system</t>
        </li>
        <li>
          <t>Tracking of state across multiple providers</t>
        </li>
        <li>
          <t>End-to-end security of user messages</t>
        </li>
        <li>
          <t>Transport of protocol messages among providers</t>
        </li>
      </ul>
      <t>In this document, we describe the high-level functions of these protocols, and
how they work toegether to enable an overall messaging application.</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>The following terms are used by this document and the MIMI working group for a
shared understanding of the overall system:</t>
      <t><em>Messaging Provider</em> or <em>Provider</em>: A service offering instant messaging to
users. Each provider has a logical server to route events between users (or
clients, more specifically).</t>
      <t><em>User</em>: A (normally) human operator of a client. Users have a distinct <em>User ID</em>
to canonically identify them.</t>
      <t><em>Client</em>: A user interface for messaging, performing encryption as needed. Presents
chats to the user to interact with. Synonymous with <em>MLS Client</em>. Clients have
a <em>Client ID</em> to canonically represent them among the user's other clients. Clients
<bcp14>MAY</bcp14> also be called <em>Devices</em> to differentiate them from a named application.</t>
      <t><em>Server</em>: A logical location operated by a messaging provider which ensures
message and information delivery. A server may be realized by multiple physical
computers. Servers own users which belong to them. Servers are considered to be
"participating" in a room if they have at least one joined user participant.</t>
      <t><em>Hub</em>: The specific server in a room with operational responsibility for delivery
between all servers in the room. This includes messages and, where applicable,
information about the room or underlying cryptographic state.</t>
      <t><em>Follower</em>: All non-hub servers in a room. Followers are required to interact
with the hub server to send messages, and are responsible for "last mile" delivery
of a message to its local users.</t>
      <t><em>Room</em>: The virtual space where users communicate. This is semantically different
from an <em>MLS Group</em>: an MLS Group is responsible for handling client keys while
a room is simply the user-facing construct for communications. Rooms have a
cryptographic state component as well. MLS uses a Group to represent that state.
Rooms have a <em>Room ID</em> to canonically identify them. Rooms may additionally be
called <em>Chats</em>, <em>Conversations</em>, or <em>Channels</em>.</t>
      <t><em>State</em>: The room's user participation information, cryptographic state, and other
metadata as required, collectively.</t>
      <t><em>User Participation</em>: The set of users which can engage in conversation within a
given room, or could engage if they complete further actions. For example, users
may be "invited" to converse, and can accept (join) or reject (leave). Users are
not considered to have "membership". Instead, users are <em>participants</em> in the
room. A list of these users is called the <em>Participant List</em>.</t>
      <t><em>Client Membership</em>: The set of clients belonging to participating users within
a given room's cryptographic state. Clients are not considered to have
"participation". Instead, clients are <em>members</em> of the room. A list of these
clients is called the <em>Membership</em> for a room.</t>
      <t><em>Active Participant</em>: A participating user with at least one client member in the
room's cryptographic state.</t>
      <t><em>Inactive Participant</em>: A participating user with zero client members in the room's
cryptographic state. Users in this state may be unable to decrypt messages sent
while no clients are members.</t>
      <t><em>Add</em> (Operation): Places a client or user into a joined state, able to converse
with other clients/users also in the joined state. When adding a user, all of
their clients are implicitly added as well.</t>
      <t><em>Remove</em> (Operation): Kicks a client or user from a room, preventing further
conversation being received from that entity, and preventing that entity from
seeing future conversation. When a user is removed, all of their clients are
explicitly removed as well. Removal may be voluntary or non-voluntary.</t>
      <t><em>Policy</em>: The authorization structure within a room. Policy governs whether an
action is possible, such as whether User A can add User B to the room. Policies
are changed over time by users and servers.</t>
      <t><em>Policy Envelope</em>: Set by the hub server during room creation, the set of policies
which can be changed in the room.</t>
      <t><em>Event</em>: A structure used by servers to relay changes to the room and messages
from clients.</t>
      <t><em>State Event</em>: An event which mutates the <em>state</em> of the room. These may partially
be visible to the servers of the room for authentication and authorization.</t>
      <t><em>Message Event</em>: An event containing a message from a client. Contents are not
visible to servers in the room.</t>
    </section>
    <section anchor="overall-scope">
      <name>Overall Scope</name>
      <t><xref target="overview"/> shows the critical entities in the overall MIMI system and their
interactions.  Each human <em>user</em> is represented in the system by one or more
<em>clients</em>, where each client is a specific software or hardware system belonging
to a single user.  Each provider is represented by a <em>server</em> (logically a
single server, but possibly realized by multiple physical devices).</t>
      <t>Messaging interactions are organized around <em>rooms</em>.  All messaging interactions
take place in the context of a room.  (Some non-messaging interactions may take
place outside of a room, such as operations to fetch information required to set
up a room.)  Rooms have a notion of
<em>user participation</em> as well as <em>client membership</em>, both tracked as lists.
Rooms additionally have policies about things like how the room may be joined
and what capabilities each member/participant has.</t>
      <t>The protocol interactions that drive a room unfold among the servers whose users
are participants in the room.  There is exactly one <em>hub</em> server for the room, which
is in primary control of the room.  All other servers are known as <em>followers</em>.
Follower servers interact directly with the hub server.  Interactions between
clients occur indirectly, via the servers for the clients' providers.</t>
      <figure anchor="overview">
        <name>MIMI Entities and Interactions</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="504" viewBox="0 0 504 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,256 L 112,320" fill="none" stroke="black"/>
              <path d="M 136,88 L 136,136" fill="none" stroke="black"/>
              <path d="M 136,264 L 136,312" fill="none" stroke="black"/>
              <path d="M 136,440 L 136,488" fill="none" stroke="black"/>
              <path d="M 152,64 L 152,96" fill="none" stroke="black"/>
              <path d="M 152,128 L 152,160" fill="none" stroke="black"/>
              <path d="M 152,240 L 152,272" fill="none" stroke="black"/>
              <path d="M 152,304 L 152,336" fill="none" stroke="black"/>
              <path d="M 152,416 L 152,448" fill="none" stroke="black"/>
              <path d="M 152,480 L 152,512" fill="none" stroke="black"/>
              <path d="M 240,64 L 240,96" fill="none" stroke="black"/>
              <path d="M 240,128 L 240,160" fill="none" stroke="black"/>
              <path d="M 240,240 L 240,272" fill="none" stroke="black"/>
              <path d="M 240,304 L 240,336" fill="none" stroke="black"/>
              <path d="M 240,416 L 240,448" fill="none" stroke="black"/>
              <path d="M 240,480 L 240,512" fill="none" stroke="black"/>
              <path d="M 264,80 L 264,144" fill="none" stroke="black"/>
              <path d="M 264,256 L 264,320" fill="none" stroke="black"/>
              <path d="M 264,432 L 264,496" fill="none" stroke="black"/>
              <path d="M 288,96 L 288,128" fill="none" stroke="black"/>
              <path d="M 288,272 L 288,304" fill="none" stroke="black"/>
              <path d="M 288,448 L 288,480" fill="none" stroke="black"/>
              <path d="M 320,64 L 320,88" fill="none" stroke="black"/>
              <path d="M 320,136 L 320,160" fill="none" stroke="black"/>
              <path d="M 320,240 L 320,264" fill="none" stroke="black"/>
              <path d="M 320,312 L 320,336" fill="none" stroke="black"/>
              <path d="M 320,416 L 320,440" fill="none" stroke="black"/>
              <path d="M 320,488 L 320,512" fill="none" stroke="black"/>
              <path d="M 344,64 L 344,88" fill="none" stroke="black"/>
              <path d="M 344,136 L 344,264" fill="none" stroke="black"/>
              <path d="M 344,312 L 344,440" fill="none" stroke="black"/>
              <path d="M 344,488 L 344,512" fill="none" stroke="black"/>
              <path d="M 376,128 L 376,272" fill="none" stroke="black"/>
              <path d="M 376,304 L 376,448" fill="none" stroke="black"/>
              <path d="M 392,96 L 392,128" fill="none" stroke="black"/>
              <path d="M 392,272 L 392,304" fill="none" stroke="black"/>
              <path d="M 392,448 L 392,480" fill="none" stroke="black"/>
              <path d="M 496,64 L 496,512" fill="none" stroke="black"/>
              <path d="M 152,48 L 304,48" fill="none" stroke="black"/>
              <path d="M 360,48 L 480,48" fill="none" stroke="black"/>
              <path d="M 24,64 L 56,64" fill="none" stroke="black"/>
              <path d="M 152,64 L 240,64" fill="none" stroke="black"/>
              <path d="M 72,80 L 152,80" fill="none" stroke="black"/>
              <path d="M 240,80 L 264,80" fill="none" stroke="black"/>
              <path d="M 24,96 L 56,96" fill="none" stroke="black"/>
              <path d="M 152,96 L 240,96" fill="none" stroke="black"/>
              <path d="M 288,96 L 392,96" fill="none" stroke="black"/>
              <path d="M 264,112 L 288,112" fill="none" stroke="black"/>
              <path d="M 24,128 L 40,128" fill="none" stroke="black"/>
              <path d="M 152,128 L 240,128" fill="none" stroke="black"/>
              <path d="M 288,128 L 392,128" fill="none" stroke="black"/>
              <path d="M 56,144 L 152,144" fill="none" stroke="black"/>
              <path d="M 240,144 L 264,144" fill="none" stroke="black"/>
              <path d="M 24,160 L 40,160" fill="none" stroke="black"/>
              <path d="M 152,160 L 240,160" fill="none" stroke="black"/>
              <path d="M 152,176 L 304,176" fill="none" stroke="black"/>
              <path d="M 152,224 L 304,224" fill="none" stroke="black"/>
              <path d="M 152,240 L 240,240" fill="none" stroke="black"/>
              <path d="M 112,256 L 152,256" fill="none" stroke="black"/>
              <path d="M 240,256 L 264,256" fill="none" stroke="black"/>
              <path d="M 24,272 L 72,272" fill="none" stroke="black"/>
              <path d="M 152,272 L 240,272" fill="none" stroke="black"/>
              <path d="M 288,272 L 392,272" fill="none" stroke="black"/>
              <path d="M 88,288 L 112,288" fill="none" stroke="black"/>
              <path d="M 264,288 L 288,288" fill="none" stroke="black"/>
              <path d="M 24,304 L 72,304" fill="none" stroke="black"/>
              <path d="M 152,304 L 240,304" fill="none" stroke="black"/>
              <path d="M 288,304 L 392,304" fill="none" stroke="black"/>
              <path d="M 112,320 L 152,320" fill="none" stroke="black"/>
              <path d="M 240,320 L 264,320" fill="none" stroke="black"/>
              <path d="M 152,336 L 240,336" fill="none" stroke="black"/>
              <path d="M 152,352 L 304,352" fill="none" stroke="black"/>
              <path d="M 152,400 L 304,400" fill="none" stroke="black"/>
              <path d="M 24,416 L 56,416" fill="none" stroke="black"/>
              <path d="M 152,416 L 240,416" fill="none" stroke="black"/>
              <path d="M 72,432 L 152,432" fill="none" stroke="black"/>
              <path d="M 240,432 L 264,432" fill="none" stroke="black"/>
              <path d="M 24,448 L 56,448" fill="none" stroke="black"/>
              <path d="M 152,448 L 240,448" fill="none" stroke="black"/>
              <path d="M 288,448 L 392,448" fill="none" stroke="black"/>
              <path d="M 264,464 L 288,464" fill="none" stroke="black"/>
              <path d="M 24,480 L 64,480" fill="none" stroke="black"/>
              <path d="M 152,480 L 240,480" fill="none" stroke="black"/>
              <path d="M 288,480 L 392,480" fill="none" stroke="black"/>
              <path d="M 80,496 L 152,496" fill="none" stroke="black"/>
              <path d="M 240,496 L 264,496" fill="none" stroke="black"/>
              <path d="M 24,512 L 64,512" fill="none" stroke="black"/>
              <path d="M 152,512 L 240,512" fill="none" stroke="black"/>
              <path d="M 152,528 L 304,528" fill="none" stroke="black"/>
              <path d="M 360,528 L 480,528" fill="none" stroke="black"/>
              <path d="M 152,48 C 143.16936,48 136,55.16936 136,64" fill="none" stroke="black"/>
              <path d="M 304,48 C 312.83064,48 320,55.16936 320,64" fill="none" stroke="black"/>
              <path d="M 360,48 C 351.16936,48 344,55.16936 344,64" fill="none" stroke="black"/>
              <path d="M 480,48 C 488.83064,48 496,55.16936 496,64" fill="none" stroke="black"/>
              <path d="M 24,64 C 15.16936,64 8,71.16936 8,80" fill="none" stroke="black"/>
              <path d="M 56,64 C 64.83064,64 72,71.16936 72,80" fill="none" stroke="black"/>
              <path d="M 24,96 C 15.16936,96 8,88.83064 8,80" fill="none" stroke="black"/>
              <path d="M 56,96 C 64.83064,96 72,88.83064 72,80" fill="none" stroke="black"/>
              <path d="M 24,128 C 15.16936,128 8,135.16936 8,144" fill="none" stroke="black"/>
              <path d="M 40,128 C 48.83064,128 56,135.16936 56,144" fill="none" stroke="black"/>
              <path d="M 24,160 C 15.16936,160 8,152.83064 8,144" fill="none" stroke="black"/>
              <path d="M 40,160 C 48.83064,160 56,152.83064 56,144" fill="none" stroke="black"/>
              <path d="M 152,176 C 143.16936,176 136,168.83064 136,160" fill="none" stroke="black"/>
              <path d="M 304,176 C 312.83064,176 320,168.83064 320,160" fill="none" stroke="black"/>
              <path d="M 152,224 C 143.16936,224 136,231.16936 136,240" fill="none" stroke="black"/>
              <path d="M 304,224 C 312.83064,224 320,231.16936 320,240" fill="none" stroke="black"/>
              <path d="M 24,272 C 15.16936,272 8,279.16936 8,288" fill="none" stroke="black"/>
              <path d="M 72,272 C 80.83064,272 88,279.16936 88,288" fill="none" stroke="black"/>
              <path d="M 24,304 C 15.16936,304 8,296.83064 8,288" fill="none" stroke="black"/>
              <path d="M 72,304 C 80.83064,304 88,296.83064 88,288" fill="none" stroke="black"/>
              <path d="M 152,352 C 143.16936,352 136,344.83064 136,336" fill="none" stroke="black"/>
              <path d="M 304,352 C 312.83064,352 320,344.83064 320,336" fill="none" stroke="black"/>
              <path d="M 152,400 C 143.16936,400 136,407.16936 136,416" fill="none" stroke="black"/>
              <path d="M 304,400 C 312.83064,400 320,407.16936 320,416" fill="none" stroke="black"/>
              <path d="M 24,416 C 15.16936,416 8,423.16936 8,432" fill="none" stroke="black"/>
              <path d="M 56,416 C 64.83064,416 72,423.16936 72,432" fill="none" stroke="black"/>
              <path d="M 24,448 C 15.16936,448 8,440.83064 8,432" fill="none" stroke="black"/>
              <path d="M 56,448 C 64.83064,448 72,440.83064 72,432" fill="none" stroke="black"/>
              <path d="M 24,480 C 15.16936,480 8,487.16936 8,496" fill="none" stroke="black"/>
              <path d="M 64,480 C 72.83064,480 80,487.16936 80,496" fill="none" stroke="black"/>
              <path d="M 24,512 C 15.16936,512 8,504.83064 8,496" fill="none" stroke="black"/>
              <path d="M 64,512 C 72.83064,512 80,504.83064 80,496" fill="none" stroke="black"/>
              <path d="M 152,528 C 143.16936,528 136,520.83064 136,512" fill="none" stroke="black"/>
              <path d="M 304,528 C 312.83064,528 320,520.83064 320,512" fill="none" stroke="black"/>
              <path d="M 360,528 C 351.16936,528 344,520.83064 344,512" fill="none" stroke="black"/>
              <path d="M 480,528 C 488.83064,528 496,520.83064 496,512" fill="none" stroke="black"/>
              <g class="text">
                <text x="40" y="36">Users</text>
                <text x="188" y="36">Provider</text>
                <text x="232" y="36">X</text>
                <text x="380" y="36">Room</text>
                <text x="416" y="36">123</text>
                <text x="40" y="84">Alice</text>
                <text x="188" y="84">Client</text>
                <text x="224" y="84">A</text>
                <text x="332" y="116">Server</text>
                <text x="368" y="116">1</text>
                <text x="444" y="116">(Follower)</text>
                <text x="32" y="148">Bob</text>
                <text x="188" y="148">Client</text>
                <text x="224" y="148">B</text>
                <text x="188" y="212">Provider</text>
                <text x="232" y="212">Y</text>
                <text x="188" y="260">Client</text>
                <text x="224" y="260">C</text>
                <text x="48" y="292">Charlie</text>
                <text x="332" y="292">Server</text>
                <text x="368" y="292">2</text>
                <text x="424" y="292">(Hub)</text>
                <text x="188" y="324">Client</text>
                <text x="224" y="324">D</text>
                <text x="188" y="388">Provider</text>
                <text x="232" y="388">Z</text>
                <text x="40" y="436">Diana</text>
                <text x="188" y="436">Client</text>
                <text x="224" y="436">E</text>
                <text x="332" y="468">Server</text>
                <text x="368" y="468">3</text>
                <text x="444" y="468">(Follower)</text>
                <text x="44" y="500">Evelyn</text>
                <text x="188" y="500">Client</text>
                <text x="224" y="500">F</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
  Users            Provider X                Room 123
                 .--------------------.    .----------------.
 .-----.        | +----------+         |  |                  |
| Alice +---------+ Client A +--+      |  |                  |
 '-----'        | +----------+  |  +------------+            |
                |               +--+  Server 1  | (Follower) |
 .---.          | +----------+  |  +----------+-+            |
| Bob +-----------+ Client B +--+      |  |   |              |
 '---'          | +----------+         |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Y             |   |              |
                 .--------------------.   |   |              |
                | +----------+         |  |   |              |
             +----+ Client C +--+      |  |   |              |
 .-------.   |  | +----------+  |  +----------+-+            |
| Charlie +--+  |               +--+  Server 2  | (Hub)      |
 '-------'   |  | +----------+  |  +----------+-+            |
             +----+ Client D +--+      |  |   |              |
                | +----------+         |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Z             |   |              |
                 .--------------------.   |   |              |
 .-----.        | +----------+         |  |   |              |
| Diana +---------+ Client E +--+      |  |   |              |
 '-----'        | +----------+  |  +----------+-+            |
                |               +--+  Server 3  | (Follower) |
 .------.       | +----------+  |  +------------+            |
| Evelyn +--------+ Client F +--+      |  |                  |
 '------'       | +----------+         |  |                  |
                 '--------------------'    '----------------'
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="room-state">
      <name>Room State</name>
      <t>A room represnts a messaging interaction among a specific set of clients, with a
single <em>state</em>.  A major goal of the MIMI protocols is to syncrhonize the state
of a room across all of the servers and clients participating in the room.
Changes to the room's state can be proposed by either clients or servers, though
as dicussed in <xref target="policy"/>, one important aspect of the room's state is an
authorization policy that determines which actors are allowed to make which
changes.</t>
      <t>The creation of a room is a local operation on the hub server, and thus outside
the scope of MIMI.  The hub server establishes the initial state of the room.</t>
      <t>The state of the room includes a few types of information, most importantly:</t>
      <ul spacing="normal">
        <li>
          <t>The end-to-end security state of the room</t>
        </li>
        <li>
          <t>The user-level participation state of the room</t>
        </li>
        <li>
          <t>The authorization policy for the room</t>
        </li>
      </ul>
      <figure anchor="fig-room-state">
        <name>Elements of the Room State</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="552" viewBox="0 0 552 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,368" fill="none" stroke="black"/>
              <path d="M 160,32 L 160,120" fill="none" stroke="black"/>
              <path d="M 160,136 L 160,184" fill="none" stroke="black"/>
              <path d="M 160,200 L 160,312" fill="none" stroke="black"/>
              <path d="M 160,328 L 160,368" fill="none" stroke="black"/>
              <path d="M 192,32 L 192,120" fill="none" stroke="black"/>
              <path d="M 192,136 L 192,184" fill="none" stroke="black"/>
              <path d="M 192,200 L 192,312" fill="none" stroke="black"/>
              <path d="M 192,328 L 192,368" fill="none" stroke="black"/>
              <path d="M 384,32 L 384,120" fill="none" stroke="black"/>
              <path d="M 384,136 L 384,184" fill="none" stroke="black"/>
              <path d="M 384,200 L 384,368" fill="none" stroke="black"/>
              <path d="M 400,192 L 400,256" fill="none" stroke="black"/>
              <path d="M 416,32 L 416,120" fill="none" stroke="black"/>
              <path d="M 416,136 L 416,184" fill="none" stroke="black"/>
              <path d="M 416,200 L 416,248" fill="none" stroke="black"/>
              <path d="M 416,264 L 416,368" fill="none" stroke="black"/>
              <path d="M 544,32 L 544,368" fill="none" stroke="black"/>
              <path d="M 8,32 L 160,32" fill="none" stroke="black"/>
              <path d="M 192,32 L 384,32" fill="none" stroke="black"/>
              <path d="M 416,32 L 544,32" fill="none" stroke="black"/>
              <path d="M 40,112 L 128,112" fill="none" stroke="black"/>
              <path d="M 224,112 L 352,112" fill="none" stroke="black"/>
              <path d="M 448,112 L 512,112" fill="none" stroke="black"/>
              <path d="M 144,128 L 208,128" fill="none" stroke="black"/>
              <path d="M 368,128 L 432,128" fill="none" stroke="black"/>
              <path d="M 40,144 L 128,144" fill="none" stroke="black"/>
              <path d="M 224,144 L 352,144" fill="none" stroke="black"/>
              <path d="M 448,144 L 512,144" fill="none" stroke="black"/>
              <path d="M 40,176 L 128,176" fill="none" stroke="black"/>
              <path d="M 224,176 L 352,176" fill="none" stroke="black"/>
              <path d="M 448,176 L 512,176" fill="none" stroke="black"/>
              <path d="M 144,192 L 208,192" fill="none" stroke="black"/>
              <path d="M 368,192 L 432,192" fill="none" stroke="black"/>
              <path d="M 40,208 L 128,208" fill="none" stroke="black"/>
              <path d="M 224,208 L 352,208" fill="none" stroke="black"/>
              <path d="M 448,208 L 512,208" fill="none" stroke="black"/>
              <path d="M 448,240 L 512,240" fill="none" stroke="black"/>
              <path d="M 400,256 L 432,256" fill="none" stroke="black"/>
              <path d="M 448,272 L 512,272" fill="none" stroke="black"/>
              <path d="M 40,304 L 128,304" fill="none" stroke="black"/>
              <path d="M 224,304 L 352,304" fill="none" stroke="black"/>
              <path d="M 144,320 L 208,320" fill="none" stroke="black"/>
              <path d="M 40,336 L 128,336" fill="none" stroke="black"/>
              <path d="M 224,336 L 352,336" fill="none" stroke="black"/>
              <path d="M 8,368 L 160,368" fill="none" stroke="black"/>
              <path d="M 192,368 L 384,368" fill="none" stroke="black"/>
              <path d="M 416,368 L 544,368" fill="none" stroke="black"/>
              <path d="M 40,112 C 31.16936,112 24,119.16936 24,128" fill="none" stroke="black"/>
              <path d="M 128,112 C 136.83064,112 144,119.16936 144,128" fill="none" stroke="black"/>
              <path d="M 224,112 C 215.16936,112 208,119.16936 208,128" fill="none" stroke="black"/>
              <path d="M 352,112 C 360.83064,112 368,119.16936 368,128" fill="none" stroke="black"/>
              <path d="M 448,112 C 439.16936,112 432,119.16936 432,128" fill="none" stroke="black"/>
              <path d="M 512,112 C 520.83064,112 528,119.16936 528,128" fill="none" stroke="black"/>
              <path d="M 40,144 C 31.16936,144 24,136.83064 24,128" fill="none" stroke="black"/>
              <path d="M 128,144 C 136.83064,144 144,136.83064 144,128" fill="none" stroke="black"/>
              <path d="M 224,144 C 215.16936,144 208,136.83064 208,128" fill="none" stroke="black"/>
              <path d="M 352,144 C 360.83064,144 368,136.83064 368,128" fill="none" stroke="black"/>
              <path d="M 448,144 C 439.16936,144 432,136.83064 432,128" fill="none" stroke="black"/>
              <path d="M 512,144 C 520.83064,144 528,136.83064 528,128" fill="none" stroke="black"/>
              <path d="M 40,176 C 31.16936,176 24,183.16936 24,192" fill="none" stroke="black"/>
              <path d="M 128,176 C 136.83064,176 144,183.16936 144,192" fill="none" stroke="black"/>
              <path d="M 224,176 C 215.16936,176 208,183.16936 208,192" fill="none" stroke="black"/>
              <path d="M 352,176 C 360.83064,176 368,183.16936 368,192" fill="none" stroke="black"/>
              <path d="M 448,176 C 439.16936,176 432,183.16936 432,192" fill="none" stroke="black"/>
              <path d="M 512,176 C 520.83064,176 528,183.16936 528,192" fill="none" stroke="black"/>
              <path d="M 40,208 C 31.16936,208 24,200.83064 24,192" fill="none" stroke="black"/>
              <path d="M 128,208 C 136.83064,208 144,200.83064 144,192" fill="none" stroke="black"/>
              <path d="M 224,208 C 215.16936,208 208,200.83064 208,192" fill="none" stroke="black"/>
              <path d="M 352,208 C 360.83064,208 368,200.83064 368,192" fill="none" stroke="black"/>
              <path d="M 448,208 C 439.16936,208 432,200.83064 432,192" fill="none" stroke="black"/>
              <path d="M 512,208 C 520.83064,208 528,200.83064 528,192" fill="none" stroke="black"/>
              <path d="M 448,240 C 439.16936,240 432,247.16936 432,256" fill="none" stroke="black"/>
              <path d="M 512,240 C 520.83064,240 528,247.16936 528,256" fill="none" stroke="black"/>
              <path d="M 448,272 C 439.16936,272 432,264.83064 432,256" fill="none" stroke="black"/>
              <path d="M 512,272 C 520.83064,272 528,264.83064 528,256" fill="none" stroke="black"/>
              <path d="M 40,304 C 31.16936,304 24,311.16936 24,320" fill="none" stroke="black"/>
              <path d="M 128,304 C 136.83064,304 144,311.16936 144,320" fill="none" stroke="black"/>
              <path d="M 224,304 C 215.16936,304 208,311.16936 208,320" fill="none" stroke="black"/>
              <path d="M 352,304 C 360.83064,304 368,311.16936 368,320" fill="none" stroke="black"/>
              <path d="M 40,336 C 31.16936,336 24,328.83064 24,320" fill="none" stroke="black"/>
              <path d="M 128,336 C 136.83064,336 144,328.83064 144,320" fill="none" stroke="black"/>
              <path d="M 224,336 C 215.16936,336 208,328.83064 208,320" fill="none" stroke="black"/>
              <path d="M 352,336 C 360.83064,336 368,328.83064 368,320" fill="none" stroke="black"/>
              <g class="text">
                <text x="80" y="68">Authorization</text>
                <text x="272" y="68">Participant</text>
                <text x="340" y="68">List</text>
                <text x="440" y="68">E2E</text>
                <text x="492" y="68">Security</text>
                <text x="84" y="84">Policy</text>
                <text x="480" y="84">State</text>
                <text x="52" y="132">User</text>
                <text x="80" y="132">1</text>
                <text x="112" y="132">Capas</text>
                <text x="244" y="132">User</text>
                <text x="272" y="132">1</text>
                <text x="316" y="132">(active)</text>
                <text x="468" y="132">Client</text>
                <text x="508" y="132">1a</text>
                <text x="52" y="196">User</text>
                <text x="80" y="196">2</text>
                <text x="112" y="196">Capas</text>
                <text x="244" y="196">User</text>
                <text x="272" y="196">2</text>
                <text x="316" y="196">(active)</text>
                <text x="468" y="196">Client</text>
                <text x="508" y="196">2a</text>
                <text x="468" y="260">Client</text>
                <text x="508" y="260">2b</text>
                <text x="52" y="324">User</text>
                <text x="80" y="324">2</text>
                <text x="112" y="324">Capas</text>
                <text x="236" y="324">User</text>
                <text x="264" y="324">2</text>
                <text x="316" y="324">(inactive)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+------------------+   +-----------------------+   +---------------+
|                  |   |                       |   |               |
|  Authorization   |   |    Participant List   |   | E2E Security  |
|      Policy      |   |                       |   |     State     |
|                  |   |                       |   |               |
|  .------------.  |   |  .-----------------.  |   |  .---------.  |
| | User 1 Capas +-------+  User 1 (active)  +-------+ Client 1a | |
|  '------------'  |   |  '-----------------'  |   |  '---------'  |
|                  |   |                       |   |               |
|  .------------.  |   |  .-----------------.  |   |  .---------.  |
| | User 2 Capas +-------+  User 2 (active)  +---+---+ Client 2a | |
|  '------------'  |   |  '-----------------'  | | |  '---------'  |
|                  |   |                       | | |               |
|                  |   |                       | | |  .---------.  |
|                  |   |                       | +---+ Client 2b | |
|                  |   |                       |   |  '---------'  |
|                  |   |                       |   |               |
|  .------------.  |   |  .-----------------.  |   |               |
| | User 2 Capas +-------+ User 2 (inactive) | |   |               |
|  '------------'  |   |  '-----------------'  |   |               |
|                  |   |                       |   |               |
+------------------+   +-----------------------+   +---------------+
]]></artwork>
        </artset>
      </figure>
      <section anchor="end-to-end-security-state">
        <name>End-to-End Security State</name>
        <t>Messages sent within a room are protected by an end-to-end security protocol to
ensure that the servers handling messages cannot inspect or tamper with
messages.  This means that the required cryptographic keys need to be
provisioned to any client from which a user can interact with the room.  The
state of this end-to-end security protocol thus represents the precise set of
clients that can send and receive messages in the room, the most precise notion
of membership for a room.  A client that has the required keys for end-to-end
security is said to be a member of the end-to-end security state of the room.</t>
        <t>The end-to-end security state of a room has public and private aspects.  Servers
may store the public aspects of the end-to-end security state, such as
identities and credentials presented by the clients in the room.  The private
aspects of the group, such as the symmetric encryption keys, are known only to
the clients.</t>
      </section>
      <section anchor="participants-and-members">
        <name>Participants and Members</name>
        <t>The <em>participant list</em> for a room is the set of users who are allowed to interact
with the room in some way.  The specific list of ways in which a user may
participate is defined by authorization policy, as discussed in <xref target="policy"/>.</t>
        <t>Note the parallel terminology with regard to inclusion of clients or users in
the room:</t>
        <ul spacing="normal">
          <li>
            <t>A <em>client</em> is a <em>member</em> of the <em>end-to-end security state</em> of the room</t>
          </li>
          <li>
            <t>A <em>user</em> is a <em>participant</em> in the room</t>
          </li>
        </ul>
        <t>The user-level <em>participant list</em> and the client-level <em>membership</em> of the room
are distinct entities managed by separate protocols, but they must be consistent
with each other.  A client may be a member of the E2EE state of a room only if
its user is a participant in the room.  However, a user may be a participant in
a room without any client belonging to the user being part of the end-to-end
security state of the room.  (Such a user will not be able to read or send
messages, but may be able to take other actions.  It is up to client
implementations how this state is represented.)</t>
        <t>A user with at least one client joined to the end-to-end security state of the
room is known as an <em>active user</em>, since such a user can fully participate in
the room.</t>
      </section>
      <section anchor="membership-changes">
        <name>Membership Changes</name>
        <t>The participant list and client membership of a group can change over time, via <em>add</em> and <em>remove</em>
operations at both the user level and the client level.  These operations are
independent at the protocol level: For example, a user may be added to a room
before any of its clients are available to join, or a user may begin using a new
device (adding the device without changing the user-level participation).</t>
        <t>As discussed above, user-level participation and client-level membership must be kept in sync.
When a user is added, some set of their clients should be added as well; when a
user leaves or is evicted, any clients joined to the room should be removed.
The cryptographic constraints of end-to-end security protocols mean that servers
cannot perform this synchronization; it is up to clients to keep these two types
of state in sync.</t>
      </section>
      <section anchor="policy">
        <name>Policy</name>
        <t>Each room has an associated <em>policy</em> that governs which protocol actions are
authorized for the room while the policy is in effect.  The policy defines
several aspects of the room's behavior, for example:</t>
        <ul spacing="normal">
          <li>
            <t>Admission policy: Do new members need to be explicitly added by a current
member of the room, or can some set of users join unilaterally?</t>
          </li>
          <li>
            <t>Capabilities per user: Is a given user allowed to ...
            </t>
            <ul spacing="normal">
              <li>
                <t>Send messages in the room?</t>
              </li>
              <li>
                <t>Add or remove other users?</t>
              </li>
              <li>
                <t>Grant or deny capabilities to other users?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Capabilities per server: Is a given server participating in the room allowed
to...
            </t>
            <ul spacing="normal">
              <li>
                <t>Add or remove users?</t>
              </li>
              <li>
                <t>Grant or deny capabilities to users?</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>The hub server for a room defines the <em>policy envelope</em> for the room, the set of
of acceptable policies for the room.  The hub also sets the initial policy for
the room when it is created.  Pursuant to that initial policy, the clients and
servers participating in the room may then make further changes to the policy.</t>
        <t>At any given time, all of the clients and servers have the same view of the
room's policy.  A client or server that receives an event that is not compliant
with the room's policy may thus safely discard it, since all of the other
participating clients/servers should also reject the event.</t>
      </section>
    </section>
    <section anchor="protocol-interactions">
      <name>Protocol Interactions</name>
      <t>As shown in <xref target="fig-protocols"/>, MIMI protocols define server-to-server interactions and
client-to-client interactions.  Each client interacts with the overall system by
means of its provider's server (whether hub or follower).  Client-to-client
interactions are done by means of these servers.</t>
      <t>The messages sent within a room are forwarded among participating clients by
servers.  However, messages are protected by an end-to-end security protocol so
that their content is only accessible to the clients participating in the room.</t>
      <t>In addition to forwarding messages, servers participate in control protocols
that coordinate the state of the room across the participating providers.  Both
message forwarding and control protocols leverage a common framework for sharing
<em>events</em> among servers.  Events are protected with the same end-to-end security
protocol as clients' messages, so that the actors updating a room are
authenticated and the clients participating in a room can confirm that they
agree on the state of the room.</t>
      <t>Note that some parts of the overall system are explicitly out of scope for MIMI.
Namely, client-server interactions internal to a provider (indicated by
"(Provider)" in <xref target="fig-protocols"/>) can be arranged however the provider likes.</t>
      <t>The MIMI protocol implemented by servers thus incorporates a few sub-protocols:</t>
      <ul spacing="normal">
        <li>
          <t>A transport protocol for sending room events among servers</t>
        </li>
        <li>
          <t>A state synchronization protocol for coordinating updates to the room state</t>
        </li>
        <li>
          <t>A message forwarding protocol</t>
        </li>
      </ul>
      <t>A common end-to-end security layer provide common security services to all of
these functions.</t>
      <figure anchor="fig-protocols">
        <name>MIMI Protocols</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="520" viewBox="0 0 520 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,112 L 24,304" fill="none" stroke="black"/>
              <path d="M 144,112 L 144,144" fill="none" stroke="black"/>
              <path d="M 144,176 L 144,304" fill="none" stroke="black"/>
              <path d="M 256,112 L 256,128" fill="none" stroke="black"/>
              <path d="M 256,176 L 256,192" fill="none" stroke="black"/>
              <path d="M 256,232 L 256,304" fill="none" stroke="black"/>
              <path d="M 368,112 L 368,144" fill="none" stroke="black"/>
              <path d="M 368,176 L 368,304" fill="none" stroke="black"/>
              <path d="M 488,112 L 488,304" fill="none" stroke="black"/>
              <path d="M 24,64 L 72,64" fill="none" stroke="black"/>
              <path d="M 104,64 L 160,64" fill="none" stroke="black"/>
              <path d="M 208,64 L 240,64" fill="none" stroke="black"/>
              <path d="M 272,64 L 312,64" fill="none" stroke="black"/>
              <path d="M 360,64 L 408,64" fill="none" stroke="black"/>
              <path d="M 440,64 L 496,64" fill="none" stroke="black"/>
              <path d="M 32,158 L 480,158" fill="none" stroke="black"/>
              <path d="M 32,162 L 480,162" fill="none" stroke="black"/>
              <path d="M 32,224 Q 34,220.8 36,224 Q 38,227.2 40,224 Q 42,220.8 44,224 Q 46,227.2 48,224 Q 50,220.8 52,224 Q 54,227.2 56,224 Q 58,220.8 60,224 Q 62,227.2 64,224 Q 66,220.8 68,224 Q 70,227.2 72,224 Q 74,220.8 76,224 Q 78,227.2 80,224 Q 82,220.8 84,224 Q 86,227.2 88,224 Q 90,220.8 92,224 Q 94,227.2 96,224 Q 98,220.8 100,224 Q 102,227.2 104,224 Q 106,220.8 108,224 Q 110,227.2 112,224 Q 114,220.8 116,224 Q 118,227.2 120,224 Q 122,220.8 124,224 Q 126,227.2 128,224 Q 130,220.8 132,224 Q 134,227.2 136,224 " fill="none" stroke="black"/>
              <path d="M 152,224 L 360,224" fill="none" stroke="black"/>
              <path d="M 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 400,224 Q 402,220.8 404,224 Q 406,227.2 408,224 Q 410,220.8 412,224 Q 414,227.2 416,224 Q 418,220.8 420,224 Q 422,227.2 424,224 Q 426,220.8 428,224 Q 430,227.2 432,224 Q 434,220.8 436,224 Q 438,227.2 440,224 Q 442,220.8 444,224 Q 446,227.2 448,224 Q 450,220.8 452,224 Q 454,227.2 456,224 Q 458,220.8 460,224 Q 462,227.2 464,224 Q 466,220.8 468,224 Q 470,227.2 472,224 Q 474,220.8 476,224 Q 478,227.2 480,224 " fill="none" stroke="black"/>
              <path d="M 152,288 L 248,288" fill="none" stroke="black"/>
              <path d="M 264,288 L 360,288" fill="none" stroke="black"/>
              <path d="M 24,64 C 15.16936,64 8,71.16936 8,80" fill="none" stroke="black"/>
              <path d="M 72,64 C 80.83064,64 88,56.83064 88,48" fill="none" stroke="black"/>
              <path d="M 104,64 C 95.16936,64 88,56.83064 88,48" fill="none" stroke="black"/>
              <path d="M 160,64 C 168.83064,64 176,71.16936 176,80" fill="none" stroke="black"/>
              <path d="M 208,64 C 199.16936,64 192,71.16936 192,80" fill="none" stroke="black"/>
              <path d="M 240,64 C 248.83064,64 256,56.83064 256,48" fill="none" stroke="black"/>
              <path d="M 272,64 C 263.16936,64 256,56.83064 256,48" fill="none" stroke="black"/>
              <path d="M 312,64 C 320.83064,64 328,71.16936 328,80" fill="none" stroke="black"/>
              <path d="M 360,64 C 351.16936,64 344,71.16936 344,80" fill="none" stroke="black"/>
              <path d="M 408,64 C 416.83064,64 424,56.83064 424,48" fill="none" stroke="black"/>
              <path d="M 440,64 C 431.16936,64 424,56.83064 424,48" fill="none" stroke="black"/>
              <path d="M 496,64 C 504.83064,64 512,71.16936 512,80" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="488,224 476,218.4 476,229.6" fill="black" transform="rotate(0,480,224)"/>
              <polygon class="arrowhead" points="488,160 476,154.4 476,165.6" fill="black" transform="rotate(0,480,160)"/>
              <polygon class="arrowhead" points="384,224 372,218.4 372,229.6" fill="black" transform="rotate(180,376,224)"/>
              <polygon class="arrowhead" points="368,288 356,282.4 356,293.6" fill="black" transform="rotate(0,360,288)"/>
              <polygon class="arrowhead" points="368,224 356,218.4 356,229.6" fill="black" transform="rotate(0,360,224)"/>
              <polygon class="arrowhead" points="272,288 260,282.4 260,293.6" fill="black" transform="rotate(180,264,288)"/>
              <polygon class="arrowhead" points="256,288 244,282.4 244,293.6" fill="black" transform="rotate(0,248,288)"/>
              <polygon class="arrowhead" points="160,288 148,282.4 148,293.6" fill="black" transform="rotate(180,152,288)"/>
              <polygon class="arrowhead" points="160,224 148,218.4 148,229.6" fill="black" transform="rotate(180,152,224)"/>
              <polygon class="arrowhead" points="144,224 132,218.4 132,229.6" fill="black" transform="rotate(0,136,224)"/>
              <polygon class="arrowhead" points="40,224 28,218.4 28,229.6" fill="black" transform="rotate(180,32,224)"/>
              <polygon class="arrowhead" points="40,160 28,154.4 28,165.6" fill="black" transform="rotate(180,32,160)"/>
              <g class="text">
                <text x="92" y="36">Provider</text>
                <text x="260" y="36">Provider</text>
                <text x="428" y="36">Provider</text>
                <text x="28" y="100">Client</text>
                <text x="148" y="100">Follower</text>
                <text x="256" y="100">Hub</text>
                <text x="372" y="100">Follower</text>
                <text x="492" y="100">Client</text>
                <text x="256" y="148">Messaging</text>
                <text x="84" y="212">(Provider)</text>
                <text x="256" y="212">Control</text>
                <text x="428" y="212">(Provider)</text>
                <text x="200" y="276">Transport</text>
                <text x="312" y="276">Transport</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
       Provider             Provider             Provider
          |                    |                    |
 .-------' '--------.   .-----' '------.   .-------' '--------.
|                    | |                | |                    |
Client        Follower        Hub         Follower        Client
  |              |             |             |              |
  |              |             |             |              |
  |              |         Messaging         |              |
  |<=======================================================>|
  |              |             |             |              |
  |              |             |             |              |
  |  (Provider)  |          Control          |  (Provider)  |
  |<~~~~~~~~~~~~>|<------------------------->|<~~~~~~~~~~~~>|
  |              |             |             |              |
  |              |             |             |              |
  |              |  Transport  |  Transport  |              |
  |              |<----------->|<----------->|              |
  |              |             |             |              |
]]></artwork>
        </artset>
      </figure>
      <section anchor="end-to-end-security">
        <name>End-to-End Security</name>
        <t>As noted above, all of the clients participating in a room are part of the same
end-to-end security context.  This allows them to protect their messages so that
they are secure from inspection or tampering as they transit MIMI servers.</t>
        <t>In addition to the message protection noted above, the end-to-end security layer
of the protocol provides a few additional functions to the remainder of the
protocol:</t>
        <ul spacing="normal">
          <li>
            <t>Authentication of the actors making changes to a room</t>
          </li>
          <li>
            <t>Confirmation that the clients in a room agree on the state of the room</t>
          </li>
        </ul>
        <t>The authentication function allows MIMI servers to verify the identity of a
client making a change to the room, as an input to a policy evaluation to check
whether the change is authorized.  MIMI servers can make changes to a room,
within the bounds of the room's authorization policy.  Thus, MIMI servers also
need to be represented in the end-to-end security state of the room, but as
actors who can only authenticate, and are not given access to confidential
end-to-end security state.  In MLS terms, they are added as external senders,
not as members of the group.</t>
        <t>The MIMI protocol includes end-to-end security components to keep the end-to-end
security state of the room aligned with the room's participant list, and to
ensure that all clients participating in the room have the proper configuration
(e.g., trusting the appropriate set of servers).</t>
      </section>
      <section anchor="events-and-transport">
        <name>Events and Transport</name>
        <t>A room's activities are realized by servers exchanging <em>events</em>.  Events come in
two types:</t>
        <ul spacing="normal">
          <li>
            <t><strong>State events</strong>, which make changes to the room state</t>
          </li>
          <li>
            <t><strong>Message events</strong>, which describe actual messaging activity in the room</t>
          </li>
        </ul>
        <t>Each event originates at one of the servers participating in the room (possibly
as a result of some interaction with a client).  The originating server sends
the event to the hub server for the room, who distributes it to the other follower
servers.</t>
        <t>Each event is authenticated by its originating server so that all other
participating servers can verify its origin, even those to whom the event has
been distributed by the hub.  If an event was ultimately created by a client, it
is also authenticated by the client that created it.</t>
        <t>The overall MIMI protocol defines this event framework, including its
authentication scheme, as well as the mechanics of how events are delivered from
one server to another.</t>
      </section>
      <section anchor="room-state-synchronization">
        <name>Room State Synchronization</name>
        <t>The servers involved in a room use an application state synchronization protocol
to coordinate changes to a room's state, particularly those listed in
<xref target="room-state"/>.  A few types of room state are synchronized, in what can be
viewed as independent control sub-protocols:</t>
        <t>A <strong>policy control protocol</strong> distributes information about the policy
envelope of a room, and allows participants in a room to propose changes to the
policy within that envelope.</t>
        <t>A <strong>participation control protocol</strong> manages the user-level membership of the
room, including the various ways that members might join or leave a room (or be
added/removed by other users).</t>
        <t>As discussed above, the <strong>end-to-end security control protocol</strong> manages the
end-to-end security state of the room.  This protocol also allows servers to
distribute cryptographic information that clients have pre-registered, which
allows clients to be asynchronously added to rooms.</t>
      </section>
      <section anchor="messages">
        <name>Messages</name>
        <t>Mesage events are end-to-end secure objects that carry application messages in
the standard MIMI content format.  The end-to-end encapsuation ensures that the
message content is only accessible to the clients participating in the room, not
the servers that help to distribute it.</t>
        <t>The MIMI message format <xref target="I-D.ietf-mimi-content"/> defines how clients achieve
the various features of a messaging application, for example:</t>
        <ul spacing="normal">
          <li>
            <t>Text messaging</t>
          </li>
          <li>
            <t>File attachements</t>
          </li>
          <li>
            <t>Replies</t>
          </li>
          <li>
            <t>Reactions</t>
          </li>
          <li>
            <t>Initiation of real-time sessions</t>
          </li>
        </ul>
        <t>Messages transit MIMI servers by means of a <strong>message forwarding protocol</strong>,
which carries an opaque, encrypted message payload together with enough metadata
to facilitate delivery to the clients participating in a room.</t>
        <figure anchor="fig-fanout">
          <name>The hub fans out messages to participating servers; servers deliver messages to users' clients.</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="448" width="504" viewBox="0 0 504 448" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 136,64 L 136,88" fill="none" stroke="black"/>
                <path d="M 136,104 L 136,128" fill="none" stroke="black"/>
                <path d="M 136,208 L 136,232" fill="none" stroke="black"/>
                <path d="M 136,248 L 136,272" fill="none" stroke="black"/>
                <path d="M 136,352 L 136,376" fill="none" stroke="black"/>
                <path d="M 136,392 L 136,416" fill="none" stroke="black"/>
                <path d="M 152,80 L 152,112" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,368 L 152,400" fill="none" stroke="black"/>
                <path d="M 240,80 L 240,112" fill="none" stroke="black"/>
                <path d="M 240,224 L 240,256" fill="none" stroke="black"/>
                <path d="M 240,368 L 240,400" fill="none" stroke="black"/>
                <path d="M 288,80 L 288,112" fill="none" stroke="black"/>
                <path d="M 288,224 L 288,256" fill="none" stroke="black"/>
                <path d="M 288,368 L 288,400" fill="none" stroke="black"/>
                <path d="M 344,120 L 344,216" fill="none" stroke="black"/>
                <path d="M 344,264 L 344,360" fill="none" stroke="black"/>
                <path d="M 376,112 L 376,216" fill="none" stroke="black"/>
                <path d="M 376,256 L 376,360" fill="none" stroke="black"/>
                <path d="M 392,80 L 392,112" fill="none" stroke="black"/>
                <path d="M 392,224 L 392,256" fill="none" stroke="black"/>
                <path d="M 392,368 L 392,400" fill="none" stroke="black"/>
                <path d="M 496,64 L 496,416" fill="none" stroke="black"/>
                <path d="M 152,48 L 304,48" fill="none" stroke="black"/>
                <path d="M 360,48 L 480,48" fill="none" stroke="black"/>
                <path d="M 24,80 L 56,80" fill="none" stroke="black"/>
                <path d="M 152,80 L 240,80" fill="none" stroke="black"/>
                <path d="M 288,80 L 392,80" fill="none" stroke="black"/>
                <path d="M 72,96 L 144,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 280,96" fill="none" stroke="black"/>
                <path d="M 24,112 L 56,112" fill="none" stroke="black"/>
                <path d="M 152,112 L 240,112" fill="none" stroke="black"/>
                <path d="M 288,112 L 392,112" fill="none" stroke="black"/>
                <path d="M 152,144 L 304,144" fill="none" stroke="black"/>
                <path d="M 152,192 L 304,192" fill="none" stroke="black"/>
                <path d="M 24,224 L 40,224" fill="none" stroke="black"/>
                <path d="M 152,224 L 240,224" fill="none" stroke="black"/>
                <path d="M 288,224 L 392,224" fill="none" stroke="black"/>
                <path d="M 64,240 L 152,240" fill="none" stroke="black"/>
                <path d="M 248,240 L 288,240" fill="none" stroke="black"/>
                <path d="M 24,256 L 40,256" fill="none" stroke="black"/>
                <path d="M 152,256 L 240,256" fill="none" stroke="black"/>
                <path d="M 288,256 L 392,256" fill="none" stroke="black"/>
                <path d="M 152,288 L 304,288" fill="none" stroke="black"/>
                <path d="M 152,336 L 304,336" fill="none" stroke="black"/>
                <path d="M 24,368 L 72,368" fill="none" stroke="black"/>
                <path d="M 152,368 L 240,368" fill="none" stroke="black"/>
                <path d="M 288,368 L 392,368" fill="none" stroke="black"/>
                <path d="M 96,384 L 152,384" fill="none" stroke="black"/>
                <path d="M 248,384 L 288,384" fill="none" stroke="black"/>
                <path d="M 24,400 L 72,400" fill="none" stroke="black"/>
                <path d="M 152,400 L 240,400" fill="none" stroke="black"/>
                <path d="M 288,400 L 392,400" fill="none" stroke="black"/>
                <path d="M 152,432 L 304,432" fill="none" stroke="black"/>
                <path d="M 360,432 L 480,432" fill="none" stroke="black"/>
                <path d="M 152,48 C 143.16936,48 136,55.16936 136,64" fill="none" stroke="black"/>
                <path d="M 304,48 C 312.83064,48 320,55.16936 320,64" fill="none" stroke="black"/>
                <path d="M 360,48 C 351.16936,48 344,55.16936 344,64" fill="none" stroke="black"/>
                <path d="M 480,48 C 488.83064,48 496,55.16936 496,64" fill="none" stroke="black"/>
                <path d="M 24,80 C 15.16936,80 8,87.16936 8,96" fill="none" stroke="black"/>
                <path d="M 56,80 C 64.83064,80 72,87.16936 72,96" fill="none" stroke="black"/>
                <path d="M 24,112 C 15.16936,112 8,104.83064 8,96" fill="none" stroke="black"/>
                <path d="M 56,112 C 64.83064,112 72,104.83064 72,96" fill="none" stroke="black"/>
                <path d="M 152,144 C 143.16936,144 136,136.83064 136,128" fill="none" stroke="black"/>
                <path d="M 304,144 C 312.83064,144 320,136.83064 320,128" fill="none" stroke="black"/>
                <path d="M 152,192 C 143.16936,192 136,199.16936 136,208" fill="none" stroke="black"/>
                <path d="M 304,192 C 312.83064,192 320,199.16936 320,208" fill="none" stroke="black"/>
                <path d="M 24,224 C 15.16936,224 8,231.16936 8,240" fill="none" stroke="black"/>
                <path d="M 40,224 C 48.83064,224 56,231.16936 56,240" fill="none" stroke="black"/>
                <path d="M 24,256 C 15.16936,256 8,248.83064 8,240" fill="none" stroke="black"/>
                <path d="M 40,256 C 48.83064,256 56,248.83064 56,240" fill="none" stroke="black"/>
                <path d="M 152,288 C 143.16936,288 136,280.83064 136,272" fill="none" stroke="black"/>
                <path d="M 304,288 C 312.83064,288 320,280.83064 320,272" fill="none" stroke="black"/>
                <path d="M 152,336 C 143.16936,336 136,343.16936 136,352" fill="none" stroke="black"/>
                <path d="M 304,336 C 312.83064,336 320,343.16936 320,352" fill="none" stroke="black"/>
                <path d="M 24,368 C 15.16936,368 8,375.16936 8,384" fill="none" stroke="black"/>
                <path d="M 72,368 C 80.83064,368 88,375.16936 88,384" fill="none" stroke="black"/>
                <path d="M 24,400 C 15.16936,400 8,392.83064 8,384" fill="none" stroke="black"/>
                <path d="M 72,400 C 80.83064,400 88,392.83064 88,384" fill="none" stroke="black"/>
                <path d="M 152,432 C 143.16936,432 136,424.83064 136,416" fill="none" stroke="black"/>
                <path d="M 304,432 C 312.83064,432 320,424.83064 320,416" fill="none" stroke="black"/>
                <path d="M 360,432 C 351.16936,432 344,424.83064 344,416" fill="none" stroke="black"/>
                <path d="M 480,432 C 488.83064,432 496,424.83064 496,416" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="384,360 372,354.4 372,365.6" fill="black" transform="rotate(90,376,360)"/>
                <polygon class="arrowhead" points="384,216 372,210.4 372,221.6" fill="black" transform="rotate(90,376,216)"/>
                <polygon class="arrowhead" points="288,96 276,90.4 276,101.6" fill="black" transform="rotate(0,280,96)"/>
                <polygon class="arrowhead" points="256,384 244,378.4 244,389.6" fill="black" transform="rotate(180,248,384)"/>
                <polygon class="arrowhead" points="256,240 244,234.4 244,245.6" fill="black" transform="rotate(180,248,240)"/>
                <polygon class="arrowhead" points="152,96 140,90.4 140,101.6" fill="black" transform="rotate(0,144,96)"/>
                <polygon class="arrowhead" points="104,384 92,378.4 92,389.6" fill="black" transform="rotate(180,96,384)"/>
                <polygon class="arrowhead" points="72,240 60,234.4 60,245.6" fill="black" transform="rotate(180,64,240)"/>
                <g class="text">
                  <text x="40" y="36">Users</text>
                  <text x="188" y="36">Provider</text>
                  <text x="232" y="36">X</text>
                  <text x="380" y="36">Room</text>
                  <text x="416" y="36">123</text>
                  <text x="40" y="100">Alice</text>
                  <text x="188" y="100">Client</text>
                  <text x="224" y="100">A</text>
                  <text x="332" y="100">Server</text>
                  <text x="368" y="100">1</text>
                  <text x="444" y="100">(Follower)</text>
                  <text x="188" y="180">Provider</text>
                  <text x="232" y="180">Y</text>
                  <text x="32" y="244">Bob</text>
                  <text x="188" y="244">Client</text>
                  <text x="224" y="244">B</text>
                  <text x="332" y="244">Server</text>
                  <text x="368" y="244">2</text>
                  <text x="424" y="244">(Hub)</text>
                  <text x="188" y="324">Provider</text>
                  <text x="232" y="324">Z</text>
                  <text x="48" y="388">Charlie</text>
                  <text x="188" y="388">Client</text>
                  <text x="224" y="388">C</text>
                  <text x="332" y="388">Server</text>
                  <text x="368" y="388">3</text>
                  <text x="444" y="388">(Follower)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
  Users            Provider X                Room 123
                 .--------------------.    .----------------.
                |                      |  |                  |
 .-----.        | +----------+     +------------+            |
| Alice +-------->+ Client A +---->+  Server 1  | (Follower) |
 '-----'        | +----------+     +----------+-+            |
                |                      |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Y             |   |              |
                 .--------------------.   |   |              |
                |                      |  |   V              |
 .---.          | +----------+     +----------+-+            |
| Bob +<----------+ Client B +<----+  Server 2  | (Hub)      |
 '---'          | +----------+     +----------+-+            |
                |                      |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Z             |   |              |
                 .--------------------.   |   |              |
                |                      |  |   V              |
 .-------.      | +----------+     +----------+-+            |
| Charlie +<------+ Client C +<----+  Server 3  | (Follower) |
 '-------'      | +----------+     +------------+            |
                |                      |  |                  |
                 '--------------------'    '----------------'
]]></artwork>
          </artset>
        </figure>
        <t>When a client sends a message, the message is delivered to its provider's server
using some provider-internal mechanism.  If the provider is not the hub, then
the server forwards the message to the hub for delivery.  In either case, the
hub distributes the message to all of the servers participating in the room.
Each provider's server then forwards the message to clients of users who are
participating in the room.</t>
      </section>
    </section>
    <section anchor="actors-identifiers-and-authentication">
      <name>Actors, Identifiers, and Authentication</name>
      <t>There are several types of entity to be identified in the MIMI system, including:</t>
      <ul spacing="normal">
        <li>
          <t>Rooms,</t>
        </li>
        <li>
          <t>Servers,</t>
        </li>
        <li>
          <t>Users, and</t>
        </li>
        <li>
          <t>Clients.</t>
        </li>
      </ul>
      <t>A server's identity is effectively the identity of the provider it represents.
A room is hosted by a single hub server at a given time, so its identity is
within the scope of the hub server's identity.</t>
      <t>To facilitate the application of policies based on these identifiers to protocol
actions, each actor presents one or more credentials that associate a signature
key pair to their identifiers.  Protocol messages are then signed by their
senders to authenticate the origin of the message.</t>
      <t>For a deeper discussion of identity, see <xref target="I-D.mahy-mimi-identity"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO</t>
      <ul spacing="normal">
        <li>
          <t>Authorization policy attached to a room</t>
        </li>
        <li>
          <t>E2E security for messages provided by message delivery protocol</t>
        </li>
        <li>
          <t>E2E/E2M/M2E/M2M security for events provided by transport protocol</t>
        </li>
        <li>
          <t>HbH security provided by TLS</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-mimi-content">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) message content</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Unaffiliated</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document describes content semantics common in Instant Messaging
   (IM) systems and describes a profile suitable for instant messaging
   interoperability of messages end-to-end encrypted inside the MLS
   (Message Layer Security) Protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-content-02"/>
        </reference>
        <reference anchor="I-D.mahy-mimi-identity">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) Identity Concepts</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Wire</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document discusses concepts in instant messaging identity
   interoperability when using end-to-end encryption, for example with
   the MLS (Message Layer Security) Protocol.  The goal is to explore
   the problem space in preparation for framework and requirements
   documents.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mahy-mimi-identity-02"/>
        </reference>
      </references>
    </references>
    <?line 567?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+Vd65Ibx3X+30/RWf3YC7GgSbkqzpqWvFquzK2QIiNScZxU
CtWYaQAjDmbg6cGuYJJ+ljxLnizn1rfB7HJJy7ErQalKi8F09+nTp8/5zqWb
p6enqq/62p7pg/NGn3fFqupt0W87qxdtp1+08MdV43rT9PqFdc4sq2YJT3rb
tRvbmXlVV/1OH724enF1fKDMfN7Za+gMv2fdHajC9HbZdrszXTWLVqmyLRqz
hpHLziz608r2i9N1ta5ODTQ7/cUvlNvO15VzVdv0uw28d3X55lvVbNdz252p
Eno7U0XbONu4rTvTfbe1Cob+UpnOGpzPZlNXMCi0d9o0pf7emvr0TbUGWm7a
7u2ya7cbJPV+czxQb+0O2pVnSp/qtX8Pv9imPO3bU/ifdrbYdvC2urbNFgjU
+pOH0Zqne/B7IBJf+R32gM/XpqrhOTLpt8iuadst8TkyDJ6v+n7jzh4+xNfw
UXVtp/61h/jg4bxrb5x9iB08xIbLql9t59B0Xi22HfPqYViDA6XMtl+1Hc4Y
3tZ6sa1rXrPvq2JlulI/n+pvTNdYR7/DQKap/kT9nOmLyhUtPbdMeVfPf1tt
rqfuJ6WatlvDe9fAI4XyEL+p09NTbeau70zRK/VmZT9RDPWNMI5YryunS7uo
GnxiQKhAInW70Juu7duirZ3uV6bXpq7bm7is+PN1VdoOfm5BYP1A0PYGmKbb
xirTtP3KdlOt36xwkLbYri0QWJud0+0W+mx0ew2N6pqWKOwsEI019oXj9Dg9
oFpFelBWV0AM/LSjuQAJS4tDIS22MfPapn1Hou1PQGNlm8JOmY3rqixrq9QX
yKuuLbcFLg0wtS3NboIjADmwX0C0ml0yZ+BP7HWxbaiZQR7DbM/DiwokFbZY
XYe2jiZU1BUywrWL/gZ7P7LT5XSijV63sFIw4mZzTNPEl53tronPsAxqYQpc
SuRz0a7X2ybu4HULtHDPjniOr6CeEvKQaFI7sBbEJNydWydLuDLXNpkTragp
pOuia52TX21kwxSlD3rzjF62ptag4MxbXO2bBntpgX76WYO6OsU3HMjwiUgp
aVGQbBEyWTucNRJ2WkPTWi+sQbEgrpuERrdzvV1DX2+AUhJoeMERbzzF27qv
NnVCMrx9ua+NsCEO6KfouNPGbdquTzdDeEHYHftVVw3QnYj5RN9Y2Fiu6Ko5
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
N2Hl/gc5xlyg82gAAA==

-->

</rfc>
