<?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.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ralston-mimi-matrix-transport-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.2 -->
  <front>
    <title abbrev="Matrix Message Transport">Matrix Message Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-matrix-transport-00"/>
    <author fullname="Travis Ralston">
      <organization>The Matrix.org Foundation C.I.C.</organization>
      <address>
        <email>travisr@matrix.org</email>
      </address>
    </author>
    <author fullname="Matthew Hodgson">
      <organization>The Matrix.org Foundation C.I.C.</organization>
      <address>
        <email>matthew@matrix.org</email>
      </address>
    </author>
    <date year="2022" month="November" day="06"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>matrix</keyword>
    <keyword>mimi</keyword>
    <abstract>
      <t>This document specifies an openly federated protocol, Matrix, for interoperable message transport.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://turt2live.github.io/ietf-mimi-matrix-transport/draft-ralston-mimi-matrix-transport.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ralston-mimi-matrix-transport/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        More Instant Messaging Interoperability Working Group mailing list (<eref target="mailto:mimi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mimi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/turt2live/ietf-mimi-matrix-transport"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Designing transports for interoperable messaging can often be a race towards the lowest common denominator among the systems one is
attempting to interoperate. In addition to considering those systems' capabilities, the design must also account for a number of edge
cases and routine failures that often come up during implementation, such as handling of network partitions/disconnects, malicious
actors (intentional or accidental), and recovering from failure states.</t>
      <t>Matrix solves this by providing a highest-common denominator messaging layer between current real-world messaging systems, which
expresses events in an authenticated Directed Acyclic Graph (DAG) that is incrementally replicated between untrusted participating servers,
providing decentralized access control without single points of control. This ensures that all participants converge on a consistent
view of room history as rapidly as possible, including key/value state, even in the face of bad actors or network partitions - rather
than all participants piecing together partial independent views of a room from pubsub streams or other sources. This provides
aggressive resilience to network partitions, suitable even for the harshest denied, disrupted, intermittent and high latency environments
(for example, P2P networks overlaying Bluetooth or HF carriers; maritime or space deployments).</t>
      <t>Matrix <xref target="MxSpec"/> is an open standard first created in 2014 to define interoperable, decentralized, secure communication. Matrix exited
beta in June 2019, and having been actively maintained and improved since under an open governance model <xref target="MxFoundation"/>, a subset of
the open standard fits extremely well within the More Instant Messaging Interoperability (MIMI) working group's efforts to establish
standards for interoperable modern messaging applications. This document focuses on the transport (message- or event-passing) portion
of the Matrix protocol as it relates to MIMI.</t>
    </section>
    <section anchor="matrix-primitives">
      <name>Matrix Primitives</name>
      <t>Within Matrix there are four key primitives needed for cross-server communication:</t>
      <ol spacing="normal" type="1"><li>Homeservers (or simply "servers"), identified as <xref target="RFC1123"/> Host Names with extensions for IPv6, which act as a namespace for
holding Users and replicated copies of Rooms.</li>
        <li>Rooms, identified as <tt>!localpart:example.org</tt>, consist of the Directed Acyclic Graph (DAG) for Events sent by Users. The DAG is
replicated across all Homeservers participating in that Room. It can be thought of as a pubsub topic with additional semantics to
access and authenticate message history and key/value state.</li>
        <li>Events, identified as <tt>$base64HashOfItself</tt>, have a type (<tt>m.room.message</tt> or <tt>m.room.encrypted</tt>, for example) and are sent by
Users, added to the Room (DAG) by Homeservers. State Events are versioned key/value data which are pinned in the room, usually tracking
information about the room itself (membership, room name, topic, etc). State Events can be overwritten while other Events can not
(though normal Events can be "edited" by sending a new Event which points to the original Event).</li>
        <li>Users, identified as <tt>@localpart:example.org</tt>, can have multiple devices (logged-in sessions) to join/leave Rooms and send Events
to those rooms.</li>
      </ol>
      <t>Other primitives do exist in Matrix, such as Devices for users, however they are not directly relevant to this document's purpose and
have been excluded.</t>
    </section>
    <section anchor="federation-basics-and-eventual-consistency">
      <name>Federation Basics and Eventual Consistency</name>
      <t>Matrix uses a set of RPC APIs (typically over HTTPS) to pass JSON objects between client and server, and server and server (federation).
In its simplest form, a user sends an event to a room using the Client-Server API <xref target="CSApi"/>, which servers then forward to each other
using the Federation API <xref target="SSApi"/>. For an interoperable transport, the Federation API would be used. The events which users send are
populated with information about previous events (as known to the local server), "authorization events" (events which prove the sender
is allowed to send the event in the first place), and additional server-specific signatures (to prove authenticity) by the server before
the event is sent to other servers.  Receiving servers check the authorization events against their local view of the room to decide
whether the received event should be accepted, soft-failed or rejected - thus providing decentralized access control semantics.</t>
      <t>An example workflow might be that Alice (<tt>@alice:s1.example.org</tt>) wants to invite Bob (<tt>@bob:s2.example.org</tt>) to a room over federation
(because the users are on different servers). Alice's client would send an <tt>/invite</tt> <xref target="CSInviteApi"/> request for <tt>@bob:s2.example.org</tt> in
that room, which causes <tt>s1.example.org</tt> to send a similar <tt>/invite</tt> <xref target="SSInviteApi"/> request over federation to <tt>s2.example.org</tt>. When Bob
has accepted the invite (by joining the room, using similar endpoints), the room's state and recent history are replicated to Bob's server
and sent to Bob's client. Both Alice and Bob can now send events, including <tt>m.room.message</tt> events for instant messaging cases, and their
servers will build a DAG off of them.  Servers by default push events to each other, but can also pull events from each other in order to
fill holes in their DAG.</t>
      <t>A key part of this eventually consistent model is that a server can go offline (for any reason, including being affected by a Denial of
Service (DoS) attack, network partition, or being turned off) and other servers in the room are not affected. The other servers can continue
to send events into the room and amongst each other while the other server is offline. When that server comes back online, it will have the
events it missed efficiently synchronized to it by the other servers. Similarly, if the offline server was operational but unable to send
events to other servers, it can continue sending its own events to the room and have those events be "merged" with the other servers' events
when network connectivity is restored. Conflicts with state events (two or more changes to the room state at the same time or by temporarily
diverged servers, often due to network connectivity issues) are resolved using an appropriate State Resolution Algorithm <xref target="SSStateResAlgo"/>.
The state resolution algorithm is not covered here for brevity, and would likely be its own document.</t>
      <t>Practically, this looks like:</t>
      <artwork><![CDATA[
Room on server A sent message A1,     The same room on server B has
then sent A2, and received C1 from    received A1 and A2, but not C1,
server C which raced with A2 and so   e.g. due to network connectivity
follows A1.                            problems.
   __________                                              __________
  '          '                                            '          '
  '    A1    '                                            '    A1    '
  '   /  \   '                                            '   /      '
  '  A2  C1  '                                            '  A2      '
  '__________'                                            '__________'

Server A sends another message, A3:

   __________                                              __________
  '          '                                            '          '
  '    A1    '                                            '    A1    '
  '   /  \   '                                            '   /      '
  '  A2  C1  '------------------------------------------->'  A2   ?  '
  '   \  /   '  HTTP PUT                                  '   \  /   '
  '    A3    '  /_matrix/federation/v1/send/{txnId}       '    A3    '
  '__________'  A3                                        '__________'

Server B sees that A3 refers to missing event C1, and pulls it from A:

   __________                                              __________
  '          '                                            '          '
  '    A1    '                                            '    A1    '
  '   /  \   '                                            '   /  \   '
  '  A2  C1  '<-------------------------------------------'  A2   C1 '
  '   \  /   '  HTTP GET                                  '   \  /   '
  '    A3    '  /_matrix/federation/v1/get_missing_events '    A3    '
  '__________'  C1                                        '__________'

Typically, get_missing_events isn't needed, given servers push all
events to all participating servers by default.

]]></artwork>
      <t>Figure 1</t>
    </section>
    <section anchor="interoperability">
      <name>Interoperability</name>
      <t>Matrix's split of Federation and Client-Server APIs allow homeservers to implement the API surface which is most relevant for its
application.  For interoperability, only the Federation API is relevant. The APIs have been designed to intrinsically support load
balancing and active/active horizontal scaling - for instance, it's valid for different parts of a server to race together when sending
a message in a room (causing a temporary fork in the room's event DAG, same as if the race happened against a remote server), avoiding
the need for global locks within the server.</t>
      <t>The steps needed for an existing system to be interoperable with another over Matrix would mean implementing the Federation API and
storing minimal information about the room's current state (state events (including members), a few of the most recent event identifiers
seen, etc) and hooking that up to their existing application. An example of this happening is Gitter showcasing Matrix interoperability
back in 2020 <xref target="GitterMigration"/>.</t>
      <t>As was the case with Gitter, existing messaging applications could deploy a homeserver using software which already exists to rapidly
get connected to the Matrix network. Later stages of implementation for messaging applications might include writing proprietary software
to handle application-specific traffic on one end and Matrix federation on the other, optimizing for internal scaling requirements.</t>
    </section>
    <section anchor="encryption">
      <name>Encryption</name>
      <t>End-to-end Encryption is deliberately layered on top of the Matrix transport (Client-Server or Federation APIs).  Currently a combination
of Double Ratchet (Olm) encryption and group ratchet encryption (Megolm) is specified in the End-to-End Encryption section of the
Client-Server API <xref target="CSEncryptionApi"/>, but Matrix over MLS <xref target="I-D.ietf-mls-protocol"/> (with minor bookkeeping to compensate for the lack
of a centralised sequencing function in Matrix) is being specified as DMLS. <xref target="DMLS"/></t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security. Matrix has its own threat model that needs to be described here to protect against malicious actors.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC1123">
          <front>
            <title>Requirements for Internet Hosts - Application and Support</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden">
              <organization/>
            </author>
            <date month="October" year="1989"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community.  It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1123"/>
          <seriesInfo name="DOI" value="10.17487/RFC1123"/>
        </reference>
        <reference anchor="SSApi" target="https://spec.matrix.org/v1.4/server-server-api/">
          <front>
            <title>Federation API</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CSInviteApi" target="https://spec.matrix.org/v1.4/client-server-api/#post_matrixclientv3roomsroomidinvite">
          <front>
            <title>POST /_matrix/client/v3/rooms/:roomId/invite | Client-Server API</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="SSInviteApi" target="https://spec.matrix.org/v1.4/server-server-api/#put_matrixfederationv2inviteroomideventid">
          <front>
            <title>POST /_matrix/federation/v2/invite/:roomId/:eventId | Federation API</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="GitterMigration" target="https://matrix.org/blog/2020/12/07/gitter-now-speaks-matrix">
          <front>
            <title>Gitter now speaks Matrix!</title>
            <author initials="M." surname="Hodgson" fullname="Matthew Hodgson">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="CSEncryptionApi" target="https://spec.matrix.org/v1.4/client-server-api/#end-to-end-encryption">
          <front>
            <title>End-to-End Encryption | Client-Server API</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="SSStateResAlgo" target="https://spec.matrix.org/v1.4/server-server-api/#room-state-resolution">
          <front>
            <title>Room State Resolution | Federation API</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="CSApi" target="https://spec.matrix.org/v1.4/client-server-api/">
          <front>
            <title>Client-Server API</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="MxSpec" target="https://spec.matrix.org/v1.4/">
          <front>
            <title>Matrix Specification | v1.4</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="MxFoundation" target="https://matrix.org/foundation">
          <front>
            <title>The Matrix.org Foundation</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="DMLS" target="https://gitlab.matrix.org/matrix-org/mls-ts/-/blob/dd57bc25f6145ddedfb6d193f6baebf5133db7ed/decentralised.org">
          <front>
            <title>Decentralised MLS</title>
            <author initials="H." surname="Chathi" fullname="Hubert Chathi">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="Web" value="https://gitlab.matrix.org/matrix-org/mls-ts/-/blob/dd57bc25f6145ddedfb6d193f6baebf5133db7ed/decentralised.org"/>
        </reference>
        <reference anchor="I-D.ietf-mls-protocol">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Benjamin Beurdouche" initials="B." surname="Beurdouche">
              <organization>Inria &amp; Mozilla</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
         </author>
            <author fullname="Jon Millican" initials="J." surname="Millican">
              <organization>Facebook</organization>
            </author>
            <author fullname="Emad Omara" initials="E." surname="Omara">
              <organization>Google</organization>
            </author>
            <author fullname="Katriel Cohn-Gordon" initials="K." surname="Cohn-Gordon">
              <organization>University of Oxford</organization>
            </author>
            <date day="11" month="July" year="2022"/>
            <abstract>
              <t>   Messaging applications are increasingly making use of end-to-end
   security mechanisms to ensure that messages are only accessible to
   the communicating endpoints, and not to any servers involved in
   delivering messages.  Establishing keys to provide such protections
   is challenging for group chat settings, in which more than two
   clients need to agree on a key but may not be online at the same
   time.  In this document, we specify a key establishment protocol that
   provides efficient asynchronous group key establishment with forward
   secrecy and post-compromise security for groups in size ranging from
   two to thousands.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-protocol-16"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1baXPbRrb9jl/Ro7wqU1VcLMlJavSWiSx50VQ8Vkmaypep
iptAk+wIROOhAcqMn/Pb55zbjYVaPHYymfdlVOWQBHq5+z33dmcymSS1rXNz
rPbe6Lqy79Ub471eGnVd6cKXrqr3Ej2fV2bzySGprs3SVdtjZYuFS5LMpYVe
Y9ms0ot6Uunc166YrO3aTtayyqRuZ0+ePk18M19b760r6m2Jaecvrl8q9ZXC
PIeNbZGZ0uA/Rb03VnvnJ8/x4Sp8u7x+uZcUzXpuquMkAxXHSeoKbwrf+GNV
V41JQPlRoiujsdBJWeYWxGIjr3SRqUuj88m1XZu95NZVN8vKNSU5dZVR54Wv
dVFHfm2xxJPaVK40lZ7b3NbbveTGbDEvO07URAXG5Bv4TDamaECOUl+8qFJB
Cns/gCQOecUV+HytbY7nXP87a+rF1FVLPtdVusLzVV2X/ng24zA+shszbYfN
+GA2r9ytNzMuMOPEpa1XzRxT66aqD3NMmHHCw5rihBwy9vVgr27iNKw1te4T
S8w+wyCmq3qd7yWJbuqVqyha7KvUosnzYFQwvI316jIsIi/BoC7sz6JZDFgZ
FYyVnKuXrikyeaVOp+fT06lMMUGYtSxWfbfuxt/fEGvVK3OrXrts6X/zjuuw
2nDHpHAVfkKKNJjLl6cHB4dH/Hp1dVLaY5ld62ppIPlW8L406bRfY7Y5mD6b
eVNtTDWJH7q0szA3OvlLk8HOhK6Ti/M9eSdeow6fHh7Kz07q8jchn5/BHt1+
wMHp1XmxsbX5MuLT3MLDh8R/VTpf/xjGhbebo8q5ted/bGZlkx0OL95eXatZ
nBJXnG2OZjJrdsyP82wWJqr/U6dhyyvZ8p8sE2rv14jhvg6/KptWCotOg5vD
wEUQhUG4qW32CVn0M2ebwyiBTiDHMv88g0h+NxtR6pWtQe8buwzrPyyTgTjm
uVvOsOvT2cHh7Om3s6XMnxTudgLJ6Rs/aWPugOuwicIgFQZFqv5wh5WnD7Ly
uMNHp/8sRk+vXhRptS359Df7ABLfpHYTfphu1R2WX4QR+FD9vv8C676qsdKl
8Sf50v02A6cZTjyXm1TGu7y5x+MlRijZEEm7HfH7muvpFwbf+7rb4eD31cab
91eg6Quo3aEtQjsuYRcRIUG4HPhPprJ/+g/df9EN3aH10W12KT3442+i9OzN
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
O7XB7ST0NgAA

-->

</rfc>
