<?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.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rosenberg-mimi-arch-options-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title abbrev="MIMI Arch Options">Architecture Options for More Messaging Interop (MIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-rosenberg-mimi-arch-options-00"/>
    <author initials="J." surname="Rosenberg" fullname="Jonathan Rosenberg">
      <organization>Five9</organization>
      <address>
        <email>jdrosen@jdrosen.net</email>
      </address>
    </author>
    <author initials="C." surname="Jennings" fullname="Cullen Jennings">
      <organization>Cisco</organization>
      <address>
        <email>fluffy@iii.ca</email>
      </address>
    </author>
    <date year="2022" month="October" day="24"/>
    <area>Applications</area>
    <workgroup>Mimi</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document outlines architecture options for managing the state of chats in MIMI.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="problems">
      <name>Introduction</name>
      <t>The More Instant Messaging Interoperability (MIMI) working group will specify the minimal set of mechanisms required to make modern Internet messaging applications interoperable. Over time, messaging applications have achieved widespread use, their feature sets have broadened, and their adoption of end-to-end encryption (E2EE) has grown, but the lack of interoperability between these services continues to create a suboptimal user experience. The standards produced by the MIMI working group will allow for E2EE messaging applications for both consumer and enterprise to interoperate without undermining the security guarantees that they provide.</t>
      <t>There are a variety of options on how MIMI can work in a federated model. This draft outlines the options and suggests which one to move forward with.</t>
    </section>
    <section anchor="architectural-options">
      <name>Architectural Options</name>
      <t>There are numerous architectural models for building inter-provider messaging. One model, implemented in protocols like SIMPLE <xref target="RFC6914"/> and XMPP <xref target="RFC6120"/>, consider messaging as a problem of message transport, sending messages from one user to another user. There is no notion of message storage, though in XMPP this can be added through Multi-User Chat (MUC).</t>
      <t>Most modern messaging services implement message persistence, and thus introduce the idea of chats as a stateful resource that live within the messaging provider. A chat resource can be either a 1-1 chat, or a group chat. The state of a chat resource includes the membership in the chat group along, the history of member additions/removals, along with the history of messages posted to it. In that way, 1-1 and group chats are essentially identical. Clients can query the state of their chats at any time to catch up, and they can receive notifications when there are new chats. Sending a message is primarily a transaction between the client and their provider; the provider acknowledges the message, stores it, acknowledges the receipt of the message towards the client, and then begins to replicate the data into databases as needed, while also notifying recipients of the new message.</t>
      <t>When considering the expansion of this model to inter-provider communications, there are two ways it can work. In one approach, a particular chat resource lives within a single provider - the one where the chat resource was created. Other users, who may be supported by other providers, connect directly to this single provider to receive information about the state of that particular chat session. In this architecture, the state of a chat resource is not replicated between providers at all - it lives in a single place. Architecturally, it looks like this:</t>
      <artwork><![CDATA[

--------------     --------------      --------------  
| Provider 1 |     | Provider 2 |      | Provider 3 |
|            |     |            |      |            |
|  Chat A    |     |            |      |            |
--------------     --------------       -------------- 
      | 
      |
      |---------------------------------------
      |                   |                   |
   User A@1           User B@2            User C@3


]]></artwork>
      <t>A group chat, chat A, was created by user A, who is a user of provider 1. This chat and its state lives exclusively within provider 1. User B, utilizes provider 2, and user C, a user of provider 3, are members of the group chat A. Through the MIMI protocols, users B and C are able to establish connections to provider 1 in order to retrieve and send messages. We refer to this model as the "guest model", since in essence, users B and C become "guest users" or provider 1. A drawback of this model is that there is no easy way for a user to know the full set of chats - across multiple providers - in which they should retrieve messages. This model is, in essence, similar to the multi-headed chat clients of old, like Pidgin.</t>
      <t>A variation of this model is shown below. In this variation, the group chat still lives within provider 1, but users B and C connect to their respective providers to post mesasges, retrieve messages, and get notifications. Providers 2 and 3 do not store contents of the chat - they act as proxies for the purpose of authentication and trust. They also would retain knowledge of the set of chats in which their users are members, including ones like chat A which live within other providers. Let us call this the "proxied guest" model.</t>
      <artwork><![CDATA[
      |--------------------------------------|
      |                                      |
--------------     --------------      --------------  
| Provider 1 |     | Provider 2 |      | Provider 3 |
|            |-----|            |      |            |
|  Chat A    |     |            |      |            |
--------------     --------------       -------------- 
      |                   |                   | 
      |                   |                   |
      |                   |                   |
      |                   |                   |
   User A@1           User B@2            User C@3


]]></artwork>
      <t>The final model - and the one that is used by this messaging format, is shown below:</t>
      <artwork><![CDATA[
      |--------------------------------------|
      |                                      |
--------------     --------------      --------------  
| Provider 1 |     | Provider 2 |      | Provider 3 |
|            |-----|            |      |            |
|  Chat A    |     |  Chat A    |      |  Chat A    |
|  (SoT)     |     |  (replica) |      |  (replica) |
--------------     --------------       -------------- 
      |                   |                   | 
      |                   |                   |
      |                   |                   |
      |                   |                   |
   User A@1           User B@2            User C@3


]]></artwork>
      <t>In this model, the chat resource - its full state - lives within each provider. However, one provider acts as the source of truth. Through the mimi protocols and message formats, the state of this chat is synchronized to the other providers. All write operations happen against the chat resource in provider 1, and the new messages are then delivered to the other providers. For example, if user B posts a message to the group chat, user B sends that message to their provider, provider 2. Provider 2 will deliver this to provider 1. However, provider 2 will not update the state of the chat. Provider 2 may store this new message to ensure delivery to provider 1, but it is not considered as "posted" into the chat yet. Once delivered to provider 1, only then is the message considered posted. This causes a change in the state of the chat, and thus a notification of new message is sent to providers 2 and 3. Both of these providers store the new message and notify their respective users of the new message. From a user experience perspective, typical implementations have user B's UI show the new message in the chat immediately upon sending. Thus, the notification that the message was posted, acts only as a confirmation to user B.</t>
      <t>The astute reader will note there is a fourth model, wherein there is no single SoT and writes can be made to any instance of the chat resource. THis is the most complex solution, and due to the challenges of building such database systems in general - let alone making them work inter-provider - we do not suggest this approach.</t>
    </section>
    <section anchor="recommendations">
      <name>Recommendations</name>
      <t>The third model - where chat resource state is replicated, but there is a single source of truth against which all write operations are performed - seems like the right model.</t>
      <t>The guest model incurs a heavy load of long-lived connections on each provider, and requires the client to maintain a connection to each provider. This doesnt seem scalable. The proxy guest model fixes this, but puts the burden of message sync and reliability in the client hands. The replicated state model addresses that, while providing the consistency required for the system to work reliably.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <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="I-D.ietf-mls-architecture" target="https://www.ietf.org/archive/id/draft-ietf-mls-architecture-09.txt" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mls-architecture.xml">
        <front>
          <title>The Messaging Layer Security (MLS) Architecture</title>
          <author fullname="Benjamin Beurdouche" surname="Benjamin Beurdouche">
            <organization>Inria &amp; Mozilla</organization>
          </author>
          <author fullname="Eric Rescorla" surname="Eric Rescorla">
            <organization>Mozilla</organization>
          </author>
          <author fullname="Emad Omara" surname="Emad Omara">
            <organization>Google</organization>
          </author>
          <author fullname="Srinivas Inguva" surname="Srinivas Inguva">
            <organization>Twitter</organization>
          </author>
          <author fullname="Albert Kwon" surname="Albert Kwon">
            <organization>MIT</organization>
          </author>
          <author fullname="Alan Duric" surname="Alan Duric">
            <organization>Wire</organization>
          </author>
          <date day="19" month="August" year="2022"/>
          <abstract>
            <t>The Messaging Layer Security (MLS) protocol [I-D.ietf-mls-protocol] specification has the role of defining a Group Key Agreement protocol, including all the cryptographic operations and serialization/deserialization functions necessary for scalable and secure group messaging. The MLS protocol is meant to protect against eavesdropping, tampering, message forgery, and provide further properties such as Forward Secrecy (FS) and Post-Compromise Security (PCS) in the case of past or future device compromises. This document describes a general secure group messaging infrastructure and its security goals. It provides guidance on building a group messaging system and discusses security and privacy tradeoffs offered by multiple security mechanisms that are part of the MLS protocol (e.g., frequency of public encryption key rotation). The document also provides guidance for parts of the infrastructure that are not standardized by the MLS Protocol document and left to the application or the infrastructure architects to design. While the recommendations of this document are not mandatory to follow in order to interoperate at the protocol level, they affect the overall security guarantees that are achieved by a messaging application. This is especially true in case of active adversaries that are able to compromise clients, the delivery service, or the authentication service.</t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-mls-architecture-09"/>
      </reference>
      <reference anchor="I-D.ietf-mls-protocol" target="https://www.ietf.org/archive/id/draft-ietf-mls-protocol-16.txt" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mls-protocol.xml">
        <front>
          <title>The Messaging Layer Security (MLS) Protocol</title>
          <author fullname="Richard Barnes" surname="Richard Barnes">
            <organization>Cisco</organization>
          </author>
          <author fullname="Benjamin Beurdouche" surname="Benjamin Beurdouche">
            <organization>Inria &amp; Mozilla</organization>
          </author>
          <author fullname="Raphael Robert" surname="Raphael Robert"/>
          <author fullname="Jon Millican" surname="Jon Millican">
            <organization>Facebook</organization>
          </author>
          <author fullname="Emad Omara" surname="Emad Omara">
            <organization>Google</organization>
          </author>
          <author fullname="Katriel Cohn-Gordon" surname="Katriel 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>
      <reference anchor="RFC6914" target="https://www.rfc-editor.org/info/rfc6914" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6914.xml">
        <front>
          <title>SIMPLE Made Simple: An Overview of the IETF Specifications for Instant Messaging and Presence Using the Session Initiation Protocol (SIP)</title>
          <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
          <date month="April" year="2013"/>
          <abstract>
            <t>The IETF has produced many specifications related to Presence and Instant Messaging with the Session Initiation Protocol (SIP).  Collectively, these specifications are known as SIP for Instant Messaging and Presence Leveraging Extensions (SIMPLE).  This document serves as a guide to the SIMPLE suite of specifications.  It categorizes the specifications, explains what each is for, and how they relate to each other.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6914"/>
        <seriesInfo name="DOI" value="10.17487/RFC6914"/>
      </reference>
      <reference anchor="RFC6120" target="https://www.rfc-editor.org/info/rfc6120" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6120.xml">
        <front>
          <title>Extensible Messaging and Presence Protocol (XMPP): Core</title>
          <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
          <date month="March" year="2011"/>
          <abstract>
            <t>The Extensible Messaging and Presence Protocol (XMPP) is an application profile of the Extensible Markup Language (XML) that enables the near-real-time exchange of structured yet extensible data between any two or more network entities.  This document defines XMPP's core protocol methods: setup and teardown of XML streams, channel encryption, authentication, error handling, and communication primitives for messaging, network availability ("presence"), and request-response interactions.  This document obsoletes RFC 3920. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6120"/>
        <seriesInfo name="DOI" value="10.17487/RFC6120"/>
      </reference>
      <reference anchor="RFC3862" target="https://www.rfc-editor.org/info/rfc3862" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3862.xml">
        <front>
          <title>Common Presence and Instant Messaging (CPIM): Message Format</title>
          <author fullname="G. Klyne" initials="G." surname="Klyne"/>
          <author fullname="D. Atkins" initials="D." surname="Atkins"/>
          <date month="August" year="2004"/>
          <abstract>
            <t>This memo defines the MIME content type 'Message/CPIM', a message format for protocols that conform to the Common Profile for Instant Messaging (CPIM) specification. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3862"/>
        <seriesInfo name="DOI" value="10.17487/RFC3862"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1ZW4/cthV+X2D/A+E81Aak6e46COotAni9cdANsoiROEjf
Co7EmWEtiQpJ7Xgau7+93zmH1GV2EiRFCvQhA8MrUbyc63cuLMvy/Cza2Jhr
deOrnY2mioM36ps+WtcFtXFe3TsM3JsQ9NZ2W3XXReNdr57e393fPTs/0+u1
Nw/Xil55k7z4/Kx2Vadb7F17vYmld8F0a+O3ZWtbW2rMLZ3MLS8uMF1HzL26
uLoqLy/Kq0/Pz87PPlEh6q7+h25ch4/RD4aGbe/5JcSri4sXF1cgwxsNJvq+
sZVO5++3IAtHnZ+9218L4Z2J5RdEzfkZpl1j95r2q1wN3q7VEEodKosVvb1W
+H2iKt1h2CjtvT6op3ajdNOogwnPFISz02GndsYbIlWVKroqPQXnozebkF8P
rbwpmnNNG9BznnXNZ9Vmo4cmBkwZJ8i6tAB8DnHn/DV9ol+ZH5SyHWZ9tVLf
ZjFPn0QLX7lOxx3YOTHDeXD/pX0wL6Yx02rbXKt/1qy4l+nvCiL8udNvV+or
03UQZTg+/HZoGtOd+Mwn39pQuUcnb5phszm8tNauKk3Mn591zrdQ74NJEvj2
y9ury8sX6e2u/GJlTdyUbRPYvrJBn/reewdNuGba6bMXl5/O3i6vLqa353/5
7OqaTa/bzGg4PyvLUul1iF5Xkd7f7mxQsPyhNV1UboiN7UxQc2qUm7lXqztx
rLgzZOwRnzeq2mmYge3YrVYqH9Taum7YA2DN3tVDRRtlsf30CXhaN6YNH8/P
Pp/9hC4jrnzXkUvFxy5tvF7bxsZD8m21d/4dfd96N/Rqb2H3oTeV3RyY2NZ2
ttUYM5FIbg2I7mxog/Lmx8F6U5Mdt/odproavje6IObms/XMY8HvSEhjVuqb
B+NVtK0pfm7BTj/AMyFZ84DT9rY2oQcQ1OSxBRFpvdoYzUIHmWnB2jtdm87U
hQK2pGm6Fq0QK6ary+hK/MFj5Q/y4enrq9evn5HLk0T2XaHWQ2RJNLp6R+vs
sSDXJu4NzB6TAlHgH2wFY6hcF203GHb0CgRD6VqFYU0kkEhBvlfmPXayIACi
eCvG0dXa10H1rHpwvBZNMPae0BaQyu3Zyoj0nxMifV+7uCOyAszWs1QM8dJ7
C7pB5MQZSN1bYBBYHzpolawgW6+pBk9sbwftYWKGGIQh08cDEf0ABa2SMXqC
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
kc3SxYcjAAA=

-->

</rfc>
