<?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-robert-mimi-delivery-service-00" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.2 -->
  <front>
    <title abbrev="MIMI">MIMI Delivery Service</title>
    <seriesInfo name="Internet-Draft" value="draft-robert-mimi-delivery-service-00"/>
    <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="2022" month="November" day="06"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes the MIMI Delivery Service.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The MLS protocol document specifies a protocol between two or more clients. The
MLS architecture document introduce 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>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>
        </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 sends the following token to the Delivery Service:</t>
        <artwork><![CDATA[
struct {
   opaque group_id<V>;
   uint32 timestamp;
   DSSenderID sender_id;
   // Signature over DSAuthTokenTBS
   opaque signature<0..255>;
} DSAuthToken;

struct {
   opaque group_id<V>;
   uint32 timestamp;
   DSSenderID sender_id;
} DSAuthTokenTBS;
]]></artwork>
        <t>The Delivery Service can mandate additional authentication mechanisms, such as
user-based authentication.</t>
      </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 pseudonimity 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:
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
fV78D1WpJFUCMwAA

-->

</rfc>
