<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-barnes-mimi-arch-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="MIMI Architecture">An Architecture for More Instant Messaging Interoperability (MIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-barnes-mimi-arch-00"/>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <date year="2023" month="August" day="29"/>
    <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>Message formats that enable the user-level features of a messaging system</li>
        <li>Tracking of state across multiple providers</li>
        <li>End-to-end security of user messages</li>
        <li>Transport of protocol messages among providers</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?>

</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.  Rooms have associated membership lists (in
terms of both users and clients) and policies about things like how the room may
be joined and what capabilities each member has.</t>
      <t>The protocol interactions that drive a room unfold among the servers whose users
are members of 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>.  At any given time, all of the clients and servers participating
in the room have the same view of the room's state.  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>The end-to-end security state of the room</li>
        <li>The user-level membership of the room</li>
        <li>The authorization policy for the room</li>
      </ul>
      <ul empty="true">
        <li>
          <t>NOTE: We use the phrase "membership" for both users and clients.  It might be
clearer to invent some distinct terminology for these notions.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <t>NOTE: In the below, we discuss user-level membership as something independent
from, and managed separately from, the end-to-end security state of the room.
Another possibility is that the user-level membership could be derived from
the client-level membership, in the sense that a user is a member if and only
if they have one or more clients joined.</t>
        </li>
      </ul>
      <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 <em>joined</em> to 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="membership">
        <name>Membership</name>
        <t>The membership of a room is the set of users who are allowed to participate in
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>This is a more coarse-grained notion of membership than the client-level notion.
Ideally, the two are aligned, with each member user having at least one client
joined to the end-to-end security state, and each joined client owned by a
member user.  A user may be a member of a group without any client belonging to
the user being part of the end-to-end security state of the room.  (In such a
case, 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) The reverse situation is forbidden; a client belonging to a user
may be joined to the end-to-end security state of the room only if its user is a
member.</t>
      </section>
      <section anchor="membership-changes">
        <name>Membership Changes</name>
        <t>The 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 membership).</t>
        <t>As discussed above, user-level 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>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?</li>
          <li>
            <t>Capabilities per user: Is a given user allowed to ...
            </t>
            <ul spacing="normal">
              <li>Send messages in the room?</li>
              <li>Add or remove other users?</li>
              <li>Grant or deny capabilities to other users?</li>
            </ul>
          </li>
          <li>
            <t>Capabilities per server: Is a given server participating in the room allowed
to...
            </t>
            <ul spacing="normal">
              <li>Add or remove users?</li>
              <li>Grant or deny capabilities to users?</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>A transport protocol</li>
        <li>Control protocols</li>
        <li>A message forwarding protocol</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>
            <strong>State events</strong>, which make changes to the room state</li>
          <li>
            <strong>Message events</strong>, which describe actual messaging activity in the room</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 MIMI transport 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>membership 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 members).</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 defines how clients achieve the various features of a
messaging application, for example:</t>
        <ul spacing="normal">
          <li>Text messaging</li>
          <li>File attachements</li>
          <li>Replies</li>
          <li>Reactions</li>
          <li>Initiation of real-time sessions</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>
      </section>
    </section>
    <section anchor="actors-identifiers-and-authentication">
      <name>Actors, Identifiers, and Authentication</name>
      <ul empty="true">
        <li>
          <t>NOTE: This section is obsolete.  It should be rewritten to use concepts and
terminology from draft-mahy-mimi-identity.</t>
        </li>
      </ul>
      <t>There are three types of identified actor in the MIMI system:</t>
      <ul spacing="normal">
        <li>Servers,</li>
        <li>Users, and</li>
        <li>Clients.</li>
      </ul>
      <t>A server's identity is effectively the identity of the provider it represents.
Servers are represented by domain names <xref target="RFC1035"/>.  User identities are
provider-specific, and thus scoped to a given server identity.  Likewise, a
client's identity is within the scope of its user.</t>
      <ul empty="true">
        <li>
          <t>TODO: Define syntax for these identifiers. Something like:</t>
          <ul spacing="normal">
            <li>Server: <tt>example.com</tt></li>
            <li>User: <tt>@user@example.com</tt></li>
            <li>Client: <tt>%device@user@example.com</tt></li>
          </ul>
        </li>
      </ul>
      <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>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO</t>
      <ul spacing="normal">
        <li>Authorization policy attached to a room</li>
        <li>E2E security for messages provided by message delivery protocol</li>
        <li>E2E/E2M/M2E/M2M security for events provided by transport protocol</li>
        <li>HbH security provided by TLS</li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <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>
      <reference anchor="RFC1035">
        <front>
          <title>Domain names - implementation and specification</title>
          <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
          <date month="November" year="1987"/>
          <abstract>
            <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="13"/>
        <seriesInfo name="RFC" value="1035"/>
        <seriesInfo name="DOI" value="10.17487/RFC1035"/>
      </reference>
    </references>
    <?line 394?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91c/XLbxnb/f59iq0xHskxSsZM7vVUSJ4otX2vGsl1bnjTt
dHiXwJLcGAR4sYBoXtt9lj5Ln6znaxcLkJLl9N6ZTjmZiASwH+fs+fydA4/H
Y9W4prCn+uCs1Gd1tnSNzZq2tnpe1fqygi8XpW9M2ehL671ZuHIBVxpbV2tb
m5krXLPVR5cXlxf3DpSZzWp7DZPh7950ByozjV1U9fZUu3JeKZVXWWlWsHJe
m3kznpm6tH68cis3NjBw/PXXyrezlfPeVWWzXcOTF+dXT1XZrma2PlU5zHeq
sqr0tvStP9VN3VoFi3+jTG0NUrReFw6WhfFemzLXr60pxlduBbvZVPW7RV21
a9zs3ag8UO/sFsblp0qP9So8hz9smY+bagx/tLdZW8PT6tqWLWxQ6y9eRmsm
9+AX2CQ+8iecAa+vjCvgOjLpJ2eb+aSqF3gdGQbXl02z9qcnJ/gYXnLXdhIe
O8ELJ7O62nh7ghOc4MCFa5btDIbO3LytmVcn8QwOlDJts6xqpBie1nreFgWf
2muXLU2d6+cT/TMdHd2HhUzp/krznOrHzmcVXbe887qY/eTW1xP/Xqmyqlfw
3DXwSKFEdL/UeDzWZuab2mSNUldL+4WCqDfCOGK9dl7ndu5KvGJAqEAmdTXX
67pqqqwqvG6WptGmKKpNd6x4+9rltobbFYhsWAjGboBpuiqtMmXVLG090fpq
iYtUWbuysMHCbL2uWpiz1NU1DCoKOqKoWyAaK5wL12mQPNi16vaDsrqEzcCt
LdECW1hYXAr3YkszK2w6d7dp+x726GyZ2QmzceXyvLBKfYW8qqu8zfBogKlV
brYjXAG2A/oColVuE5qBP92s87akYQZ5DNSexQcVSCqoWFHEsZ4IygqHjPDV
vNng7Ed2spiMtNGrCk4KVlyv7xGZ+LC39TXxGY5BzU2GR4l8zqrVqi07DV5V
sBee2RPP8RG0VLI93DQZHjgLYhJqZ+vlCJfm2iY00YmaTKbO6sp7uWs7NkxQ
+mC2wOhFZQoNJs68w9PelDhLBfun2xrM1Rif8CDDxyKlZEdBskXI5OyQatzY
uIChhZ5bg2JBXDfJHv3WN3YFc13BTkmg4QFPvAk7bovGrYtky/D0+a41woG4
YCDR86SlX1d1kypDfEDY3c2rLkrYdyLmI72xoFg+q92MSVq6xTKQJGdCNME9
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

-->

</rfc>
