<?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-01" 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-01"/>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <date year="2023" month="September" day="22"/>
    <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?>

<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.  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 list of users participating of the room (i.e., <em>participants</em>)</li>
        <li>The authorization policy for the room</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 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">
        <name>Participants</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>A <em>client</em> is a <em>member</em> of the <em>end-to-end security state</em> of the room</li>
          <li>A <em>user</em> is a <em>participant</em> in the room</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 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>
      <t>There are several types of entity to be identified in the MIMI system, including:</t>
      <ul spacing="normal">
        <li>Rooms,</li>
        <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.
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>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>References</name>
      <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>
        <name>Informative References</name>
        <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 388?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
SLi5vwHq5PTcR0IAAA==

-->

</rfc>
