<?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.13 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-secure-credential-transfer-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title abbrev="Secure Credential Transfer">Secure Credential Transfer</title>
    <seriesInfo name="Internet-Draft" value="draft-secure-credential-transfer-04"/>
    <author initials="D." surname="Vinokurov" fullname="Dmitry Vinokurov">
      <organization>Apple Inc</organization>
      <address>
        <email>dvinokurov@dezcom.org</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="July" day="09"/>
    <area>TODO</area>
    <workgroup>TODO Working Group</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/secure-credential-transfer"/>.</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 Secure Credential Transfer 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="device-claim">
        <name>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="device-attestation">
        <name>Device-Attestation</name>
        <t>Request to CreateMailbox <bcp14>MAY</bcp14> contain this header. The value represents a deviceAttestation (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>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (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 Secure Credential Transfer 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 Secure Credential Transfer 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 deviceClaim or deviceAttestation.</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>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (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 Secure Credential Transfer 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 deviceClaim.</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 deviceClaim 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>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (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 deviceClaim.</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>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (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 Secure Credential Transfer API, this is a JSON metadata blob, describing Provisioning Information specific to Credential Provider.</li>
            <li>displayInformation (Object, Required) - for the purposes of the Secure Credential Transfer 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 deviceClaim.</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 deviceClaim in order to relinquish their ownership of the mailbox. Once relinquished, the mailbox can be bound to a different Receiver device that presents its deviceClaim 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>deviceAttestation (String, Optional) - optional remote OEM device proprietary attestation data.</li>
            <li>deviceClaim (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 deviceClaim, 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 DeviceAttestation 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 a new header, "Mailbox-Request-ID",
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 |
    +--------------------+----------+--------+---------------+
]]></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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
DPSRLyr+2OkWtTiFNcQztr8zOqaEKxyh3Gk4RHeboRc0akHLZv+zuJ//C/3P
/2Uc0BadVeEtE3BjAw2oDnvaHYqjes97vH9+dO+u3xVuscMnQP1RvgDOZc90
bYTLWZtbIZ3wJeVggpWiQWsgVZYAFfWAd7BQJW15EXiBfZ7CDuunVD8Z/4t+
RFZsa+EyEar1TaLpURaLjP5uNsivmwBwlQ7tK+hv6hULq8B6e6eBNwLWNXE+
7Ow+0NcKzJfVfRHjIJPx7gw9yiZCIdMxWBV4XESMFoNbU0uxGpbRj8XJfecw
Ese7DRW1sunaQSlsoM0ferUUoiDezfqfrSJUqSciHmk10ec6wqQktmPDoXfo
LrJYzvVF3ogmLROoOdck1Kodm1T1hKljsyIPZJutuG2ZL968MvReyKwlA4mt
x2ZO6PkSlPu5nb5iYaoTTenEUo/4mJdUJ944IpLBy3X4iphgoeu/7D87PTcU
SqASFtedFg2zQf/fcCBt/hgeKvChlHa6QP0JX2RlrLCCGhH2k6P/NMwM4ONo
sn5ChFsxD98MYZVNshHUidpaZoffXuRoNVWbSi52m4FJdxMlmdzL9cKMA9O4
VuFoWIWfGk6civ6rknyW5oPWspCwdYDPtbsHruaaz+ioJBNjYPxwtQnBfqkq
MlebhDsmdw97T8SyX2sXmk3EWHrOSFqt7K1CKNGyVVClpYbdocxOuqm1j3Iy
FqkxJ7UOe1/pWoc6ASsQ/WYkpcCbkp9rVoJ8f94XMcqlzWjMgdf/Wj+WS1f0
80P9XKrt8AuqTUvuZeiQPtEl1ezqo/Y0rAJZUWF0BYvIWjf2STsx0pH4b+Cf
f3LiHx5ezGZ78/lenv+1rzPXNl5cHPCn36eJ2hT7586dOw+wmqjutr0oGh0N
NUXRgMJuUwutza/TUWdMhrLqjTWriVVpUg0JYaVB6TSCvTpHHVgfaFYKXyGP
xfJhw+HwL1/zTUp2shR14GPtUJ+ZqgQb+LovYmEso46qWIOV0dDU6TB9wYYV
u6OUhid0k9GzIHdAtdQN+uocIzftn2qVgr7TwRk7ICPZasf4ncxU8ipEwa/D
ZqnDLdkYDB8ruv3PD48OAIUP7n9675O7d3Z33P6bC9YyEoK9zprBd2Cq4rrB
gLh07lhtwqI2nM3XaNjnXx/aY9nl+eDt7vburr8N/3f/Yufu3ief7u3u/rVJ
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

-->

</rfc>
