<?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.33 (Ruby 3.1.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-robert-mimi-delivery-service-01" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="MIMI">MIMI Delivery Service</title>
    <seriesInfo name="Internet-Draft" value="draft-robert-mimi-delivery-service-01"/>
    <author initials="R." surname="Robert" fullname="Raphael Robert">
      <organization>Phoenix R&amp;D</organization>
      <address>
        <email>ietf@raphaelrobert.com</email>
      </address>
    </author>
    <author initials="K." surname="Kohbrok" fullname="Konrad Kohbrok">
      <organization>Phoenix R&amp;D</organization>
      <address>
        <email>konrad.kohbrok@datashrine.de</email>
      </address>
    </author>
    <date year="2023" month="May" day="09"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 24?>

<t>This document describes the MIMI Delivery Service.</t>
    </abstract>
  </front>
  <middle>
    <?line 28?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The MLS protocol document specifies a protocol between two or more clients. The
MLS architecture document introduces an abstract concept of a "Delivery Service"
that is specifically responsible for ordering handshake messages and more
generally for delivering messages to the intended recipients.</t>
      <t>This document describes a Delivery Service that performs the mandated ordering
of handshake messages but also offers the basic functionality that is common to
several messaging services. In particular, it offers the following features:</t>
      <ul spacing="normal">
        <li>A protocol between clients and the Delivery Service that allows clients to
interact with the Delivery Service, including the specific wire format of the
messages. The protocol is specifically designed to be operated in a
decentralized, federated architecture but can be used in single instances as
well.</li>
        <li>Assistance for new joiners of a group: The Delivery Service can keep and
update state such as the public ratchet tree, group extensions, etc.</li>
        <li>Message validation: The Delivery Service can inspect and validate handshake
messages and reject malformed, invalid or malicious messages.</li>
        <li>Built-in authentication of group members: The Delivery Service can
authenticate group members, reject messages from non-members and enforce
group administration policies. Additionally, the Delivery Service can be
linked to the Authentication Service to enforce more policies and validation
rules.</li>
        <li>Privacy-preserving message delivery: The Delivery Service can deliver
messages to the intended recipients without learning the identity of group
members, in particular the sender or the recipients of messages. This feature
is optional and is compatible with most other features, such as assistance
and validation.</li>
        <li>Scalability: The protocol makes no assumption about whether the Delivery Service
runs as a single instance or as a cluster of instances.</li>
        <li>Network fluid: While the Delivery Service would typically run as a
server-side component, the only requirement is that it is accesible by all
clients.</li>
        <li>Transport agnostic: Messages between clients and the Delivery Service can be
sent via an arbitrary transport protocol. Additionally, in the federated
case, client messages to a guest Delivery Service can be forwarded by a
client's local instance of this service.</li>
        <li>Multi-device capable: The Delivery Service can be used by multiple devices
of the same users and supports adding and removing devices of a user.</li>
        <li>A Queueing Service subcomponent that can be used to implement a queueing
service for messages that are delivered asynchronously, particularly in
federated environments, as well as the protocol between the Delivery Service
and the Queueing Service.</li>
      </ul>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol overview</name>
      <t>The Delivery Service is designed around an MLS group as a basic entity. The
Delivery Service can be used with multiple groups but does not require a link
between the groups.
All operations of the Delivery Service are relative to a specific group.</t>
      <section anchor="high-level-functions-of-the-delivery-service">
        <name>High level functions of the Delivery Service</name>
        <ul spacing="normal">
          <li>Authentication of group members</li>
          <li>Validation of handshake messages</li>
          <li>Ordering of handshake messages</li>
          <li>Delivery of messages to the Queueing Service</li>
          <li>Assistance for clients who (re)join a group</li>
        </ul>
        <section anchor="flow">
          <name>Flow</name>
          <t>The protocol is designed in a request/response pattern, whereby the client sends
a DSRequest message to the Delivery Service and the Delivery Service responds
with a DSResponse message. This pattern can easily be used over e.g. RESTful
APIs.</t>
          <figure>
            <name>Delivery Service Request/Response scheme</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="272" viewBox="0 0 272 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,48 L 8,144" fill="none" stroke="black"/>
                  <path d="M 144,48 L 144,144" fill="none" stroke="black"/>
                  <path d="M 8,80 L 136,80" fill="none" stroke="black"/>
                  <path d="M 16,128 L 144,128" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="144,80 132,74.4 132,85.6" fill="black" transform="rotate(0,136,80)"/>
                  <polygon class="arrowhead" points="24,128 12,122.4 12,133.6" fill="black" transform="rotate(180,16,128)"/>
                  <g class="text">
                    <text x="28" y="36">Client</text>
                    <text x="172" y="36">Delivery</text>
                    <text x="240" y="36">Service</text>
                    <text x="56" y="68">DSRequest</text>
                    <text x="60" y="116">DSResponse</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
Client           Delivery Service
|                |
| DSRequest      |
+--------------->|
|                |
| DSResponse     |
|<---------------+
|                |
]]></artwork>
            </artset>
          </figure>
          <t>Depending on the client's request, the Delivery Service sends a message to the
Queueing Service. This happens whenever a message needs to be fanned out to all
other members of a group.</t>
          <figure>
            <name>Client/Delivery Service communication with fanout</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="448" viewBox="0 0 448 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,48 L 8,176" fill="none" stroke="black"/>
                  <path d="M 144,48 L 144,176" fill="none" stroke="black"/>
                  <path d="M 320,48 L 320,176" fill="none" stroke="black"/>
                  <path d="M 8,80 L 136,80" fill="none" stroke="black"/>
                  <path d="M 16,128 L 144,128" fill="none" stroke="black"/>
                  <path d="M 144,160 L 312,160" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="320,160 308,154.4 308,165.6" fill="black" transform="rotate(0,312,160)"/>
                  <polygon class="arrowhead" points="144,80 132,74.4 132,85.6" fill="black" transform="rotate(0,136,80)"/>
                  <polygon class="arrowhead" points="24,128 12,122.4 12,133.6" fill="black" transform="rotate(180,16,128)"/>
                  <g class="text">
                    <text x="28" y="36">Client</text>
                    <text x="172" y="36">Delivery</text>
                    <text x="240" y="36">Service</text>
                    <text x="348" y="36">Queueing</text>
                    <text x="416" y="36">Service</text>
                    <text x="56" y="68">DSRequest</text>
                    <text x="60" y="116">DSResponse</text>
                    <text x="180" y="148">Fanout</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
Client           Delivery Service      Queueing Service
|                |                     |
| DSRequest      |                     |
+--------------->|                     |
|                |                     |
| DSResponse     |                     |
|<---------------+                     |
|                | Fanout              |
|                +-------------------->|
|                |                     |
]]></artwork>
            </artset>
          </figure>
          <t>In the federated case, messages to a guest Delivery Service can be proxied
via the sender's own Delivery Service.</t>
        </section>
      </section>
      <section anchor="high-level-overview-of-the-operations">
        <name>High level overview of the operations</name>
        <ul spacing="normal">
          <li>Group creation/deletion</li>
          <li>Updating client queue information</li>
          <li>Assistance to join a group from a Welcome message as a new member</li>
          <li>Assistance to join a group through an External Commit message as a new member
or client of an existing member</li>
          <li>Adding and removing users to/from a group</li>
          <li>Adding and removing clients to/from a member of the group</li>
          <li>Client updates (MLS leaf updates)</li>
          <li>Assistance to resync a client with a group in case of state loss</li>
          <li>Sending application messages</li>
        </ul>
      </section>
      <section anchor="client-removals-induced-by-the-delivery-service">
        <name>Client removals induced by the Delivery Service</name>
        <t>The Delivery Service can remove clients from a group by issuing remove
 proposals in the following cases:</t>
        <ul spacing="normal">
          <li>A user has removed a client from its account</li>
          <li>A user has been deleted</li>
          <li>The client is removed from the group because it has been inactive for too
long</li>
        </ul>
      </section>
      <section anchor="authentication">
        <name>Authentication</name>
        <t>Clients authenticate to the Delivery Service using the signature key from their
respective leaf node in the group and a client-specific identifier.</t>
        <t>Depending on the operation, one or more kind of client identifier can be used:</t>
        <ul spacing="normal">
          <li>A leaf index: The client identifier is the leaf index of the client in the
group.</li>
          <li>KeyPackageRef: The client identifier is the KeyPackageRef of the client's
KeyPackage.</li>
          <li>User key hash: The client identifier is the hash of the user's public key.</li>
        </ul>
        <t>The identifier is encoded as follows:</t>
        <artwork><![CDATA[
enum  {
  leaf_index(0),
  key_package_ref(1),
  user_key_hash(2),
} DSSenderType;

struct {
  DSSenderType sender_type;
  select (DSSenderID.sender_type) {
    case leaf_index
      uint32 leaf_index;
    case key_package_ref
      opaque key_package_ref<V>;
    case user_key_hash
      opaque user_key_hash<V>;
  }
} DSSenderID;
]]></artwork>
        <t>To authenticate, the client signs the corresponding request. The key used to
sign/verify a given request depends on the <tt>sender_id</tt>.</t>
        <artwork><![CDATA[
struct {
   DSSenderID sender_id;
   DSRequest request;
   // Signature over DSMessageTBS
   opaque signature<0..255>;
} DSMessage;

struct {
   DSSenderID sender_id;
   DSRequest request;
} DSMessageTBS;
]]></artwork>
      </section>
      <section anchor="requestresponse-scheme">
        <name>Request/Response scheme</name>
        <t>The various request types, each corresponding to an operation, are combined as follows:</t>
        <artwork><![CDATA[
enum {
  ds_create_group(0),
  ds_delete_group(1),
  ...
} DSRequestType;
]]></artwork>
        <t>The request type is encoded in the DSRequest message as follows:</t>
        <artwork><![CDATA[
struct {
  DSRequestType request_type;
  select (DSRequest.request_type) {
    case ds_create_group:
      CreateGroupRequest create_group_request;
    case ds_delete_group:
      DeleteGroupRequest delete_group_request;
    ...
  }
} DSRequest;
]]></artwork>
      </section>
    </section>
    <section anchor="operations">
      <name>Operations</name>
      <section anchor="create-group">
        <name>Create group</name>
        <t>A request from the client to create a new group on the Delivery Service.</t>
        <t>The client sends the following CreateGroupRequest to the Delivery Service:</t>
        <artwork><![CDATA[
struct {
  opaque group_id<V>;
  KeyPackage key_package;
  ClientQueueConfig client_queue_config;
  GroupInfo group_info;
} CreateGroupRequest;
]]></artwork>
        <t>The Delivery Service responds with a CreateGroupResponse:</t>
        <artwork><![CDATA[
enum {
  invalid_group_id(0),
  invalid_key_package(1),
  invalid_group_info(2),
} CreateGroupResponse;
]]></artwork>
        <section anchor="validation">
          <name>Validation</name>
          <t>The Delivery Service validates the request as follows:</t>
          <ul spacing="normal">
            <li>The group ID is not empty and is not already in use.</li>
            <li>The KeyPackage is valid, according to (I-D.ietf-mls-protocol) 13.4.3.2. Joining via
External Commits.</li>
            <li>The GroupInfo is valid, according to (I-D.ietf-mls-protocol) 11.1. KeyPackage
validation.</li>
          </ul>
        </section>
      </section>
      <section anchor="delete-group">
        <name>Delete group</name>
        <t>A request from the client to delete a group from the Delivery Service.</t>
      </section>
      <section anchor="update-queue-information">
        <name>Update queue information</name>
        <t>A request from the client to update the queue information for a group. Clients
can provision a queue information object to indicate to the Delivery Service how
to transmit messages to the client during fanout.</t>
      </section>
      <section anchor="further-operations">
        <name>Further operations</name>
        <t>The following operations follow the same pattern as the create group operation
but are not fully specified in this version of the document:</t>
        <ul spacing="normal">
          <li>Add user to group</li>
          <li>Remove user from group</li>
          <li>Add client to group</li>
          <li>Remove client from group</li>
          <li>Update client</li>
          <li>Resync client</li>
          <li>Update client queue information</li>
          <li>Join from a Welcome message</li>
          <li>Join from an External Commit message</li>
          <li>Send message</li>
        </ul>
      </section>
    </section>
    <section anchor="delivery-service-state">
      <name>Delivery Service state</name>
      <t>For each group hostend on a particular Delivery Service instance, the Delivery
Service keeps the following state:</t>
      <ul spacing="normal">
        <li>The public MLS ratchet tree of the group</li>
        <li>The GroupInfo of the current epoch</li>
        <li>Past group states (for members who join through a Welcome message)</li>
        <li>Client queue information (for message fanout via the Queueing Service)</li>
        <li>Proposal store that stores standalone proposals of the current epoch</li>
        <li>Extensions (TBD)</li>
      </ul>
    </section>
    <section anchor="queueing-service">
      <name>Queueing Service</name>
      <t>The Queueing Service is a service that is used by the Delivery Service to fan
out messages to clients. Each client has a queue that is used to store messages
for later retrieval by the client. The group state on the Delivery Service
contains client queue information for each client of a group. This information
is forwarded to the Queueing Service along with the message during message
fanout. The information is opaque to the Delivery Service and is only used by
the Queueing Service to deliver the message to the client.</t>
      <t>Note that this document uses the term "client queue" to refer to an abstract
mechanism to forward messages to clients and does not necessarily imply that an
actual queueing mechanism is used.</t>
      <t>This document only specifies the interface between the Delivery Service and the
Queueing Service. Other aspects of the Queueing Service are not specified in
this document.</t>
      <section anchor="queueing-service-protocol">
        <name>Queueing Service protocol</name>
        <t>The Queueing Service protocol is a simple request/response protocol used between
the Delivery Service and the Queueing Service.</t>
        <figure>
          <name>Queueing Service Request/Response scheme</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="432" viewBox="0 0 432 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,48 L 8,144" fill="none" stroke="black"/>
                <path d="M 224,48 L 224,144" fill="none" stroke="black"/>
                <path d="M 8,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 16,128 L 224,128" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,80 212,74.4 212,85.6" fill="black" transform="rotate(0,216,80)"/>
                <polygon class="arrowhead" points="24,128 12,122.4 12,133.6" fill="black" transform="rotate(180,16,128)"/>
                <g class="text">
                  <text x="36" y="36">Delivery</text>
                  <text x="104" y="36">Service</text>
                  <text x="332" y="36">Queueing</text>
                  <text x="400" y="36">Service</text>
                  <text x="108" y="68">QueueingServiceRequest</text>
                  <text x="112" y="116">QueueingServiceResponse</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Delivery Service                     Queueing Service
|                          |
| QueueingServiceRequest   |
+------------------------->|
|                          |
| QueueingServiceResponse  |
|<-------------------------+
|                          |
]]></artwork>
          </artset>
        </figure>
        <t>Whenever the Delivery Service has validated an incoming message from a client
and starts to fan out the message, it sends the following request to the
Queueing Service for every client in the group:</t>
        <artwork><![CDATA[
struct {
  opaque client_queue_information<V>;
  MLSMessage message;
} QueueingServiceRequest;
]]></artwork>
        <t>The Queueing Service responds with a QueueingServiceResponse:</t>
        <artwork><![CDATA[
enum {
  ok(0),
  invalid_client_queue_information(1),
} QueueingServiceResponse;
]]></artwork>
        <t>In case the Queueing Service considers the client queue information to be in
invalid (e.g. because the corresponding user/client has been deleted), it
responds with invalid_client_queue_information. Otherwise, it responds with ok.</t>
        <t>The Delivery Service can use rejected messages to subsequentially issue remove
proposals to remove the client from the group. The Delivery Service rejects
Commit messages and application messages until a client has sent a Commit that
covers the proposals.</t>
      </section>
      <section anchor="queueing-service-in-federated-environments">
        <name>Queueing service in federated environments</name>
        <t>In federated environments, the Queueing Service does not necessarily have to be
part of the same domain as the Delivery Service. In this case, the Delivery
Service sends requests over an inter-domain transport protocol to the Queueing
Service.</t>
      </section>
    </section>
    <section anchor="privacy-preserving-message-delivery">
      <name>Privacy preserving message delivery</name>
      <t>If the desired mode of operation is for the Delivery Service to learn as little
as possible about the groups it serves and their members, the protocol can be
extended to protect the group state on the Delivery Service. This can happen
through two complementary mechanisms:</t>
      <ul spacing="normal">
        <li>Unlinking member credentials from credentials issued by the Authentication
Service, providing pseudonymity at the Delivery Service level</li>
        <li>Encrypting the group state with a key that is only known to the group
members, providing encryption at rest</li>
      </ul>
      <t>In practice, the requests from clients to the Delivery Server are extended with
additional parameters, such as decryption keys for the group state and
additional pseudonymous user-level authentication.</t>
    </section>
    <section anchor="extensions">
      <name>Extensions</name>
      <t>The Delivery Service can make use of the following MLS extensions:</t>
      <ul spacing="normal">
        <li>Example: Group administration extension</li>
        <li>TBD</li>
      </ul>
    </section>
  </middle>
  <back>






  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA50a23LctvWdX4GxZxrJ0a5sp3noOs3UiexWdZO4lp08dDoK
lsRqEZEEA5CSN7Hz7T0XAARvsl09eNYgcHBw7rfVapW1ui3VRnx3/t25OFOl
vlH2IC6UvdG5yuR2a9UNf80Kk9eygr2Flbt2Zc1W2XZV6UqvCn9w5fjg6uGj
LJetujL2sBG63pks043diNZ2rn388OFfHj7OpFVyA1flndXtIbtWh1tji404
r1tla9WuzvCeLHOtrItLWZoa7j4olzV6I/7TmvxEOGNbq3YOfh0q/PHfLJNd
uzd2k4mVgJvdRrxai1eEaybgj5/wSjZ7qcr0g7FXsta/yVabeiNe7o2q9Vvx
6k9n9FVVUpfwFNXu/mb5MBNgnZuqv+vFWrww+60118llL0xtZTH48FGXXdO5
9TWf+1shW+n2VtdqXagsW61WQm5da2UORHq9104Ah7pK1a0olMut3ion2r2a
5+2aIVS6KEqAdh/Jbk3R5YgSwoNz/7oQjTVAaVP2sF2jcr3TAFv2X7eqvVWq
Fu2tgbeJylgl8lLDfrcWACtDWNLme92qvO3ga4Sn/b0IsI4vErmpc9W0wuzg
nntj7O9l7V7CWRfQyWVZHoRVrjG109tSiR3gAfKkgGBXYg8i5PbyWolKOSev
6LKC8MyuVK0sHccjXpTxUNzaGqIjYKrqQhVwTa4bftwy5eWE5IJwbpSFeypm
TQVYgJ4UEdMM3juD7LZrhSwdEHe3U5bPbqXTudh1NbFMlqBEIlAFhLIywA6T
OXWDr/Og8FleR4Ex57VopG113pXSngjdpuB3pizNLR7YKYksc5ssEw/E0ynX
PaeJpHh0/uES4bm4GXATgmhK/L7V7X72MOBV52VXICb4PTAcTljiciVJSuAb
AgwkI7HrUR1LCvBJX9VAeODtVgkDXCE+aBBBBFOoHLAEwunfVHECJCj8hoEQ
I1tykFqA0Dk+7QDPEmUFzRYJtUN4t6os10Q+5zR/InGr1a34xYBOA9VJ1K+s
6ZoNIT8hI151rVSDhEagXYPCIwAc/tvle7iMaNR02xIoBBjne9WC1VVARoIs
1FsQYgcCA0ZTtTnh9B3TTNzAcwtvkxYRgJcBIVtitj+gepFNWUBbrPoFd1ey
RFYhLXVNx8hOwI9cm871bEN8vul02a6QFWDLgQ3AM0QKCcSPqFQFttctY4lo
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

-->

</rfc>
