<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.33 (Ruby 3.1.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-art-tigress-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="Tigress">Transfer Digital Credentials Securely</title>
    <seriesInfo name="Internet-Draft" value="draft-art-tigress-02"/>
    <author initials="D." surname="Vinokurov" fullname="Dmitry Vinokurov">
      <organization>Apple Inc</organization>
      <address>
        <email>dvinokurov@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Byington" fullname="Matt Byington">
      <organization>Apple Inc</organization>
      <address>
        <email>mbyington@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Lerch" fullname="Matthias Lerch">
      <organization>Apple Inc</organization>
      <address>
        <email>mlerch@apple.com</email>
      </address>
    </author>
    <author initials="A." surname="Pelletier" fullname="Alex Pelletier">
      <organization>Apple Inc</organization>
      <address>
        <email>a_pelletier@apple.com</email>
      </address>
    </author>
    <author initials="N." surname="Sha" fullname="Nick Sha">
      <organization>Alphabet Inc</organization>
      <address>
        <email>nicksha@google.com</email>
      </address>
    </author>
    <date year="2023" month="May" day="09"/>
    <area>Applications and Real-Time</area>
    <workgroup>Transfer dIGital cREdentialS Securely</workgroup>
    <keyword>tigress</keyword>
    <keyword>requirements</keyword>
    <abstract>
      <?line 94?>

<t>This document describes a mechanism to transfer digital credentials securely between two devices.
Secure credentials may represent a digital key to a hotel room, a digital key to a door lock in a house
or a digital key to a car. Devices that share credentials may belong to the same or two different platforms (e.g. iOS and Android).
Secure transfer may include one or more write and read operations.
Credential transfer needs to be performed securely due to the sensitive nature of the information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://datatracker.ietf.org/doc/draft-art-tigress/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-art-tigress/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transfer dIGital cREdentialS Securely Working Group mailing list (<eref target="mailto:tigress@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tigress/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tigress/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/dimmyvi/tigress"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Today, there is no standard way of transferring digital credentials securely between two devices
belonging to the same platform or two different platforms. This document proposes a solution to this problem
by introducing a Relay server which allows two devices to exchange encrypted Provisioning Information securely.
The Relay server solves this problem by creating and managing temporary mailbox storage.</t>
      <t>Each mailbox can be referenced by devices using a unique mailbox identifier in a URL.
The URL pointing to encrypted Provisioning Information is to be passed between devices directly
over various channels (e.g. SMS, email, messaging applications).
The Security Considerations section provides recommendations on passing the URL and the Secret securely.</t>
      <t>This document describes a Hypertext (HTTP) Application Programming Interface (API) that allows
Sender and Receiver devices to interact with a Relay server in order to perform secure credential transfer.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</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>General terms:</t>
      <ul spacing="normal">
        <li>Relay Server - Web application exposing Tigress API to devices. It serves to securely transfer Provisioning Information between two devices (Sender and Receiver).</li>
        <li>Sender device - a device initiating a transfer of Provisioning Information to a Receiver device so that Receiver can register or provision this credential.</li>
        <li>Receiver device - a device that receives Provisioning Information from Sender device and uses it to register or provision Credential Information.</li>
        <li>Provisioning Partner - an entity which facilitates Credential Information lifecycle on a device. Lifecycle may include provisioning of credential, credential termination, credential update. API to Provisioning Partner is out of scope for this document.</li>
        <li>Provisioning Information - a set of data fields, allowing a device to generate Credential Information or receive it from Provisioning Partner and install it locally. The entire content of Provisioning Information is encrypted by Sender or Receiver device. Therefore, it is not visible to the Relay Server.
The structure of Provisioning Information is specific to Provisioning Partner or type of Credential and out of the scope of this document.</li>
        <li>Credential Information - a set of data fields used to facilitate registration or provisioning of Credential Information on the Receiver's device.</li>
        <li>Secret - a symmetric encryption key shared by a pair of Sender and Receiver devices, used to encrypt Provisioning Information stored on the Relay server. Secret stays the same for the entire credential transfer flow (one Secret per complete transfer). Provisioning Information stored on Relay server is always encrypted using the Secret. In Stateful flow all information exchanged by Sender and Receiver devices through Relay server is encrypted with the same Secret. Thus, effectively, Secret has a one-to-one relation with the mailbox.</li>
        <li>Credential Vertical - The broad industry vertical that the credential belongs to. For example, the credential could belong to the car or home vertical.</li>
      </ul>
      <t>API parameters:</t>
      <ul spacing="normal">
        <li>Device Claim - a unique token allowing the caller to read from / write data to the mailbox. Exactly one Sender device and one Receiver device <bcp14>SHOULD</bcp14> be able to read from / write secure payload to the mailbox. Sender device provides a Device Claim in order to create a mailbox. When the Relay server, having received a request from the Sender device, creates a mailbox, it binds this Sender's Device Claim to the mailbox. When the Receiver device first reads data from the mailbox it presents its Device Claim to the Relay Server, which binds the mailbox to the given Receiver device. Thus, both Sender and Receiver devices are bound to the mailbox (allowed to read from / write to it). Only Sender and Receiver devices that present valid Device Claims are allowed to send subsequent read/update/delete calls to the mailbox. The value <bcp14>SHALL</bcp14> be a unique UUID <xref target="RFC4122"/>. Sender and Receiver <bcp14>MUST</bcp14> use different values for Device Claim. Implementation <bcp14>SHOULD</bcp14> assign unique values for new mailboxes (avoid re-using values).</li>
        <li>Notification Token - a short or long-lived unique token stored by the Sender or Receiver device in a mailbox on the Relay server, which allows Relay server to send a push notification to the Sender or Receiver device, informing them of updates in the mailbox.</li>
        <li>MailboxIdentifier - a unique identifier for the given mailbox, generated by the Relay server at the time of mailbox creation. The value is a UUID <xref target="RFC4122"/>.</li>
      </ul>
    </section>
    <section anchor="credential-transfer-workflows">
      <name>Credential transfer workflows</name>
      <t>We define two flows for credential transfer: 1. Stateless (Relay server facilitates a single credential data transfer: Sender -&gt; Relay -&gt; Receiver) and 2. Stateful (Relay server facilitates additional data transfers - there are multiple data transfers in this flow to prepare credential data for registering or provisioning by Receiver). Relay server does not limit the number of such data tranfsfers between Sender and Receiver devices. The details are provided below.</t>
      <t>Both stateless and stateful share the following common steps.
The processes start with a Sender device composing a set of Provisioning Information, encrypting it with a Secret and storing encrypted Provisioning Information on a Relay server in a mailbox. A unique Mailbox Identifier is generated by the Relay server as a part of CreateMailbox call, created using a good source of entropy (preferably hardware-based entropy). Sender device generates a unique token - a Sender Device Claim - and stores it to the mailbox. Device Claim allows the Sender device presenting it to read and write data to / from the mailbox, thus binding it to the mailbox.</t>
      <t>Sender device calls CreateMailbox API endpoint on a Relay server in order to create a mailbox.
Once a mailbox is created, it has limited livetime. When expired, the mailbox <bcp14>SHALL</bcp14> be deleted - refer to DeleteMailbox endpoint. Mailbox configuration has a required "expiration" parameter in the request for the CreateMailbox call (refer to mailboxConfiguration request parameter). Relay server is responsible to periodically check for mailboxes that are past the expiration time and delete them.</t>
      <t>Relay server builds a unique URL link to a mailbox (for example, “https://relayserver.example.com/v1/m/1234567890”) and returns it to the Sender device, which sends the link directly to the Receiver device over communication channel (e.g. SMS, email, iMessage).
Please refer to section "Security Considerations" for more details.</t>
      <t>Receiver device, having obtained both the URL link and the Secret, generates a unique token - a Receiver Device Claim - and passes it to the Relay server in order to read the encrypted Provisioning Information from the mailbox.</t>
      <t>Relay server has finally a given pair of Sender and Receiver devices bound to the mailbox by provided Sender (at the time of mailbox creation) and Receiver (at the time of reading secure content from the mailbox) Device Claims. Only bound devices are allowed to read or write data to the mailbox or to delete the mailbox.</t>
      <section anchor="stateless-workflow">
        <name>Stateless workflow</name>
        <t>The stateless workflow completes the common steps described in "Credential transfer workflows" section, then finishes the transfer completing the following steps.
Receiver device, having read the encrypted Provisioning Information from the Relay mailbox, decrypts it with the Secret received from the Sender and starts credential registering or provisioning process on the device. Once the Receiver device has successfully provisioned credentials, it deletes the mailbox by sending a DeleteMailbox call to the Relay server.</t>
        <figure anchor="stateless-flow-image">
          <name>Sample stateless workflow</name>
          <artset>
            <artwork type="svg"><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" height="460px" preserveAspectRatio="none" version="1.1" viewBox="0 0 491 460" width="491px">
                <defs/>
                <g>
                  <line x1="64" x2="64" y1="37.0146" y2="424.6064" stroke="black" stroke-width="0.5"/>
                  <line x1="209.5" x2="209.5" y1="37.0146" y2="424.6064" stroke="black" stroke-width="0.5"/>
                  <line x1="445" x2="445" y1="37.0146" y2="424.6064" stroke="black" stroke-width="0.5"/>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="64" x="32" y="5" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="39" y="26.0752">Sender</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="64" x="32" y="423.6064" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="39" y="444.6816">Sender</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="51" x="184.5" y="5" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="191.5" y="26.0752">Relay</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="51" x="184.5" y="423.6064" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="191.5" y="444.6816">Relay</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="72" x="409" y="5" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="416" y="26.0752">Receiver</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="72" x="409" y="423.6064" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="416" y="444.6816">Receiver</text>
                  <path d="M5,52.0146 L5,93.0146 L269,93.0146 L269,62.0146 L259,52.0146 L5,52.0146 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M259,52.0146 L259,62.0146 L269,62.0146 L259,52.0146 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="11" y="70.0845">Create mailbox with Provisioning Info</text>
                  <text fill="black" font-family="sans-serif" font-size="13" x="11" y="85.8838">encrypted with Secret</text>
                  <polygon fill="black" points="198,116.4126,208,120.4126,198,124.4126,202,120.4126" stroke="black" stroke-width="1.0"/>
                  <line x1="64" x2="204" y1="120.4126" y2="120.4126" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="71" y="115.6831">CreateMailbox</text>
                  <polygon fill="black" points="75,146.2119,65,150.2119,75,154.2119,71,150.2119" stroke="black" stroke-width="1.0"/>
                  <line x1="69" x2="209" y1="150.2119" y2="150.2119" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="81" y="145.4824">URL link to mailbox</text>
                  <path d="M32,163.2119 L32,188.2119 L476,188.2119 L476,173.2119 L466,163.2119 L32,163.2119 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M466,163.2119 L466,173.2119 L476,173.2119 L466,163.2119 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="130.5" y="181.2817">Send URL link to mailbox and Secret</text>
                  <polygon fill="black" points="433,211.8105,443,215.8105,433,219.8105,437,215.8105" stroke="black" stroke-width="1.0"/>
                  <line x1="64" x2="439" y1="215.8105" y2="215.8105" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="71" y="211.0811">URL link and Secret</text>
                  <polygon fill="black" points="221,241.6099,211,245.6099,221,249.6099,217,245.6099" stroke="black" stroke-width="1.0"/>
                  <line x1="215" x2="444" y1="245.6099" y2="245.6099" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="227" y="240.8804">ReadSecureContentFromMailbox</text>
                  <polygon fill="black" points="433,271.4092,443,275.4092,433,279.4092,437,275.4092" stroke="black" stroke-width="1.0"/>
                  <line x1="210" x2="439" y1="275.4092" y2="275.4092" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="217" y="270.6797">Encrypted info</text>
                  <path d="M170,288.4092 L170,313.4092 L484,313.4092 L484,298.4092 L474,288.4092 L170,288.4092 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M474,288.4092 L474,298.4092 L484,298.4092 L474,288.4092 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="176" y="306.479">Decrypt with Secret to get Provisioning Info</text>
                  <polygon fill="black" points="221,337.0078,211,341.0078,221,345.0078,217,341.0078" stroke="black" stroke-width="1.0"/>
                  <line x1="215" x2="444" y1="341.0078" y2="341.0078" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="227" y="336.2783">DeleteMailbox</text>
                  <polygon fill="black" points="433,366.8071,443,370.8071,433,374.8071,437,370.8071" stroke="black" stroke-width="1.0"/>
                  <line x1="210" x2="439" y1="370.8071" y2="370.8071" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="217" y="366.0776">OK</text>
                  <path d="M181,383.8071 L181,408.8071 L472,408.8071 L472,393.8071 L462,383.8071 L181,383.8071 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M462,383.8071 L462,393.8071 L472,393.8071 L462,383.8071 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="216.75" y="401.877">Provision or Register credentials</text>
                  <!--MD5=[f77cd85cea9e292ead70b9977865006c]
@startuml

participant Sender
participant Relay
participant Receiver

note over Sender, Relay
  Create mailbox with Provisioning Info
  encrypted with Secret
end note
Sender -> Relay: CreateMailbox
Relay -> Sender: URL link to mailbox

note over Sender, Receiver
  Send URL link to mailbox and Secret
end note
Sender -> Receiver: URL link and Secret

Receiver -> Relay: ReadSecureContentFromMailbox
Relay -> Receiver: Encrypted info
note over Relay, Receiver
  Decrypt with Secret to get Provisioning Info
end note

Receiver -> Relay: DeleteMailbox
Relay -> Receiver: OK

note over Relay, Receiver
  Provision or Register credentials
end note

@enduml

PlantUML version 1.2022.8(Sun Sep 25 09:00:33 GMT 2022)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
-->
  </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[       ┌──────┐             ┌─────┐                      ┌────────┐    
       │Sender│             │Relay│                      │Receiver│    
       └──┬───┘             └──┬──┘                      └───┬────┘    
  ╔═══════╧════════════════════╧══════════╗                  │         
  ║Create mailbox with Provisioning Info ░║                  │         
  ║encrypted with Secret                  ║                  │         
  ╚═══════╤════════════════════╤══════════╝                  │         
          │    CreateMailbox   │                             │         
          │ ───────────────────>                             │         
          │                    │                             │         
          │ URL link to mailbox│                             │         
          │ <───────────────────                             │         
          │                    │                             │         
      ╔═══╧════════════════════╧═════════════════════════════╧═════╗   
      ║Send URL link to mailbox and Secret                        ░║   
      ╚═══╤════════════════════╤═════════════════════════════╤═════╝   
          │                URL link and Secret               │         
          │ ─────────────────────────────────────────────────>         
          │                    │                             │         
          │                    │ ReadSecureContentFromMailbox│         
          │                    │ <────────────────────────────         
          │                    │                             │         
          │                    │        Encrypted info       │         
          │                    │ ────────────────────────────>         
          │                    │                             │         
          │            ╔═══════╧═════════════════════════════╧════════╗
          │            ║Decrypt with Secret to get Provisioning Info ░║
          │            ╚═══════╤═════════════════════════════╤════════╝
          │                    │        DeleteMailbox        │         
          │                    │ <────────────────────────────         
          │                    │                             │         
          │                    │              OK             │         
          │                    │ ────────────────────────────>         
          │                    │                             │         
          │                ╔═══╧═════════════════════════════╧════╗    
          │                ║Provision or Register credentials    ░║    
       ┌──┴───┐            ╚══════════════════════════════════════╝    
       │Sender│             │Relay│                      │Receiver│    
       └──────┘             └─────┘                      └────────┘    
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="stateful-workflow">
        <name>Stateful workflow</name>
        <t>The stateful workflow completes the common steps described in "Credential transfer workflows" section, then finishes the transfer completing the following steps.</t>
        <t>Then the Receiver device, having downloaded the encrypted Provisioning Information from the mailbox by URL and decrypted it with the Secret, generates a new structure of Provisioning Information, e.g. a digital key, and encrypts it with the same Secret, received from the Sender device. It then stores the payload in the same mailbox on the Relay server. In addition to the encrypted payload, Receiver stores a Receiver Notification Token in the given mailbox.</t>
        <t>Having received the encrypted Provisioning Information, the Relay server sends a Notification to the Sender device using the Sender Notification Token.</t>
        <t>Sender device, having received the notification from the Relay server, reads secure content from the mailbox and decrypts all using the same Secret. Sender device generates new Provisioning Information, encrypts all fields using the Secret and stores all data in the same  mailbox on the Relay server.</t>
        <t>Relay server, having stored the data above, sends a notification to the Receiver device using Receiver Notification Token. Receiver device, having received the notification, reads the encrypted Provisioning Information, decrypts the data using the same Secret and uses this data to finalize credential registration or provisioning on device.</t>
        <t>Once the Receiver device has successfully registered or provisioned credentials, it deletes the mailbox by sending a DeleteMailbox call to the Relay server.
Sender device may terminate the secure credential transfer by deleting the mailbox it created at any time. Deletion of the mailbox on the Relay server stops any on-going credential transfer process.</t>
        <figure anchor="stateful-flow-image">
          <name>Sample stateful workflow</name>
          <artset>
            <artwork type="svg"><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" height="965px" preserveAspectRatio="none" version="1.1" viewBox="0 0 564 965" width="564px">
                <defs/>
                <g>
                  <line x1="41" x2="41" y1="37.0146" y2="928.9941" stroke="black" stroke-width="0.5"/>
                  <line x1="275.5" x2="275.5" y1="37.0146" y2="928.9941" stroke="black" stroke-width="0.5"/>
                  <line x1="511" x2="511" y1="37.0146" y2="928.9941" stroke="black" stroke-width="0.5"/>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="64" x="9" y="5" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="16" y="26.0752">Sender</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="64" x="9" y="927.9941" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="16" y="949.0693">Sender</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="51" x="250.5" y="5" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="257.5" y="26.0752">Relay</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="51" x="250.5" y="927.9941" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="257.5" y="949.0693">Relay</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="72" x="475" y="5" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="482" y="26.0752">Receiver</text>
                  <rect fill="white" height="31.0146" rx="2.5" ry="2.5" width="72" x="475" y="927.9941" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="14" x="482" y="949.0693">Receiver</text>
                  <path d="M14,52.0146 L14,93.0146 L301,93.0146 L301,62.0146 L291,52.0146 L14,52.0146 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M291,52.0146 L291,62.0146 L301,62.0146 L291,52.0146 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="47.75" y="70.0845">Create and encrypt Provisioning</text>
                  <text fill="black" font-family="sans-serif" font-size="13" x="47.75" y="85.8838">Info 1 encrypted with Secret</text>
                  <polygon fill="black" points="264,116.4126,274,120.4126,264,124.4126,268,120.4126" stroke="black" stroke-width="1.0"/>
                  <line x1="41" x2="270" y1="120.4126" y2="120.4126" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="48" y="115.6831">CreateMailbox</text>
                  <polygon fill="black" points="52,146.2119,42,150.2119,52,154.2119,48,150.2119" stroke="black" stroke-width="1.0"/>
                  <line x1="46" x2="275" y1="150.2119" y2="150.2119" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="58" y="145.4824">URL link to mailbox</text>
                  <path d="M9,163.2119 L9,188.2119 L542,188.2119 L542,173.2119 L532,163.2119 L9,163.2119 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M532,163.2119 L532,173.2119 L542,173.2119 L532,163.2119 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="152" y="181.2817">Send URL link to mailbox and Secret</text>
                  <polygon fill="black" points="499,211.8105,509,215.8105,499,219.8105,503,215.8105" stroke="black" stroke-width="1.0"/>
                  <line x1="41" x2="505" y1="215.8105" y2="215.8105" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="48" y="211.0811">URL link and Secret</text>
                  <polygon fill="black" points="287,241.6099,277,245.6099,287,249.6099,283,245.6099" stroke="black" stroke-width="1.0"/>
                  <line x1="281" x2="510" y1="245.6099" y2="245.6099" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="293" y="240.8804">ReadSecureContentFromMailbox</text>
                  <path d="M230,258.6099 L230,283.6099 L557,283.6099 L557,268.6099 L547,258.6099 L230,258.6099 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M547,258.6099 L547,268.6099 L557,268.6099 L547,258.6099 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="236" y="276.6797">Decrypt with Secret to get Provisioning Info 1</text>
                  <polygon fill="black" points="499,307.2085,509,311.2085,499,315.2085,503,311.2085" stroke="black" stroke-width="1.0"/>
                  <line x1="276" x2="505" y1="311.2085" y2="311.2085" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="283" y="306.479">encrypted info</text>
                  <path d="M247,324.2085 L247,381.2085 L538,381.2085 L538,334.2085 L528,324.2085 L247,324.2085 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M528,324.2085 L528,334.2085 L538,334.2085 L528,324.2085 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="257.75" y="342.2783">Update with Provision Info 2</text>
                  <text fill="black" font-family="sans-serif" font-size="13" x="257.75" y="358.0776">encrypted with Secret</text>
                  <text fill="black" font-family="sans-serif" font-size="13" x="257.75" y="373.877">Provision Info 2 = new Provisioning Info</text>
                  <polygon fill="black" points="287,404.4058,277,408.4058,287,412.4058,283,408.4058" stroke="black" stroke-width="1.0"/>
                  <line x1="281" x2="510" y1="408.4058" y2="408.4058" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="293" y="403.6763">UpdateMailbox(encrypted info)</text>
                  <polygon fill="black" points="499,434.2051,509,438.2051,499,442.2051,503,438.2051" stroke="black" stroke-width="1.0"/>
                  <line x1="276" x2="505" y1="438.2051" y2="438.2051" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="283" y="433.4756">OK</text>
                  <polygon fill="black" points="52,464.0044,42,468.0044,52,472.0044,48,468.0044" stroke="black" stroke-width="1.0"/>
                  <line x1="46" x2="275" y1="468.0044" y2="468.0044" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="58" y="463.2749">Push Notification</text>
                  <polygon fill="black" points="264,493.8037,274,497.8037,264,501.8037,268,497.8037" stroke="black" stroke-width="1.0"/>
                  <line x1="41" x2="270" y1="497.8037" y2="497.8037" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="48" y="493.0742">ReadSecureContentFromMailbox</text>
                  <polygon fill="black" points="52,523.603,42,527.603,52,531.603,48,527.603" stroke="black" stroke-width="1.0"/>
                  <line x1="46" x2="275" y1="527.603" y2="527.603" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="58" y="522.8735">encrypted info</text>
                  <path d="M5,540.603 L5,565.603 L313,565.603 L313,550.603 L303,540.603 L5,540.603 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M303,540.603 L303,550.603 L313,550.603 L303,540.603 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="11" y="558.6729">Decrypt with Secret to get Provision Info 2</text>
                  <path d="M14,576.4023 L14,633.4023 L301,633.4023 L301,586.4023 L291,576.4023 L14,576.4023 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M291,576.4023 L291,586.4023 L301,586.4023 L291,576.4023 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="22.75" y="594.4722">Update with Provision Info 3</text>
                  <text fill="black" font-family="sans-serif" font-size="13" x="22.75" y="610.2715">encrypted with Secret</text>
                  <text fill="black" font-family="sans-serif" font-size="13" x="22.75" y="626.0708">Provision Info 3 = new Provisioning Info</text>
                  <polygon fill="black" points="264,656.5996,274,660.5996,264,664.5996,268,660.5996" stroke="black" stroke-width="1.0"/>
                  <line x1="41" x2="270" y1="660.5996" y2="660.5996" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="48" y="655.8701">UpdateMailbox(encrypted info)</text>
                  <polygon fill="black" points="52,686.3989,42,690.3989,52,694.3989,48,690.3989" stroke="black" stroke-width="1.0"/>
                  <line x1="46" x2="275" y1="690.3989" y2="690.3989" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="58" y="685.6694">OK</text>
                  <polygon fill="black" points="499,716.1982,509,720.1982,499,724.1982,503,720.1982" stroke="black" stroke-width="1.0"/>
                  <line x1="276" x2="505" y1="720.1982" y2="720.1982" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="283" y="715.4688">Push Notification</text>
                  <polygon fill="black" points="287,745.9976,277,749.9976,287,753.9976,283,749.9976" stroke="black" stroke-width="1.0"/>
                  <line x1="281" x2="510" y1="749.9976" y2="749.9976" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="293" y="745.2681">ReadSecureContentFromMailbox</text>
                  <polygon fill="black" points="499,775.7969,509,779.7969,499,783.7969,503,779.7969" stroke="black" stroke-width="1.0"/>
                  <line x1="276" x2="505" y1="779.7969" y2="779.7969" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="283" y="775.0674">encrypted info</text>
                  <path d="M247,792.7969 L247,817.7969 L538,817.7969 L538,802.7969 L528,792.7969 L247,792.7969 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M528,792.7969 L528,802.7969 L538,802.7969 L528,792.7969 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="256.25" y="810.8667">Decrypt with Secret for Provision Info 3</text>
                  <polygon fill="black" points="287,841.3955,277,845.3955,287,849.3955,283,845.3955" stroke="black" stroke-width="1.0"/>
                  <line x1="281" x2="510" y1="845.3955" y2="845.3955" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="293" y="840.666">DeleteMailbox</text>
                  <polygon fill="black" points="499,871.1948,509,875.1948,499,879.1948,503,875.1948" stroke="black" stroke-width="1.0"/>
                  <line x1="276" x2="505" y1="875.1948" y2="875.1948" stroke="black" stroke-width="1.0"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="283" y="870.4653">OK</text>
                  <path d="M247,888.1948 L247,913.1948 L538,913.1948 L538,898.1948 L528,888.1948 L247,888.1948 " fill="white" stroke="black" stroke-width="0.5"/>
                  <path d="M528,888.1948 L528,898.1948 L538,898.1948 L528,888.1948 " fill="white" stroke="black" stroke-width="0.5"/>
                  <text fill="black" font-family="sans-serif" font-size="13" x="282.75" y="906.2646">Provision or Register credentials</text>
                  <!--MD5=[8fa10b2a28ea60aa0d671527da6dbfe3]
@startuml

participant Sender
participant Relay
participant Receiver

note over Sender, Relay
  Create and encrypt Provisioning
  Info 1 encrypted with Secret
end note
Sender -> Relay: CreateMailbox

Relay -> Sender: URL link to mailbox

note over Sender, Receiver
  Send URL link to mailbox and Secret
end note
Sender -> Receiver: URL link and Secret

Receiver -> Relay: ReadSecureContentFromMailbox
note over Relay, Receiver
  Decrypt with Secret to get Provisioning Info 1
end note
Relay -> Receiver: encrypted info


note over Relay, Receiver
  Update with Provision Info 2
  encrypted with Secret
  Provision Info 2 = new Provisioning Info
end note
Receiver -> Relay: UpdateMailbox(encrypted info)
Relay -> Receiver: OK

Relay -> Sender: Push Notification

Sender -> Relay: ReadSecureContentFromMailbox
Relay -> Sender: encrypted info
note over Sender, Relay
  Decrypt with Secret to get Provision Info 2
end note

note over Sender, Relay
  Update with Provision Info 3
  encrypted with Secret
  Provision Info 3 = new Provisioning Info
end note
Sender -> Relay: UpdateMailbox(encrypted info)
Relay -> Sender: OK

Relay -> Receiver: Push Notification
Receiver -> Relay: ReadSecureContentFromMailbox
Relay -> Receiver: encrypted info
note over Relay, Receiver
  Decrypt with Secret for Provision Info 3
end note

Receiver -> Relay: DeleteMailbox
Relay -> Receiver: OK

note over Relay, Receiver
  Provision or Register credentials
end note

@enduml

PlantUML version 1.2022.8(Sun Sep 25 09:00:33 GMT 2022)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
-->
  </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[     ┌──────┐                       ┌─────┐                       ┌────────┐     
     │Sender│                       │Relay│                       │Receiver│     
     └──┬───┘                       └──┬──┘                       └───┬────┘     
    ╔═══╧══════════════════════════════╧═══╗                          │          
    ║Create and encrypt Provisioning      ░║                          │          
    ║Info 1 encrypted with Secret          ║                          │          
    ╚═══╤══════════════════════════════╤═══╝                          │          
        │         CreateMailbox        │                              │          
        │ ─────────────────────────────>                              │          
        │                              │                              │          
        │      URL link to mailbox     │                              │          
        │ <─────────────────────────────                              │          
        │                              │                              │          
    ╔═══╧══════════════════════════════╧══════════════════════════════╧═════╗    
    ║Send URL link to mailbox and Secret                                   ░║    
    ╚═══╤══════════════════════════════╤══════════════════════════════╤═════╝    
        │                     URL link and Secret                     │          
        │ ────────────────────────────────────────────────────────────>          
        │                              │                              │          
        │                              │ ReadSecureContentFromMailbox │          
        │                              │ <─────────────────────────────          
        │                              │                              │          
        │                      ╔═══════╧══════════════════════════════╧═════════╗
        │                      ║Decrypt with Secret to get Provisioning Info 1 ░║
        │                      ╚═══════╤══════════════════════════════╤═════════╝
        │                              │        encrypted info        │          
        │                              │ ─────────────────────────────>          
        │                              │                              │          
        │                         ╔════╧══════════════════════════════╧══════╗   
        │                         ║Update with Provision Info 2             ░║   
        │                         ║encrypted with Secret                     ║   
        │                         ║Provision Info 2 = new Provisioning Info  ║   
        │                         ╚════╤══════════════════════════════╤══════╝   
        │                              │ UpdateMailbox(encrypted info)│          
        │                              │ <─────────────────────────────          
        │                              │                              │          
        │                              │              OK              │          
        │                              │ ─────────────────────────────>          
        │                              │                              │          
        │       Push Notification      │                              │          
        │ <─────────────────────────────                              │          
        │                              │                              │          
        │ ReadSecureContentFromMailbox │                              │          
        │ ─────────────────────────────>                              │          
        │                              │                              │          
        │        encrypted info        │                              │          
        │ <─────────────────────────────                              │          
        │                              │                              │          
  ╔═════╧══════════════════════════════╧════════╗                     │          
  ║Decrypt with Secret to get Provision Info 2 ░║                     │          
  ╚═════╤══════════════════════════════╤════════╝                     │          
   ╔════╧══════════════════════════════╧══════╗                       │          
   ║Update with Provision Info 3             ░║                       │          
   ║encrypted with Secret                     ║                       │          
   ║Provision Info 3 = new Provisioning Info  ║                       │          
   ╚════╤══════════════════════════════╤══════╝                       │          
        │ UpdateMailbox(encrypted info)│                              │          
        │ ─────────────────────────────>                              │          
        │                              │                              │          
        │              OK              │                              │          
        │ <─────────────────────────────                              │          
        │                              │                              │          
        │                              │       Push Notification      │          
        │                              │ ─────────────────────────────>          
        │                              │                              │          
        │                              │ ReadSecureContentFromMailbox │          
        │                              │ <─────────────────────────────          
        │                              │                              │          
        │                              │        encrypted info        │          
        │                              │ ─────────────────────────────>          
        │                              │                              │          
        │                         ╔════╧══════════════════════════════╧══════╗   
        │                         ║Decrypt with Secret for Provision Info 3 ░║   
        │                         ╚════╤══════════════════════════════╤══════╝   
        │                              │         DeleteMailbox        │          
        │                              │ <─────────────────────────────          
        │                              │                              │          
        │                              │              OK              │          
        │                              │ ─────────────────────────────>          
        │                              │                              │          
        │                          ╔═══╧══════════════════════════════╧════╗     
        │                          ║Provision or Register credentials     ░║     
     ┌──┴───┐                      ╚═══════════════════════════════════════╝     
     │Sender│                       │Relay│                       │Receiver│     
     └──────┘                       └─────┘                       └────────┘     
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="provisioning-information-structure">
        <name>Provisioning Information Structure</name>
        <t>The Provisioning Information is the data transfered via the Relay Server between the Sender device and Receiver device. Each use case defines its own specalized Provisioning Information format, but all formats must at least adhear to the following structure. Formats are free to define new top level keys, so clients shouldn't be surprised if a message of an unexpected format has specialized top level keys.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Key</th>
              <th align="left">Type</th>
              <th align="left">Required</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">format</td>
              <td align="left">String</td>
              <td align="left">Yes</td>
              <td align="left">The Provisioning Information format that the message follows. This is used by the Sender device and Receiver device to know how to parse the message.</td>
            </tr>
            <tr>
              <td align="left">content</td>
              <td align="left">Dictionary</td>
              <td align="left">Yes</td>
              <td align="left">A dictionary of content to be used for the credential transfer. See each format's specification for exact fields.</td>
            </tr>
          </tbody>
        </table>
        <section anchor="provisioning-information-format">
          <name>Provisioning Information Format</name>
          <t>Each Provisioning Information format must have the message structure defined in an external specification.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Format Type</th>
                <th align="left">Spec Link</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">digitalwallet.carkey.ccc</td>
                <td align="left">
                  <xref target="CCC-Digital-Key-30"/></td>
                <td align="left">A digital wallet Provisioning Information for sharing a car key that follows the Car Connectivity Consortium specification.</td>
              </tr>
              <tr>
                <td align="left">digitalwallet.generic.authorizationToken</td>
                <td align="left">
                  <xref target="ISO-18013-5"/></td>
                <td align="left">A digital wallet Provisioning Information for sharing a generic pass that relies solely on an authorization token.</td>
              </tr>
            </tbody>
          </table>
          <figure anchor="provisioning-info-format">
            <name>Provisioning Information format</name>
            <artwork><![CDATA[
{
   "format" : "digitalwallet.carkey.ccc",
   "content": {
      // Format specific fields
   }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="provisioning-information-encryption">
          <name>Provisioning Information Encryption</name>
          <t>Provisioning Information will be stored on the Relay Server encrypted. The Secret used to encrypt the Provisioning Information should be given to the Receiver Device via a "Share URL" (a URL link to a mailbox). The encrypted payload should be a data structure having the following key-value pairs:</t>
          <ul spacing="normal">
            <li>"type" (String, Required) - the encryption algorithm and mode used.</li>
            <li>"data" (String, Required) - Base64 encoded binary value of the encrypted Provisioning Information, aka the ciphertext.</li>
          </ul>
          <t>Please refer to <xref target="RFC5116"/> for the details of the encryption algorithm.</t>
          <t>The following algorithms and modes are mandatory to implement:</t>
          <ul spacing="normal">
            <li>"AEAD_AES_128_GCM": AES symmetric encryption algorithm with key length 128 bits, in GCM mode with no padding.  Initialization Vector (IV) has the length of 96 bits randomly generated and tag length of 128 bits.</li>
            <li>"AEAD_AES_256_GCM": AES symmetric encryption algorithm with key length 256 bits, in GCM mode with no padding.  Initialization Vector (IV) has the length of 96 bits randomly generated and tag length of 128 bits.</li>
          </ul>
          <figure anchor="secure-payload-format">
            <name>Secure Payload Format example</name>
            <artwork><![CDATA[
{
    "type" : "AEAD_AES_128_GCM",
    "data" : "IV  ciphertext  tag"
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="share-url">
        <name>Share URL</name>
        <t>A "Share URL" is the url a Sender device sends to the Receiver device allowing it to retrieve the Provisioning Information stored on the Relay Server. A Share URL is made up of the following fields:</t>
        <figure anchor="share-url-example">
          <name>Share URL example</name>
          <artwork><![CDATA[
https://{RelayServerHost}/v{ApiVersion}/m/{MailboxIdentifier}?v={CredentialVertical}#{Secret}
]]></artwork>
        </figure>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Location</th>
              <th align="left">Required</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">RelayServerHost</td>
              <td align="left">URL Host</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">ApiVersion</td>
              <td align="left">URI Path Parameter</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">MailboxIdentifier</td>
              <td align="left">URI Path Parameter</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">CredentialVertical</td>
              <td align="left">Query Parameter</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">Secret</td>
              <td align="left">Fragment</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <section anchor="credential-vertical-in-share-url">
          <name>Credential Vertical in Share URL</name>
          <t>When a user interacts with a share URL on a Receiver device it can be helpful to know what Credential Vertical this share is for. This is particularly important if the Receiver device has multiple applications that can handle a share URL. For example, a Receiver device might want to handle a general access share in their wallet app, but handle car key shares in a specific car application.</t>
          <t>To properly route a share URL, the sender can include the Credential Vertical in the share URL as a query parameter. The Credential Vertical can't be included in the encrypted payload because the Receiver device might need to open the right application before retrieving the secure payload. The Credential Vertical query parameter uses the "v" key and supports the below types. If no Credential Vertical is provided it will be assumed that this is a general access share URL.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Vertical</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">General Access</td>
                <td align="left">a or <em>None</em></td>
              </tr>
              <tr>
                <td align="left">Home Key</td>
                <td align="left">h</td>
              </tr>
              <tr>
                <td align="left">Car Key</td>
                <td align="left">c</td>
              </tr>
            </tbody>
          </table>
          <figure anchor="car-key-share-url-example">
            <name>Car Key Share URL example</name>
            <artwork><![CDATA[
https://relayserver.example.com/v1/m/2bba630e-519b-11ec-bf63-0242ac130002?v=c#hXlr6aRC7KgJpOLTNZaLsw==
]]></artwork>
          </figure>
          <t>The Credential Vertical query parameter can be added to the share URL by the Sender device when constructing the full share URL that is going to be sent to the Receiver device.</t>
        </section>
      </section>
    </section>
    <section anchor="api-connection-details">
      <name>API connection details</name>
      <t>The Relay server API endpoint <bcp14>MUST</bcp14> be accessed over HTTP using an https URI <xref target="RFC2818"/> and <bcp14>SHOULD</bcp14> use the default https port.
Request and response bodies <bcp14>SHALL</bcp14> be formatted as either JSON or HTML (based on the API endpoint). The communication protocol used for all interfaces <bcp14>SHALL</bcp14> be HTTPs.
All Strings <bcp14>SHOULD</bcp14> be UTF-8 encoded (Unicode Normalization Form C (NFC)).
An API version <bcp14>SHOULD</bcp14> be included in the URI for all interfaces. The version at the time of this document's latest update is v1. The version <bcp14>SHALL</bcp14> be incremented by 1 for major API changes or backward incompatible iterations on existing APIs.</t>
    </section>
    <section anchor="http-headers">
      <name>HTTP Headers</name>
      <section anchor="mailbox-request-id">
        <name>Mailbox-Request-ID</name>
        <t>All requests to and from Relay server will have an HTTP header "Mailbox-Request-ID". The corresponding response to the API will have the same HTTP header, which <bcp14>SHALL</bcp14> echo the value in the request header. This is used to identify the request associated to the response for a particular API request and response pair. The value <bcp14>SHOULD</bcp14> be a UUID <xref target="RFC4122"/>.
The request originator <bcp14>SHALL</bcp14> match the value of this header in the response with the one sent in the request. If response is not received, caller may retry sending the request with the same value of "Mailbox-Request-ID".
Relay server <bcp14>SHOULD</bcp14> store the value of the last successfully processed "Mailbox-Request-ID" for each device based on the caller's Device Claim.
A key-value pair of "Device Claim" to "Mailbox-Request-ID" is suggested to store the last successfully processed request for each device.
In case of receiving a request with duplicated "Mailbox-Request-ID", Relay <bcp14>SHOULD</bcp14> respond to the caller with status code 201, ignoring the duplicate request body content.</t>
      </section>
      <section anchor="mailbox-device-claim">
        <name>Mailbox-Device-Claim</name>
        <t>All requests to CreateMailbox, ReadSecureContentFromMailbox and UpdateMailbox endpoints <bcp14>MUST</bcp14> contain this header. The value represents "Device Claim" (refer to Terminology)</t>
      </section>
      <section anchor="mailbox-device-attestation">
        <name>Mailbox-Device-Attestation</name>
        <t>Request to CreateMailbox <bcp14>MAY</bcp14> contain this header. The value represents a Device Attestation (String, Optional) - optional remote OEM device proprietary attestation data</t>
      </section>
    </section>
    <section anchor="http-access-methods">
      <name>HTTP access methods</name>
      <section anchor="createmailbox">
        <name>CreateMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to create a mailbox and store secure data content to it (encrypted data specific to a provisioning partner). MailboxIdentifier is created by the Relay server as an UUID <xref target="RFC4122"/>, using cryptographic entropy. A URL to the created mailbox to be returned to the caller in the response.</t>
        <section anchor="endpoint">
          <name>Endpoint</name>
          <t>POST  /{version}/m</t>
        </section>
        <section anchor="request-parameters">
          <name>Request Parameters:</name>
          <t>Path parameters</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
          </ul>
          <t>Header parameters</t>
          <ul spacing="normal">
            <li>Mailbox-Device-Attestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>Mailbox-Device-Claim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="consumes">
          <name>Consumes</name>
          <t>This API call consumes the following media types via the Content-Type request header: <tt>application/json</tt></t>
        </section>
        <section anchor="produces">
          <name>Produces</name>
          <t>This API call produces the following media types via the Content-Type response header: <tt>application/json</tt></t>
        </section>
        <section anchor="request-body">
          <name>Request body</name>
          <t>Request body is a complex structure, including the following fields:</t>
          <ul spacing="normal">
            <li>
              <t>payload (Object, Required) - for the purposes of Tigress API, this is a data structure, describing Provisioning Information specific to Credential Provider. It consists of the following 2 key-value pairs:
              </t>
              <ol spacing="normal" type="1"><li>"type": "AEAD_AES_128_GCM" (refer to Encryption Format section).</li>
                <li>"data": BASE64-encoded binary value of ciphertext.</li>
              </ol>
            </li>
            <li>
              <t>displayInformation (Object, Required) - for the purposes of the Tigress API, this is a data structure. It allows an application running on a receiving device to build a visual representation of the credential to show to user.
The data structure contains the following fields:
              </t>
              <ol spacing="normal" type="1"><li>title (String, Required) - the title of the credential (e.g. "Car Key")</li>
                <li>description (String, Required) - a brief description of the credential (e.g. "a key to my personal car")</li>
                <li>imageURL (String, Required) - a link to a picture representing the credential visually.</li>
              </ol>
            </li>
            <li>
              <t>notificationToken (Object, Optional) - optional notification token used to notify an appropriate remote device that the mailbox data has been updated. Data structure includes the following (if notificationToken is provided it should include both fields):
              </t>
              <ol spacing="normal" type="1"><li>type (String, Required) - notification token name. Used to define which Push Notification System to be used to notify appropriate remote device of a mailbox data update. (E.g. "com.apple.apns" for APNS)</li>
                <li>tokenData (String, Required) - notification token data (data encoded based on specific device OEM notification service rules - e.g. HEX-encoded or Base64-encoded) - application-specific - refer to appropriate Push Notification System specification.</li>
              </ol>
            </li>
            <li>
              <t>mailboxConfiguration (Object, Optional) - optional mailbox configuration, defines access rights to the mailbox, mailbox expiration time. Required at the time of the mailbox creation. OEM device may provide this data in the request, Relay server shall define a default configuration, if it is not provided in the incoming request. Data structure includes the following:
              </t>
              <ol spacing="normal" type="1"><li>accessRights (String, Optional) - optional access rights to the mailbox for Sender and  Receiver devices. Default access to the mailbox is Read and Delete.
Value is defined as a combination of the following values: "R" - for read access, "W" - for write access, "D" - for delete access. Example" "RD" - allows to read from the mailbox and delete it.</li>
                <li>expiration (String, Required) - Mailbox expiration time in "YYYY-MM-DDThh:mm:ssZ" format (UTC time zone) <xref target="RFC3339"/>. Mailbox has limited livetime. Once expired, it <bcp14>SHALL</bcp14> be deleted - refer to DeleteMailbox endpoint. Relay server <bcp14>SHOULD</bcp14> periodically check for expired mailboxes and delete them.</li>
              </ol>
            </li>
          </ul>
          <figure anchor="apple-push-token">
            <name>Apple Push Token Example</name>
            <artwork><![CDATA[
{
   "notificationToken": {
        "type":"com.apple.apns",
        "tokenData":"APNS1234...QW"
    }
}
]]></artwork>
          </figure>
          <figure anchor="create-mailbox-request">
            <name>Create Mailbox Request Example</name>
            <artwork><![CDATA[
{
    "displayInformation" : {
        "title" : "Hotel Pass",
        "description" : "Some Hotel Pass",
        "imageURL" : "https://example.com/sharingImage"
    },
    "payload" : {
        "type": "AEAD_AES_128_GCM",
        "data": "FDEC...987654321"
    },
    "notificationToken" : {
        "type" : "com.apple.apns",
        "tokenData" : “APNS...1234"
    },
    "mailboxConfiguration" : {
        "accessRights" : "RWD",
        "expiration" : "2022-02-08T14:57:22Z"
    }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="responses">
          <name>Responses</name>
          <t><tt>200</tt>
Status: “200” (OK)</t>
          <t>ResponseBody:</t>
          <ul spacing="normal">
            <li>urlLink (String, Required) - a full URL link to the mailbox including fully qualified domain name and mailbox Identifier. Refer to "Share URL" section for details.</li>
            <li>isPushNotificationSupported (boolean, Required) - indicates whether push notification is supported or not. The device uses this field to decide whether it should listen on the push topic or do long-polling.</li>
          </ul>
          <figure anchor="create-mailbox-response">
            <name>Create Mailbox Response Example</name>
            <artwork><![CDATA[
{
    "urlLink":"https://relayserver.example.com/m/12345678-9...A-BCD",
    "isPushNotificationSupported":true
}
]]></artwork>
          </figure>
          <t><tt>201</tt>
Status: “201” (Created) - response to a duplicated request (duplicated "Mailbox-Request-ID"). Relay server <bcp14>SHALL</bcp14> respond to duplicated requests with 201 without creating a new mailbox. "Mailbox-Request-ID" passed in the first CreateMailbox request's header <bcp14>SHOULD</bcp14> be stored by the Relay server and compared to the same value in the subsequent requests to identify duplicated requests. If duplicate is found, Relay <bcp14>SHALL</bcp14> not create a new mailbox, but respond with 201 instead. The value of "Mailbox-Request-ID" of the last successfully completed request <bcp14>SHOULD</bcp14> be stored based on the Device Claim passed by the caller.</t>
          <t><tt>400</tt>
Bad Request - invalid request has been passed (can not parse or required fields missing).</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to create a mailbox. E.g. a device presented an invalid device claim or device attestation.</t>
        </section>
      </section>
      <section anchor="updatemailbox">
        <name>UpdateMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to update secure data content in an existing mailbox (encrypted data specific to a Provisioning Partner). The update effectively overwrites the secure payload previously stored in the mailbox.</t>
        <section anchor="endpoint-1">
          <name>Endpoint</name>
          <t>PUT  /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-1">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>Mailbox-Device-Attestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>Mailbox-Device-Claim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="consumes-1">
          <name>Consumes</name>
          <t>This API call consumes the following media types via the Content-Type request header: <tt>application/json</tt></t>
        </section>
        <section anchor="produces-1">
          <name>Produces</name>
          <t>This API call produces following media types via the Content-Type request header: <tt>application/json</tt></t>
        </section>
        <section anchor="request-body-1">
          <name>Request body</name>
          <t>Request body is a complex structure, including the following fields:</t>
          <ul spacing="normal">
            <li>
              <t>payload (Object, Required) - for the purposes of Tigress API, this is a data structure, describing Provisioning Information specific to Credential Provider. It consists of the following 2 key-value pairs:
              </t>
              <ol spacing="normal" type="1"><li>"type": "AEAD_AES_128_GCM" (refer to Encryption Format section).</li>
                <li>"data": BASE64-encoded binary value of ciphertext.</li>
              </ol>
            </li>
            <li>
              <t>notificationToken (Object, Optional) - optional notification token used to notify an appropriate remote device that the mailbox data has been updated. Data structure includes the following (if notificationToken is provided it should include both fields):
              </t>
              <ol spacing="normal" type="1"><li>type (String, Required) - notification token name. Used to define which Push Notification System to be used to notify appropriate remote device of a mailbox data update. (E.g. "com.apple.apns" for APNS)</li>
                <li>tokenData (String, Required) - notification token data (data encoded based on specific device OEM notification service rules - e.g. HEX-encoded or Base64-encoded) - application-specific - refer to appropriate Push Notification System specification.</li>
              </ol>
            </li>
          </ul>
          <figure anchor="update-mailbox-request">
            <name>Update Mailbox Request Example</name>
            <artwork><![CDATA[
{
     "payload" : {
        "type": "AEAD_AES_128_GCM",
        "data": "FDEC...987654321"
    },
    "notificationToken":{
        "type" : "com.apple.apns",
        "tokenData" : “APNS...1234"
    }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="responses-1">
          <name>Responses</name>
          <t>ResponseBody:</t>
          <ul spacing="normal">
            <li>isPushNotificationSupported (boolean, Required) - indicates whether push notification is supported or not. The device uses this field to decide whether it should listen on the push topic or do long-polling.</li>
          </ul>
          <figure anchor="update-mailbox-response">
            <name>Create Mailbox Response Example</name>
            <artwork><![CDATA[
{
    "isPushNotificationSupported":true
}
]]></artwork>
          </figure>
          <t><tt>200</tt>
Status: “200” (OK)</t>
          <t><tt>201</tt>
Status: “201” (Created) - response to a duplicate request (duplicate "Mailbox-Request-ID"). Relay server <bcp14>SHALL</bcp14> respond to duplicate requests with 201 without performing mailbox update. "Mailbox-Request-ID" passed in the first UpdateMailbox request's header <bcp14>SHALL</bcp14> be stored by the Relay server and compared to the same value in the subsequent requests to identify duplicate requests. If duplicate is found, Relay <bcp14>SHALL</bcp14> not perform mailbox update, but respond with 201 instead.
The value of "Mailbox-Request-ID" of the last successfully completed request <bcp14>SHALL</bcp14> be stored based on the Device Claim passed by the caller.</t>
          <t><tt>400</tt>
Bad Request - invalid request has been passed (can not parse or required fields missing).</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to update the mailbox. E.g. a device presented the incorrect Device Claim.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found.</t>
        </section>
      </section>
      <section anchor="deletemailbox">
        <name>DeleteMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to close the existing mailbox after it served its purpose. Receiver or Sender device needs to present a Device Claim in order to close the mailbox.</t>
        <section anchor="endpoint-2">
          <name>Endpoint</name>
          <t>DELETE /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-2">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>Mailbox-Device-Attestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>Mailbox-Device-Claim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="responses-2">
          <name>Responses</name>
          <t><tt>200</tt>
Status: “200” (OK)</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to delete a mailbox. E.g. a device presented the incorrect Device Claim.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found. Relay server may respond with 404 if the Mailbox Identifier passed by the caller is invalid or mailbox has already been deleted (as a result of duplicate DeleteMailbox request).</t>
        </section>
      </section>
      <section anchor="readdisplayinformationfrommailbox">
        <name>ReadDisplayInformationFromMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to retrieve public display information content from a mailbox. Display Information shall be returned in OpenGraph format (please refer to https://ogp.me for details).
OpenGraph-formatted display information is required to display a preview of credential in a messaging application, e.g. iMessage or WhatsApp.</t>
        <section anchor="endpoint-3">
          <name>Endpoint</name>
          <t>GET /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-3">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required)- the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="produces-2">
          <name>Produces</name>
          <t>This API call produces the following media types via the Content-Type response header: <tt>text/html</tt></t>
        </section>
        <section anchor="responses-3">
          <name>Responses</name>
          <t><tt>200</tt>
Status: “200” (OK)</t>
          <t>ResponseBody :</t>
          <ul spacing="normal">
            <li>displayInformation (Object, Required) - visual representation of digital credential in OpenGraph format (please refer to https://ogp.me for details).</li>
          </ul>
          <figure anchor="read-display-information-response">
            <name>Read Display Information Response Example</name>
            <artwork><![CDATA[
    "<html prefix="og: https://ogp.me/ns#">
     <head>
     <title>Hotel Pass</title>
     <meta property="og:title" content="Hotel Pass" />
     <meta property="og:type" content="image/jpeg" />
     <meta property="og:description" content="Some Hotel Pass" />
     <meta property="og:url" content="share://" />
     <meta property="og:image" content="https://example.com/photos/photo.jpg" />
     <meta property="og:image:width" content="612" />
     <meta property="og:image:height" content="408" /></head>
     </html>"
]]></artwork>
          </figure>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found.</t>
        </section>
      </section>
      <section anchor="readsecurecontentfrommailbox">
        <name>ReadSecureContentFromMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to retrieve secure payload content from a mailbox (encrypted data specific to a Provisioning Information Provider).</t>
        <section anchor="endpoint-4">
          <name>Endpoint</name>
          <t>POST /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-4">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>Mailbox-Device-Attestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>MAilbox-Device-Claim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="produces-3">
          <name>Produces</name>
          <t>This API call produces the following media types via the Content-Type response header: <tt>application/json</tt></t>
        </section>
        <section anchor="responses-4">
          <name>Responses</name>
          <t><tt>200</tt>
Status: “200” (OK)</t>
          <t>ResponseBody :</t>
          <ul spacing="normal">
            <li>payload (String, Required) - for the purposes of Tigress API, this is a JSON metadata blob, describing Provisioning Information specific to Credential Provider.</li>
            <li>displayInformation (Object, Required) - for the purposes of the Tigress API, this is a JSON data blob. It allows an application running on a receiving device to build a visual representation of the credential to show to user. Specific to Credential Provider.</li>
            <li>expiration (String, Required) - the date that the mailbox will expire. The mailbox expiration time is set during mailbox creation. Expiration time should be a complete <xref target="RFC3339"/> date string in "YYYY-MM-DDThh:mm:ssZ" format (UTC time zone), and can be used to allow receiving clients to show when a share will expire.</li>
          </ul>
          <figure anchor="read-secure-content-response">
            <name>Read Secure Content Response Example</name>
            <artwork><![CDATA[
{
    “displayInformation" : {
        "title" : "Hotel Pass",
        "description" : "Some Hotel Pass",
        "imageURL" : "https://example.com/sharingImage"
    },
    "payload" : {
        "type": "AEAD_AES_128_GCM",
        "data": "FDEC...987654321"
    },
    "expiration": "2021-11-03T20:32:34Z"
}
]]></artwork>
          </figure>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to read the secure content of the mailbox. E.g. a device presented the incorrect Device Claim.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found.</t>
        </section>
      </section>
      <section anchor="relinquishmailbox">
        <name>RelinquishMailbox</name>
        <t>An application running on a remote device can invoke this API on Relay Server to relinquish their ownership of the mailbox. Receiver device needs to present the currently established Receiver Device Claim in order to relinquish their ownership of the mailbox. Once relinquished, the mailbox can be bound to a different Receiver device that presents its Device Claim in a ReadSecureContentFromMailbox call.</t>
        <section anchor="endpoint-5">
          <name>Endpoint</name>
          <t>PATCH /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-5">
          <name>Request Parameters</name>
          <t>Path parameters:</t>
          <ul spacing="normal">
            <li>version (String, Required) - the version of the API. At the time of writing this document, "v1".</li>
            <li>mailboxIdentifier(String, Required) - MailboxIdentifier (refer to Terminology).</li>
          </ul>
          <t>Header parameters:</t>
          <ul spacing="normal">
            <li>Mailbox-Device-Attestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>Mailbox-Device-Claim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="responses-5">
          <name>Responses</name>
          <t><tt>200</tt>
Status: “200” (OK)</t>
          <t><tt>201</tt>
Status: “201” (Created) - response to a duplicate request (duplicate "Mailbox-Request-ID"). Relay server <bcp14>SHALL</bcp14> respond to duplicate requests with 201 without performing mailbox relinquish. "Mailbox-Request-ID" passed in the first RelinquishMailbox request's header <bcp14>SHALL</bcp14> be stored by the Relay server and compared to the same value in the subsequent requests to identify duplicate requests. If duplicate is found, Relay <bcp14>SHALL</bcp14> not perform mailbox relinquish, but respond with 201 instead.
The value of "Mailbox-Request-ID" of the last successfully completed request <bcp14>SHALL</bcp14> be stored based on the Device Claim passed by the caller.</t>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to relinquish a mailbox. E.g. a device presented the incorrect Device Claim, or the device is not bound to the mailbox.</t>
          <t><tt>404</tt>
Not Found - mailbox with provided mailboxIdentifier not found. Relay server may respond with 404 if the Mailbox Identifier passed by the caller is invalid.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The following threats and mitigations have been considered:</t>
      <ul spacing="normal">
        <li>
          <t>Sender shares with the wrong receiver
          </t>
          <ul spacing="normal">
            <li>Sender <bcp14>SHOULD</bcp14> be encouraged to share Secret over a channel allowing authentication of the receiver (e.g. voice).</li>
            <li>Provisioning Partners <bcp14>SHALL</bcp14> allow senders to cancel existing shares.</li>
          </ul>
        </li>
        <li>
          <t>Malicious receiver forwards the share to 3rd party without redeeming it or the Receiver's device is compromised.
          </t>
          <ul spacing="normal">
            <li>No mitigation, the Sender <bcp14>SHOULD</bcp14> only share with receivers they trust.</li>
          </ul>
        </li>
        <li>
          <t>Malicious receiver attempts re-use share
          </t>
          <ul spacing="normal">
            <li>Provisioning Partners <bcp14>SHALL</bcp14> ensure that the Provisioning Information of a share can only be redeemed once.</li>
          </ul>
        </li>
        <li>
          <t>Share URL accidental disclosure. (e.g. share URL sent as a message which gets displayed on a locked screen)
          </t>
          <ul spacing="normal">
            <li>Knowledge of Secret is required to access Provisioning Information and it <bcp14>SHOULD</bcp14> have been sent in a separate channel.</li>
            <li>Device Claim is required (if sender and receiver have already both contacted the Relay server)</li>
          </ul>
        </li>
        <li>
          <t>Network attacks
          </t>
          <ul spacing="normal">
            <li>Machine-in-the-middle:
Relay server <bcp14>SHALL</bcp14> only allow TLS connections.
URLs displayed to user <bcp14>SHOULD</bcp14> include the https scheme.</li>
            <li>MailboxIdentifier guessing:
the MailboxIdentifier is a version 4 UUID <xref target="RFC4122"/> which <bcp14>SHOULD</bcp14> contain 122-bits of cryptographic entropy, making brute-force attacks impractical.</li>
          </ul>
        </li>
        <li>
          <t>Risk of hosting malicious or untrusted scripts by relay server preview page (ReadDisplayInformationFromMailbox)
          </t>
          <ul spacing="normal">
            <li>Relay server should either not allow hosting a third party JavaScripts on a preview page or implement a policy and utilize tools to maintain the trust of such scripts (e.g. force client to verify the script against a good known hash of it).</li>
          </ul>
        </li>
      </ul>
      <section anchor="senderreceiver-privacy">
        <name>Sender/Receiver privacy</name>
        <ul spacing="normal">
          <li>At no time Relay server <bcp14>SHALL</bcp14> store or track the identities of both Sender and Receiver devices.</li>
          <li>The value of the Notification Token shall not contain information allowing the identification of the device providing it. It <bcp14>SHOULD</bcp14> also be different for every new share to prevent the Relay server from correlating different sharing.</li>
          <li>Notification token <bcp14>SHOULD</bcp14> only inform the corresponding device that there has been a data update on the mailbox associated to it (by Device Claim). Each device <bcp14>SHOULD</bcp14> keep track of all mailboxes associated with it and make read calls to appropriate mailboxes.</li>
          <li>Both Sender and Receiver devices <bcp14>SHOULD</bcp14> store the URL of the Relay server they use for an active act of credential transfer.</li>
          <li>The value of Mailbox-Device-Attestation header parameter <bcp14>SHALL</bcp14> not contain information allowing the identification of the device providing it. It <bcp14>SHOULD</bcp14> also be different for every new share to prevent the Relay server from correlating different sharing.</li>
          <li>Display Information is not encrypted, therefore, it <bcp14>SHOULD</bcp14> not contain any information allowing to identify Sender or Receiver devices.</li>
        </ul>
      </section>
      <section anchor="credentials-confidentiality-and-integrity">
        <name>Credential's confidentiality and integrity</name>
        <ul spacing="normal">
          <li>Content of the mailbox <bcp14>SHALL</bcp14> be only visible to devices having Secret.</li>
          <li>It is recommended to send URL to the mailbox and the Secret over different channels (out-of-band) from Sender device to Receiver device (e.g. send URL over SMS and Secret over iMessage).</li>
          <li>Relay server <bcp14>MUST</bcp14> not receive the Secret with the MailboxIdentifier at any time.</li>
          <li>Content of the mailbox <bcp14>MUST</bcp14> guaranty its integrity with cryptographic checksum (e.g. MAC, AES-GCM tag).</li>
          <li>Relay server <bcp14>SHALL</bcp14> periodically check and delete expired mailboxes ( refer to expiration parameter in the CreateMailbox request).</li>
          <li>If the Sender device sends both URL and the Secret over the same channel as a single URL,
the Sender <bcp14>MUST</bcp14> append the Secret as URI fragment <xref target="RFC3986"/>, so that the resulting URL shall look as in the example below. Receiver device, upon receipt of such URL, <bcp14>MUST</bcp14> remove the Fragment (Secret) before calling the Relay server API.</li>
        </ul>
        <figure anchor="link-with-fragment">
          <name>Example of URL with Secret as URI Fragment</name>
          <artwork><![CDATA[
“https://relayserver.example.com/v1/m/{mailboxIdentifier}#{Secret}”
]]></artwork>
        </figure>
      </section>
      <section anchor="second-factor-authentication-for-receiver-credential-provisioning">
        <name>Second factor authentication for Receiver credential provisioning</name>
        <ul spacing="normal">
          <li>Provisioning Partner shall require an additional security confirmation (PIN code) from Receiver Device at the time of credential provisioning.</li>
          <li>PIN code shall be generated by the Sender Device at the time when it creates a new Mailbox with Provisioning Information on a Relay Server.</li>
          <li>PIN code shall be sent from Sender device to Receiver device in a secure way (preferrably over encrypted channel) out-of-band with the Mailbox URL and Secret</li>
          <li>If Sender device can not send the PIN code over secure channel, it may include it into encrypted Payload stored on the relay server so that Receiver device can decrypt it and use to get Provisioning Information from Provisioning Partner.</li>
          <li>Provisioning Partner shall limit the number of PIN code entry attempts at the time when Receiver device calls it in order to receive Provisioning Information.</li>
          <li>The way PIN code is transferred between Sender device and Receiver device is defined by specific implementation and out of scope of this document.</li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers new headers, "Mailbox-Request-ID", "Mailbox-Device-Claim" and "Mailbox-Device-Attestation"
in the "Permanent Message Header Field Names" &lt;<eref target="https://www.iana.org/assignments/message-headers"/>&gt;.</t>
      <figure anchor="iana-header-type-table">
        <name>Registered HTTP Header</name>
        <artwork><![CDATA[
    +----------------------------+----------+--------+---------------+
    | Header Field Name          | Protocol | Status |   Reference   |
    +----------------------------+----------+--------+---------------+
    | Mailbox-Request-ID         |   http   |  std   | This document |
    | Mailbox-Device-Claim       |   http   |  std   | This document |
    | Mailbox-Device-Attestation |   http   |  std   | This document |
    +----------------------------+----------+--------+---------------+
]]></artwork>
      </figure>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="CCC-Digital-Key-30" target="https://carconnectivity.org/download-digital-key-3-specification/">
          <front>
            <title>Digital Key Release 3</title>
            <author>
              <organization>Car Connectivity Consortium</organization>
            </author>
            <date year="2022" month="July"/>
          </front>
        </reference>
        <reference anchor="ISO-18013-5" target="https://www.iso.org/standard/69084.html">
          <front>
            <title>Personal identification — ISO-compliant driving licence — Part 5: Mobile driving licence (mDL) application</title>
            <author>
              <organization>Cards and security devices for personal identification</organization>
            </author>
            <date year="2021" month="September"/>
          </front>
        </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author fullname="P. Leach" initials="P." surname="Leach">
              <organization/>
            </author>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <author fullname="R. Salz" initials="R." surname="Salz">
              <organization/>
            </author>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier).  A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group).  Information from earlier versions of the DCE specification have been incorporated into this document.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms.  The interface and registry can be used as an application-independent set of cryptoalgorithm suites.  This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne">
              <organization/>
            </author>
            <author fullname="C. Newman" initials="C." surname="Newman">
              <organization/>
            </author>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="Tigress-req-03" target="https://github.com/dimmyvi/tigress-requirements/">
          <front>
            <title>Tigress requirements</title>
            <author initials="D." surname="Vinokurov" fullname="Dmitry Vinokurov">
              <organization/>
            </author>
            <author initials="A." surname="Pelletier" fullname="Alex Pelletier">
              <organization/>
            </author>
            <author initials="C." surname="Astiz" fullname="Casey Astiz">
              <organization/>
            </author>
            <author initials="B." surname="Lassey" fullname="Brad Lassey">
              <organization/>
            </author>
            <author initials="Y." surname="Karandikar" fullname="Yogesh Karandikar">
              <organization/>
            </author>
            <date year="2023" month="April"/>
          </front>
        </reference>
        <reference anchor="RFC2818">
          <front>
            <title>HTTP Over TLS</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="May" year="2000"/>
            <abstract>
              <t>This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2818"/>
          <seriesInfo name="DOI" value="10.17487/RFC2818"/>
        </reference>
      </references>
    </references>
    <?line 863?>

<section anchor="contributors">
      <name>Contributors</name>
      <t>The following people provided substantive contributions to this document:</t>
      <ul spacing="normal">
        <li>Ben Chester</li>
        <li>Casey Astiz</li>
        <li>Jean-Luc Giraud</li>
        <li>Yogesh Karandikar</li>
        <li>Alexey Bulgakov</li>
        <li>Tommy Pauly</li>
        <li>Crystal Qin</li>
        <li>Adam Bar-Niv</li>
        <li>Manuel Gerster</li>
        <li>Igor Gariev</li>
      </ul>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
iXeT9hdM/vzoHMxO8xR06v8Plm3UlGKwAAA=

-->

</rfc>
