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

<t>This document describes MIMI Portability mechanisms.</t>
    </abstract>
  </front>
  <middle>
    <?line 28?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>draft-robert-mimi-delivery-service and others describe a transport and delivery
mechanism for messages in a federated environment that relies on the concept of
a fixed Delivery Service that is in charge of orchestrating the communication
for a given MLS group. All clients of a given MLS group agree on what Delivery
Service to use and rely on it to solve the problem of Commit message ordering.</t>
      <t>While having a fixed Delivery Service solves a class of synchronization
problems, it can sometimes be a limiting factor, especially because it
introduces reliance on a specific operator. There are legitimate scenarios where
the operator of a Delivery Service no longer wants to operate it, or where the
users of a group want to switch to a different Delivery Service.</t>
      <t>This document describes mechanisms that allow users to switch an MLS group to a
different Delivery Service.</t>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <t>We consider two distinct Delivery Services, the <em>Source Delivery Service</em> and
the <em>Target Delivery Service</em>. The Source Delivery Service is where the MLS
group currently resides, and the Target Delivery Service is where the MLS group
should be moved to. The Source Delivery Service and the Target Delivery Service
have distinct domain names.</t>
      <t>The Source Delivery Service is responsible for exporting the MLS group state and
sending it to the Target Delivery Service. The Target Delivery Service is
responsible for importing the MLS group state and making it available to the
members of the MLS group.</t>
      <t>Once the MLS group state has been imported into the Target Delivery Service, the
Source Delivery Service no longer has any responsibility for the MLS group. The
Source Delivery Service can delete the MLS group state and all associated
metadata.</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="672" viewBox="0 0 672 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,48 L 8,320" fill="none" stroke="black"/>
            <path d="M 216,48 L 216,72" fill="none" stroke="black"/>
            <path d="M 216,88 L 216,120" fill="none" stroke="black"/>
            <path d="M 216,136 L 216,320" fill="none" stroke="black"/>
            <path d="M 488,48 L 488,320" fill="none" stroke="black"/>
            <path d="M 8,80 L 480,80" fill="none" stroke="black"/>
            <path d="M 16,128 L 488,128" fill="none" stroke="black"/>
            <path d="M 8,176 L 208,176" fill="none" stroke="black"/>
            <path d="M 216,224 L 480,224" fill="none" stroke="black"/>
            <path d="M 224,272 L 488,272" fill="none" stroke="black"/>
            <path d="M 16,320 L 216,320" 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,80 476,74.4 476,85.6" fill="black" transform="rotate(0,480,80)"/>
            <polygon class="arrowhead" points="232,272 220,266.4 220,277.6" fill="black" transform="rotate(180,224,272)"/>
            <polygon class="arrowhead" points="216,176 204,170.4 204,181.6" fill="black" transform="rotate(0,208,176)"/>
            <polygon class="arrowhead" points="24,320 12,314.4 12,325.6" fill="black" transform="rotate(180,16,320)"/>
            <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="236" y="36">Source</text>
              <text x="300" y="36">Delivery</text>
              <text x="368" y="36">Service</text>
              <text x="508" y="36">Target</text>
              <text x="572" y="36">Delivery</text>
              <text x="640" y="36">Service</text>
              <text x="84" y="68">MigrationRequest</text>
              <text x="88" y="116">MigrationResponse</text>
              <text x="72" y="164">MigrationInit</text>
              <text x="292" y="212">MigrationContent</text>
              <text x="320" y="260">TargetMigrationComplete</text>
              <text x="104" y="308">MigrationConfirmation</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
Client                    Source Delivery Service           Target Delivery Service
|                         |                                 |
| MigrationRequest        |                                 |
+---------------------------------------------------------->|
|                         |                                 |
| MigrationResponse       |                                 |
|<----------------------------------------------------------+
|                         |                                 |
| MigrationInit           |                                 |
+------------------------>|                                 |
|                         |                                 |
|                         | MigrationContent                |
|                         +-------------------------------->|
|                         |                                 |
|                         | TargetMigrationComplete         |
|                         |<--------------------------------+
|                         |                                 |
| MigrationConfirmation   |                                 |
|<------------------------+                                 |
]]></artwork>
      </artset>
      <t>TODO: The MLS group ID is fixed for the lifetime of a group and cannot be
changed. This requires group IDs to be globally unique across all relevant
Delivery Services. Even though this could be solved using a UUID, groups should
also be tied to a specific owning delivery service.</t>
    </section>
    <section anchor="migration">
      <name>Migration</name>
      <t>TODO: Describe what keys are used for the signatures.</t>
      <t>TODO: Describe that the crypto primitives should be aligned with the ciphersuite
of the MLS group.</t>
      <section anchor="requesting-a-migration">
        <name>Requesting a migration</name>
        <t>The migration process is initiated by a client of the MLS group. The client
requests a MigrationResponse from the Target Delivery Service. The Target
Delivery Service returns a MigrationResponse that can be used by the Source
Delivery Service to transfer the MLS group state to the Target Delivery Service.</t>
        <t>The client sends the following MigrationRequest message to the Target Delivery
Service:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque source_domain_name<V>;
  opaque target_domain_name<V>;
  opaque group_id<V>;
  uint64 epoch;
} MigrationRequest;
]]></sourcecode>
        <t>The Target Delivery Service responds with a MigrationResponse message:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  MigrationRequest migration_request;
  uint8[32] nonce;
  opaque signature<V>;
} MigrationResponse;
]]></sourcecode>
      </section>
      <section anchor="initiating-a-migration">
        <name>Initiating a migration</name>
        <t>The client sends the following MigrationInit message to the Source
Delivery Service:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  MigrationResponse migration_response;
  opaque signature<V>;
} MigrationInit;

struct {
  opaque target_ds_domain<V>;
} MigrationCommitAAD
]]></sourcecode>
        <t>The client also sends a Commit message to the group, where the AAD consists of a
serialized MigrationCommitAAD struct.</t>
        <t>The Source Delivery Service sends a MigrationContent message to the Target
Delivery Service:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  MigrationResponse migration_response;
  opaque group_state<V>;
  opaque signature<V>;
} MigrationContent;
]]></sourcecode>
        <t>The Target Delivery Service responds with a TargetMigrationComplete message:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque migration_content_hash<V>;
  opaque signature<V>;
} TargetMigrationComplete;
]]></sourcecode>
        <t>The Source Delivery Service proceeds to fan out the client's Commit message that
includes the MigrationCommmitAAD to the group.</t>
        <t>Finally, the Source Delivery Service responds to the client with a
MigrationConfirmation message:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque domain_name<V>;
  uint8[32] nonce;
  opaque group_id<V>;
  opaque signature<V>;
} MigrationConfirmation;
]]></sourcecode>
        <t>The Source Delivery Service can now delete the MLS group state and all
associated metadata.</t>
        <t>Clients can now send messages to the group using the Target Delivery Service.</t>
      </section>
    </section>
    <section anchor="authorization">
      <name>Authorization</name>
      <t>In general, whether a client is allowed to migrate an MLS group from one
Delivery Service to another is a policy decision that is made by the operator of
the Source Delivery Service. The Source Delivery Service MUST NOT allow a client
to migrate an MLS group if the client is not authorized to do so.</t>
      <t>As a default policy, a Source Delivery Service SHOULD allow any client to
migrate an MLS group to another Delivery Service.</t>
      <t>Conversely, the Target Delivery Service MUST NOT allow a client to import an MLS
group if the client is not authorized to do so. The Target Delivery Service MUST
ensure that the client is authorized to import the MLS group before issuing a
MigrationResponse and importing the MLS group state through an MigrationContent
message.</t>
      <t>As a default policy, a Target Delivery Service SHOULD allow any client to
migrate an MLS group to it when the client is also allowed to create new groups
on the Target Delivery Service.</t>
      <t>TODO: The default policies suggested above may be a bit liberal. We might want
to restrict them s.t. only clients from the target DS can request migration to
that DS.</t>
    </section>
  </middle>
  <back>






  </back>
  <!-- ##markdown-source:
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
HPn53VT8D05zc9f6GwAA

-->

</rfc>
