<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-art-tigress-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title abbrev="Tigress">Transfer Digital Credentials Securely</title>
    <seriesInfo name="Internet-Draft" value="draft-art-tigress-00"/>
    <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="2022" month="September" day="30"/>
    <area>ART</area>
    <workgroup>TIGRESS</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/dimmyvi/tigress"/>.</t>
    </note>
  </front>
  <middle>
    <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>
      <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>
          <artwork><![CDATA[
                      Sender              Relay                          Receiver
                        |                   |                               |
    Create mailbox with | CreateMailbox     |                               |
    Provisioning Info   |——---------------->|                               |
    encrypted with      |<<-.-.-.-.-.-.-.-.-|                               |
    Secret              |URL link to mailbox|                               |
                        |                   |                               |
    Send URL link to    |                   |     URL link and Secret       |
    mailbox and Secret  |-------------------------------------------------->|
                        |                   |                               |
                        |                   | ReadSecureContentFromMailbox  |
                        |                   |<------------------------------|
                        |                   |-.-.-.-.-.-.-.-.-.-.-.-.-.-.->>| Decrypt with Secret to get Prov Info
                        |                   |         encrypted info        |
                        |                   |                               |
                        |                   |         DeleteMailbox         |
                        |                   |<------------------------------| Provision or Register credentials
                        |                   |-.-.-.-.-.-.-.-.-.-.-.-.-.-.->>|
                        |                   |              OK               |
]]></artwork>
        </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>
          <artwork><![CDATA[
                     Sender                       Relay                         Receiver
                       |                             |                             |
    Create and encrypt |       CreateMailbox         |                             |
    Provisioning Info 1|---------------------------->|                             |
    encrypted with     |<<-.-.-.-.-.-.-.-.-.-.-.-.-.-|                             |
    Secret             |    URL link to mailbox      |                             |
                       |                             |                             |
                       |                             |    URL link and Secret      |
    Send URL link to   |---------------------------------------------------------->|
    mailbox and Secret |                             |                             |
                       |                             |ReadSecureContentFromMailbox |
                       |                             |<----------------------------|
                       |                             |-.-.-.-.-.-.-.-.-.-.-.-.-.->>| Decrypt with Secret for ProvInfo1
                       |                             |       encrypted info        |
                       |                             |                             |
                       |                             |UpdateMailbox(encrypted info)| Update with ProvInfo2
                       |                             |<----------------------------| encrypted with Secret
                       |   Push Notification         |-.-.-.-.-.-.-.-.-.-.-.-.-.->>| ProvInfo2 = new Provisioning Info
                       |<............................|             OK              |
                       |                             |                             |
                       |ReadSecureContentFromMailbox |                             |
                       |---------------------------->|                             |
   Decrypt with Secret |<<-.-.-.-.-.-.-.-.-.-.-.-.-.-|                             |
   to get ProvInfo2    |       encrypted info        |                             |
                       |                             |                             |
                       |UpdateMailbox(encrypted info)|                             |
   Update with         |—-----------—--------------->|                             |
   ProvInfo3 encrypted |<<-.-.-.-.-.-.-.-.-.-.-.-.-.-|  Push Notification          |
   with Secret.        |             OK              |............................>|
   ProvInfo3 = new     |                             |                             |
   Provisioning Info   |                             |ReadSecureContentFromMailbox |
                       |                             |<----------------------------|
                       |                             |-.-.-.-.-.-.-.-.-.-.-.-.-.->>| Decrypt with Secret for ProvInfo3
                       |                             |        encrypted info       |
                       |                             |                             |
                       |                             |        DeleteMailbox        |
                       |                             |<----------------------------| Provision or Register credentials
                       |                             |-.-.-.-.-.-.-.-.-.-.-.-.-.->>|
                       |                             |             OK              |
]]></artwork>
        </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://global-carconnectivity.org/wp-content/uploads/2021/11/CCC_Digital_Key_Whitepaper_Approved.pdf">
          <front>
            <title>Digital Key – The Future of Vehicle Access</title>
            <author>
              <organization>Car Connectivity Consortium</organization>
            </author>
            <date year="2021" month="November"/>
          </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="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>
    <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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
vxVNMSUZ2RQqapobfcOK5BlzvG6Ei66UFbaffqX+J6qStlO0bUuSqY2jIImD
7odtQB+Ll1VvAI4VFycJxsud18kamRhrH65YIlnRsl+BRv75z39Kgkv9n8zc
+ceNO//pOXX06Hlv1nzmvKfeWPiZydLCvamJxPV7axANvvnh+/+C//Nr/x6t
12PNIchvHj70h7X/rdebkKP7xhaUgof1emt9s+azNthgL9iwrOzNkUDOtLg3
vaD26zf1Nbj536MPMdP1e3sOfInTdg6Y938O/MOQ5Tv29nD1VN+xtwYF2v97
BNR9yPyQ6VaWgIJUHDSg7XFL5FabIuI9xu9/1qXS/1wOecveblqqitGwW0nC
rRY7/3EX830we/Zl/T0Jh9d73kdGW/BRxvvRHJRZTmj8rH9OKniLQtF/W2kg
6GFoUUDsx78o/QNBbPWSG00kTK8TjBmoW+u4KLB1MpHoJDjBhlLiKuvojV0r
ngrWB9ohTjYjJ7QIrK4CZEWvBt1qkNZijgvGrvgY8AsdQxHjlfpb4aulIJ32
1GndpMKi9Dao8C9DWdZJi7tZBnc8qrCaT2rBlvVWbNC0b9hKDNyh28xKJyhJ
z5vQ1t0gzaAQeQbtdjWdVru9OWhzg/VhE1pOEdEKRid22eV9QtK70ZHHPZsA
uhuZtf1S+BnZMzbBrKQY1yY02JLoASnZ2F8wAuN8YJaqzdNf170ZzhWENezk
A51rpVdlXVozK2Mm0ro8VQoPZzeIRUjGcfQP1bROunIVdJ4loHV9m0QbPCp0
OvyQFopLjZgVpNN8GObuFEZOZ7XYvBXH1N5a9GUlS489gAQSIWvimthNYkSq
W+TUNk38aUru8hYQxApcZWi12Vnm32qD6yZ7a7XudMNb2+yyxIZp1rS91u20
aX3trFT5bzDBOg2wNvtrXUus0w6jZi2m2PrTb3uxutkH67TTOus09W5hm1XL
2GXx/RzTX2my3bbTlfbAbTu9hf2GTmPcZbi5dt6P6N7Rhvs5lvIFxeJl7TZc
gDffePya8aORsvtBFrjOhHg1Vg31DJMRHH3DvL1h2c1MvM/aNbPOYR8OV/xz
51+3CX/iZV+9R2/Z6WoWdXOnbfvtvSWN5XDhRfVu3IG3nP7qZrfs9IYdeGOn
9hY1L1xnbNM1u85iaYTesbB442J1b0ru1Fr5YTvmGvtm1ZZ7VIOU93Oz08YE
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
UrybtL9g8meHZ2B26qegU/8/Zycg4SS5AAA=

-->

</rfc>
