<?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.18 (Ruby 3.3.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-mimi-pseudonyms-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="MIMI pseudonym privacy flows">Some pseudonymous privacy flows for More Instant Messaging Interoperability (MIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-mahy-mimi-pseudonyms-00"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="August" day="18"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>metadata privacy</keyword>
    <keyword>pseudonyms</keyword>
    <keyword>pseudonymous</keyword>
    <keyword>selective disclosure</keyword>
    <abstract>
      <?line 38?>

<t>The MIMI protocol has a baseline level of metadata privacy, which can be
made more private through the optional use of per-room pseudonyms. This
document describes three of many possible flows that use pseudonyms for
enhanced privacy. It also discusses some ways that spam and abuse prevention
mechanisms can work in conjunction with pseudonyms.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rohanmahy.github.io/mimi-pseudonyms/draft-mahy-mimi-pseudonyms.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mahy-mimi-pseudonyms/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        More Instant Messaging Interoperability Working Group mailing list (<eref target="mailto:mimi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mimi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rohanmahy/mimi-pseudonyms"/>.</t>
    </note>
  </front>
  <middle>
    <?line 47?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The More Instant Messaging Interoperability (MIMI) protocol
<xref target="I-D.ietf-mimi-protocol"/> defines a baseline mechanism of metadata privacy
with the following properties. Each local provider can know which of its
users are a participant in any given room, and the domain of the hub. The
hub provider knows the list of participants for each room that it manages.
Local/follower providers do not learn the identity (or even the domain of)
participants from other providers as those users send handshakes and
application messages, unless the provider happens to also be the hub for the
room.</t>
      <t>There is also consensus that user can join rooms using a unique pseudonym
per room. The MIMI endpoints provided by the hub operate equally well on
pseudonyms as on "real" identities. However, there are operational
implications related to authorization, consent, KeyPackage availability,
credentials, spam/abuse mitigation, and disclosure of the user's "real"
identity. As a result there are several possible ways of using pseudonyms
that are compatible with MIMI. This document describes three specific flows.
Other flows and other metadata privacy mechanisms are possible, some of
which also use pseudonyms, for example
<xref target="I-D.kohbrok-mimi-metadata-minimalization"/>.</t>
      <t>The flows described here include a connection-oriented flow, an out-of-band
join link flow, and a knock flow. A very high level summary of each flow
follows.</t>
      <t>Connection flow:</t>
      <ul spacing="normal">
        <li>
          <t>Each party obtains (typically single-use) pseudonyms</t>
        </li>
        <li>
          <t>Alice finds Bob, and connects with him from one of her pseudonyms</t>
        </li>
        <li>
          <t>Alice reveals her actual identity to Bob inside an end-to-end encrypted channel, and provides a second pseudonym</t>
        </li>
        <li>
          <t>Bob connects to Alice from one of his pseudonyms to Alice's second pseudonym.</t>
        </li>
      </ul>
      <t>Since the last step is based on a human delay which could vary from seconds
to years, the timing would be difficult to correlate between a pair of
providers with a large volume of traffic. If either provider has a very
small number of users, either provider could use traffic analysis to
associate the second room with Bob.</t>
      <t>Out-of-band link flow:</t>
      <ul spacing="normal">
        <li>
          <t>create a room link</t>
        </li>
        <li>
          <t>distribute the link out-of-band</t>
        </li>
        <li>
          <t>get the GroupInfo using the link</t>
        </li>
        <li>
          <t>join the room</t>
        </li>
        <li>
          <t>optionally reveal the "real" identity inside the room</t>
        </li>
      </ul>
      <t>Knock flow:</t>
      <ul spacing="normal">
        <li>
          <t>a new users Cathy wants to join an established room. she uses a pseudonym
to externally join the associated "knock" room.</t>
        </li>
        <li>
          <t>Cathy provides a second pseudonym and KeyPackage inside the "knock room",
and immediately leaves the room</t>
        </li>
        <li>
          <t>later, an administrator of the room decides to add Cathy to the room using
the KeyPackage provided by Cathy.</t>
        </li>
      </ul>
      <t>This flow is substantially similar to the connection flow, except that Cathy
immediately leaves the "knock room", and the administrator adds Cathy to an
existing room (vs. Bob creating a new room).</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document uses MIMI terms defined in <xref target="I-D.ietf-mimi-arch"/> and
<xref target="I-D.ietf-mimi-protocol"/>. MIMI uses the Messaging Layer Security (MLS)
protocol extensively; the document uses several MLS terms defined in
<xref target="RFC9420"/>.</t>
    </section>
    <section anchor="example-flows">
      <name>Example flows</name>
      <section anchor="connection-flow">
        <name>Connection flow</name>
        <t>Initially Alice and Bob both request a number of pseudonyms (and
associated MLS credentials). They may upload KeyPackages for these
pseudonyms.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="448" viewBox="0 0 448 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,208" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,208" fill="none" stroke="black"/>
              <path d="M 280,48 L 280,208" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,208" fill="none" stroke="black"/>
              <path d="M 24,96 Q 26,92.8 28,96 Q 30,99.2 32,96 Q 34,92.8 36,96 Q 38,99.2 40,96 Q 42,92.8 44,96 Q 46,99.2 48,96 Q 50,92.8 52,96 Q 54,99.2 56,96 Q 58,92.8 60,96 Q 62,99.2 64,96 Q 66,92.8 68,96 Q 70,99.2 72,96 Q 74,92.8 76,96 Q 78,99.2 80,96 Q 82,92.8 84,96 Q 86,99.2 88,96 Q 90,92.8 92,96 Q 94,99.2 96,96 Q 98,92.8 100,96 Q 102,99.2 104,96 Q 106,92.8 108,96 Q 110,99.2 112,96 Q 114,92.8 116,96 Q 118,99.2 120,96 Q 122,92.8 124,96 Q 126,99.2 128,96 Q 130,92.8 132,96 Q 134,99.2 136,96 Q 138,92.8 140,96 Q 142,99.2 144,96 " fill="none" stroke="black"/>
              <path d="M 288,96 Q 290,92.8 292,96 Q 294,99.2 296,96 Q 298,92.8 300,96 Q 302,99.2 304,96 Q 306,92.8 308,96 Q 310,99.2 312,96 Q 314,92.8 316,96 Q 318,99.2 320,96 Q 322,92.8 324,96 Q 326,99.2 328,96 Q 330,92.8 332,96 Q 334,99.2 336,96 Q 338,92.8 340,96 Q 342,99.2 344,96 Q 346,92.8 348,96 Q 350,99.2 352,96 Q 354,92.8 356,96 Q 358,99.2 360,96 Q 362,92.8 364,96 Q 366,99.2 368,96 Q 370,92.8 372,96 Q 374,99.2 376,96 Q 378,92.8 380,96 Q 382,99.2 384,96 Q 386,92.8 388,96 Q 390,99.2 392,96 Q 394,92.8 396,96 Q 398,99.2 400,96 Q 402,92.8 404,96 Q 406,99.2 408,96 " fill="none" stroke="black"/>
              <path d="M 32,112 Q 34,108.8 36,112 Q 38,115.2 40,112 Q 42,108.8 44,112 Q 46,115.2 48,112 Q 50,108.8 52,112 Q 54,115.2 56,112 Q 58,108.8 60,112 Q 62,115.2 64,112 Q 66,108.8 68,112 Q 70,115.2 72,112 Q 74,108.8 76,112 Q 78,115.2 80,112 Q 82,108.8 84,112 Q 86,115.2 88,112 Q 90,108.8 92,112 Q 94,115.2 96,112 Q 98,108.8 100,112 Q 102,115.2 104,112 Q 106,108.8 108,112 Q 110,115.2 112,112 Q 114,108.8 116,112 Q 118,115.2 120,112 Q 122,108.8 124,112 Q 126,115.2 128,112 Q 130,108.8 132,112 Q 134,115.2 136,112 Q 138,108.8 140,112 Q 142,115.2 144,112 Q 146,108.8 148,112 Q 150,115.2 152,112 " fill="none" stroke="black"/>
              <path d="M 280,112 Q 282,108.8 284,112 Q 286,115.2 288,112 Q 290,108.8 292,112 Q 294,115.2 296,112 Q 298,108.8 300,112 Q 302,115.2 304,112 Q 306,108.8 308,112 Q 310,115.2 312,112 Q 314,108.8 316,112 Q 318,115.2 320,112 Q 322,108.8 324,112 Q 326,115.2 328,112 Q 330,108.8 332,112 Q 334,115.2 336,112 Q 338,108.8 340,112 Q 342,115.2 344,112 Q 346,108.8 348,112 Q 350,115.2 352,112 Q 354,108.8 356,112 Q 358,115.2 360,112 Q 362,108.8 364,112 Q 366,115.2 368,112 Q 370,108.8 372,112 Q 374,115.2 376,112 Q 378,108.8 380,112 Q 382,115.2 384,112 Q 386,108.8 388,112 Q 390,115.2 392,112 Q 394,108.8 396,112 Q 398,115.2 400,112 " fill="none" stroke="black"/>
              <path d="M 24,160 Q 26,156.8 28,160 Q 30,163.2 32,160 Q 34,156.8 36,160 Q 38,163.2 40,160 Q 42,156.8 44,160 Q 46,163.2 48,160 Q 50,156.8 52,160 Q 54,163.2 56,160 Q 58,156.8 60,160 Q 62,163.2 64,160 Q 66,156.8 68,160 Q 70,163.2 72,160 Q 74,156.8 76,160 Q 78,163.2 80,160 Q 82,156.8 84,160 Q 86,163.2 88,160 Q 90,156.8 92,160 Q 94,163.2 96,160 Q 98,156.8 100,160 Q 102,163.2 104,160 Q 106,156.8 108,160 Q 110,163.2 112,160 Q 114,156.8 116,160 Q 118,163.2 120,160 Q 122,156.8 124,160 Q 126,163.2 128,160 Q 130,156.8 132,160 Q 134,163.2 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 " fill="none" stroke="black"/>
              <path d="M 288,160 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 368,160 Q 370,156.8 372,160 Q 374,163.2 376,160 Q 378,156.8 380,160 Q 382,163.2 384,160 Q 386,156.8 388,160 Q 390,163.2 392,160 Q 394,156.8 396,160 Q 398,163.2 400,160 Q 402,156.8 404,160 Q 406,163.2 408,160 " fill="none" stroke="black"/>
              <polygon class="arrowhead" points="408,112 396,106.4 396,117.6" fill="black" transform="rotate(0,400,112)"/>
              <polygon class="arrowhead" points="296,160 284,154.4 284,165.6" fill="black" transform="rotate(180,288,160)"/>
              <polygon class="arrowhead" points="296,96 284,90.4 284,101.6" fill="black" transform="rotate(180,288,96)"/>
              <polygon class="arrowhead" points="152,160 140,154.4 140,165.6" fill="black" transform="rotate(0,144,160)"/>
              <polygon class="arrowhead" points="152,96 140,90.4 140,101.6" fill="black" transform="rotate(0,144,96)"/>
              <polygon class="arrowhead" points="40,112 28,106.4 28,117.6" fill="black" transform="rotate(180,32,112)"/>
              <g class="text">
                <text x="36" y="36">ClientA1</text>
                <text x="152" y="36">ServerA</text>
                <text x="280" y="36">ServerB</text>
                <text x="412" y="36">ClientB*</text>
                <text x="64" y="68">Request</text>
                <text x="320" y="68">Request</text>
                <text x="76" y="84">pseudonyms</text>
                <text x="332" y="84">pseudonyms</text>
                <text x="88" y="148">Store</text>
                <text x="128" y="148">KPs</text>
                <text x="344" y="148">Store</text>
                <text x="384" y="148">KPs</text>
                <text x="88" y="196">...</text>
                <text x="180" y="196">time</text>
                <text x="228" y="196">passes</text>
                <text x="344" y="196">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
ClientA1       ServerA         ServerB         ClientB*
  |               |               |               |
  | Request       |               | Request       |
  | pseudonyms    |               | pseudonyms    |
  +~~~~~~~~~~~~~~>|               |<~~~~~~~~~~~~~~+
  |<~~~~~~~~~~~~~~+               +~~~~~~~~~~~~~~>|
  |               |               |               |
  |     Store KPs |               |     Store KPs |
  +~~~~~~~~~~~~~~>|               |<~~~~~~~~~~~~~~+
  |               |               |               |
  |      ...      | time passes   |      ...      |
  |               |               |               |
]]></artwork>
        </artset>
        <t>Alice decides to connect to Bob. She creates a room in which to
bootstrap her private connection with Bob. She uses one of her pseudonyms
as her identifier in the new room. Alice searches for Bob using his handle
identifier. She requests KeyPackages for Bob's real identity. Note that she
may need consent to fetch his KeyPackages (not shown), or Bob may grant
blanket consent for connection rooms. Alice adds Bob and Welcomes him to the
new temporary room.</t>
        <t>Alice now sends Bob an application message revealing her actual identity,
another of her pseudonyms, and optionally a list of her KeyPackages from
that pseudonym. In all likelihood, the user Bob would not be presented
with any indication that Alice wants to connect until this point.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="576" width="448" viewBox="0 0 448 576" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,560" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,560" fill="none" stroke="black"/>
              <path d="M 280,48 L 280,560" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,560" fill="none" stroke="black"/>
              <path d="M 24,80 Q 26,76.8 28,80 Q 30,83.2 32,80 Q 34,76.8 36,80 Q 38,83.2 40,80 Q 42,76.8 44,80 Q 46,83.2 48,80 Q 50,76.8 52,80 Q 54,83.2 56,80 Q 58,76.8 60,80 Q 62,83.2 64,80 Q 66,76.8 68,80 Q 70,83.2 72,80 Q 74,76.8 76,80 Q 78,83.2 80,80 Q 82,76.8 84,80 Q 86,83.2 88,80 Q 90,76.8 92,80 Q 94,83.2 96,80 Q 98,76.8 100,80 Q 102,83.2 104,80 Q 106,76.8 108,80 Q 110,83.2 112,80 Q 114,76.8 116,80 Q 118,83.2 120,80 Q 122,76.8 124,80 Q 126,83.2 128,80 Q 130,76.8 132,80 Q 134,83.2 136,80 Q 138,76.8 140,80 Q 142,83.2 144,80 " fill="none" stroke="black"/>
              <path d="M 24,128 Q 26,124.8 28,128 Q 30,131.2 32,128 Q 34,124.8 36,128 Q 38,131.2 40,128 Q 42,124.8 44,128 Q 46,131.2 48,128 Q 50,124.8 52,128 Q 54,131.2 56,128 Q 58,124.8 60,128 Q 62,131.2 64,128 Q 66,124.8 68,128 Q 70,131.2 72,128 Q 74,124.8 76,128 Q 78,131.2 80,128 Q 82,124.8 84,128 Q 86,131.2 88,128 Q 90,124.8 92,128 Q 94,131.2 96,128 Q 98,124.8 100,128 Q 102,131.2 104,128 Q 106,124.8 108,128 Q 110,131.2 112,128 Q 114,124.8 116,128 Q 118,131.2 120,128 Q 122,124.8 124,128 Q 126,131.2 128,128 Q 130,124.8 132,128 Q 134,131.2 136,128 Q 138,124.8 140,128 Q 142,131.2 144,128 " fill="none" stroke="black"/>
              <path d="M 152,160 L 272,160" fill="none" stroke="black"/>
              <path d="M 160,192 L 280,192" fill="none" stroke="black"/>
              <path d="M 24,224 Q 26,220.8 28,224 Q 30,227.2 32,224 Q 34,220.8 36,224 Q 38,227.2 40,224 Q 42,220.8 44,224 Q 46,227.2 48,224 Q 50,220.8 52,224 Q 54,227.2 56,224 Q 58,220.8 60,224 Q 62,227.2 64,224 Q 66,220.8 68,224 Q 70,227.2 72,224 Q 74,220.8 76,224 Q 78,227.2 80,224 Q 82,220.8 84,224 Q 86,227.2 88,224 Q 90,220.8 92,224 Q 94,227.2 96,224 Q 98,220.8 100,224 Q 102,227.2 104,224 Q 106,220.8 108,224 Q 110,227.2 112,224 Q 114,220.8 116,224 Q 118,227.2 120,224 Q 122,220.8 124,224 Q 126,227.2 128,224 Q 130,220.8 132,224 Q 134,227.2 136,224 Q 138,220.8 140,224 Q 142,227.2 144,224 " fill="none" stroke="black"/>
              <path d="M 152,240 L 272,240" fill="none" stroke="black"/>
              <path d="M 160,272 L 280,272" fill="none" stroke="black"/>
              <path d="M 32,288 Q 34,284.8 36,288 Q 38,291.2 40,288 Q 42,284.8 44,288 Q 46,291.2 48,288 Q 50,284.8 52,288 Q 54,291.2 56,288 Q 58,284.8 60,288 Q 62,291.2 64,288 Q 66,284.8 68,288 Q 70,291.2 72,288 Q 74,284.8 76,288 Q 78,291.2 80,288 Q 82,284.8 84,288 Q 86,291.2 88,288 Q 90,284.8 92,288 Q 94,291.2 96,288 Q 98,284.8 100,288 Q 102,291.2 104,288 Q 106,284.8 108,288 Q 110,291.2 112,288 Q 114,284.8 116,288 Q 118,291.2 120,288 Q 122,284.8 124,288 Q 126,291.2 128,288 Q 130,284.8 132,288 Q 134,291.2 136,288 Q 138,284.8 140,288 Q 142,291.2 144,288 Q 146,284.8 148,288 Q 150,291.2 152,288 " fill="none" stroke="black"/>
              <path d="M 24,336 Q 26,332.8 28,336 Q 30,339.2 32,336 Q 34,332.8 36,336 Q 38,339.2 40,336 Q 42,332.8 44,336 Q 46,339.2 48,336 Q 50,332.8 52,336 Q 54,339.2 56,336 Q 58,332.8 60,336 Q 62,339.2 64,336 Q 66,332.8 68,336 Q 70,339.2 72,336 Q 74,332.8 76,336 Q 78,339.2 80,336 Q 82,332.8 84,336 Q 86,339.2 88,336 Q 90,332.8 92,336 Q 94,339.2 96,336 Q 98,332.8 100,336 Q 102,339.2 104,336 Q 106,332.8 108,336 Q 110,339.2 112,336 Q 114,332.8 116,336 Q 118,339.2 120,336 Q 122,332.8 124,336 Q 126,339.2 128,336 Q 130,332.8 132,336 Q 134,339.2 136,336 Q 138,332.8 140,336 Q 142,339.2 144,336 " fill="none" stroke="black"/>
              <path d="M 32,368 Q 34,364.8 36,368 Q 38,371.2 40,368 Q 42,364.8 44,368 Q 46,371.2 48,368 Q 50,364.8 52,368 Q 54,371.2 56,368 Q 58,364.8 60,368 Q 62,371.2 64,368 Q 66,364.8 68,368 Q 70,371.2 72,368 Q 74,364.8 76,368 Q 78,371.2 80,368 Q 82,364.8 84,368 Q 86,371.2 88,368 Q 90,364.8 92,368 Q 94,371.2 96,368 Q 98,364.8 100,368 Q 102,371.2 104,368 Q 106,364.8 108,368 Q 110,371.2 112,368 Q 114,364.8 116,368 Q 118,371.2 120,368 Q 122,364.8 124,368 Q 126,371.2 128,368 Q 130,364.8 132,368 Q 134,371.2 136,368 Q 138,364.8 140,368 Q 142,371.2 144,368 Q 146,364.8 148,368 Q 150,371.2 152,368 " fill="none" stroke="black"/>
              <path d="M 152,368 L 272,368" fill="none" stroke="black"/>
              <path d="M 160,400 L 280,400" fill="none" stroke="black"/>
              <path d="M 280,400 Q 282,396.8 284,400 Q 286,403.2 288,400 Q 290,396.8 292,400 Q 294,403.2 296,400 Q 298,396.8 300,400 Q 302,403.2 304,400 Q 306,396.8 308,400 Q 310,403.2 312,400 Q 314,396.8 316,400 Q 318,403.2 320,400 Q 322,396.8 324,400 Q 326,403.2 328,400 Q 330,396.8 332,400 Q 334,403.2 336,400 Q 338,396.8 340,400 Q 342,403.2 344,400 Q 346,396.8 348,400 Q 350,403.2 352,400 Q 354,396.8 356,400 Q 358,403.2 360,400 Q 362,396.8 364,400 Q 366,403.2 368,400 Q 370,396.8 372,400 Q 374,403.2 376,400 Q 378,396.8 380,400 Q 382,403.2 384,400 Q 386,396.8 388,400 Q 390,403.2 392,400 Q 394,396.8 396,400 Q 398,403.2 400,400 " fill="none" stroke="black"/>
              <path d="M 24,416 Q 26,412.8 28,416 Q 30,419.2 32,416 Q 34,412.8 36,416 Q 38,419.2 40,416 Q 42,412.8 44,416 Q 46,419.2 48,416 Q 50,412.8 52,416 Q 54,419.2 56,416 Q 58,412.8 60,416 Q 62,419.2 64,416 Q 66,412.8 68,416 Q 70,419.2 72,416 Q 74,412.8 76,416 Q 78,419.2 80,416 Q 82,412.8 84,416 Q 86,419.2 88,416 Q 90,412.8 92,416 Q 94,419.2 96,416 Q 98,412.8 100,416 Q 102,419.2 104,416 Q 106,412.8 108,416 Q 110,419.2 112,416 Q 114,412.8 116,416 Q 118,419.2 120,416 Q 122,412.8 124,416 Q 126,419.2 128,416 Q 130,412.8 132,416 Q 134,419.2 136,416 Q 138,412.8 140,416 Q 142,419.2 144,416 " fill="none" stroke="black"/>
              <path d="M 152,448 L 272,448" fill="none" stroke="black"/>
              <path d="M 160,480 L 280,480" fill="none" stroke="black"/>
              <path d="M 280,512 Q 282,508.8 284,512 Q 286,515.2 288,512 Q 290,508.8 292,512 Q 294,515.2 296,512 Q 298,508.8 300,512 Q 302,515.2 304,512 Q 306,508.8 308,512 Q 310,515.2 312,512 Q 314,508.8 316,512 Q 318,515.2 320,512 Q 322,508.8 324,512 Q 326,515.2 328,512 Q 330,508.8 332,512 Q 334,515.2 336,512 Q 338,508.8 340,512 Q 342,515.2 344,512 Q 346,508.8 348,512 Q 350,515.2 352,512 Q 354,508.8 356,512 Q 358,515.2 360,512 Q 362,508.8 364,512 Q 366,515.2 368,512 Q 370,508.8 372,512 Q 374,515.2 376,512 Q 378,508.8 380,512 Q 382,515.2 384,512 Q 386,508.8 388,512 Q 390,515.2 392,512 Q 394,508.8 396,512 Q 398,515.2 400,512 " fill="none" stroke="black"/>
              <polygon class="arrowhead" points="408,512 396,506.4 396,517.6" fill="black" transform="rotate(0,400,512)"/>
              <polygon class="arrowhead" points="408,400 396,394.4 396,405.6" fill="black" transform="rotate(0,400,400)"/>
              <polygon class="arrowhead" points="280,448 268,442.4 268,453.6" fill="black" transform="rotate(0,272,448)"/>
              <polygon class="arrowhead" points="280,368 268,362.4 268,373.6" fill="black" transform="rotate(0,272,368)"/>
              <polygon class="arrowhead" points="280,240 268,234.4 268,245.6" fill="black" transform="rotate(0,272,240)"/>
              <polygon class="arrowhead" points="280,160 268,154.4 268,165.6" fill="black" transform="rotate(0,272,160)"/>
              <polygon class="arrowhead" points="168,480 156,474.4 156,485.6" fill="black" transform="rotate(180,160,480)"/>
              <polygon class="arrowhead" points="168,400 156,394.4 156,405.6" fill="black" transform="rotate(180,160,400)"/>
              <polygon class="arrowhead" points="168,272 156,266.4 156,277.6" fill="black" transform="rotate(180,160,272)"/>
              <polygon class="arrowhead" points="168,192 156,186.4 156,197.6" fill="black" transform="rotate(180,160,192)"/>
              <polygon class="arrowhead" points="152,416 140,410.4 140,421.6" fill="black" transform="rotate(0,144,416)"/>
              <polygon class="arrowhead" points="152,336 140,330.4 140,341.6" fill="black" transform="rotate(0,144,336)"/>
              <polygon class="arrowhead" points="152,224 140,218.4 140,229.6" fill="black" transform="rotate(0,144,224)"/>
              <polygon class="arrowhead" points="152,128 140,122.4 140,133.6" fill="black" transform="rotate(0,144,128)"/>
              <polygon class="arrowhead" points="152,80 140,74.4 140,85.6" fill="black" transform="rotate(0,144,80)"/>
              <polygon class="arrowhead" points="40,368 28,362.4 28,373.6" fill="black" transform="rotate(180,32,368)"/>
              <polygon class="arrowhead" points="40,288 28,282.4 28,293.6" fill="black" transform="rotate(180,32,288)"/>
              <g class="text">
                <text x="36" y="36">ClientA1</text>
                <text x="152" y="36">ServerA</text>
                <text x="280" y="36">ServerB</text>
                <text x="412" y="36">ClientB*</text>
                <text x="60" y="68">Create</text>
                <text x="108" y="68">room</text>
                <text x="48" y="100">Add</text>
                <text x="96" y="100">Alice's</text>
                <text x="56" y="116">other</text>
                <text x="112" y="116">clients</text>
                <text x="196" y="148">/idQuery</text>
                <text x="232" y="180">200</text>
                <text x="260" y="180">OK</text>
                <text x="64" y="212">Request</text>
                <text x="112" y="212">KPs</text>
                <text x="212" y="228">/keyMaterial</text>
                <text x="232" y="260">200</text>
                <text x="260" y="260">OK</text>
                <text x="80" y="276">connect</text>
                <text x="128" y="276">KPs</text>
                <text x="64" y="324">Commit,</text>
                <text x="116" y="324">etc.</text>
                <text x="108" y="356">Accepted</text>
                <text x="192" y="356">/notify</text>
                <text x="232" y="388">200</text>
                <text x="260" y="388">OK</text>
                <text x="324" y="388">Welcome,</text>
                <text x="380" y="388">Tree</text>
                <text x="104" y="404">Message</text>
                <text x="192" y="436">/notify</text>
                <text x="232" y="468">200</text>
                <text x="260" y="468">OK</text>
                <text x="324" y="500">AliceID,</text>
                <text x="376" y="500">KPs</text>
                <text x="88" y="548">...</text>
                <text x="180" y="548">time</text>
                <text x="228" y="548">passes</text>
                <text x="344" y="548">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
ClientA1       ServerA         ServerB         ClientB*
  |               |               |               |
  | Create room   |               |               |
  +~~~~~~~~~~~~~~>|               |               |
  | Add Alice's   |               |               |
  | other clients |               |               |
  +~~~~~~~~~~~~~~>|               |               |
  |               | /idQuery      |               |
  |               +-------------->|               |
  |               |        200 OK |               |
  |               |<--------------+               |
  | Request KPs   |               |               |
  +~~~~~~~~~~~~~~>| /keyMaterial  |               |
  |               +-------------->|               |
  |               |        200 OK |               |
  |   connect KPs |<--------------+               |
  |<~~~~~~~~~~~~~~+               |               |
  |               |               |               |
  | Commit, etc.  |               |               |
  +~~~~~~~~~~~~~~>|               |               |
  |      Accepted | /notify       |               |
  |<~~~~~~~~~~~~~~+-------------->|               |
  |               |        200 OK | Welcome, Tree |
  |      Message  |<--------------+~~~~~~~~~~~~~~>|
  +~~~~~~~~~~~~~~>|               |               |
  |               | /notify       |               |
  |               +-------------->|               |
  |               |        200 OK |               |
  |               |<--------------+               |
  |               |               | AliceID, KPs  |
  |               |               +~~~~~~~~~~~~~~>|
  |               |               |               |
  |      ...      | time passes   |      ...      |
  |               |               |               |
]]></artwork>
        </artset>
        <t>At some point, Bob accepts Alice's connection request. Bob creates
a new room using one of his pseudonyms. Bob adds Alice's clients to the room
using the provided KeyPackages. Bob can also add the rest of his clients at
the same time, assuming that Bob has a way to get KeyPackages securely among
his clients. Bob then sends a message to Alice. The hub sees a room between
two pseudonyms.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="480" viewBox="0 0 480 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,256" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,256" fill="none" stroke="black"/>
              <path d="M 280,48 L 280,256" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,256" fill="none" stroke="black"/>
              <path d="M 288,96 Q 290,92.8 292,96 Q 294,99.2 296,96 Q 298,92.8 300,96 Q 302,99.2 304,96 Q 306,92.8 308,96 Q 310,99.2 312,96 Q 314,92.8 316,96 Q 318,99.2 320,96 Q 322,92.8 324,96 Q 326,99.2 328,96 Q 330,92.8 332,96 Q 334,99.2 336,96 Q 338,92.8 340,96 Q 342,99.2 344,96 Q 346,92.8 348,96 Q 350,99.2 352,96 Q 354,92.8 356,96 Q 358,99.2 360,96 Q 362,92.8 364,96 Q 366,99.2 368,96 Q 370,92.8 372,96 Q 374,99.2 376,96 Q 378,92.8 380,96 Q 382,99.2 384,96 Q 386,92.8 388,96 Q 390,99.2 392,96 Q 394,92.8 396,96 Q 398,99.2 400,96 Q 402,92.8 404,96 Q 406,99.2 408,96 " fill="none" stroke="black"/>
              <path d="M 288,144 Q 290,140.8 292,144 Q 294,147.2 296,144 Q 298,140.8 300,144 Q 302,147.2 304,144 Q 306,140.8 308,144 Q 310,147.2 312,144 Q 314,140.8 316,144 Q 318,147.2 320,144 Q 322,140.8 324,144 Q 326,147.2 328,144 Q 330,140.8 332,144 Q 334,147.2 336,144 Q 338,140.8 340,144 Q 342,147.2 344,144 Q 346,140.8 348,144 Q 350,147.2 352,144 Q 354,140.8 356,144 Q 358,147.2 360,144 Q 362,140.8 364,144 Q 366,147.2 368,144 Q 370,140.8 372,144 Q 374,147.2 376,144 Q 378,140.8 380,144 Q 382,147.2 384,144 Q 386,140.8 388,144 Q 390,147.2 392,144 Q 394,140.8 396,144 Q 398,147.2 400,144 Q 402,140.8 404,144 Q 406,147.2 408,144 " fill="none" stroke="black"/>
              <path d="M 160,176 L 280,176" fill="none" stroke="black"/>
              <path d="M 32,192 Q 34,188.8 36,192 Q 38,195.2 40,192 Q 42,188.8 44,192 Q 46,195.2 48,192 Q 50,188.8 52,192 Q 54,195.2 56,192 Q 58,188.8 60,192 Q 62,195.2 64,192 Q 66,188.8 68,192 Q 70,195.2 72,192 Q 74,188.8 76,192 Q 78,195.2 80,192 Q 82,188.8 84,192 Q 86,195.2 88,192 Q 90,188.8 92,192 Q 94,195.2 96,192 Q 98,188.8 100,192 Q 102,195.2 104,192 Q 106,188.8 108,192 Q 110,195.2 112,192 Q 114,188.8 116,192 Q 118,195.2 120,192 Q 122,188.8 124,192 Q 126,195.2 128,192 Q 130,188.8 132,192 Q 134,195.2 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 " fill="none" stroke="black"/>
              <path d="M 288,208 Q 290,204.8 292,208 Q 294,211.2 296,208 Q 298,204.8 300,208 Q 302,211.2 304,208 Q 306,204.8 308,208 Q 310,211.2 312,208 Q 314,204.8 316,208 Q 318,211.2 320,208 Q 322,204.8 324,208 Q 326,211.2 328,208 Q 330,204.8 332,208 Q 334,211.2 336,208 Q 338,204.8 340,208 Q 342,211.2 344,208 Q 346,204.8 348,208 Q 350,211.2 352,208 Q 354,204.8 356,208 Q 358,211.2 360,208 Q 362,204.8 364,208 Q 366,211.2 368,208 Q 370,204.8 372,208 Q 374,211.2 376,208 Q 378,204.8 380,208 Q 382,211.2 384,208 Q 386,204.8 388,208 Q 390,211.2 392,208 Q 394,204.8 396,208 Q 398,211.2 400,208 Q 402,204.8 404,208 Q 406,211.2 408,208 " fill="none" stroke="black"/>
              <path d="M 160,224 L 280,224" fill="none" stroke="black"/>
              <path d="M 32,240 Q 34,236.8 36,240 Q 38,243.2 40,240 Q 42,236.8 44,240 Q 46,243.2 48,240 Q 50,236.8 52,240 Q 54,243.2 56,240 Q 58,236.8 60,240 Q 62,243.2 64,240 Q 66,236.8 68,240 Q 70,243.2 72,240 Q 74,236.8 76,240 Q 78,243.2 80,240 Q 82,236.8 84,240 Q 86,243.2 88,240 Q 90,236.8 92,240 Q 94,243.2 96,240 Q 98,236.8 100,240 Q 102,243.2 104,240 Q 106,236.8 108,240 Q 110,243.2 112,240 Q 114,236.8 116,240 Q 118,243.2 120,240 Q 122,236.8 124,240 Q 126,243.2 128,240 Q 130,236.8 132,240 Q 134,243.2 136,240 Q 138,236.8 140,240 Q 142,243.2 144,240 Q 146,236.8 148,240 Q 150,243.2 152,240 " fill="none" stroke="black"/>
              <polygon class="arrowhead" points="296,208 284,202.4 284,213.6" fill="black" transform="rotate(180,288,208)"/>
              <polygon class="arrowhead" points="296,144 284,138.4 284,149.6" fill="black" transform="rotate(180,288,144)"/>
              <polygon class="arrowhead" points="296,96 284,90.4 284,101.6" fill="black" transform="rotate(180,288,96)"/>
              <polygon class="arrowhead" points="168,224 156,218.4 156,229.6" fill="black" transform="rotate(180,160,224)"/>
              <polygon class="arrowhead" points="168,176 156,170.4 156,181.6" fill="black" transform="rotate(180,160,176)"/>
              <polygon class="arrowhead" points="40,240 28,234.4 28,245.6" fill="black" transform="rotate(180,32,240)"/>
              <polygon class="arrowhead" points="40,192 28,186.4 28,197.6" fill="black" transform="rotate(180,32,192)"/>
              <g class="text">
                <text x="36" y="36">ClientA1</text>
                <text x="152" y="36">ServerA</text>
                <text x="280" y="36">ServerB</text>
                <text x="412" y="36">ClientB*</text>
                <text x="432" y="68">Bob</text>
                <text x="332" y="84">Create</text>
                <text x="380" y="84">room</text>
                <text x="448" y="84">accepts</text>
                <text x="320" y="132">Commit,</text>
                <text x="372" y="132">etc.</text>
                <text x="240" y="164">/notify</text>
                <text x="68" y="180">Welcome,</text>
                <text x="124" y="180">Tree</text>
                <text x="328" y="196">Message</text>
                <text x="240" y="212">/notify</text>
                <text x="64" y="228">Message</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
ClientA1       ServerA         ServerB         ClientB*
  |               |               |               |
  |               |               |               | Bob
  |               |               |   Create room | accepts
  |               |               |<~~~~~~~~~~~~~~+
  |               |               |               |
  |               |               | Commit, etc.  |
  |               |               |<~~~~~~~~~~~~~~+
  |               |       /notify |               |
  | Welcome, Tree |<--------------+               |
  |<~~~~~~~~~~~~~~+               |  Message      |
  |               |       /notify |<~~~~~~~~~~~~~~+
  | Message       |<--------------+               |
  |<~~~~~~~~~~~~~~+               |               |
  |               |               |               |
]]></artwork>
        </artset>
        <t>Alice eventually destroys the bootstrap room, for example after a random delay (not shown).</t>
        <t>Alice and Bob can add each other to additional rooms by sending an
application message with a join link, as shown in the next flow.</t>
        <t>The connection flow may be useful when the sender wants to initially
establish connectivity but does not have an out-of-band or third-party
channel to the receiver. On providers with a low volume of flows or when
relatively few flows use pseudonyms, this flow is vulnerable to timing
analysis. Between a pair of providers with large volumes of new rooms using
pseudonyms, this approach can be very effective. This flow has the advantage
that the initiator can validate the real identity of the receiver before
establishing any type of communication. This may be useful when contacting
a known journalist, law-enforcement agent, rights-advocacy group, or ombudsperson.</t>
      </section>
      <section anchor="join-link-flow">
        <name>Join link flow</name>
        <t>The join link flow is useful when two parties meet in person, have another
communications channel (possibly a different MIMI room), or each is
introduced via a trusted third-party over separate (typically secure)
communications channels.</t>
        <t>This flow begins with Alice creating a new room from one of her pseudonyms,
adding her own clients to it, and the creating a join link. Alice needs to
have permissions to create a join link for this step. Alice then sends the
join link out-of-band to Bob. This could include showing a QR code to Bob,
or sending it to a trusted third-party to give to Bob.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="448" viewBox="0 0 448 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,272" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,208" fill="none" stroke="black"/>
              <path d="M 152,240 L 152,272" fill="none" stroke="black"/>
              <path d="M 280,48 L 280,208" fill="none" stroke="black"/>
              <path d="M 280,240 L 280,272" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,272" fill="none" stroke="black"/>
              <path d="M 24,80 Q 26,76.8 28,80 Q 30,83.2 32,80 Q 34,76.8 36,80 Q 38,83.2 40,80 Q 42,76.8 44,80 Q 46,83.2 48,80 Q 50,76.8 52,80 Q 54,83.2 56,80 Q 58,76.8 60,80 Q 62,83.2 64,80 Q 66,76.8 68,80 Q 70,83.2 72,80 Q 74,76.8 76,80 Q 78,83.2 80,80 Q 82,76.8 84,80 Q 86,83.2 88,80 Q 90,76.8 92,80 Q 94,83.2 96,80 Q 98,76.8 100,80 Q 102,83.2 104,80 Q 106,76.8 108,80 Q 110,83.2 112,80 Q 114,76.8 116,80 Q 118,83.2 120,80 Q 122,76.8 124,80 Q 126,83.2 128,80 Q 130,76.8 132,80 Q 134,83.2 136,80 Q 138,76.8 140,80 Q 142,83.2 144,80 " fill="none" stroke="black"/>
              <path d="M 24,128 Q 26,124.8 28,128 Q 30,131.2 32,128 Q 34,124.8 36,128 Q 38,131.2 40,128 Q 42,124.8 44,128 Q 46,131.2 48,128 Q 50,124.8 52,128 Q 54,131.2 56,128 Q 58,124.8 60,128 Q 62,131.2 64,128 Q 66,124.8 68,128 Q 70,131.2 72,128 Q 74,124.8 76,128 Q 78,131.2 80,128 Q 82,124.8 84,128 Q 86,131.2 88,128 Q 90,124.8 92,128 Q 94,131.2 96,128 Q 98,124.8 100,128 Q 102,131.2 104,128 Q 106,124.8 108,128 Q 110,131.2 112,128 Q 114,124.8 116,128 Q 118,131.2 120,128 Q 122,124.8 124,128 Q 126,131.2 128,128 Q 130,124.8 132,128 Q 134,131.2 136,128 Q 138,124.8 140,128 Q 142,131.2 144,128 " fill="none" stroke="black"/>
              <path d="M 24,176 Q 26,172.8 28,176 Q 30,179.2 32,176 Q 34,172.8 36,176 Q 38,179.2 40,176 Q 42,172.8 44,176 Q 46,179.2 48,176 Q 50,172.8 52,176 Q 54,179.2 56,176 Q 58,172.8 60,176 Q 62,179.2 64,176 Q 66,172.8 68,176 Q 70,179.2 72,176 Q 74,172.8 76,176 Q 78,179.2 80,176 Q 82,172.8 84,176 Q 86,179.2 88,176 Q 90,172.8 92,176 Q 94,179.2 96,176 Q 98,172.8 100,176 Q 102,179.2 104,176 Q 106,172.8 108,176 Q 110,179.2 112,176 Q 114,172.8 116,176 Q 118,179.2 120,176 Q 122,172.8 124,176 Q 126,179.2 128,176 Q 130,172.8 132,176 Q 134,179.2 136,176 Q 138,172.8 140,176 Q 142,179.2 144,176 " fill="none" stroke="black"/>
              <path d="M 24,222 L 400,222" fill="none" stroke="black"/>
              <path d="M 24,226 L 400,226" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="408,224 396,218.4 396,229.6" fill="black" transform="rotate(0,400,224)"/>
              <polygon class="arrowhead" points="152,176 140,170.4 140,181.6" fill="black" transform="rotate(0,144,176)"/>
              <polygon class="arrowhead" points="152,128 140,122.4 140,133.6" fill="black" transform="rotate(0,144,128)"/>
              <polygon class="arrowhead" points="152,80 140,74.4 140,85.6" fill="black" transform="rotate(0,144,80)"/>
              <g class="text">
                <text x="36" y="36">ClientA1</text>
                <text x="152" y="36">ServerA</text>
                <text x="280" y="36">ServerB</text>
                <text x="412" y="36">ClientB*</text>
                <text x="60" y="68">Create</text>
                <text x="108" y="68">room</text>
                <text x="48" y="100">Add</text>
                <text x="96" y="100">Alice's</text>
                <text x="56" y="116">other</text>
                <text x="112" y="116">clients</text>
                <text x="60" y="148">Create</text>
                <text x="108" y="148">join</text>
                <text x="52" y="164">link</text>
                <text x="180" y="196">Send</text>
                <text x="220" y="196">join</text>
                <text x="180" y="212">link</text>
                <text x="216" y="212">OOB</text>
                <text x="88" y="260">...</text>
                <text x="180" y="260">time</text>
                <text x="228" y="260">passes</text>
                <text x="344" y="260">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
ClientA1       ServerA         ServerB         ClientB*
  |               |               |               |
  | Create room   |               |               |
  +~~~~~~~~~~~~~~>|               |               |
  | Add Alice's   |               |               |
  | other clients |               |               |
  +~~~~~~~~~~~~~~>|               |               |
  | Create join   |               |               |
  | link          |               |               |
  +~~~~~~~~~~~~~~>|               |               |
  |               | Send join     |               |
  |               | link OOB      |               |
  +==============================================>|
  |               |               |               |
  |      ...      | time passes   |      ...      |
  |               |               |               |
]]></artwork>
        </artset>
        <t>Once Bob receives the join link, he fetches the GroupInfo for the room
and validates it, then joins the room.</t>
        <t>As in the previous flow, Bob needs to collect KeyPackages from his other
clients and add them to the room (not shown).</t>
        <t>Bob can also then reveal his actual identity to the other participants of
the room in an application message.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="496" viewBox="0 0 496 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,336" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,336" fill="none" stroke="black"/>
              <path d="M 280,48 L 280,336" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,336" fill="none" stroke="black"/>
              <path d="M 288,96 Q 290,92.8 292,96 Q 294,99.2 296,96 Q 298,92.8 300,96 Q 302,99.2 304,96 Q 306,92.8 308,96 Q 310,99.2 312,96 Q 314,92.8 316,96 Q 318,99.2 320,96 Q 322,92.8 324,96 Q 326,99.2 328,96 Q 330,92.8 332,96 Q 334,99.2 336,96 Q 338,92.8 340,96 Q 342,99.2 344,96 Q 346,92.8 348,96 Q 350,99.2 352,96 Q 354,92.8 356,96 Q 358,99.2 360,96 Q 362,92.8 364,96 Q 366,99.2 368,96 Q 370,92.8 372,96 Q 374,99.2 376,96 Q 378,92.8 380,96 Q 382,99.2 384,96 Q 386,92.8 388,96 Q 390,99.2 392,96 Q 394,92.8 396,96 Q 398,99.2 400,96 Q 402,92.8 404,96 Q 406,99.2 408,96 " fill="none" stroke="black"/>
              <path d="M 160,128 L 280,128" fill="none" stroke="black"/>
              <path d="M 160,160 L 272,160" fill="none" stroke="black"/>
              <path d="M 280,176 Q 282,172.8 284,176 Q 286,179.2 288,176 Q 290,172.8 292,176 Q 294,179.2 296,176 Q 298,172.8 300,176 Q 302,179.2 304,176 Q 306,172.8 308,176 Q 310,179.2 312,176 Q 314,172.8 316,176 Q 318,179.2 320,176 Q 322,172.8 324,176 Q 326,179.2 328,176 Q 330,172.8 332,176 Q 334,179.2 336,176 Q 338,172.8 340,176 Q 342,179.2 344,176 Q 346,172.8 348,176 Q 350,179.2 352,176 Q 354,172.8 356,176 Q 358,179.2 360,176 Q 362,172.8 364,176 Q 366,179.2 368,176 Q 370,172.8 372,176 Q 374,179.2 376,176 Q 378,172.8 380,176 Q 382,179.2 384,176 Q 386,172.8 388,176 Q 390,179.2 392,176 Q 394,172.8 396,176 Q 398,179.2 400,176 " fill="none" stroke="black"/>
              <path d="M 288,208 Q 290,204.8 292,208 Q 294,211.2 296,208 Q 298,204.8 300,208 Q 302,211.2 304,208 Q 306,204.8 308,208 Q 310,211.2 312,208 Q 314,204.8 316,208 Q 318,211.2 320,208 Q 322,204.8 324,208 Q 326,211.2 328,208 Q 330,204.8 332,208 Q 334,211.2 336,208 Q 338,204.8 340,208 Q 342,211.2 344,208 Q 346,204.8 348,208 Q 350,211.2 352,208 Q 354,204.8 356,208 Q 358,211.2 360,208 Q 362,204.8 364,208 Q 366,211.2 368,208 Q 370,204.8 372,208 Q 374,211.2 376,208 Q 378,204.8 380,208 Q 382,211.2 384,208 Q 386,204.8 388,208 Q 390,211.2 392,208 Q 394,204.8 396,208 Q 398,211.2 400,208 Q 402,204.8 404,208 Q 406,211.2 408,208 " fill="none" stroke="black"/>
              <path d="M 160,240 L 280,240" fill="none" stroke="black"/>
              <path d="M 32,256 Q 34,252.8 36,256 Q 38,259.2 40,256 Q 42,252.8 44,256 Q 46,259.2 48,256 Q 50,252.8 52,256 Q 54,259.2 56,256 Q 58,252.8 60,256 Q 62,259.2 64,256 Q 66,252.8 68,256 Q 70,259.2 72,256 Q 74,252.8 76,256 Q 78,259.2 80,256 Q 82,252.8 84,256 Q 86,259.2 88,256 Q 90,252.8 92,256 Q 94,259.2 96,256 Q 98,252.8 100,256 Q 102,259.2 104,256 Q 106,252.8 108,256 Q 110,259.2 112,256 Q 114,252.8 116,256 Q 118,259.2 120,256 Q 122,252.8 124,256 Q 126,259.2 128,256 Q 130,252.8 132,256 Q 134,259.2 136,256 Q 138,252.8 140,256 Q 142,259.2 144,256 Q 146,252.8 148,256 Q 150,259.2 152,256 " fill="none" stroke="black"/>
              <path d="M 288,288 Q 290,284.8 292,288 Q 294,291.2 296,288 Q 298,284.8 300,288 Q 302,291.2 304,288 Q 306,284.8 308,288 Q 310,291.2 312,288 Q 314,284.8 316,288 Q 318,291.2 320,288 Q 322,284.8 324,288 Q 326,291.2 328,288 Q 330,284.8 332,288 Q 334,291.2 336,288 Q 338,284.8 340,288 Q 342,291.2 344,288 Q 346,284.8 348,288 Q 350,291.2 352,288 Q 354,284.8 356,288 Q 358,291.2 360,288 Q 362,284.8 364,288 Q 366,291.2 368,288 Q 370,284.8 372,288 Q 374,291.2 376,288 Q 378,284.8 380,288 Q 382,291.2 384,288 Q 386,284.8 388,288 Q 390,291.2 392,288 Q 394,284.8 396,288 Q 398,291.2 400,288 Q 402,284.8 404,288 Q 406,291.2 408,288 " fill="none" stroke="black"/>
              <path d="M 160,304 L 280,304" fill="none" stroke="black"/>
              <path d="M 32,320 Q 34,316.8 36,320 Q 38,323.2 40,320 Q 42,316.8 44,320 Q 46,323.2 48,320 Q 50,316.8 52,320 Q 54,323.2 56,320 Q 58,316.8 60,320 Q 62,323.2 64,320 Q 66,316.8 68,320 Q 70,323.2 72,320 Q 74,316.8 76,320 Q 78,323.2 80,320 Q 82,316.8 84,320 Q 86,323.2 88,320 Q 90,316.8 92,320 Q 94,323.2 96,320 Q 98,316.8 100,320 Q 102,323.2 104,320 Q 106,316.8 108,320 Q 110,323.2 112,320 Q 114,316.8 116,320 Q 118,323.2 120,320 Q 122,316.8 124,320 Q 126,323.2 128,320 Q 130,316.8 132,320 Q 134,323.2 136,320 Q 138,316.8 140,320 Q 142,323.2 144,320 Q 146,316.8 148,320 Q 150,323.2 152,320 " fill="none" stroke="black"/>
              <polygon class="arrowhead" points="408,176 396,170.4 396,181.6" fill="black" transform="rotate(0,400,176)"/>
              <polygon class="arrowhead" points="296,288 284,282.4 284,293.6" fill="black" transform="rotate(180,288,288)"/>
              <polygon class="arrowhead" points="296,208 284,202.4 284,213.6" fill="black" transform="rotate(180,288,208)"/>
              <polygon class="arrowhead" points="296,96 284,90.4 284,101.6" fill="black" transform="rotate(180,288,96)"/>
              <polygon class="arrowhead" points="280,160 268,154.4 268,165.6" fill="black" transform="rotate(0,272,160)"/>
              <polygon class="arrowhead" points="168,304 156,298.4 156,309.6" fill="black" transform="rotate(180,160,304)"/>
              <polygon class="arrowhead" points="168,240 156,234.4 156,245.6" fill="black" transform="rotate(180,160,240)"/>
              <polygon class="arrowhead" points="168,128 156,122.4 156,133.6" fill="black" transform="rotate(180,160,128)"/>
              <polygon class="arrowhead" points="40,320 28,314.4 28,325.6" fill="black" transform="rotate(180,32,320)"/>
              <polygon class="arrowhead" points="40,256 28,250.4 28,261.6" fill="black" transform="rotate(180,32,256)"/>
              <g class="text">
                <text x="36" y="36">ClientA1</text>
                <text x="152" y="36">ServerA</text>
                <text x="280" y="36">ServerB</text>
                <text x="412" y="36">ClientB*</text>
                <text x="432" y="68">Bob</text>
                <text x="468" y="68">uses</text>
                <text x="304" y="84">Use</text>
                <text x="340" y="84">join</text>
                <text x="380" y="84">link</text>
                <text x="436" y="84">join</text>
                <text x="476" y="84">link</text>
                <text x="228" y="116">/groupInfo</text>
                <text x="172" y="148">OK</text>
                <text x="232" y="148">GroupInfo</text>
                <text x="328" y="164">GroupInfo</text>
                <text x="320" y="196">Commit,</text>
                <text x="372" y="196">etc.</text>
                <text x="240" y="228">/notify</text>
                <text x="60" y="244">Commit</text>
                <text x="328" y="260">Message</text>
                <text x="312" y="276">Bob</text>
                <text x="348" y="276">real</text>
                <text x="380" y="276">ID</text>
                <text x="64" y="292">Message</text>
                <text x="240" y="292">/notify</text>
                <text x="48" y="308">Bob</text>
                <text x="84" y="308">real</text>
                <text x="116" y="308">ID</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
ClientA1       ServerA         ServerB         ClientB*
  |               |               |               |
  |               |               |               | Bob uses
  |               |               | Use join link | join link
  |               |               |<~~~~~~~~~~~~~~+
  |               |    /groupInfo |               |
  |               |<--------------+               |
  |               | OK  GroupInfo |               |
  |               |-------------->+ GroupInfo     |
  |               |               +~~~~~~~~~~~~~~>|
  |               |               | Commit, etc.  |
  |               |               |<~~~~~~~~~~~~~~+
  |               |       /notify |               |
  | Commit        |<--------------+               |
  |<~~~~~~~~~~~~~~+               |  Message      |
  |               |               |  Bob real ID  |
  | Message       |       /notify |<~~~~~~~~~~~~~~+
  | Bob real ID   |<--------------+               |
  |<~~~~~~~~~~~~~~+               |               |
  |               |               |               |
]]></artwork>
        </artset>
        <t>This powerful flow is only possibly when Alice and Bob have an out-of-band
channel, and when Alice has permissions to create a join link in the target
room. Note that if a malicious third-party is used, the parties can still authenticate each other if they disclose their actual identities inside the
target room, but they would lose any metadata privacy properties they had.</t>
      </section>
      <section anchor="knock-flow">
        <name>Knock flow</name>
        <t>A new user Cathy is aware of a room that she wants to join. Likely there is
web page for the room with instructions for joining. The page includes a
related "knock room" which contains the moderators or administrators of the
target room. The "knock room" can be joined by anyone, but by default each
joiner can send one message to the admins while regular users never receive application messages sent to the group (although the client has the keying material needed to decrypt the ciphertext if they receive it.)</t>
        <t>Cathy sends a message with her KeyPackages for one of her pseudonyms. She
then leaves the "knock room".</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="480" width="528" viewBox="0 0 528 480" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,464" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,464" fill="none" stroke="black"/>
              <path d="M 280,48 L 280,464" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,464" fill="none" stroke="black"/>
              <path d="M 288,112 Q 290,108.8 292,112 Q 294,115.2 296,112 Q 298,108.8 300,112 Q 302,115.2 304,112 Q 306,108.8 308,112 Q 310,115.2 312,112 Q 314,108.8 316,112 Q 318,115.2 320,112 Q 322,108.8 324,112 Q 326,115.2 328,112 Q 330,108.8 332,112 Q 334,115.2 336,112 Q 338,108.8 340,112 Q 342,115.2 344,112 Q 346,108.8 348,112 Q 350,115.2 352,112 Q 354,108.8 356,112 Q 358,115.2 360,112 Q 362,108.8 364,112 Q 366,115.2 368,112 Q 370,108.8 372,112 Q 374,115.2 376,112 Q 378,108.8 380,112 Q 382,115.2 384,112 Q 386,108.8 388,112 Q 390,115.2 392,112 Q 394,108.8 396,112 Q 398,115.2 400,112 Q 402,108.8 404,112 Q 406,115.2 408,112 " fill="none" stroke="black"/>
              <path d="M 160,144 L 280,144" fill="none" stroke="black"/>
              <path d="M 160,176 L 272,176" fill="none" stroke="black"/>
              <path d="M 280,192 Q 282,188.8 284,192 Q 286,195.2 288,192 Q 290,188.8 292,192 Q 294,195.2 296,192 Q 298,188.8 300,192 Q 302,195.2 304,192 Q 306,188.8 308,192 Q 310,195.2 312,192 Q 314,188.8 316,192 Q 318,195.2 320,192 Q 322,188.8 324,192 Q 326,195.2 328,192 Q 330,188.8 332,192 Q 334,195.2 336,192 Q 338,188.8 340,192 Q 342,195.2 344,192 Q 346,188.8 348,192 Q 350,195.2 352,192 Q 354,188.8 356,192 Q 358,195.2 360,192 Q 362,188.8 364,192 Q 366,195.2 368,192 Q 370,188.8 372,192 Q 374,195.2 376,192 Q 378,188.8 380,192 Q 382,195.2 384,192 Q 386,188.8 388,192 Q 390,195.2 392,192 Q 394,188.8 396,192 Q 398,195.2 400,192 " fill="none" stroke="black"/>
              <path d="M 288,224 Q 290,220.8 292,224 Q 294,227.2 296,224 Q 298,220.8 300,224 Q 302,227.2 304,224 Q 306,220.8 308,224 Q 310,227.2 312,224 Q 314,220.8 316,224 Q 318,227.2 320,224 Q 322,220.8 324,224 Q 326,227.2 328,224 Q 330,220.8 332,224 Q 334,227.2 336,224 Q 338,220.8 340,224 Q 342,227.2 344,224 Q 346,220.8 348,224 Q 350,227.2 352,224 Q 354,220.8 356,224 Q 358,227.2 360,224 Q 362,220.8 364,224 Q 366,227.2 368,224 Q 370,220.8 372,224 Q 374,227.2 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 400,224 Q 402,220.8 404,224 Q 406,227.2 408,224 " fill="none" stroke="black"/>
              <path d="M 160,256 L 280,256" fill="none" stroke="black"/>
              <path d="M 32,272 Q 34,268.8 36,272 Q 38,275.2 40,272 Q 42,268.8 44,272 Q 46,275.2 48,272 Q 50,268.8 52,272 Q 54,275.2 56,272 Q 58,268.8 60,272 Q 62,275.2 64,272 Q 66,268.8 68,272 Q 70,275.2 72,272 Q 74,268.8 76,272 Q 78,275.2 80,272 Q 82,268.8 84,272 Q 86,275.2 88,272 Q 90,268.8 92,272 Q 94,275.2 96,272 Q 98,268.8 100,272 Q 102,275.2 104,272 Q 106,268.8 108,272 Q 110,275.2 112,272 Q 114,268.8 116,272 Q 118,275.2 120,272 Q 122,268.8 124,272 Q 126,275.2 128,272 Q 130,268.8 132,272 Q 134,275.2 136,272 Q 138,268.8 140,272 Q 142,275.2 144,272 Q 146,268.8 148,272 Q 150,275.2 152,272 " fill="none" stroke="black"/>
              <path d="M 288,320 Q 290,316.8 292,320 Q 294,323.2 296,320 Q 298,316.8 300,320 Q 302,323.2 304,320 Q 306,316.8 308,320 Q 310,323.2 312,320 Q 314,316.8 316,320 Q 318,323.2 320,320 Q 322,316.8 324,320 Q 326,323.2 328,320 Q 330,316.8 332,320 Q 334,323.2 336,320 Q 338,316.8 340,320 Q 342,323.2 344,320 Q 346,316.8 348,320 Q 350,323.2 352,320 Q 354,316.8 356,320 Q 358,323.2 360,320 Q 362,316.8 364,320 Q 366,323.2 368,320 Q 370,316.8 372,320 Q 374,323.2 376,320 Q 378,316.8 380,320 Q 382,323.2 384,320 Q 386,316.8 388,320 Q 390,323.2 392,320 Q 394,316.8 396,320 Q 398,323.2 400,320 Q 402,316.8 404,320 Q 406,323.2 408,320 " fill="none" stroke="black"/>
              <path d="M 160,336 L 280,336" fill="none" stroke="black"/>
              <path d="M 32,352 Q 34,348.8 36,352 Q 38,355.2 40,352 Q 42,348.8 44,352 Q 46,355.2 48,352 Q 50,348.8 52,352 Q 54,355.2 56,352 Q 58,348.8 60,352 Q 62,355.2 64,352 Q 66,348.8 68,352 Q 70,355.2 72,352 Q 74,348.8 76,352 Q 78,355.2 80,352 Q 82,348.8 84,352 Q 86,355.2 88,352 Q 90,348.8 92,352 Q 94,355.2 96,352 Q 98,348.8 100,352 Q 102,355.2 104,352 Q 106,348.8 108,352 Q 110,355.2 112,352 Q 114,348.8 116,352 Q 118,355.2 120,352 Q 122,348.8 124,352 Q 126,355.2 128,352 Q 130,348.8 132,352 Q 134,355.2 136,352 Q 138,348.8 140,352 Q 142,355.2 144,352 Q 146,348.8 148,352 Q 150,355.2 152,352 " fill="none" stroke="black"/>
              <path d="M 288,384 Q 290,380.8 292,384 Q 294,387.2 296,384 Q 298,380.8 300,384 Q 302,387.2 304,384 Q 306,380.8 308,384 Q 310,387.2 312,384 Q 314,380.8 316,384 Q 318,387.2 320,384 Q 322,380.8 324,384 Q 326,387.2 328,384 Q 330,380.8 332,384 Q 334,387.2 336,384 Q 338,380.8 340,384 Q 342,387.2 344,384 Q 346,380.8 348,384 Q 350,387.2 352,384 Q 354,380.8 356,384 Q 358,387.2 360,384 Q 362,380.8 364,384 Q 366,387.2 368,384 Q 370,380.8 372,384 Q 374,387.2 376,384 Q 378,380.8 380,384 Q 382,387.2 384,384 Q 386,380.8 388,384 Q 390,387.2 392,384 Q 394,380.8 396,384 Q 398,387.2 400,384 Q 402,380.8 404,384 Q 406,387.2 408,384 " fill="none" stroke="black"/>
              <path d="M 160,400 L 280,400" fill="none" stroke="black"/>
              <path d="M 32,416 Q 34,412.8 36,416 Q 38,419.2 40,416 Q 42,412.8 44,416 Q 46,419.2 48,416 Q 50,412.8 52,416 Q 54,419.2 56,416 Q 58,412.8 60,416 Q 62,419.2 64,416 Q 66,412.8 68,416 Q 70,419.2 72,416 Q 74,412.8 76,416 Q 78,419.2 80,416 Q 82,412.8 84,416 Q 86,419.2 88,416 Q 90,412.8 92,416 Q 94,419.2 96,416 Q 98,412.8 100,416 Q 102,419.2 104,416 Q 106,412.8 108,416 Q 110,419.2 112,416 Q 114,412.8 116,416 Q 118,419.2 120,416 Q 122,412.8 124,416 Q 126,419.2 128,416 Q 130,412.8 132,416 Q 134,419.2 136,416 Q 138,412.8 140,416 Q 142,419.2 144,416 Q 146,412.8 148,416 Q 150,419.2 152,416 " fill="none" stroke="black"/>
              <polygon class="arrowhead" points="408,192 396,186.4 396,197.6" fill="black" transform="rotate(0,400,192)"/>
              <polygon class="arrowhead" points="296,384 284,378.4 284,389.6" fill="black" transform="rotate(180,288,384)"/>
              <polygon class="arrowhead" points="296,320 284,314.4 284,325.6" fill="black" transform="rotate(180,288,320)"/>
              <polygon class="arrowhead" points="296,224 284,218.4 284,229.6" fill="black" transform="rotate(180,288,224)"/>
              <polygon class="arrowhead" points="296,112 284,106.4 284,117.6" fill="black" transform="rotate(180,288,112)"/>
              <polygon class="arrowhead" points="280,176 268,170.4 268,181.6" fill="black" transform="rotate(0,272,176)"/>
              <polygon class="arrowhead" points="168,400 156,394.4 156,405.6" fill="black" transform="rotate(180,160,400)"/>
              <polygon class="arrowhead" points="168,336 156,330.4 156,341.6" fill="black" transform="rotate(180,160,336)"/>
              <polygon class="arrowhead" points="168,256 156,250.4 156,261.6" fill="black" transform="rotate(180,160,256)"/>
              <polygon class="arrowhead" points="168,144 156,138.4 156,149.6" fill="black" transform="rotate(180,160,144)"/>
              <polygon class="arrowhead" points="40,416 28,410.4 28,421.6" fill="black" transform="rotate(180,32,416)"/>
              <polygon class="arrowhead" points="40,352 28,346.4 28,357.6" fill="black" transform="rotate(180,32,352)"/>
              <polygon class="arrowhead" points="40,272 28,266.4 28,277.6" fill="black" transform="rotate(180,32,272)"/>
              <g class="text">
                <text x="36" y="36">ClientA1</text>
                <text x="152" y="36">ServerA</text>
                <text x="280" y="36">ServerC</text>
                <text x="412" y="36">ClientC*</text>
                <text x="440" y="68">Cathy</text>
                <text x="488" y="68">finds</text>
                <text x="444" y="84">"knock</text>
                <text x="496" y="84">room"</text>
                <text x="304" y="100">get</text>
                <text x="360" y="100">GroupInfo</text>
                <text x="228" y="132">/groupInfo</text>
                <text x="172" y="164">OK</text>
                <text x="232" y="164">GroupInfo</text>
                <text x="328" y="180">GroupInfo</text>
                <text x="320" y="212">Commit,</text>
                <text x="372" y="212">etc.</text>
                <text x="240" y="244">/notify</text>
                <text x="60" y="260">Commit</text>
                <text x="304" y="276">App</text>
                <text x="356" y="276">Message:</text>
                <text x="320" y="292">"Knock"</text>
                <text x="48" y="308">App</text>
                <text x="100" y="308">Message:</text>
                <text x="308" y="308">Real</text>
                <text x="344" y="308">ID,</text>
                <text x="376" y="308">KPs</text>
                <text x="64" y="324">"Knock"</text>
                <text x="240" y="324">/notify</text>
                <text x="52" y="340">Real</text>
                <text x="88" y="340">ID,</text>
                <text x="120" y="340">KPs</text>
                <text x="316" y="356">Remove</text>
                <text x="328" y="372">Proposals</text>
                <text x="440" y="372">Cathy</text>
                <text x="496" y="372">removes</text>
                <text x="448" y="388">herself</text>
                <text x="60" y="404">Remove</text>
                <text x="88" y="452">...</text>
                <text x="180" y="452">time</text>
                <text x="228" y="452">passes</text>
                <text x="344" y="452">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
ClientA1       ServerA         ServerC         ClientC*
  |               |               |               |
  |               |               |               | Cathy finds
  |               |               |               | "knock room"
  |               |               | get GroupInfo |
  |               |               |<~~~~~~~~~~~~~~+
  |               |    /groupInfo |               |
  |               |<--------------+               |
  |               | OK  GroupInfo |               |
  |               |-------------->+ GroupInfo     |
  |               |               +~~~~~~~~~~~~~~>|
  |               |               | Commit, etc.  |
  |               |               |<~~~~~~~~~~~~~~+
  |               |       /notify |               |
  | Commit        |<--------------+               |
  |<~~~~~~~~~~~~~~+               | App Message:  |
  |               |               | "Knock"       |
  | App Message:  |               | Real ID, KPs  |
  | "Knock"       |       /notify |<~~~~~~~~~~~~~~+
  | Real ID, KPs  |<--------------+               |
  |<~~~~~~~~~~~~~~+               | Remove        |
  |               |               | Proposals     | Cathy removes
  |               |               |<~~~~~~~~~~~~~~+ herself
  | Remove        |<--------------+               |
  |<~~~~~~~~~~~~~~+               |               |
  |               |               |               |
  |      ...      | time passes   |      ...      |
  |               |               |               |
]]></artwork>
        </artset>
        <t>An administrator of the target room decides to add Cathy using the
KeyPackages she provided in the (related) "knock room".</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="448" viewBox="0 0 448 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,160" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,160" fill="none" stroke="black"/>
              <path d="M 280,48 L 280,160" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,160" fill="none" stroke="black"/>
              <path d="M 24,80 Q 26,76.8 28,80 Q 30,83.2 32,80 Q 34,76.8 36,80 Q 38,83.2 40,80 Q 42,76.8 44,80 Q 46,83.2 48,80 Q 50,76.8 52,80 Q 54,83.2 56,80 Q 58,76.8 60,80 Q 62,83.2 64,80 Q 66,76.8 68,80 Q 70,83.2 72,80 Q 74,76.8 76,80 Q 78,83.2 80,80 Q 82,76.8 84,80 Q 86,83.2 88,80 Q 90,76.8 92,80 Q 94,83.2 96,80 Q 98,76.8 100,80 Q 102,83.2 104,80 Q 106,76.8 108,80 Q 110,83.2 112,80 Q 114,76.8 116,80 Q 118,83.2 120,80 Q 122,76.8 124,80 Q 126,83.2 128,80 Q 130,76.8 132,80 Q 134,83.2 136,80 Q 138,76.8 140,80 Q 142,83.2 144,80 " fill="none" stroke="black"/>
              <path d="M 32,112 Q 34,108.8 36,112 Q 38,115.2 40,112 Q 42,108.8 44,112 Q 46,115.2 48,112 Q 50,108.8 52,112 Q 54,115.2 56,112 Q 58,108.8 60,112 Q 62,115.2 64,112 Q 66,108.8 68,112 Q 70,115.2 72,112 Q 74,108.8 76,112 Q 78,115.2 80,112 Q 82,108.8 84,112 Q 86,115.2 88,112 Q 90,108.8 92,112 Q 94,115.2 96,112 Q 98,108.8 100,112 Q 102,115.2 104,112 Q 106,108.8 108,112 Q 110,115.2 112,112 Q 114,108.8 116,112 Q 118,115.2 120,112 Q 122,108.8 124,112 Q 126,115.2 128,112 Q 130,108.8 132,112 Q 134,115.2 136,112 Q 138,108.8 140,112 Q 142,115.2 144,112 Q 146,108.8 148,112 Q 150,115.2 152,112 " fill="none" stroke="black"/>
              <path d="M 152,112 L 272,112" fill="none" stroke="black"/>
              <path d="M 160,144 L 280,144" fill="none" stroke="black"/>
              <path d="M 280,144 Q 282,140.8 284,144 Q 286,147.2 288,144 Q 290,140.8 292,144 Q 294,147.2 296,144 Q 298,140.8 300,144 Q 302,147.2 304,144 Q 306,140.8 308,144 Q 310,147.2 312,144 Q 314,140.8 316,144 Q 318,147.2 320,144 Q 322,140.8 324,144 Q 326,147.2 328,144 Q 330,140.8 332,144 Q 334,147.2 336,144 Q 338,140.8 340,144 Q 342,147.2 344,144 Q 346,140.8 348,144 Q 350,147.2 352,144 Q 354,140.8 356,144 Q 358,147.2 360,144 Q 362,140.8 364,144 Q 366,147.2 368,144 Q 370,140.8 372,144 Q 374,147.2 376,144 Q 378,140.8 380,144 Q 382,147.2 384,144 Q 386,140.8 388,144 Q 390,147.2 392,144 Q 394,140.8 396,144 Q 398,147.2 400,144 " fill="none" stroke="black"/>
              <polygon class="arrowhead" points="408,144 396,138.4 396,149.6" fill="black" transform="rotate(0,400,144)"/>
              <polygon class="arrowhead" points="280,112 268,106.4 268,117.6" fill="black" transform="rotate(0,272,112)"/>
              <polygon class="arrowhead" points="168,144 156,138.4 156,149.6" fill="black" transform="rotate(180,160,144)"/>
              <polygon class="arrowhead" points="152,80 140,74.4 140,85.6" fill="black" transform="rotate(0,144,80)"/>
              <polygon class="arrowhead" points="40,112 28,106.4 28,117.6" fill="black" transform="rotate(180,32,112)"/>
              <g class="text">
                <text x="36" y="36">ClientA1</text>
                <text x="152" y="36">ServerA</text>
                <text x="280" y="36">ServerC</text>
                <text x="412" y="36">ClientC*</text>
                <text x="64" y="68">Commit,</text>
                <text x="116" y="68">etc.</text>
                <text x="108" y="100">Accepted</text>
                <text x="192" y="100">/notify</text>
                <text x="232" y="132">200</text>
                <text x="260" y="132">OK</text>
                <text x="324" y="132">Welcome,</text>
                <text x="380" y="132">Tree</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
ClientA1       ServerA         ServerC         ClientC*
  |               |               |               |
  | Commit, etc.  |               |               |
  +~~~~~~~~~~~~~~>|               |               |
  |      Accepted | /notify       |               |
  |<~~~~~~~~~~~~~~+-------------->|               |
  |               |        200 OK | Welcome, Tree |
  |               |<--------------+~~~~~~~~~~~~~~>|
  |               |               |               |
]]></artwork>
        </artset>
        <t>This flow is ideal for joining an established affinity group. For example,
this method could be used by members of marginalized communities. The
perspective joiner needs to believe that the "knock room" contains only
moderators who will treat their join request in confidence and not "out"
them.</t>
      </section>
    </section>
    <section anchor="disclosing-additional-identity-properties-in-an-application-message">
      <name>Disclosing additional identity properties in an application message</name>
      <t>The concept of pseudonyms is of limited utility if the subject of the
pseudonym cannot disclose additional "real" identity properties as it
wishes. In the connection flow, Alice reveals her "real" identity only to
Bob; in the join link flow, Bob reveals aspects of his "real" identity to
the room; in the knock flow, Cathy reveals aspects of her "real" identity
to the moderators of her target room, and depending on the policy of the
target room she might reveal a different aspect of her identity inside the
target room.</t>
      <t>The properties needed for safe and appropriate identity disclosure include:</t>
      <ul spacing="normal">
        <li>
          <t>The disclosure <bcp14>MUST</bcp14> be consistent with the room policy, which may require
disclosure of some elements, allow some elements to be optionally disclosed,
and may even forbid disclosure of other elements. For example, a sexually
explicit room might require participants to disclose that they are at least a certain age, and forbid the disclosure of postal addresses and family names.</t>
        </li>
        <li>
          <t>The issuer / authority <bcp14>MUST</bcp14> be known to every participant of the room and
trusted for the purpose of making identity assertions for the domain(s) of
the provider of the subject user.</t>
        </li>
        <li>
          <t>The signature key of the subject client in its MLS LeafNode <bcp14>MUST</bcp14> be the
same as the public key in the identity assertion.</t>
        </li>
        <li>
          <t>Whatever identity construction is used <bcp14>MUST</bcp14> be valid according the rules for that construction.</t>
        </li>
        <li>
          <t>The presentation of the identity assertion <bcp14>MUST</bcp14> bind the presentation to
possession of the identity's private key (key binding).</t>
        </li>
        <li>
          <t>The key binding <bcp14>SHOULD</bcp14> be scoped to a narrow and relevant audience (for
example the target room), and include other mechanisms to prevent replay/
copy and paste attacks.</t>
        </li>
      </ul>
      <t>This document assumes that these disclosures happen to participants of a
room inside an application message, directly using an appropriate media type
(not necessarily inside a MIMI content message).  The next three subsections
describe three such mechanisms.</t>
      <section anchor="generic-mls-credential">
        <name>Generic MLS Credential</name>
        <t>MIMI describes its use with the MLS protocol <xref target="RFC9420"/>.
If a new media type <tt>application/mls-credential</tt> was defined, clients could
send the MLS Credential struct (possibly with the credential name as a media type parameter.) The MLS struct is reproduced here:</t>
        <sourcecode type="tls"><![CDATA[
struct {
    CredentialType credential_type;
    select (Credential.credential_type) {
        case basic:
            opaque identity<V>;

        case x509:
            Certificate certificates<V>;
    };
} Credential;
]]></sourcecode>
        <t>For example, the client's MLS LeafNode could contain an MLS Credential with
an X.509 certificate with a <tt>subjectAltName</tt> URI that corresponds to the
pseudonym address of the client. The client could then disclose to the room
a different X.509 certificate with the same issuer and public key which also
reveals the "real" display name, and email address of the user.</t>
        <t>OpenID Connect UserInfo Verifiable Credentials (VCs) are another proposed
MLS Credential type <xref target="I-D.barnes-mls-addl-creds"/> with more natural claims
semantics.</t>
      </section>
      <section anchor="selective-disclosure-json-web-tokens">
        <name>Selective Disclosure JSON Web Tokens</name>
        <t>While the use of JSON Web Tokens (JWT) <xref target="RFC7519"/> is widespread, most
uses do not require the holder/presenter to prove possession of a private
key as in <xref target="RFC9449"/>. Selective disclosure JWT (SD-JWT)
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/> describes both a way to
selectively disclose claims, it also include an optional presenter key
binding mechanism. The format uses the media type <tt>application/sd+jwt</tt>.</t>
        <t>This format could be used directly in MIMI with an appropriate profile.</t>
      </section>
      <section anchor="selective-disclosure-cbor-web-tokens">
        <name>Selective Disclosure CBOR Web Tokens</name>
        <t>Likewise, there are Selective Disclosure CBOR Web Tokens (SD-CWT)
<xref target="I-D.prorock-spice-cose-sd-cwt"/>. SD-CWT uses the media type
<tt>application/sd+cwt</tt>, and requires the use of its key binding
mechanism in presentations.</t>
      </section>
    </section>
    <section anchor="spam-and-abuse-prevention">
      <name>Spam and Abuse prevention</name>
      <t>MIMI has a requirement to be able to prevent spam and other forms of abuse.
When using pseudonymous identities, there is naturally concern that an
account with many pseudonyms could be used to violate room policy in the
same room repeatedly or in multiple rooms with impunity. This section
explores some implementation options to prevent this.</t>
      <t>In a multi-provider messaging system, the hub provider is the only provider that knows the room policy and therefore the only provider that can decide if the policy is being violated. The local provider will need to eventually cooperate with the hub provider in order to prevent the same bad actor from
violating policy repeatedly with different pseudonyms.</t>
      <section anchor="detection-signals">
        <name>Detection signals</name>
        <t>There are several signals used for detection of spam or abuse.
In theory, an explicit abuse report should be a very strong signal of abuse.
However, an abuse report could be sent accidentally; it could be the result
of a misunderstanding about the policy in a room; or it could have been sent
maliciously. A report might be incorrectly processed by an algorithm, or it
might need to wait for a human moderator to process it.</t>
        <t>A ban or kick by a moderator or administrator of a group could also be a strong signal, but an administrator might maliciously act against someone
they disagree with rather than someone who actually violated policy. Since
the motivation for the ban or kick is not shared with the hub, the claim is
also impossible to validate.</t>
        <t>The hub may also use the rate or pattern of joining groups or sending
messages for one of its own users as an indicator of how spammy that user
is, but for users based on other providers it has no way to correlate that
information across pseudonyms.</t>
      </section>
      <section anchor="remedies">
        <name>Remedies</name>
        <t>Once the hub suspects that a user has violated its policies, it has a number
of possible remedies. Some of these remedies require cooperation with the
local provider of that user.</t>
        <t>Actions the hub can take independently:</t>
        <ul spacing="normal">
          <li>
            <t>prevent the user from sending messages in a room</t>
          </li>
          <li>
            <t>remove the user from a room (kick)</t>
          </li>
          <li>
            <t>ban the user from a room (temporarily)</t>
          </li>
          <li>
            <t>ban the user from a room (permanently)</t>
          </li>
        </ul>
        <t>Actions requiring cooperation of the user's local provider</t>
        <ul spacing="normal">
          <li>
            <t>suspend the account of the user</t>
          </li>
          <li>
            <t>suspend the account of the user and remove the user (including all pseudonyms) from all rooms</t>
          </li>
          <li>
            <t>completely delete the account of the user</t>
          </li>
          <li>
            <t>suspend the account and any accounts deemed "related" (ex: used the same email address or phone number)</t>
          </li>
          <li>
            <t>delete the account and any "related" accounts</t>
          </li>
        </ul>
        <t>Specifying an interface for reporting suspected abusive identities from
one provider to another is currently out-of-scope of the MIMI charter and
likely to be defined between providers or by a more focussed standards
developing organization, such as the Messaging Anti-Abuse Working Group
(M3AAWG).</t>
      </section>
      <section anchor="correlating-anti-abuse-actions-across-multiple-pseudonyms">
        <name>Correlating anti-abuse actions across multiple pseudonyms</name>
        <t>It is possible that the local provider for a user can lookup the
account associated with a specific user identity. This may be
straightforward, or the provider might implement a scheme where this lookup
is possible but requires extra technical or operational steps and leaves
evidence of the inquiry. This would be the moral equivalent of breaking the
pane of glass in some manual fire alarms.</t>
        <t>In other implementations, perhaps no direct lookup is possible during normal
operation of the system, but an API could suspend of delete the account
associated with a particular pseudonym.</t>
        <t>For some providers it may be operationally acceptable that only a small
number of pseudonyms can be created for a particular account.</t>
        <t>There are also mechanisms such as searchable encryption and homomorphic
encryption, which allow searching for all the pseudonyms with the same
account id with a combined spam factor over a certain threshold.
Alternatively, a provider may use similar encryption mechanisms but require
a positive reputation threshold in order to allow new pseudonyms to be
created.</t>
      </section>
    </section>
    <section anchor="implications-with-explicit-consent-mechanism">
      <name>Implications with explicit consent mechanism</name>
      <t>In many of the flows in this document, one user provides another with a
KeyPackage. In many cases the KeyPackages will be valid for several weeks or
months and most new rendezvous will be realized during that time. However if
a KeyPackage expires, the other party may need explicit consent to fetch a
new KeyPackage to replace the expired one.</t>
    </section>
    <section anchor="other-mechanism-needed">
      <name>Other mechanism needed</name>
      <t>This document describes some flows for effective, selectively
pseudonymous privacy. Use in a MIMI system requires a small amount
of additional specification and implementation. The author has attempted to
list this items according to whether they are in-scope according to the MIMI
charter.</t>
      <t>Out of scope:</t>
      <ul spacing="normal">
        <li>
          <t>A way for clients to obtain pseudonyms from their own providers</t>
        </li>
        <li>
          <t>Rate limiting pseudonym creation on a local provider</t>
        </li>
        <li>
          <t>Correlating pseudonyms with an account on a local provider (may or may not be possible or necessary)</t>
        </li>
        <li>
          <t>A way for a client to obtain a join link from its provider</t>
        </li>
      </ul>
      <t>Assumed in scope:</t>
      <ul spacing="normal">
        <li>
          <t>A way to indicate a KeyPackage is only valid for initial connections</t>
        </li>
        <li>
          <t>A way for MIMI entities to recognize pseudonyms</t>
        </li>
        <li>
          <t>A way to examine the room policy about pseudonyms (required, optional,
forbidden), and if certain claims/elements are required, optional, or
forbidden.</t>
        </li>
        <li>
          <t>A format or convention to wrap additional credentials, or disclosures of
selective disclosure credentials inside a room, along with KeyPackages, etc.</t>
        </li>
        <li>
          <t>Conventions for use of existing authorization and consent primitives</t>
        </li>
        <li>
          <t>Conventions to make KeyPackages available appropriately</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-mimi-protocol">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) using HTTPS and MLS</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Matthew Hodgson" initials="M." surname="Hodgson">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Konrad Kohbrok" initials="K." surname="Kohbrok">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Unaffiliated</organization>
            </author>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document specifies the More Instant Messaging Interoperability
   (MIMI) transport protocol, which allows users of different messaging
   providers to interoperate in group chats (rooms), including to send
   and receive messages, share room policy, and add participants to and
   remove participants from rooms.  MIMI describes messages between
   providers, leaving most aspects of the provider-internal client-
   server communication up to the provider.  MIMI integrates the
   Messaging Layer Security (MLS) protocol to provide end-to-end
   security assurances, including authentication of protocol
   participants, confidentiality of messages exchanged within a room,
   and agreement on the state of the room.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-protocol-01"/>
        </reference>
        <reference anchor="RFC2119">
          <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9420">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <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 (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-selective-disclosure-jwt">
          <front>
            <title>Selective Disclosure for JWTs (SD-JWT)</title>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete</organization>
            </author>
            <author fullname="Kristina Yasuda" initials="K." surname="Yasuda">
              <organization>Keio University</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This specification defines a mechanism for selective disclosure of
   individual elements of a JSON object used as the payload of a JSON
   Web Signature (JWS) structure.  It encompasses various applications,
   including but not limited to the selective disclosure of JSON Web
   Token (JWT) claims.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-selective-disclosure-jwt-10"/>
        </reference>
        <reference anchor="I-D.prorock-spice-cose-sd-cwt">
          <front>
            <title>Selective Disclosure CWTs (SD-CWT)</title>
            <author fullname="Michael Prorock" initials="M." surname="Prorock">
              <organization>mesur.io</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="17" month="June" year="2024"/>
            <abstract>
              <t>   This document describes a data minimization technique for use with
   CBOR Web Token (CWT) [RFC8392].  The approach is based on SD-JWT
   [I-D.ietf-oauth-selective-disclosure-jwt], with changes to align with
   CBOR Object Signing and Encryption (COSE).  This document updates
   RFC8392.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-prorock-spice-cose-sd-cwt-01"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.kohbrok-mimi-metadata-minimalization">
          <front>
            <title>MIMI Metadata Minimalization (MIMIMI)</title>
            <author fullname="Konrad Kohbrok" initials="K." surname="Kohbrok">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="5" month="April" year="2024"/>
            <abstract>
              <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.

   For now, this document only contains a high-level description of the
   mechanisms involved.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kohbrok-mimi-metadata-minimalization-00"/>
        </reference>
        <reference anchor="I-D.ietf-mimi-arch">
          <front>
            <title>An Architecture for More Instant Messaging Interoperability (MIMI)</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="2" month="April" year="2024"/>
            <abstract>
              <t>   The More Instant Messaging Interoperability (MIMI) working group is
   defining a suite of protocols that allow messaging providers to
   interoperate with one another.  This document lays out an overall
   architecture enumerating the MIMI protocols and how they work
   together to enable an overall messaging experience.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-arch-00"/>
        </reference>
        <reference anchor="I-D.barnes-mls-addl-creds">
          <front>
            <title>Additional MLS Credentials</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This specification defines two new kinds of credentials for use
   within the Message Layer Security (MLS) credential framework:
   UserInfo Verifiable Credentials and multi-credentials.  UserInfo
   Verifiable Credentials allow clients to present credentials that
   associate OpenID Connect attributes to a signature key pair held by
   the client.  Multi-credentials allow clients to present authenticated
   attributes from multiple sources, or to present credentials in
   different formats to support groups with heterogeneous credential
   support.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-barnes-mls-addl-creds-01"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC9449">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
      </references>
    </references>
    <?line 601?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1d/XIct5H/H0+BY/4wGe8uLcepxJTjhKLshLEkOqQcX+rq
6oydwe6OOR+bwSypjSM/yz3LPdn1rxvAYGaXEqVSbKfKTFW8OztoNBqN/kZr
Op2qruhKe6IPrprK6rWzm7ypt1WzcXrdFjcm2+pF2dw6vWha/bRprT6vXWfq
Tj+1zpllUS/pSWfbZm1bMy/Kotvqw6fnT8+PDpSZz1t7Q8DxvQc+hHygMtPZ
ZdNuT3RRLxql8iarTUVI5a1ZdNPKrLbTqqiKaYTgph98oNxmXhXOFU3dbdf0
9vlnzz/X+hfalK6hOYs6t2tL/1d3BxN9YPOia9rClPhyfvqI/kMrOji/fP75
gao31dy2JyonTE5U1tTO1m7jTnTXbqyiFfxKmdYagnq6XpcFIUyzOm3qXF9a
U06fF5U9ULdNe71sm80aK74fqQ7Utd3SuPxE6amubGcIBRMIhGf9mgffaIPw
3dnSZl1xY3VeuKxs3KYlfG29oWVo/cbIaC2kPPialoJX/ggIeF6ZoqTn2IY/
FLZbzJp2ieemzVb0fNV1a3dyfIzX8IgwmoXXjvHgeN7SXttjADjGwGXRrTZz
Gto2K1Njj49He4y3StoQ1yUTxLdnAmBWNONxx3ezzWzVVeWBUmbTrZoWNKc5
FpuyFH67BHD9lAbSY8Lc1MU/eKvTn/QZbf2m7ECeK9veFJmlrdBWKMT48dL/
sMSTWdZUStVNWxls04lS4PH+m5pOp9rMXdearFPq+cpqOSxt0zVZU+qVIT7T
c0M7XdRWl/bGlrpZ7PDKRN+uimylM0JzblVlcqsr7Dv/3lndrWgvlyv6r9XN
Gqsypd44C2DEA9O2aaqE22b6+apwOIubio6Qzq3L2mJuHQBZHlWZeqvXDR3B
eWm9mOhWpmOoPSSIDmVroktm84DuTJ93fFKZcTfOEWAHEXRrth6KW5uKj5iZ
M0ASJYQI4a0qmxG0whFsLBfnjkSHpnP77abO8Iq+Je5IV+MpXRV5XlqlfgHm
b5t8w297ur+RdIs7pL777j/Op495zz2/+V9eviSqLWjXBjsYkd+3i4rxxhYt
mpIICgTWPHtXWNqTzwxtcdlktHX0+KbIbcskuK6bW88ABLXonCKStTQvLYmA
GxqeFWssjOiEbVsS+9Uaez5hGmPKvCGOrQEA33C4iAesog/9ZJjI8e9l4Trm
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

-->

</rfc>
