<?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.7.27 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kohbrok-mimi-metadata-minimalization-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="MIMIMI">MIMI Metadata Minimalization (MIMIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-kohbrok-mimi-metadata-minimalization-02"/>
    <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="2025" month="April" day="07"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 24?>

<t>This document describes a proposal to run the MIMI protocol in a way that
reduces the ability of the Hub and service providers to associate messaging
activity of clients with their respective identities.</t>
      <t>For now, this document only contains a high-level description of the mechanisms
involved.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    More Instant Messaging Interoperability Working Group mailing list (mimi@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/kkohbrok/mimi-metadata-minimalization"/>.</t>
    </note>
  </front>
  <middle>
    <?line 33?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Since the MIMI protocol uses MLS PublicMessages for Proposals and Commits, both
Hub and Provider can observe and track activities of clients both within an
individual group and across groups.</t>
      <t>The goal of the scheme described in this document are as follows:</t>
      <ul spacing="normal">
        <li>
          <t>For a given client, prevent the Hub and all service providers from associating
the activity of the client with that client's identifier.</t>
        </li>
        <li>
          <t>For a given client, prevent the Hub and all service providers except for the
client's service provider from associating the activity of that client in one
group from that in any other.</t>
        </li>
      </ul>
      <t>These propoerties are achieved withouth limiting the ability of the Hub to track
a group's group state and provider public group information to newly joining
clients.</t>
      <t>However, the scheme comes with a few operative requirements and the following
general limitations:</t>
      <ul spacing="normal">
        <li>
          <t>There needs to be the notion of a "connection" between two users. Users that
are connected can link a pseudonym with a user's real identity and can
(selectively) allow others to do the same.</t>
        </li>
        <li>
          <t>Only connected users can add one-another to groups.</t>
        </li>
        <li>
          <t>Users that join a group need help of an existing group member in linking the
pseudonyms visible in the group to real user identities.</t>
        </li>
      </ul>
      <t>This document only contains a high-level description of the individual changes
required to achieve the goals detailed above.</t>
    </section>
    <section anchor="pseudonymization">
      <name>Pseudonymization</name>
      <t>The main mechanism to hide the user and client identifiers from the hub and
providers in the context of individual groups and use user-level and client-level
pseudonyms instead.</t>
      <t>The purpose of the pseudonymization scheme described in this document is to
hide metadata from service providers with as little impact as possible on the
features provided by the base MIMI protocol. This means that by
default, User and client identifiers are still visible to (other) users and
their clients.</t>
      <t>In addition, the pseudonymization scheme can also be used to hide a user's
identity from other users. See Section <xref target="user-to-user-pseudonymity"/> for more
details.</t>
    </section>
    <section anchor="pseudonymity-through-credential-encryption">
      <name>Pseudonymity through credential encryption</name>
      <t>Clients use PseudonymousCredentials to represent them in MIMI rooms to hide their
identities from providers</t>
      <sourcecode type="tls"><![CDATA[
struct {
  IdentifierUri client_pseudonym;
  IdentifierUri user_pseudonym;
  opaque signature_public_key;
  opaque identity_link_ciphertext<V>;
} PseudonymousCredential
]]></sourcecode>
      <t>PseudonymousCredentials don't contain a client's client
and user ID. Instead, they use two pseudonyms: a user pseudonym shared by all
other PseudonymousCredentials of the user's clients in a given room and a
client pseudonym unique for each PseudonymousCredential. Each pseudonym is an
IdentifierUri made up of a randomly generated UUID and the user's provider's
domain.</t>
      <sourcecode type="tls"><![CDATA[
struct {
  IdentifierUri client_pseudonym;
  IdentifierUri user_pseudonym;
  opaque signature_public_key;
} PseudonymousCredentialTBS

struct {
  /* SignWithLabel(., "PseudonymousCredentialTBS",
    PseudonymousCredentialTBS) */
  opaque pseudonymous_credential_signature<V>;
  Credential client_credential;
} IdentityLinkTBE
]]></sourcecode>
      <t>The <tt>identity_link_ciphertext</tt> is created by encrypting the IdentityLinkTBE,
which contains the client's real credential, as well as a signature over the
PseudonymousCredentialTBS using the client credential's signature key.</t>
      <t>The <tt>identity_link_key</tt> used for encryption is unique per pseudonymous credential.
It is derived from the client's <tt>connection_key</tt>.</t>
      <sourcecode type="tls"><![CDATA[
identity_link_key = ExpandWithLabel(connection_key,
  "IdentityLinkKey", PseudonymousCredentialTBS, KDF.Nh)
]]></sourcecode>
      <t>See <xref target="connections"/> for more details on the <tt>connection_key</tt>.</t>
      <t>Pseudonyms are specific to each room and client since the <tt>identity_link_key</tt> is
unique per pseudonymous credential and pseudonymous credentials are used in only
once (i.e. in one room).</t>
    </section>
    <section anchor="identity-link-key-management-in-rooms">
      <name>Identity link key management in rooms</name>
      <t>All clients in a room MUST be able to decrypt the <tt>identity_link_ciphertext</tt> of
all other clients in the room, except in the cases detailed in
<xref target="user-to-user-pseudonymity"/>.</t>
      <t>TODO: The following scheme should be replaced by TreeWrap for FS and PCS. It's a
simple placeholder for now.</t>
      <t>The hub holds encrypted copies of the <tt>identity_link_key</tt>s of all
clients in the room and updates them as clients get added, removed and updated.
The <tt>identity_link_key</tt>s are encrypted with the room's <tt>identity_link_wrapper_key</tt>.</t>
      <t>The <tt>identity_link_wrapper_key</tt> is freshly generated by the room's creator and
does not change throughout the lifetime of the group.</t>
      <t>The <tt>identity_link_wrapper_key</tt> is distributed to new participants as they join
the room.</t>
      <section anchor="add-flow">
        <name>Add flow</name>
        <t>If a group member adds a new user, the adder MUST include a
IdentityLinkExtension in the Welcome's GroupInfoExtensions.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque identity_link_wrapper_key<V>;
} IdentityLinkExtension
]]></sourcecode>
        <t>The adder MUST also include the encrypted <tt>identity_link_key</tt> of all added users
in the AAD of the commit message. The order of the encrypted <tt>identity_link_key</tt>s
in the AAD MUST match the order of the Add proposals in the Commit message.</t>
        <t>Note that this requires the adder to have a connection with each added user as
specified in <xref target="connections"/>.</t>
        <t>TODO: Note here that the sender MUST use the SafeAAD as defined in the extension
doc.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque encrypted_identity_link_keys<V>;
} AddAAD
]]></sourcecode>
        <t>Existing group members can then decrypt the <tt>identity_link_key</tt>s to learn the
real identities of the added users.</t>
        <t>When it receoves a Commit message, the hub adds the encrypted <tt>identity_link_key</tt>s to
the room's state.</t>
        <t>Finally, the added user receiving the welcome can then obtain the encrypted
<tt>identity_link_key</tt>s from the hub and decrypt them using the
<tt>identity_link_wrapper_key</tt> from the extension and use the decrypted
<tt>identity_link_key</tt>s to decrypt the <tt>identity_link_ciphertexts</tt> of all other
clients in the room.</t>
      </section>
      <section anchor="join-flow">
        <name>Join flow</name>
        <t>Members joining a room through the join flow need to obtain the
<tt>identity_link_wrapper_key</tt> out of band. The key can be shared any other group
member.</t>
        <t>TODO: When defining features such as join/invitation links the
<tt>identity_link_wrapper_key</tt> should be included in the link.</t>
        <t>When joining the group, the joining client MUST include its own encrypted
<tt>identity_link_key</tt> in the AAD of the external commit message via the AddAAD
struct.</t>
      </section>
    </section>
    <section anchor="connections">
      <name>Connections</name>
      <t>A connection is a mutually agreed-upon relation betwen two users. Users can
establish connections between one-another through the following process.</t>
      <t>Let's call the initiator of the connection establishment Alice and the
responding user Bob.</t>
      <t>At the time of registration with their local provider, Alice and Bob generate an
HPKE keypair and upload the public key (called the connection establishment
public key) to their respective providers. The providers make the keys available
to all other users without requiring authentication.</t>
      <t>To hide Alice's identity from Bob's provider throughout the connection
establishment process, Alice obtains Bob's connection establishment public key
from Bob's provider.</t>
      <t>Alice now creates a new conversation with her local provider as hub and adds
all of her clients to that conversation. She then compiles the following
information into a connection request:</t>
      <sourcecode type="tls"><![CDATA[
struct {
  Credential requester_client_credential;
  opaque connection_room_id<V>;
  opaque connection_room_identity_link_wrapper_key<V>;
  opaque requester_connection_key<V>;
  opaque connection_response_key<V>;
} ConnectionRequest
]]></sourcecode>
      <t>The <tt>connection_response_key</tt> is a fresh HPKE keypair that Alice generates when
she creates the connection request. It is later used by Bob to encrypt his own
<tt>connection_key</tt> if Bob chooses to accept the request.</t>
      <t>TODO: The request will likely contain more information such as e.g. an authorization
token that allows Bob to fetch Alice's KeyPackages. Any such information must also
be included in the ConnectionResponse below.</t>
      <t>Alice then encrypts the connection request using Bob's connection establishment
public key and sends it to Bob's provider.</t>
      <t>Bob fetches the connection request from his provider and decrypts it using his
connection establishment key.</t>
      <t>He can inspect Alice's <tt>requester_client_credential</tt> and decide whether to
accept the request.</t>
      <t>If Bob accepts, he creates a connection response:</t>
      <sourcecode type="tls"><![CDATA[
struct {
  opaque responder_connection_key<V>;
} ConnectionResponse
]]></sourcecode>
      <t>Bob then follows the join flow for the room with the <tt>connection_room_id</tt>,
including the ConnectionResponse encrypted under the <tt>connection_response_key</tt>
in the join message's (i.e. the external commit's) AAD. As part of that
process, he obtains the encrypted <tt>identity_link_key</tt>s for Alice's clients and
verifies that they belong to the same user as the <tt>requester_client_credential</tt>
in the connection request.</t>
      <t>Bob joining the room signals to Alice that Bob has accepted her connection
request. Alice can decrypt Bob's ConnectionResponse in the join message's AAD
using the connection response key she initially included in the connection
request.</t>
      <t>Both Alice and Bob now share a room and can derive <tt>identity_link_key</tt>s for each
other's clients, which in turn allows them to add each other to rooms.</t>
    </section>
    <section anchor="user-to-user-pseudonymity">
      <name>User-to-user pseudonymity</name>
      <t>In some cases, users may want to communicate with each other without revealing
their real identities to one-another. Room policy can thus specify the extent
to which clients are required to provide <tt>identity_link_key</tt>s. For example,
<tt>identity_link_key</tt>s might not be allowed at all, or only admins are required to
provide <tt>identity_link_key</tt>s.</t>
    </section>
    <section anchor="keypackages">
      <name>KeyPackages</name>
      <t>The use of user and client pseudonyms requires some additional care when
generating and uploading KeyPackages.</t>
      <t>The user and client pseudonyms in the PseudonymousCredential must be unique
across groups. For the client pseudonym to be unique across groups, clients can
generate it randomly for each KeyPackage.</t>
      <t>However, to allow the hub to associate a set of leaves with a user, the user
pseudonym must be consistent across the leaves in that group. This means that
clients need to coordinate to provide KeyPackage sets, where each KeyPackage in
a set contains a consistent user pseudonym and no two sets contain the same
pseudonym. Each such set can be used in the context of one group.</t>
      <t>A procedure for a client to upload KeyPackages could thus look as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>Check for which user pseudonyms other clients of the same user have uploaded
KeyPackages.</t>
        </li>
        <li>
          <t>Identify user pseudonyms for which the KeyPackage set is missing a KeyPackage
of this client.</t>
        </li>
        <li>
          <t>Generate and upload KeyPackages for those user pseudonyms.</t>
        </li>
        <li>
          <t>Upload as many KeyPackages as desired, thus starting new KeyPackage sets for
other clients to complete.</t>
        </li>
      </ol>
      <t>At least one KeyPackage set of each user must consist of last-resort
KeyPackages. If such a last-resort set is used more than once, the use of the
same user pseudonym allows the hub to learn that one user is active in two
particular groups. The re-use of such a set cannot be avoided entirely, but
users upload more than one set (and re-upload last-resort sets frequently) to
mitigate this at least to a certain degree.</t>
      <t>When uploading KeyPackages, user generally upload KeyPackages to their provider
indexed by their connection token. To avoid leaking metadata to the user's own
provider, the upload must not be connected to the user's identity.</t>
      <t>Users can then fetch KeyPackages of connected users from their respective
providers using the connected user's connection token.</t>
    </section>
    <section anchor="message-fanout">
      <name>Message Fanout</name>
      <t>This protocol assumes that clients have one or more queue IDs that their local
provider can use to route incoming messages to a place that the client can
access.</t>
      <t>For each member of a given group, the member's queue ID is stored in a leaf node
extension s.t. the hub can forward that information to the client's local
provider upon fanout.</t>
      <t>Since in most cases, there will only be a single queue for each client (as
opposed to one queue per group), the queue ID is encrypted using an HPKE key of
the client's provider.</t>
      <t>When receiving the encrypted queue ID with the message fanout, the provider can
decrypt the queue ID and route the message to the correct queue.</t>
    </section>
  </middle>
  <back>








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

-->

</rfc>
