<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.31 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sh-rats-oidcatt-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="OIDCATT">Attestation in OpenID-Connect</title>
    <seriesInfo name="Internet-Draft" value="draft-sh-rats-oidcatt-latest"/>
    <author initials="N." surname="Smith" fullname="Ned Smith">
      <organization>Intel Corporation</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>ned.smith@intel.com</email>
      </address>
    </author>
    <author initials="T." surname="Hardjono" fullname="Thomas Hardjono">
      <organization>Massachusetts Institute of Technology</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>hardjono@mit.edu</email>
      </address>
    </author>
    <date year="2023" month="May" day="18"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>attestation</keyword>
    <abstract>
      <t>This document defines message flows and extensions to OpenID-Connect (OIDC) messages that support attestation.
Attestation Evidence and Attestation Results is accessed via appropriate APIs that presumably require authorization using
OAuth 2.0 access tokens.
A common use case for OIDC is retrieval of user identity information authorized by an OIDC identity token. The Relying Party may
require Attestation Results that describes the trust properties of the UserInfo Endpoint. Trust properties may
be  a condition of accepting the user identity information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://nedmsmith.github.io/draft-sh-rats-oidc-attest/draft-sh-rats-oidcatt.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-sh-rats-oidcatt/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Remote ATtestation ProcedureS Working Group mailing list (<eref target="mailto:rats@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/rats/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/rats/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/nedmsmith/draft-sh-rats-oidc-attest"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>This document defines attestation conceptual message flows that extend OpenID-Connect (OIDC) messages, see <xref target="OCC2014"/>.
Attestation Evidence and Attestation Results are RATS conceptual messages, see <xref target="RFC9334"/> and <xref target="I-D.ftbs-rats-msg-wrap"/>, that are obtained
via appropriate APIs conditional on OAuth 2.0 access tokens <xref target="RFC6749"/>.
A common use case for OIDC is retrieval of user identity information authorized by an OIDC identity token.
The Relying Party may require Attestation Results regarding the UserInfo Endpoint as a condition of accepting the user identity
information.</t>
    </section>
    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This specification uses role names as defined by Remote ATtestation procedureS (RATS), <xref target="RFC9334"/> and OpenID Connect (OIDC),
<xref target="OCC2014"/>. If role names conflict, (e.g., Relying Party), then the RATS role is qualified by prepending ‘RATS’ or ‘R’.
For example, the RATS Relying Party is disambiguated as ‘RRP’.</t>
        <t>A summary of roles used in this specification is provided here for convenience.</t>
        <t>RATS roles are as follows:</t>
        <ul spacing="normal">
          <li>Attester (RA) - an endpoint that produces attestation Evidence.</li>
          <li>Reference Value Provider (RVP) - an endpoint that produces Reference Values used to appraise Evidence.</li>
          <li>Endorser (RE) - an endpoint that produces Endorsements used to assess the trustworthiness of the Attester's attestation capability.</li>
          <li>Verifier (RV) - an endpoint that consumes Evidence, Endorsements and Reference Values and produces Attestation Results.</li>
          <li>Relying Party (RRP) - an endpoint that consumes Attestation Results and applies them to an application or usage context.</li>
        </ul>
        <t>OIDC roles are as follows:</t>
        <ul spacing="normal">
          <li>OpenID Provider (OP) - an endpoint that authenticates an End User, obtains authorization, and responds with an ID Token
and (usually) an Access Token.
(a.k.a., an OAuth 2.0 Authorization Server, <xref target="RFC6749"/>).</li>
          <li>Relying Party (RP) / Client - an endpoint that sends a request to an OpenID Provider.</li>
          <li>UserInfo Endpoint (UE) - an endpoint that receives an Access Token and sends Claims about an End User,
also known as the User Agent (UA).</li>
          <li>End User (EU) - a human participant.</li>
        </ul>
        <t>OAuth 2.0 roles are as follows:</t>
        <ul spacing="normal">
          <li>Resource Server (RS) - a service that controls a resource.</li>
        </ul>
      </section>
    </section>
    <section anchor="oidc-sequence">
      <name>OIDC Sequence with Attestation</name>
      <t>OpenID-Connect (OIDC) <xref target="OCC2014"/> defines user authentication protocol and messages based on OAuth 2.0 <xref target="RFC6749"/> authorization
protocol and messages. This section shows an example OIDC protocol sequence with extensions for attestation Evidence and
Attestation Results (AR) exchanges.
The protocol is divided into two phases. A setup phase and an operational phase. The setup phase models protocol initialization
steps that are anticipated but often ignored. An understanding of the initialization steps may be helpful when determining how
various steps in the operational phase are authorized.</t>
      <section anchor="protocol-endpoints">
        <name>Protocol Endpoints</name>
        <t>The example protocol message exchange involves four main endpoints:</t>
        <ol spacing="normal" type="1"><li>Device - a RATS Attester that consists of two sub entities:</li>
        </ol>
        <ul spacing="normal">
          <li>A UserInfo Endpoint (UE) (e.g., browser) that supplies user information for OIDC authentication, and</li>
          <li>A lead Attesting Environment, that collects device attestation Evidence. When using RATS terminology, the device may be
  referred to as the RATS Attester (RA). The RA is technically an OAuth 2.0 Resource Server (RS) that performs attestation
  Evidence collection. The Attester device may consist of multiple components that typically include a root of trust,
  boot code, system software and the browser. The lead Attesting Environment typically seeks to collect Evidence that
  describes all the components, from the root of trust to the browser, that may influence browser behavior.</li>
        </ul>
        <ol spacing="normal" type="1"><li>End User (EU/"Alice") - a native application that can engage the human user directly. This document may refer to the
End User by name, namely: "Alice".</li>
          <li>Relying Party (RP) - an endpoint that seeks UserInfo used to replay user authentication responses for OIDC exchanges,
but also wants Attestation Results that describe the trustworthiness of the UE device. The RP is synonymous with the RATS
Relying Party (RRP).</li>
          <li>OpenID Provider (OP) - an Authorization Server (AS) that implements OIDC.</li>
          <li>Verifier (RV) - a RATS attestation Verifier that processes device Evidence. If the Verifier is combined with the OP,
the Verifier is synonymous with OP.</li>
        </ol>
      </section>
      <section anchor="setup-phase">
        <name>Setup Phase</name>
        <t>The setup phase creates the various identity (‘id-token’) and access (‘access-token’) credentials that are used during
the operational phase to authorize the exchange of the various OIDC protocol messages.</t>
        <section anchor="identity-token-creation">
          <name>Identity Token Creation</name>
          <t>In this example, there is a single end user, “Alice”, that creates an identity token ‘id-token’. The Native App signals
the UE when it is appropriate to create the id-token. For example, the 'id-token' contains: { "sub": "A21CE", "name": "Alice" }.</t>
        </section>
        <section anchor="access-token-creation">
          <name>Attestation Access Token Creation</name>
          <t>The RA exposes an attestation API that invokes the attestation capabilities of the Attester device. An access token,
‘access-token-attest’, is needed to authorize use of the attestation API.</t>
        </section>
        <section anchor="userinfo-token-creation">
          <name>UserInfo Access Token Creation</name>
          <t>The UE exposes a UserInfo API that invokes the user information capabilities of the User Agent. An access token,
‘access-token-uinfo’, is needed to authorize use of the UserInfo API.</t>
        </section>
        <section anchor="evidence-token-creation">
          <name>Evidence Appraisal Access Token Creation</name>
          <t>The RV exposes an API for appraising Evidence. An access token, ‘access-token-appraisal’, is needed to authorize
use of the appraisal API.</t>
        </section>
        <section anchor="register-device">
          <name>Register Device</name>
          <t>The Attester device is registered with the RP client in anticipation of subsequent operational flows.
The registration process is out of scope for this document.</t>
        </section>
        <section anchor="attestation-evidence-payload">
          <name>Attestation Evidence Payload</name>
          <t>The RA produces an Evidence payload that is conveyed to the RV. Some OIDC messages are extended to carry Evidence.</t>
        </section>
        <section anchor="attestation-results-payload">
          <name>Attestation Results Payload</name>
          <t>The RV produces an Attestation Results payload that is conveyed to the RP. Some OIDC messages are extended to carry
Attestation Results.</t>
        </section>
      </section>
      <section anchor="operational-phase">
        <name>Operational Phase</name>
        <t>The operational phase protocol builds on the abstract OIDC protocol in <xref target="OCC2014"/>. The five OIDC steps are described
here for convenience and attestation related steps are described as sub-steps.</t>
        <section anchor="authn-req">
          <name>AuthN Request</name>
          <t>The RP sends an AuthN request to the OP containing the RP’s identity ‘client-id’. Additionally, the RP includes an
attestation scope, e.g., ‘scope=”device-attest”’ that instructs the OP to obtain an attestation from the UE device.
The trigger for sending the AuthN request is out of scope for this document.</t>
          <figure anchor="authn-request-flow">
            <name>AuthN Request Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="48" width="208" viewBox="0 0 208 48" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <g class="text">
                    <text x="44" y="36">{::include</text>
                    <text x="148" y="36">authn-req.txt}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
{::include authn-req.txt}
]]></artwork>
            </artset>
          </figure>
          <section anchor="authn-req-payload">
            <name>AuthN Request Payload</name>
            <t>The following non-normative AuthN Request payload example identifies the OP server location, the RP client identity,
and an attestation scope:</t>
            <artwork><![CDATA[
AuthN_Req = {
    "location": https://op.example.com/authn"
    "client_id": "s6BhdRkqt3",
    "scope": "device-attest"
}
]]></artwork>
          </section>
        </section>
        <section anchor="forwarded-authn-req">
          <name>Forwarded AuthN Request</name>
          <t>The OP forwards the original AuthN request to the UE. The attestation scope instructs the UE to configure the device for attestation.
For example, an internal interface between the UE and RA (a.k.a., Resource Server) might be used to configure a ‘client-id’ nonce that the RA Attesting Environment includes with attestation Evidence.
The UE normally returns a payload containing the ‘client-id’, response type (i.e., resp-type = “code”), and the
authentication result (i.e., authn-proof). However, a successful response is returned on condition of successful
configuration of the attestation scope.
The End User may consent to the disclosure of attestation Evidence using the 'prompt' parameter. An "attestation-consent"
authorization string is supplied as one of the 'prompt' parameters.
* *attestation-consent - The OP (a.k.a., Authorization Server) <bcp14>SHOULD</bcp14> prompt the End User for consent before returning
information to the RP (a.k.a., Client). If it cannot obtain attestation consent, it <bcp14>MUST</bcp14> return an error,
typically 'consent_required'.</t>
          <figure anchor="forwarded-authn-flow">
            <name>Forwarded AuthN Request-Response Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="48" width="256" viewBox="0 0 256 48" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <g class="text">
                    <text x="44" y="36">{::include</text>
                    <text x="172" y="36">forwarded-authn.txt}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
{::include forwarded-authn.txt}
]]></artwork>
            </artset>
          </figure>
          <section anchor="forwarded-authn-payloads">
            <name>Forwarded AuthN Request and Response Payloads</name>
            <t>The forwarded AuthN Request is identical to AuthN Request.
The forwarded AuthN Response payload example identifies the originating RP, scope, response type, and authentication proof:</t>
            <artwork><![CDATA[
AuthN_Rsp = {
    "client_id": "s6BhdRkqt3",
    "scope": "device-attest",
    "resp_type": "code",
    "authn_proof": "<tbd>"
}
]]></artwork>
          </section>
        </section>
        <section anchor="user-authorization">
          <name>User Authorization of AuthN, AuthZ, and Attest</name>
          <t>The OP authenticates the End User (e.g., “Alice”) and obtains authorization. Normally, authorization is limited to
an authentication or authorization context as defined by the legacy OIDC protocol.
But when attestation scope is used, the End User may wish to approve attestation. Attestation normally reveals
Evidence details about the UE device. If those details contain privacy sensitive information,
the End User may wish to opt-out of attestation.
If the Authentication Request contains the 'prompt' parameter with the value 'attestation-consent',
the OP <bcp14>MUST</bcp14> inform the End User that attestation Evidence is about to be disclosed to the RP (a.k.a., Client),
and the End User <bcp14>MUST</bcp14> be given the option to withhold Evidence.</t>
          <figure anchor="user-auth-flow">
            <name>End User Authentication Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="48" width="208" viewBox="0 0 208 48" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <g class="text">
                    <text x="44" y="36">{::include</text>
                    <text x="148" y="36">user-auth.txt}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
{::include user-auth.txt}
]]></artwork>
            </artset>
          </figure>
          <section anchor="user-authorization-payload">
            <name>End User Authorization Payload</name>
            <t>TODO add example</t>
          </section>
        </section>
        <section anchor="attestation-req-rsp">
          <name>Attestation Request and Response</name>
          <t>If the End User doesn’t opt-out of attestation, the OP requests attestation Evidence from the RA (as a Resource Server).
The OP sends the ‘access-token-attest’ and ‘id-token = “Alice”’ tokens to the RA. The RA collects Evidence according to
the configured attestation scope. For example, if a ‘client-id’ specific nonce was configured, the nonce is included with Evidence.
The Evidence is returned to the OP through the UE, which normally returns the ‘client-id’, ‘access-token’, and ‘id-token’.</t>
          <figure anchor="attest-req-rsp-flow">
            <name>Attestation Request-Response Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="48" width="248" viewBox="0 0 248 48" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <g class="text">
                    <text x="44" y="36">{::include</text>
                    <text x="168" y="36">attest-req-rsp.txt}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
{::include attest-req-rsp.txt}
]]></artwork>
            </artset>
          </figure>
          <section anchor="attestation-req-rsp-payloads">
            <name>Attestation Request and Response Payloads</name>
            <t>The Attestation Request and Response payload example contains an access_token that authorizes use of the
attestation API of the RA and an id_token that identifies the End User.</t>
            <artwork><![CDATA[
access_token = {
    "iss": "https://jwt-op.example.com",
    "sub": "https://jwt-ra.example.com/24400320",
    "aud": "https://jwt-rp.example.com/s6BhdRkqt3",
    "nbf": 1300815780,
    "exp": 1300819380,
    "claims.example.com/attest-api": true
}
]]></artwork>
            <artwork><![CDATA[
id_token = {
    "iss": "https://jwt-op.example.com",
    "sub": "https://jwt-ra.example.com/24400320",
    "aud": "https://jwt-rp.example.com/s6BhdRkqt3",
    "nbf": 1300815780,
    "exp": 1300819380,
    "name": "Alice"
}
]]></artwork>
            <t>The response payload contains an Evidence value as described by a conceptual message wrapper <xref target="I-D.ftbs-rats-msg-wrap"/>.</t>
            <artwork><![CDATA[
evidence_cmw = [
    "application/eat+jwt",
    "<base64-string containing a JWT>"
]
]]></artwork>
          </section>
        </section>
        <section anchor="appraisal-req-rsp">
          <name>Appraisal Request and Response</name>
          <t>The OP requests appraisal of Evidence by sending the ‘access-token-appraisal’ token and Evidence to the RV.
The token authorizes use of the appraisal API, which when appraisal completes, supplies Attestation Results.
The verification response contains the Attestation Results and ‘access-token’, that the RV sends to the OP.</t>
          <figure anchor="appraisal-req-rsp-flow">
            <name>Appraisal Request-Response Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="48" width="272" viewBox="0 0 272 48" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <g class="text">
                    <text x="44" y="36">{::include</text>
                    <text x="180" y="36">appraisal-req-rsp.txt}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
{::include appraisal-req-rsp.txt}
]]></artwork>
            </artset>
          </figure>
          <section anchor="appraisal-req-rsp-payloads">
            <name>Appraisal Request and Response Payloads</name>
            <t>The Appraisal Request payload example contains an access_token that authorizes use of the appraisal API of the RV
and the Evidence to be appraised.</t>
            <artwork><![CDATA[
access_token = {
    "iss": "https://jwt-op.example.com",
    "sub": "https://jwt-rv.example.com",
    "aud": "https://jwt-rp.example.com/s6BhdRkqt3",
    "nbf": 1300815780,
    "exp": 1300819380,
    "claims.example.com/appraisal-api": true
}
]]></artwork>
            <artwork><![CDATA[
evidence_cmw = [
    "application/eat+jwt",
    "<base64-string containing a JWT>"
]
]]></artwork>
            <t>The response payload contains an Attestation Results value as described by a conceptual message wrapper <xref target="I-D.ftbs-rats-msg-wrap"/>.</t>
            <artwork><![CDATA[
attestation_result_cmw = [
    "application/eat+jwt",
    "<base64-string containing a JWT>"
]
]]></artwork>
          </section>
        </section>
        <section anchor="authn-rsp">
          <name>AuthN Response</name>
          <t>The OP sends ‘client-id’, ‘id-token = “Alice”’, ‘access-token-uinfo’, and the Attestation Results to the RP.
The RP processes the Attestation Results to determine if the UE device is trustworthy.
Presumably, if the UE isn’t trustworthy, the protocol is terminated.</t>
          <figure anchor="authn-rsp-flow">
            <name>AuthN Response Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="48" width="208" viewBox="0 0 208 48" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <g class="text">
                    <text x="44" y="36">{::include</text>
                    <text x="148" y="36">authn-rsp.txt}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
{::include authn-rsp.txt}
]]></artwork>
            </artset>
          </figure>
          <section anchor="authn-rsp-payload">
            <name>AuthN Response Payload</name>
            <t>TODO add example</t>
          </section>
        </section>
        <section anchor="user-info-req-rsp">
          <name>UserInfo Request and Response</name>
          <t>The UserInfo request is initiated by the RP, who sends ‘client-id’, ‘id-token = “Alice”’,
and ‘access-token-uinfo’ to the UE to collect user identity information.
The UserInfo response is initiated by the UE, who sends ‘client-id’, ‘id-token = “Alice”’,
‘access-token-uinfo’, and the UserInfo payload to the RP to process user claims and complete the OIDC protocol.</t>
          <figure anchor="user-info-flow">
            <name>UserInfo Request-Response Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="48" width="240" viewBox="0 0 240 48" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <g class="text">
                    <text x="44" y="36">{::include</text>
                    <text x="164" y="36">userinfo-flow.txt}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
{::include userinfo-flow.txt}
]]></artwork>
            </artset>
          </figure>
          <section anchor="user-info-req-rsp-payloads">
            <name>UserInfo Request and Response Payloads</name>
            <t>TODO add example</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <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="OCC2014">
          <front>
            <title>OpenID Connect Core 1.0 incorporating errata set 1</title>
            <author initials="N." surname="Sakimura">
              <organization/>
            </author>
            <date year="2014" 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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz">
              <organization/>
            </author>
            <author fullname="D. Thaler" initials="D." surname="Thaler">
              <organization/>
            </author>
            <author fullname="M. Richardson" initials="M." surname="Richardson">
              <organization/>
            </author>
            <author fullname="N. Smith" initials="N." surname="Smith">
              <organization/>
            </author>
            <author fullname="W. Pan" initials="W." surname="Pan">
              <organization/>
            </author>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims.  It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt">
              <organization/>
            </author>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.  This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="I-D.ftbs-rats-msg-wrap">
          <front>
            <title>RATS Conceptual Messages Wrapper</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Intel</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>arm</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <date day="7" month="March" year="2023"/>
            <abstract>
              <t>   This document defines two encapsulation formats for RATS conceptual
   messages (i.e., evidence, attestation results, endorsements and
   reference values.)

   The first format uses a CBOR or JSON array with two members: one for
   the type, another for the value.  The other format wraps the value in
   a CBOR byte string and prepends a CBOR tag to convey the type
   information.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ftbs-rats-msg-wrap-02"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the following people for their input:</t>
      <ul spacing="normal">
        <li>Jay Chetty - for review feedback.</li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
