<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-barnes-mimi-arch-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="MIMI Architecture">An Architecture for More Instant Messaging Interoperability (MIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-barnes-mimi-arch-02"/>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <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-barnes-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>Terms are generally introduced in context, indicated by <em>emphasis</em>.</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="protocols">
      <name>Protocols</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.
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.</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>A MIMI server thus participates in a few classes of protocols:</t>
      <ul spacing="normal">
        <li>
          <t>A transport protocol</t>
        </li>
        <li>
          <t>Control protocols</t>
        </li>
        <li>
          <t>A message forwarding protocol</t>
        </li>
      </ul>
      <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 L 136,224" fill="none" stroke="black"/>
              <path d="M 152,224 L 360,224" fill="none" stroke="black"/>
              <path d="M 376,224 L 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="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="control-protocols">
        <name>Control Protocols</name>
        <t>The servers involved in a room use control protocols to perform actions related
to different types of information that comprise a room's state, particularly
those listed in <xref target="room-state"/>.  Because these types of information and the
operations they require are largely orthogonal, it makes sense to have a
separate control protocol for each type of information.</t>
        <t>The <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>The <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>The <strong>end-to-end security control protocol</strong> manages the end-to-end security
state of the room.  In addition to distributing messages that add or remove
clients from the end-to-end security state, 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>Wire</organization>
            </author>
            <date day="20" month="June" year="2023"/>
            <abstract>
              <t>   This document describes content semantics common in Instant Messaging
   (IM) systems and describes an example 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-00"/>
        </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 456?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+Vc63LbSHb+30/R0fyQRZNU7Jmq3Wg8ntXI8lpVlu3Ymmwm
qRSrCTRJjEGAiwYpc23nWfIsebKcWzcaIKiL15udSliusgj05ZzTp09/59Ic
jUaqzurcnuiD00KfVskiq21SryurZ2WlL0v446JwtSlqfWmdM/OsmMOT2lbl
ylZmmuVZvdUPLi8uL44OlJlOK7uBwfB7a7gDlZjazstqe6KzYlYqlZZJYZYw
c1qZWT2amqqwbrTMltnIQMfRPz5Wbj1dZs5lZVFvV9Dy4vzquSrWy6mtTlQK
452opCycLdzanei6WlsFk3+rTGUNcrRa5RlMC/2dNkWq31qTj66yJVBzXVbv
51W5XiGxd+PyQL23W+iXnig90kvfDr/YIh3V5Qj+084m6wpaq40t1kCg1vee
Rmtm9+BPQCQ2+SOOgM+XJsvhOQrpD5mtZ+OymuNzFBg8X9T1yp0cH2MzfJRt
7Ng3O8YHx9OqvHb2GAc4xo7zrF6sp9B1ms3WFcvqOKzBgVJmXS/KCjmG1lrP
1nnOq/Y2SxamSvXLsf6Jlo7ew0SmyP5C45zos8wlJT23THmVT/+QrTZj90Gp
oqyW0G4DMlKoEc03NRqNtJm6ujJJrdTVwt5TEfW1CI5ErzOnUzvLCnxiQKlA
J3U506uqrMukzJ2uF6bWJs/L62ZZ8fUmS20Fr0tQWT8R9L0GoemysMoUZb2w
1VjrqwVOUibrpQUCc7N1ulzDmIUuN9Apz2mJwt4C1VjiWDhPjewB1aqhB3V1
AcTAqy3xAiTMLU6FtNjCTHMbj90QbT8AjZktEjtmMS6zNM2tUt+grKoyXSe4
NCDUMjXbIc4A5MB+AdUqthHPIJ9m1Nm6oG4GZQzcnoaGCjQVtlieh76OGEry
DAXhyll9jaM/sOP5eKiNXpawUjDjanVEbGJjZ6sNyRmWQc1MgkuJck7K5XJd
NDt4WQItPLIjmWMTtFRCHhJNhgfWgoSEu3PtZAkXZmMjnmhFTSJDJ1XpnLy1
jRjGqH0wmhf0vDS5BhNn3uNqXxc4Sgn002sN5mqELRzo8EC0lOwoaLYomawd
co2EjXLomuuZNagWJHUT0ei2rrZLGOsKKCWFhgaOZOMpXud1tsojkqH1+a41
wo44oWfR8aCFW5VVHW+G0EDE3YyrLgqgO1Lzob62sLFcUmVTZmmRzReeJVkT
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

-->

</rfc>
