Internet DRAFT - draft-shaw-rats-rear

draft-shaw-rats-rear







RATS                                                             A. Shaw
Internet-Draft                                             H. Tschofenig
Intended status: Informational                               S. Trofimov
Expires: 14 December 2020                                       S. Frost
                                                              T. Fossati
                                                                     arm
                                                            12 June 2020


                       Restful Attested Resources
                        draft-shaw-rats-rear-00

Abstract

   This memo describes a REST interface based on the RATS architecture
   that can be used to retrieve attested system state, for example the
   reading of a security critical sensor.  The objective is to present a
   common vocabulary of data formats and basic protocol transactions
   that can be pieced together into a cohesive interface that is capable
   of serving different attestation workflows.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 14 December 2020.

Copyright Notice

   Copyright (c) 2020 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.  Code Components



Shaw, et al.            Expires 14 December 2020                [Page 1]

Internet-Draft                    REAR                         June 2020


   extracted from this document must include Simplified BSD License text
   as described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.1.  Use Cases . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.2.  Document Organisation . . . . . . . . . . . . . . . . . .   4
     1.3.  Conventions used in this document . . . . . . . . . . . .   4
   2.  Abstract Mechanism  . . . . . . . . . . . . . . . . . . . . .   4
     2.1.  Attester Interface  . . . . . . . . . . . . . . . . . . .   4
       2.1.1.  Resource Validation . . . . . . . . . . . . . . . . .   5
     2.2.  Verifier Interface  . . . . . . . . . . . . . . . . . . .   5
       2.2.1.  Attestation Result Validation . . . . . . . . . . . .   6
     2.3.  Example Compositions  . . . . . . . . . . . . . . . . . .   6
       2.3.1.  Background Check with Nonce-based Freshness . . . . .   6
       2.3.2.  Background Check with Timestamp-based Freshness . . .   7
       2.3.3.  Passport with Timestamp-based Freshness . . . . . . .   7
       2.3.4.  Timestamp-based Uni-directional . . . . . . . . . . .   8
   3.  REST Instantiation  . . . . . . . . . . . . . . . . . . . . .   9
     3.1.  Basic Data Formats  . . . . . . . . . . . . . . . . . . .   9
       3.1.1.  Resource  . . . . . . . . . . . . . . . . . . . . . .   9
       3.1.2.  Nonce . . . . . . . . . . . . . . . . . . . . . . . .  10
       3.1.3.  Timestamp . . . . . . . . . . . . . . . . . . . . . .  10
       3.1.4.  Evidence  . . . . . . . . . . . . . . . . . . . . . .  10
       3.1.5.  Attestation Result  . . . . . . . . . . . . . . . . .  10
     3.2.  Request and Response Payloads . . . . . . . . . . . . . .  10
       3.2.1.  Requesting an Attested Resource . . . . . . . . . . .  10
       3.2.2.  Attested Resource . . . . . . . . . . . . . . . . . .  10
       3.2.3.  Request for Attestation Result  . . . . . . . . . . .  11
       3.2.4.  Verifier Response . . . . . . . . . . . . . . . . . .  11
     3.3.  Interaction Model . . . . . . . . . . . . . . . . . . . .  12
       3.3.1.  Channel Security Considerations . . . . . . . . . . .  12
       3.3.2.  URLs  . . . . . . . . . . . . . . . . . . . . . . . .  12
       3.3.3.  Methods . . . . . . . . . . . . . . . . . . . . . . .  12
       3.3.4.  Multicast Support . . . . . . . . . . . . . . . . . .  13
       3.3.5.  Examples  . . . . . . . . . . . . . . . . . . . . . .  13
   4.  Discovery . . . . . . . . . . . . . . . . . . . . . . . . . .  17
     4.1.  Resource Directory  . . . . . . . . . . . . . . . . . . .  17
       4.1.1.  Attested Resource Registration  . . . . . . . . . . .  17
       4.1.2.  Verifier Resource Registration  . . . . . . . . . . .  19
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  19
   6.  Privacy Considerations  . . . . . . . . . . . . . . . . . . .  20
   7.  Security Considerations . . . . . . . . . . . . . . . . . . .  20
     7.1.  Model Architecture for the Origin . . . . . . . . . . . .  20
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  20
   References  . . . . . . . . . . . . . . . . . . . . . . . . . . .  20



Shaw, et al.            Expires 14 December 2020                [Page 2]

Internet-Draft                    REAR                         June 2020


     Normative References  . . . . . . . . . . . . . . . . . . . . .  20
     Informative References  . . . . . . . . . . . . . . . . . . . .  22
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  22

1.  Introduction

   This memo describes a REST [Fielding] interface based on the RATS
   architecture [I-D.ietf-rats-architecture] that can be used to
   retrieve attested system state, for example the reading of a security
   critical sensor.

   We present a simple vocabulary of data formats and basic protocol
   transactions that can be pieced together into a cohesive interface
   capable of serving different attestation workflows.  At a minimum, we
   want to cater for the "background check" and "passport" topological
   models, and for freshness of attestation based on nonces as well as
   timestamps.

   The obvious advantage of sharing a uniform interface across different
   actors is it creates an ecosystem in which variability is minimised
   and so is the need to add complex and often fragile logics into the
   deployed components, e.g., data format and protocol translation.
   Besides, using the familiar REST toolbox provides additional benefits
   in terms of developer friendliness as well as code base and
   infrastructure reuse (e.g., web caching).

1.1.  Use Cases

   The primary use case is that of a device that needs to provide
   application state to third parties with strong authenticity.

   This is a common situation in critical infrastructure systems where
   an actuator device needs some assurance that the sensing equipment is
   in pristine state before acting on its signals.  Here, the sensor
   would expose its safety critical samples via an attested resource
   whose authenticity can be verified by the actuator.

   Another potential application is a fleet controller that needs to
   know the current state of its dependent devices to inform its next
   actions (e.g., scheduling a firmware update campaign).  Here, the
   dependent devices uniformly expose the same resource (e.g., the list
   of currently installed software components) to the controller, which
   can decide, based on the information provided, which devices need a
   certain security patch.

   Many more use cases exist.





Shaw, et al.            Expires 14 December 2020                [Page 3]

Internet-Draft                    REAR                         June 2020


1.2.  Document Organisation

   The remainder of this document describes:

   *  An abstract protocol that allows a device to expose arbitrary
      attested system state, which can be consumed by third parties
      (Section 2);
   *  An instantiation of said abstract protocol as a set of uniform
      data formats and interaction primitives based on the REST paradigm
      for both HTTP [RFC7230] and CoAP [RFC7252] (Section 3);
   *  A way to advertise and discover said capability (Section 4).

1.3.  Conventions used in this document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

2.  Abstract Mechanism

   The protocol principals are the three RATS actors: the attester (A),
   the relying party (RP) and the verifier (V).

   It is assumed that A either directly owns a resource, r, or has a
   direct trust relationship with the resource owner.

   In the following, "n" and "t" are freshness indicators: "n" is an
   initiator provided nonce, "t" is a timestamp sourced by the
   responder.  When using timestamp based freshness, producers' and
   consumers' clocks MUST be synchronised.

2.1.  Attester Interface

   The interface to the Attester is illustrated in Figure 1.

   X is any entity interacting with the Attester, typically a Relying
   Party, which wants to retrieve an attested resource.

   A function "E(n_X, r, t_A)" is used by A to compute an evidence
   report binding the device status to the resource ("r") together with
   the freshness indicators "n_X" and "t_A".  Typically, only one of
   "n_X" or "t_A" will be present.

   "E()" outputs an EAT token [I-D.ietf-rats-eat], "E", carrying a
   "nonce" claim that is used as described in the following.




Shaw, et al.            Expires 14 December 2020                [Page 4]

Internet-Draft                    REAR                         June 2020


   The binding between "n_X", "t_A" and "r" is obtained by hashing their
   concatenation, "H(n_X || r || t_A)", and storing the result in the
   "nonce" claim which is then cryptographically signed by the Attester
   as part of the produced evidence, "E".  The presence of any freshness
   indicator (i.e., "n_X" or "t_A") is optional.  For the purpose of
   computing "E", a nil freshness indicator is replaced by the zero-
   length string, "".  If "t_A != nil", then its value needs to be sent
   back to the requester as an additional explicit protocol entity.

   Optionally, an attestation result "R" computed on evidence "E" MAY be
   returned by an Attester that acts as a forwarder for a Verifier.

                 X                                       A
                 |               n_X=nil                 |
                 o-------------------------------------->|
                 |  r, t_A=nil, E(n_X, r, t_A), R(E)=nil |
                 |<--------------------------------------o
                 |                                       |

                        Figure 1: Attester Interface

2.1.1.  Resource Validation

   Given an Appraisal Policy for Evidence "APE" and an Appraisal Policy
   for Attestation Result "APR", X accepts "r" if and only if:

   *  "E | APE => true"
   *  "E.nonce == H(n_X || r || t_A)"

   If "R(E)!=nil", two further conditions MUST hold:

   *  "R(E) | APR => true"
   *  "R.nonce == H("" || E || "")"

   Note that not all the appraisal operations are computed directly by
   X.  For example, "E | APE" is typically delegated to a trusted
   Verifier.

2.2.  Verifier Interface

   The interface to the Verifier is illustrated in Figure 2.

   Y is any entity interacting with the Verifier, e.g., a Relying Party
   or an Attester, which supplies an evidence and receives an
   attestation result.






Shaw, et al.            Expires 14 December 2020                [Page 5]

Internet-Draft                    REAR                         June 2020


   The function "R(n_Y, E, t_V)" is used by V to compute the attestation
   result over "E" using an implicit Appraisal Policy for Evidence
   "APE".  The result is cryptographically signed by V and bound to any
   available freshness indicator.

   "R()" outputs an EAT token [I-D.ietf-rats-eat], "R", carrying at a
   minimum:

   *  a "result" claim carrying a boolean value that reflects the
      validity of the submitted evidence given the Appraisal Policy for
      Evidence used by the Verifier;
   *  a "nonce" claim that is used as described in the following.

   The token MAY contain further information associated with the
   evidence validation process.

   The binding between "n_Y", "t_V" and "E" is obtained by hashing their
   concatenation, "H(n_Y || E || t_V)", and storing the result in the
   "nonce" claim which is then cryptographically signed by the Verifier
   as part of the produced attestation result, "R".  The presence of any
   freshness indicator (i.e., "n_Y" or "t_V") is optional.  For the
   purpose of computing "R", a nil freshness indicator is replaced by
   the zero-length string, "".

                      Y                              V
                      |         n_Y=nil, E           |
                      o----------------------------->|
                      |    t_V=nil, R(n_Y, E, t_V)   |
                      |<-----------------------------o
                      |                              |

                        Figure 2: Verifier Interface

2.2.1.  Attestation Result Validation

   Given an Appraisal Policy for Attestation Result "APR", Y accepts "R"
   if and only if:

   *  "R(E) | APR => true"
   *  "R.nonce == H(n_Y || E || t_V)"

2.3.  Example Compositions

2.3.1.  Background Check with Nonce-based Freshness







Shaw, et al.            Expires 14 December 2020                [Page 6]

Internet-Draft                    REAR                         June 2020


      A                              RP                             V
      |             n_X              |                              |
      |<-----------------------------o                              |
      |       r, E(n_X, r, nil)      |                              |
      o----------------------------->|                              |
      |                              |               E              |
      |                              o----------------------------->|
      |                              |        R(nil, E, nil)        |
      |                              |<-----------------------------o
      |                              |                              |

           Figure 3: Background Check with Nonce-based Freshness

   RP accepts "r" if and only if:

   *  "E | APE => true"
   *  "E.nonce == H(n_X || r || "")"
   *  "R | APR => true", or equivalently "R.result == true"
   *  "R.nonce == H("" || E || "")"

2.3.2.  Background Check with Timestamp-based Freshness

      A                              RP                             V
      |             nil              |                              |
      |<-----------------------------o                              |
      |     r, t_A, E(nil, r, t_A)   |                              |
      o----------------------------->|                              |
      |                              |               E              |
      |                              o----------------------------->|
      |                              |        R(nil, E, nil)        |
      |                              |<-----------------------------o
      |                              |                              |

         Figure 4: Background Check with Timestamp-based Freshness

   RP accepts r if and only if:

   *  "R | APR => true", or equivalently "R.result == true"
   *  "R.nonce == H("" || E || "")"
   *  "E | APE => true"
   *  "E.nonce == H("" || r || t_A)"

2.3.3.  Passport with Timestamp-based Freshness

   The idea is that whenever the state of r changes, the Attester will
   "self-issue" an evidence for the changed resource using a locally
   sourced timestamp ("t_A") as the freshness indicator.




Shaw, et al.            Expires 14 December 2020                [Page 7]

Internet-Draft                    REAR                         June 2020


       A
    .--o
    |  |
    '->o--.
       |  | r, t_A, E(nil, r, t_A)
       |<-'
       |                                                             V
       |                              E                              |
       o------------------------------------------------------------>|
       |                       R(nil, E, nil)                        |
       |<------------------------------------------------------------o
       |                                                             |
       |                              RP
       |              nil             |
       |<-----------------------------o
       |    r, t_A, E(nil, r, t_A),   |
       |        R(nil, E, nil)        |
       o----------------------------->|

             Figure 5: Passport with Timestamp-based Freshness

   RP accepts r if and only if:

   *  "R | APR => true"
   *  "R.nonce == H("" || E || "")"
   *  "E.nonce == H("" || r || t_A)"

2.3.4.  Timestamp-based Uni-directional

   If the transport allows it, timestamp-based uni-directional
   attestation protocols, e.g., TUDA [I-D.birkholz-rats-tuda], can also
   be constructed from the presented primitives.  For example, using
   CoAP Observe [RFC7641] the interaction pattern in Figure 6, with an
   initial trigger and subsequent automatic updates on resource status
   change, can be naturally implemented.
















Shaw, et al.            Expires 14 December 2020                [Page 8]

Internet-Draft                    REAR                         June 2020


                     A                              RP
                     |             nil              |
                     |<-----------------------------o
                     |  r_1, t_A, E(nil, r_1, t_A)  |
                     o----------------------------->|
                     |                              |
                     |            [...]             |
                     |                              |
                     |  r_i, t_A, E(nil, r_i, t_A)  |
                     o----------------------------->|
                     |                              |
                     |            [...]             |
                     |                              |
                     |  r_n, t_A, E(nil, r_n, t_A)  |
                     o----------------------------->|

                 Figure 6: Timestamp-based Uni-directional

3.  REST Instantiation

   Four new MIME types are defined for the requests and responses among
   the three actors that have been identified in the abstract mechanism.
   The MIME types are composed of the basic data types defined in
   Section 3.1.

3.1.  Basic Data Formats

   *  The resource to be attested;
   *  A caller provided nonce;
   *  A locally sourced timestamp;
   *  The evidence produced by the Attester, and
   *  The attestation result produced by the Verifier.

   These basic types are described by the following CDDL rules, which
   reuse the eat-token definition from [I-D.ietf-rats-eat].

3.1.1.  Resource

   An "ANY DEFINED BY"-like payload with type set to the original MIME
   type, either Content-Type (HTTP) or Content-Format (CoAP), of the
   resource representation.

   resource-type = (
     typ tstr / uint,
     val any,
   )





Shaw, et al.            Expires 14 December 2020                [Page 9]

Internet-Draft                    REAR                         June 2020


3.1.2.  Nonce

   nonce-type = bstr

3.1.3.  Timestamp

   timestamp-type = tdate / time

3.1.4.  Evidence

   An EAT token signed by the attester bound to the relying party
   request and the attested resource state.

   evidence-type = eat-token

3.1.5.  Attestation Result

   An EAT token signed by the verifier and bound to an evidence.

   attestation-result-type = eat-token

3.2.  Request and Response Payloads

3.2.1.  Requesting an Attested Resource

   MIME type "application/rats-attested-resource-request"

   CoAP Content-Format: TBD-rats-attested-resource-request-CT

   nonce-key = 0 / "n_X"

   attested-resource-request = {
       ? nonce-key => nonce-type,
   }

   This type is used in a POST request to an attested resource.

3.2.2.  Attested Resource

   MIME type "application/rats-attested-resource"

   CoAP Content-Format: TBD-rats-attested-resource-CT









Shaw, et al.            Expires 14 December 2020               [Page 10]

Internet-Draft                    REAR                         June 2020


   resource-key = 1 / "r"
   t-A-key = 2 / "t_A"
   evidence-key = 3 / "E"
   attestation-result-key = 4 / "R"

   attested-resource = {
       resource-key => resource-type,
       ? t-A-key => timestamp-type,
       evidence-key => evidence-type,
       ? attestation-result-key => attestation-result-type,
   }

   This type is used in a successful response to a request to an
   attested resource endpoint.

   Note that an attestation result is only present when the Passport
   model is used.

   Note also that the fact that the inner resource representation is
   embedded within the "application/rats-attested-resource" envelope
   suppresses the ability to do content negotiation on it, i.e., the
   inner representation format is unilaterally chosen by the origin.

3.2.3.  Request for Attestation Result

   MIME type "application/rats-attestation-result-request"

   CoAP Content-Format: TBD-rats-attestation-result-request-CT

   n-Y-key = 5 / "n_Y"

   attestation-result-request = {
       ? n-Y-key => nonce-type,
       evidence-key => evidence-type,
   }

   This type is used in a POST request to a verifier endpoint.

3.2.4.  Verifier Response

   MIME type "application/rats-attestation-result-response"

   CoAP Content-Format: TBD-rats-attestation-result-response-CT








Shaw, et al.            Expires 14 December 2020               [Page 11]

Internet-Draft                    REAR                         June 2020


   t-V-key = 6 / "n_Y"

   attestation-result-response = {
       ? t-V-key => timestamp-type,
       attestation-result-key => attestation-result-type,
   }

   This type is used in a successful response to a POST request to a
   verifier endpoint.

3.3.  Interaction Model

   (For now) we only describe a synchronous, RPC-like transaction model,
   including the slight variant with a one-off trigger presented in
   Section 2.3.4.

   This might be not suited for devices that sit behind a NAT/firewall
   box, or those that have to go through extended sleep cycles in order
   to save energy.  For this kind of devices, we assume in-network
   support in the form of store-and-forward nodes (e.g., LwM2M queue
   mode, specialised border routers, etc.).

3.3.1.  Channel Security Considerations

   Unless the channel can be considered free from passive and active
   attackers at all times, all transactions are to be carried over a
   secure transport (i.e., HTTPS or COAPS).

3.3.2.  URLs

   In the spirit of [RFC7320], no specific URL format is mandated.  An
   application is free to specify the URL scheme of its liking for the
   exposed attested resources.

   When an origin exposes the same underlying state both as nonce- and
   timestamp-based resources, these are identified by two separate URIs.

   The verifier function is exposed via an URI that accepts evidence in
   form of "application/rats-attestation-result-request" typed requests
   and returns attestation results in form of "application/rats-
   attestation-result-response" typed responses.

3.3.3.  Methods

   As per usual REST conventions, the guiding principles are:

   *  POST is used for all requests involving a payload;
   *  GET is used for requests without a payload.



Shaw, et al.            Expires 14 December 2020               [Page 12]

Internet-Draft                    REAR                         June 2020


   The only example of the latter is when retrieving an "Attested
   Resource" using the timestamp-based freshness model.  Any other
   request uses POST.

3.3.3.1.  Response Codes and Caching

   The possible status codes are:

   *  HTTP
      -  200 (OK) for successful GET.  This response is cacheable;
         origins can use Cache-Control (max-age) and ETag headers in
         order to instruct on-path caches.
      -  201 (Created) for a successful POST.  This response is not
         cacheable.
   *  CoAP
      -  2.05 (Content) for successful GET.  This response is cacheable;
         origins can use Max-Age and ETag Options to instruct on-path
         caches;
      -  2.01 (Created) for successful POST.  This response is not
         cacheable.

   Otherwise, a suitable error response (i.e., HTTP 4xx/5xx, CoAP
   4.nn/5.nn) is returned.

3.3.4.  Multicast Support

   TODO (This is a CoAP only feature.)

3.3.5.  Examples

   A few examples are given to illustrate the different interaction
   models using both CoAP and HTTP transports.

3.3.5.1.  Background Check with Nonce Based Freshness

   *  RP - Attester (CoAP)















Shaw, et al.            Expires 14 December 2020               [Page 13]

Internet-Draft                    REAR                         June 2020


     >> Request:
      POST coap://device.example/my-attested-resource
      Content-Format: TBD-application/rats-attested-resource-request-CT
      Accept: application/rats-attested-resource
      Payload:
      {
          "n_X": "bm9uY2Uh"
      }

     << Response:
      2.01 Created
      ETag: "xyzzy"
      Content-format: TBD-application/rats-attested-resource-CT
      Payload:
      {
          "r" : {
              "typ": "text/plain",
              "val": "foobar"
          },
          "E": "eyJhbGciO...RfrKmTWk"
      }

   *  RP - Verifier (HTTP)

     >> Request:
      POST /my-verify
      Host: verifier.example
      Content-Type: application/rats-attestation-result-request
      Accept: application/rats-attestation-result-response

      {
          "E": "eyJhbGciO...RfrKmTWk"
      }

     << Response:
      HTTP/1.1 201 Created
      ETag: "abccb"
      Content-format: application/rats-attestation-result-response
      Payload:
      {
          "R": "eyJhbGciO...8j5EDGYc"
      }

3.3.5.2.  Background Check with Timestamp Based Freshness

   *  RP - Attester (CoAP) with POST





Shaw, et al.            Expires 14 December 2020               [Page 14]

Internet-Draft                    REAR                         June 2020


     >> Request:
      POST coap://device.example/my-attested-resource
      Content-Format: TBD-application/rats-attested-resource-request-CT
      Accept: TBD-application/rats-attested-resource-CT
      Payload:
      { }

     << Response:
      2.01 Created
      ETag: "xyzzy"
      Content-format: TBD-application/rats-attested-resource-CT
      Payload:
      {
          "r" : {
              "typ": "text/plain",
              "val": "foobar"
          },
          "t_A": "2020-04-01T21:02:31Z",
          "E": "eyJhbGciO...z0ikw9Aa"
      }

   *  RP - Attester (CoAP) with GET

     >> Request:
      GET coap://device.example/my-attested-resource
      Accept: TBD-application/rats-attested-resource-CT

     << Response:
      2.05 Content
      ETag: "xyzzy"
      Max-Age: 3600
      Content-format: TBD-application/rats-attested-resource-CT
      Payload:
      {
          "r" : {
              "typ": "text/plain",
              "val": "foobar"
          },
          "t_A": "2020-04-01T21:02:31Z",
          "E": "eyJhbGciO...z0ikw9Aa"
      }

   *  RP - Verifier (HTTP) is the same as Section 3.3.5.1.

3.3.5.3.  Passport Model

   *  Attester - Verifier (CoAP)




Shaw, et al.            Expires 14 December 2020               [Page 15]

Internet-Draft                    REAR                         June 2020


     >> Request:
      POST coap://verifier.example/my-verify
      Content-Format: application/rats-attestation-result-request
      Accept: application/rats-attestation-result-response
      Payload:
      {
          "E": "eyJhbGciO...RfrKmTWk"
      }

     << Response:
      2.01 Created
      ETag: "jkllk"
      Content-format: application/rats-attestation-result-response
      Payload:
      {
          "R": "eyJhbGciO...Z0IKW9aA"
      }

   *  Relying Party - Attester (CoAP) with POST

     >> Request:
      POST coap://device.example/my-attested-resource
      Content-Format: TBD-application/rats-attested-resource-request-CT
      Accept: TBD-application/rats-attested-resource-CT
      Payload:
      { }

     << Response:
      2.01 Created
      ETag: "qwerty"
      Content-format: TBD-application/rats-attested-resource-CT
      Payload:
      {
           "r": {
               "type": "text/plain",
               "val": "foobar"
           },
           "t_A": "2020-04-01T21:02:31Z",
           "E": "eyJhbGciO...RfrKmTWk",
           "R": "eyJhbGciO...Z0IKW9aA"
       }

   *  Relying Party - Attester (CoAP) with GET








Shaw, et al.            Expires 14 December 2020               [Page 16]

Internet-Draft                    REAR                         June 2020


     >> Request:
      GET coap://device.example/my-attested-resource
      Accept: TBD-application/rats-attested-resource-CT

     << Response:
      2.05 Content
      ETag: "qwerty"
      Max-Age: 3600
      Content-format: TBD-application/rats-attested-resource-CT
      Payload:
      {
           "r": {
               "type": "text/plain",
               "val": "foobar"
           },
           "t_A": "2020-04-01T21:02:31Z",
           "E": "eyJhbGciO...RfrKmTWk",
           "R": "eyJhbGciO...Z0IKW9aA"
       }

4.  Discovery

4.1.  Resource Directory

   The following describes the new link format attribute values needed
   for registering attested resources as well as verification endpoints
   to a Resource Directory [I-D.ietf-core-resource-directory].

   The same attribute values can be used by RD clients to discover
   attestation related resources.

4.1.1.  Attested Resource Registration

   An attested resource is registered with:

   *  an interface description (if=) with value "rats.if.timestamp" or
      "rats.if.nonce" depending on the supported freshness model, which
      determines the access method (i.e., POST+nonce vs GET);
   *  a content format (ct=) with value "TBD-application/rats-attested-
      resource-CT";
   *  an inner content format (ict=) that reflects the "type" field of
      the returned "resource";
   *  a resource type (rt=) that reflects the nature of the inner
      resource.







Shaw, et al.            Expires 14 December 2020               [Page 17]

Internet-Draft                    REAR                         June 2020


   If a resource has both a "plain" and an "attested" variant, then the
   link value corresponding to the "attested" resource can be associated
   to its "plain" twin by means of the link relationship "attested-
   variant".

   TBD: Should we have rats.if.timestamp variants for GET and POST?
   Alternative includes: 1) let the client probe and server return
   405/4.05 if the requested variant is not supported; 2) add another
   attribute that explicitly states which request methods are supported.

4.1.1.1.  Examples

   The following example shows a registrant endpoint with the name
   "node1" registering an attested heart rate sensor resource to an RD.

   The location /rd is an example RD location discovered in a previous
   .well-known/core query.

     >> Request:
       POST /rd?ep=node1 HTTP/1.1
       Host: rd.example
       Content-Type: application/link-format

       </sensors/attested-heartrate>;
         if="rats.if.timestamp";
         rt="heart-rate-zoladz";
         ct=TBD-application/rats-attested-resource-CT;
         ict=0

     << Response:
       HTTP/1.1 201 Created
       Location: /rd/4520

   The following example shows a registrant endpoint with the name
   "node1" registering a temperature sensor resource along with its
   attested twin to an RD.

   The "attested-variant" link relation establishes the semantics of the
   link between /sensors/temp and /sensors/attested-temp: the latter
   being an attested version of the former.  Note, in particular, that
   the resource type (rt=) of the linked resource is inherited by the
   attested twin.  Missing an explicit inner content format (ict=) the
   content type of the inner resource representation can be assumed to
   be that of the linked resource.  The interface description (if=)
   "rats.if.nonce" says that the access to the attested resource happens
   by supplying a nonce through a POST.





Shaw, et al.            Expires 14 December 2020               [Page 18]

Internet-Draft                    REAR                         June 2020


     >> Request:
       POST /rd?ep=node1 HTTP/1.1
       Host: rd.example
       Content-Type: application/link-format

       </sensors/temp>;
         ct=41;
         rt="temperature-c";
         if="sensor",
       </sensors/attested-temp>;
         anchor="/sensors/temp";
         rel="attested-variant";
         if="rats.if.nonce";
         ct=TBD-application/rats-attested-resource-CT;
         ict=41

     << Response:
       HTTP/1.1 201 Created
       Location: /rd/4521

4.1.2.  Verifier Resource Registration

   A Verifier resource is registered with:

   *  An "rt" with value "rats.verifier";
   *  A "ct" with value "TBD-application/rats-attestation-result-
      response-CT"

4.1.2.1.  Examples

     >> Request:
       POST /rd?ep=node1 HTTP/1.1
       Host: rd.example
       Content-Type: application/link-format

       </my-verifier>;
         ct=application/rats-attestation-result-response;
         rt="rats.verifier"

     << Response:
       HTTP/1.1 201 Created
       Location: /rd/4522

5.  IANA Considerations

   TODO





Shaw, et al.            Expires 14 December 2020               [Page 19]

Internet-Draft                    REAR                         June 2020


6.  Privacy Considerations

   TODO

7.  Security Considerations

7.1.  Model Architecture for the Origin

   The model architecture for the origin of the attested resource is
   illustrated in Figure 7.  The REST client (an user agent of a relying
   party or verifier) interfaces directly with a REST front-end (a CoAP
   or HTTP server stack) running in the Rich Execution Environment
   (REE), for example a Linux operating system.  The REST front-end is
   paired with a back-end Trusted Application (TA) running in the
   Trusted Execution Environment (TEE).  The TA has exclusive control
   over some "resource" (e.g., a sensor that feeds back into some kind
   of critical infrastructure control system) and can talk to the
   attestation service hosted inside the TEE to request EAT tokens.

   In this model, it is critical that the attestation service can only
   be used by the intended TA or, failing that, that the identity of the
   calling TA can be securely proved to the relying party or verifier.
   An example of the latter is the Client ID claim used in PSA
   attestation [I-D.tschofenig-rats-psa-token].

                    .-----------------.---------------------------.
                    | REE             | TEE                       |
        .--------.  |  .-----------.  |  .----------.   .------.  |
        | REST   |<--->| REST      |<--->| back-end +->|resource| |
        | client |  |  | front-end |  |  | TA       |   '------'  |
        '--------'  |  '-----------'  |  '-----+----'             |
                    |                 |        |                  |
                    |                 |        v                  |
                    |                 |  .-------------.          |
                    |                 |  | attestation |          |
                    |                 |  | service     |          |
                    |                 |  '-------------'          |
                    '-----------------'---------------------------'

                   Figure 7: Model Security Architecture

Acknowledgments

   TBD

References

Normative References



Shaw, et al.            Expires 14 December 2020               [Page 20]

Internet-Draft                    REAR                         June 2020


   [I-D.ietf-core-resource-directory]
              Shelby, Z., Koster, M., Bormann, C., Stok, P., and C.
              Amsuess, "CoRE Resource Directory", Work in Progress,
              Internet-Draft, draft-ietf-core-resource-directory-24, 9
              March 2020, <http://www.ietf.org/internet-drafts/draft-
              ietf-core-resource-directory-24.txt>.

   [I-D.ietf-rats-architecture]
              Birkholz, H., Thaler, D., Richardson, M., Smith, N., and
              W. Pan, "Remote Attestation Procedures Architecture", Work
              in Progress, Internet-Draft, draft-ietf-rats-architecture-
              04, 21 May 2020, <http://www.ietf.org/internet-drafts/
              draft-ietf-rats-architecture-04.txt>.

   [I-D.ietf-rats-eat]
              Mandyam, G., Lundblade, L., Ballesteros, M., and J.
              O'Donoghue, "The Entity Attestation Token (EAT)", Work in
              Progress, Internet-Draft, draft-ietf-rats-eat-03, 20
              February 2020, <http://www.ietf.org/internet-drafts/draft-
              ietf-rats-eat-03.txt>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC7230]  Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
              Protocol (HTTP/1.1): Message Syntax and Routing",
              RFC 7230, DOI 10.17487/RFC7230, June 2014,
              <https://www.rfc-editor.org/info/rfc7230>.

   [RFC7252]  Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
              Application Protocol (CoAP)", RFC 7252,
              DOI 10.17487/RFC7252, June 2014,
              <https://www.rfc-editor.org/info/rfc7252>.

   [RFC7320]  Nottingham, M., "URI Design and Ownership", BCP 190,
              RFC 7320, DOI 10.17487/RFC7320, July 2014,
              <https://www.rfc-editor.org/info/rfc7320>.

   [RFC7641]  Hartke, K., "Observing Resources in the Constrained
              Application Protocol (CoAP)", RFC 7641,
              DOI 10.17487/RFC7641, September 2015,
              <https://www.rfc-editor.org/info/rfc7641>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.



Shaw, et al.            Expires 14 December 2020               [Page 21]

Internet-Draft                    REAR                         June 2020


Informative References

   [Fielding] Fielding, R., "Architectural Styles and the Design of
              Network-based Software Architectures", Ph.D. Dissertation,
              University of California, Irvine, 2000,
              <http://www.ics.uci.edu/~fielding/pubs/dissertation/
              fielding_dissertation.pdf>.

   [I-D.birkholz-rats-tuda]
              Fuchs, A., Birkholz, H., McDonald, I., and C. Bormann,
              "Time-Based Uni-Directional Attestation", Work in
              Progress, Internet-Draft, draft-birkholz-rats-tuda-02, 9
              March 2020, <http://www.ietf.org/internet-drafts/draft-
              birkholz-rats-tuda-02.txt>.

   [I-D.tschofenig-rats-psa-token]
              Tschofenig, H., Frost, S., Brossard, M., Shaw, A., and T.
              Fossati, "Arm's Platform Security Architecture (PSA)
              Attestation Token", Work in Progress, Internet-Draft,
              draft-tschofenig-rats-psa-token-05, 6 March 2020,
              <http://www.ietf.org/internet-drafts/draft-tschofenig-
              rats-psa-token-05.txt>.

Authors' Addresses

   Adrian Shaw
   arm

   Email: Adrian.Shaw@arm.com


   Hannes Tschofenig
   arm

   Email: Hannes.Tschofenig@arm.com


   Sergei Trofimov
   arm

   Email: Sergei.Trofimov@arm.com


   Simon Frost
   arm

   Email: Simon.Frost@arm.com




Shaw, et al.            Expires 14 December 2020               [Page 22]

Internet-Draft                    REAR                         June 2020


   Thomas Fossati
   arm

   Email: Thomas.Fossati@arm.com















































Shaw, et al.            Expires 14 December 2020               [Page 23]