<?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-rfc2629 version 1.5.12 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-secure-credential-transfer-00" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title abbrev="Secure Credential Transfer">Secure Credential Transfer</title>
    <seriesInfo name="Internet-Draft" value="draft-secure-credential-transfer-00"/>
    <author initials="D." surname="Vinokurov" fullname="Dmitry Vinokurov">
      <organization>Apple Inc</organization>
      <address>
        <email>dvinokurov@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Byington" fullname="Matt Byington">
      <organization>Apple Inc</organization>
      <address>
        <email>mbyington@apple.com</email>
      </address>
    </author>
    <author initials="B." surname="Chester" fullname="Ben Chester">
      <organization>Apple Inc</organization>
      <address>
        <email>bchester@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="C." surname="Qin" fullname="Crystal Qin">
      <organization>Alpabet Inc</organization>
      <address>
        <email>crystalyq@goggle.com</email>
      </address>
    </author>
    <author initials="A." surname="Bar-Niv" fullname="Adam Bar-Niv">
      <organization>Alpabet Inc</organization>
      <address>
        <email>adambn@goggle.com</email>
      </address>
    </author>
    <author initials="N." surname="Sha" fullname="Nick Sha">
      <organization>Alpabet Inc</organization>
      <address>
        <email>nicksha@goggle.com</email>
      </address>
    </author>
    <date year="2021" month="October" day="21"/>
    <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.
Credentials 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" numbered="true" toc="default">
      <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" numbered="true" toc="default">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL</bcp14>
NOT", "<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" format="default"/> <xref target="RFC8174" format="default"/> 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 a 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>
      </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 should 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 shall be a UUID <xref target="RFC4122" format="default"/>.</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 - Sender device-defined unique identifier for the given mailbox. The value shall be a UUID <xref target="RFC4122" format="default"/>.</li>
      </ul>
    </section>
    <section anchor="credential-transfer-workflows" numbered="true" toc="default">
      <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 facilitates additional data transfers - there are multiple data transfers in this flow to prepare credential data for registering or provisioning by Receiver). 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 Sender device, created using a good source of entropy (preferrably 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 sends MailboxIdentifier to the Relay server as a part of CreateMailbox request.
Once a mailbox is created, it has limited time to live. When expired, the mailbox shall be deleted - refer to DeleteMailbox endpoint. TimeToLive mailbox configuration in the request is required to use with the CreateMailbox call (refer to mailboxConfiguration request parameter).</t>
      <t>Relay server builds a unique URL link to a mailbox (for example, "http://relayserver.com/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 now binds a given pair of Sender and Receiver devices to the mailbox by provided Sender and Receiver 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" numbered="true" toc="default">
        <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 name="" type="" align="left" alt=""><![CDATA[
                      Sender              Relay                          Receiver
                        |                   |                               |
    Create and encrypt  |                   |                               |
    Provisioning Info   |——---------------->|                               |
                        |    CreateMailbox  |                               |
                        |<------------------|                               |
                        |URL link to mailbox|                               |
    Send URL link       |                   |                               |
    and Secret          |-------------------------------------------------->|
                        |                   | ReadSecureContent FromMailbox |
                        |                   |<------------------------------|
                        |                   |                               | Decrypt Provisioning Info with Secret
                        |                   |<------------------------------|
                        |                   |     DeleteMailbox             | Provision credentials
]]></artwork>
        </figure>
      </section>
      <section anchor="stateful-workflow" numbered="true" toc="default">
        <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 thje Relay server stops any on-going credential transfer process.</t>
        <figure anchor="stateful-flow-image">
          <name>Sample stateful workflow</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                     Sender                       Relay                     Receiver
                        |                            |                            |
    Create and encrypt  |    CreateMailbox           |                            |
    Provisioning Info 1 |--------------------------->|                            |
                        |    encrypted info          |                            |
                        |<---------------------------|                            |
                        |   URL link to mailbox      |                            |
                        |                            |                            |
    Send URL link       |-------------------------------------------------------->|
    and Secret          |                            |ReadSecureContentFromMailbox|
                        |                            |                            |
                        |                            |<---------------------------| Decrypt w Secret
                        |                            |    encrypted info          |
                        |                            |    UpdateMailbox           | ProvInfo 2 = new Provisioning Info,
                        |                            |<---------------------------| encrypted info = 
                        |ReadSecureContentFromMailbox|       encrypted info       | encrypt(ProvInfo2)
                        |                            |                            | with Secret
    ProvInfo 3 = new    |--------------------------->|                            |
    ProvisioningInfo    |       encrypted info       |                            |
    encrypted info =    |                            |                            |
    encrypt(ProvInfo3)  |—-----------—-------------->|ReadSecureContentFromMailbox|
    with Secret         |    encrypted info          |                            |
                        |                            |<---------------------------| Decrypt(ProvInfo3)
                        |                            |  encrypted info            |     
                        |                            |<---------------------------| 
                        |                            |   DeleteMailbox            | Provision or Register credentials
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="api-connection-details" numbered="true" toc="default">
      <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" format="default"/> and <bcp14>SHOULD</bcp14> use the default https port. 
Request and response bodies shall be formatted as either JSON or HTML (based on the API endpoint). The communication protocol used for all interfaces shall 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 shall be incremented by 1 for major API changes or backward incompatible iterations on existing APIs.</t>
    </section>
    <section anchor="http-headers-mailbox-correlation-id" numbered="true" toc="default">
      <name>HTTP Headers: Mailbox-Correlation-ID</name>
      <t>All requests to and from Relay server will have an HTTP header "Mailbox-Correlation-ID". The corresponding response to the API will have the same HTTP header, which <bcp14>SHOULD</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" format="default"/>.
The request originator shall 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-Correlation-ID".
Relay server <bcp14>SHOULD</bcp14> store the value of the last successfully processed "Mailbox-Correlation-ID" for each device based on the caller's Device Claim.
A key-value pair of "Device Claim" to "Mailbox-Correlation-ID" is suggested to store the last successfully processed request for each device. 
In case of receiving a request with duplicated "Mailbox-Correlation-ID", Relay <bcp14>SHOULD</bcp14> respond to the caller with status code 201, ignoring the duplicate request body content.</t>
    </section>
    <section anchor="http-access-methods" numbered="true" toc="default">
      <name>HTTP access methods</name>
      <section anchor="createmailbox" numbered="true" toc="default">
        <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).</t>
        <section anchor="endpoint" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>POST  /{version}/m</t>
        </section>
        <section anchor="request-parameters" numbered="true" toc="default">
          <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 device-specific attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="consumes" numbered="true" toc="default">
          <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="request-body" numbered="true" toc="default">
          <name>Request body</name>
          <t>Request body is a complex structure, including the following fields:</t>
          <ul spacing="normal">
            <li>mailboxIdentifier (String, Required) - MailboxIdentifier (refer to Terminology).</li>
            <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": "AES128" (refer to Encryption Format section).</li>
                <li>"data": BASE64-encoded binary value of ciphertext.</li>
              </ol>
            </li>
            <li>
              <t>displayInformation (String, 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. 
The data structure contains the following fields:
              </t>
              <ol spacing="normal" type="1"><li>title - a String with the title of the credential (e.g. "Car Key")</li>
                <li>description - a String with brief description of the credential (e.g. "a key to my personal car")</li>
                <li>imageURL - 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:
              </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 (Hex or Base64 encoded based on the concrete implementation) - 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 expirationTime. Required at the time of the mailbox creation. 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>timeToLive (String, required) - Mailbox time to live in seconds. E.g. "8640" for 24 hours. Mailbox has a limited time to live. Once expired, it shall be deleted - refer to DeleteMailbox endpoint.</li>
              </ol>
            </li>
          </ul>
          <figure anchor="apple-push-token">
            <name>Apple Push Token Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
   "notificationToken": {
        "name":"com.apple.apns",
        "tokenData":"APNS1234...QW"
    }
}
]]></artwork>
          </figure>
          <figure anchor="create-mailbox-request">
            <name>Create Mailbox Request Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{    "mailboxIdentifier" : "12345678-9...A-BCD",
    "displayInformation" : {
        "title" : "Hotel Pass",
        "description" : "Some Hotel Pass",
        "imageURL" : "https://hotel.com/sharingImage" 
    },
    "payload" : {
        "type": "AES128",
        "data": "FDEC...987654321"
    },
    "notificationToken" : {
        "type" : "com.apple.apns",
        "tokenData" : “APNS...1234"
    },
    "mailboxConfiguration" : {
        "accessRights" : "RWD",
        "timeToLive" : "8640”
    }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="responses" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200</tt>
Status: "200" (OK)</t>
          <t>ResponseBody:
- urlLink (String, Required) - a full URL link to the mailbox including fully qualified domain name and mailbox Identifier.</t>
          <figure anchor="create-mailbox-response">
            <name>Create Mailbox Response Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    "urlLink":"relayserver.com/m/12345678-9...A-BCD"
}
]]></artwork>
          </figure>
          <t><tt>201</tt>
Status: "201" (Created) - response to a duplicated request (duplicated "Mailbox-Correlation-Id"). Relay server should respond to duplicated requests with 201 without creation of a new mailbox. "Mailbox-Correlation-Id" passed in the first CreateMailbox request's header shall 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 shall not create a new mailbox, but respond with 201 instead. The value of "Mailbox-Correlation-Id" of the last successfully completed request should be stored based on the Device Claim passed by the caller.</t>
          <t>ResponseBody:
- urlLink (String, Required) - a full URL link to the mailbox including fully qualified domain name and mailbox Identifier.</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 the incorrect deviceClaim or mailbox with the provided mailboxIdentifier already exists.</t>
        </section>
      </section>
      <section anchor="updatemailbox" numbered="true" toc="default">
        <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" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>PUT  /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-1" numbered="true" toc="default">
          <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 device-specific attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="consumes-1" numbered="true" toc="default">
          <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="request-body-1" numbered="true" toc="default">
          <name>Request body</name>
          <t>Request body is a complex structure, including the following fields:</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>notificationToken (Object, Required) - Mandatory notification token used to notify an appropriate remote device that the mailbox data has been updated. Data structure includes the following:
      - 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)
      - tokenData (String, Required) - notification token data (Hex or Base64 encoded based on the concrete implementation) - application-specific - refer to appropriate Push Notification System specification</li>
          </ul>
          <figure anchor="update-mailbox-request">
            <name>Update Mailbox Request Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
     "payload" : {
        "type": "AES128",
        "data": "FDEC...987654321"
    },
    "notificationToken":{
        "type" : "com.apple.apns",
        "tokenData" : “APNS...1234"
    }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="responses-1" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200 </tt>
Status: "200" (OK)</t>
          <t><tt>201</tt>
Status: "201" (Created) - response to a duplicated request (duplicated "Mailbox-Correlation-Id"). Relay server should respond to duplicted requests with 201 without performing mailbox update. "Mailbox-Correlation-Id" passed in the first UpdateMailbox request's header shall 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 shall not perform mailbox update, but respond with 201 instead.
The value of "Mailbox-Correlation-Id" of the last successfully completed request should 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" numbered="true" toc="default">
        <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" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>DELETE /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-2" numbered="true" toc="default">
          <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 device-specific attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="responses-2" numbered="true" toc="default">
          <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" numbered="true" toc="default">
        <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).</t>
        <section anchor="endpoint-3" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>GET /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-3" numbered="true" toc="default">
          <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="responses-3" numbered="true" toc="default">
          <name>Responses</name>
          <t><tt>200</tt>
Status: "200" (OK)</t>
          <t>ResponseBody :</t>
          <ul spacing="normal">
            <li>displayInformation (String, 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 name="" type="" align="left" alt=""><![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://website.com/photos/photo.jpg" />
     <meta property="og:image:width" content="612" />
     <meta property="og:image:height" content="408" /></head>
     </html>"
]]></artwork>
          </figure>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to create a 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="readsecurecontentfrommailbox" numbered="true" toc="default">
        <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" numbered="true" toc="default">
          <name>Endpoint</name>
          <t>POST /{version}/m/{mailboxIdentifier}</t>
        </section>
        <section anchor="request-parameters-4" numbered="true" toc="default">
          <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 device-specific attestation data.</li>
            <li>deviceClaim (String, UUID, Required) - Device Claim (refer to Terminology).</li>
          </ul>
        </section>
        <section anchor="responses-4" numbered="true" toc="default">
          <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 (String, 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>
          </ul>
          <figure anchor="read-secure-content-response">
            <name>Read Secure Content Response Example</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
{
    “displayInformation" : {
        "title" : "Hotel Pass",
        "description" : "Some Hotel Pass",
        "imageURL" : "https://hotel.com/sharingImage"
    },
    "payload" : {
        "type": "AES128",
        "data": "FDEC...987654321"
    }
}
]]></artwork>
          </figure>
          <t><tt>401</tt>
Unauthorized - calling device is not authorized to create a 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>
    <section anchor="encryption-format" numbered="true" toc="default">
      <name>Encryption format</name>
      <t>The encrypted payload (Provisioning Information) should be a data structure having the following key-value pairs:
"type", which defines the encryption algorithm and mode used and "data", which contains BASE-64 encoded binary value of ciphertext.</t>
      <t>Currently proposed "type" includes the following algorithm and mode:</t>
      <ul spacing="normal">
        <li>"AES128": 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.
The IV shall be prepended to the payload, and the tag shall be appended to the payload before sending (the resulting format is IV || encrypted payload || tag).
Please refer to <xref target="NIST-SP800-38D" format="default"/> for the details of the encryption algorithm.</li>
        <li>"AES256": 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.
The IV shall be prepended to the payload, and the tag shall be appended to the payload before sending (the resulting format is IV || encrypted payload || tag).
Please refer to <xref target="NIST-SP800-38D" format="default"/> for the details of the encryption algorithm.</li>
      </ul>
      <figure anchor="secure-payload-format">
        <name>Secure Payload Format example</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
{
    "type" : "AES128",
    "data" : "IV  ciphertext  tag"
}
]]></artwork>
      </figure>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The following threats and mitigations have been considered:
- Sender shares with the wrong receiver
    - Sender should be encouraged to share Secret over a channel allowing authentication of the receiver (e.g. voice).
    - Provisioning Partners shall allow senders to cancel existing shares.
- Malicious receiver forwards the share to 3rd party without redeeming it or the Receiver's device is compromised. 
    - No mitigation, the Sender should only share with receivers they trust.
- Malicious receiver attempts re-use share
        - Provisioning Partners shall ensure that the Provisioning Information of a share can only be redeemed once.
- Share URL accidental disclosure. (e.g. share URL sent as a message which gets displayed on a locked screen)
    - Knowledge of Secret is required to access Provisioning Information and it should have been sent in a separate channel.
    - Device Claim is required (if sender and receiver have already both contacted the Relay server)
- Network attacks
    - Machine-in-the-middle
        - Relay server shall only allow TLS connections
            - URLs displayed to user should include the https scheme
        - MailboxIdentifier guessing
            - The MailboxIdentifier is a version 4 UUID <xref target="RFC4122" format="default"/> which should contain 122-bits of cryptographic entropy, making brute-force attacks impractical</t>
      <section anchor="sender-and-receiver-safety" numbered="true" toc="default">
        <name>Sender and Receiver safety</name>
        <ul spacing="normal">
          <li>Relay server shall be trusted by both Sender and Receiver devices.</li>
          <li>Receiver must be notified by Relay server in case integrity of provided URL was altered.</li>
        </ul>
      </section>
      <section anchor="senderreceiver-privacy" numbered="true" toc="default">
        <name>Sender/Receiver privacy</name>
        <ul spacing="normal">
          <li>At no time Relay server shall 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 should also be different for every new share to prevent the Relay server from correlating different sharing.</li>
          <li>Notification token should only inform the corresponding device that there has been a data update on the mailbox associated to it (by Device Claim). Each device should keep track of all mailboxes associated with it and make read calls to appropriate mailboxes.</li>
          <li>Both Sender and Receiver devices should store the URL of the Relay server they use for an active act of credential transfer.</li>
          <li>The value of DeviceAttestation header parameter shall not contain information allowing the identification of the device providing it. It should 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 should not contain any information allowing to identify Sender or Receiver devices.</li>
        </ul>
      </section>
      <section anchor="credentials-confidentiality-and-integrity" numbered="true" toc="default">
        <name>Credential's confidentiality and integrity</name>
        <ul spacing="normal">
          <li>Content of the mailbox shall 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 must guaranty it's integrity with cryptographic checksum (e.g. MAC, AES-GCM tag).</li>
          <li>Relay server shall periodically check and delete expired mailboxes ( refer to timeToLive 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" format="default"/>, so that the resulting URL shall look as in the example below. Receiver device, upon receipt of such URL, must 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 name="" type="" align="left" alt=""><![CDATA[
“http://relayserver.com/v1/{mailboxIdentifier}#{Secret}”
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="NIST-SP800-38D" target="http://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-38d.pdf">
          <front>
            <title>NIST Special Publication 800-38D. Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
            <author initials="M." surname="Dworkin" fullname="Morris Dworkin">
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2007" month="November"/>
          </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="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="acknowledgments" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
7OgMPjZPYeH8H1uTDd7AhwAA

-->

</rfc>
