<?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-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.2 -->
  <front>
    <title abbrev="Tigress">Transfer Digital Credentials Securely</title>
    <seriesInfo name="Internet-Draft" value="draft-art-tigress-01"/>
    <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="November" day="09"/>
    <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://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="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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
2Wmegk79/wGhtG0o6bgAAA==

-->

</rfc>
