<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tschofenig-rats-psa-token-24" number="9783" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3" xml:lang="en" updates="" obsoletes="">

  <front>
    <title abbrev="Arm's PSA Attestation Token">Arm's Platform Security Architecture (PSA) Attestation Token</title>
    <seriesInfo name="RFC" value="9783"/>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <postal>
	  <country>Germany</country>
	</postal>
	<email>Hannes.Tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="S." surname="Frost" fullname="Simon Frost">
      <organization>Arm Limited</organization>
      <address>
        <email>Simon.Frost@arm.com</email>
      </address>
    </author>
    <author initials="M." surname="Brossard" fullname="Mathias Brossard">
      <organization>Arm Limited</organization>
      <address>
        <email>Mathias.Brossard@arm.com</email>
      </address>
    </author>
    <author initials="A." surname="Shaw" fullname="Adrian Shaw">
      <organization>HP Labs</organization>
      <address>
        <email>adrianlshaw@acm.org</email>
      </address>
    </author>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>thomas.fossati@linaro.org</email>
      </address>
    </author>
    <date year="2025" month="June"/>

<keyword>Remote Attestation</keyword>
<keyword>EAT profile</keyword>
<keyword>Evidence</keyword>
<keyword>RATS</keyword>
<keyword>IoT</keyword>

    <abstract>
<t>Arm's Platform Security Architecture (PSA) is a family of hardware and
firmware security specifications, along with open-source reference
implementations, aimed at helping device makers and chip manufacturers
integrate best-practice security into their products. Devices that
comply with PSA can generate attestation tokens as described in this
document, which serve as the foundation for various protocols, including
secure provisioning and network access control. This document specifies
the structure and semantics of the PSA attestation token.</t>
<t>The PSA attestation token is a profile of the Entity Attestation Token
(EAT). This specification describes the claims used in an attestation
token generated by PSA-compliant systems, how these claims are
serialized for transmission, and how they are cryptographically
protected.</t>
      <t>This Informational document is published as an Independent Submission to improve
interoperability with Arm's architecture. It is not a standard nor
a product of the IETF.</t>
    </abstract>
  </front>
  <middle>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Platform Security Architecture (PSA) <xref target="PSA"/> is a set of hardware and firmware
specifications backed by reference implementations and a security
certification program <xref target="PSACertified"/>.  The security specifications have been published by Arm,
while the certification program and reference implementations are the result of
a collaborative effort by companies from multiple sectors, including evaluation
laboratories, IP semiconductor vendors, and security consultancies.  The main objective of
the PSA initiative is to assist device manufacturers and chip makers in
incorporating best-practice security measures into their products.</t>
      <t>Many devices now have Trusted Execution Environments (TEEs) that provide a safe
space for security-sensitive code, such as cryptography, secure boot, secure
storage, and other essential security functions.  These security
functions are typically exposed through a narrow and well-defined interface,
and can be used by operating system libraries and applications.</t>
      <t>As outlined in the Remote ATtestation procedureS (RATS) Architecture
      <xref target="RFC9334"/>, an Attester produces a signed collection of
      Claims that constitutes Evidence about its Target Environment. This
      document focuses on the output provided by PSA's Initial Attestation API
      <xref target="PSA-API"/>. This output corresponds to Evidence in <xref
      target="RFC9334"/> and, as a design decision, the PSA attestation token
      is a profile of the Entity Attestation Token (EAT) <xref
      target="RFC9711"/>. Note that there are other profiles of EAT available
      for use with different use cases and by different attestation
      technologies, such as <xref target="I-D.kdyxy-rats-tdx-eat-profile"/>
      and <xref target="I-D.mandyam-rats-qwestoken"/>.</t>
      <t>Since the PSA tokens are also consumed by services outside the device, there is an actual
need to ensure interoperability. Interoperability needs are addressed here by
describing the exact syntax and semantics of the attestation claims, and
defining the way these claims are encoded and cryptographically protected.</t>
      <t>Further details on concepts expressed below can be found in the PSA Security
Model documentation <xref target="PSA-SM"/>.</t>
      <t>As mentioned in the abstract, this memo documents a vendor extension
to the RATS architecture and is not a standard.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <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>

      <t>The terms Attester, Relying Party, Verifier, Attestation Result, Target Environment, Attesting Environment, and Evidence
are defined in <xref target="RFC9334"/>. We use the term "receiver" to refer to Relying Parties
and Verifiers.</t>
      <t>We use the terms Evidence, "PSA attestation token", and "PSA token" interchangeably.
The terms "sender" and Attester are used interchangeably. Likewise, we use the terms
Verifier and "verification service" interchangeably.</t>
      <dl newline="true">
        <dt>Root of Trust (RoT):</dt>
        <dd>The minimal set of software, hardware, and data that has to be
        implicitly trusted in the platform; there is no software or hardware
        at a deeper level that can verify that the RoT is authentic and
        unmodified.  An example of RoT is an initial bootloader in ROM, which
        contains cryptographic functions and credentials, running on a
        specific hardware platform.</dd>
        <dt>Secure Processing Environment (SPE):</dt>
        <dd>A platform's processing environment for software that provides
        confidentiality and integrity for its runtime state, from software and
        hardware, outside of the SPE. Contains trusted code and trusted
        hardware.  (Equivalent to a TEE, "secure world", or "secure
        enclave".)</dd>
        <dt>Non-Secure Processing Environment (NSPE):</dt>
        <dd>The security domain (Application domain) outside of the SPE that typically contains the application firmware, real-time operating systems, applications, and general hardware. (Equivalent to Rich Execution Environment (REE), or "normal
        world".)</dd>
      </dl>
      <t>In this document, the structure of data is specified in Concise Data Definition Language (CDDL) <xref target="RFC8610"/>.</t>
    </section>
    <section anchor="sec-psa-attester-model">
      <name>PSA Attester Model</name>
      <t><xref target="fig-psa-attester"/> outlines the structure of the PSA Attester according to
the conceptual model described in <xref section="3.1" sectionFormat="of" target="RFC9334"/>.</t>
      <figure anchor="fig-psa-attester">
        <name>PSA Attester</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="560" viewBox="0 0 560 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,144 L 8,432" fill="none" stroke="black"/>
              <path d="M 24,160 L 24,272" fill="none" stroke="black"/>
              <path d="M 24,304 L 24,416" fill="none" stroke="black"/>
              <path d="M 40,336 L 40,384" fill="none" stroke="black"/>
              <path d="M 96,304 L 96,336" fill="none" stroke="black"/>
              <path d="M 144,336 L 144,384" fill="none" stroke="black"/>
              <path d="M 160,192 L 160,256" fill="none" stroke="black"/>
              <path d="M 160,336 L 160,384" fill="none" stroke="black"/>
              <path d="M 208,256 L 208,336" fill="none" stroke="black"/>
              <path d="M 264,192 L 264,256" fill="none" stroke="black"/>
              <path d="M 272,336 L 272,384" fill="none" stroke="black"/>
              <path d="M 288,336 L 288,384" fill="none" stroke="black"/>
              <path d="M 304,208 L 304,240" fill="none" stroke="black"/>
              <path d="M 328,288 L 328,336" fill="none" stroke="black"/>
              <path d="M 368,208 L 368,240" fill="none" stroke="black"/>
              <path d="M 400,336 L 400,384" fill="none" stroke="black"/>
              <path d="M 408,192 L 408,256" fill="none" stroke="black"/>
              <path d="M 416,336 L 416,384" fill="none" stroke="black"/>
              <path d="M 424,32 L 424,64" fill="none" stroke="black"/>
              <path d="M 464,72 L 464,192" fill="none" stroke="black"/>
              <path d="M 464,304 L 464,336" fill="none" stroke="black"/>
              <path d="M 512,32 L 512,64" fill="none" stroke="black"/>
              <path d="M 520,192 L 520,256" fill="none" stroke="black"/>
              <path d="M 520,336 L 520,384" fill="none" stroke="black"/>
              <path d="M 536,160 L 536,272" fill="none" stroke="black"/>
              <path d="M 536,304 L 536,416" fill="none" stroke="black"/>
              <path d="M 552,144 L 552,432" fill="none" stroke="black"/>
              <path d="M 424,32 L 512,32" fill="none" stroke="black"/>
              <path d="M 424,64 L 512,64" fill="none" stroke="black"/>
              <path d="M 8,144 L 456,144" fill="none" stroke="black"/>
              <path d="M 472,144 L 552,144" fill="none" stroke="black"/>
              <path d="M 24,160 L 456,160" fill="none" stroke="black"/>
              <path d="M 472,160 L 536,160" fill="none" stroke="black"/>
              <path d="M 160,192 L 264,192" fill="none" stroke="black"/>
              <path d="M 320,192 L 352,192" fill="none" stroke="black"/>
              <path d="M 408,192 L 520,192" fill="none" stroke="black"/>
              <path d="M 264,224 L 296,224" fill="none" stroke="black"/>
              <path d="M 376,224 L 408,224" fill="none" stroke="black"/>
              <path d="M 160,256 L 264,256" fill="none" stroke="black"/>
              <path d="M 320,256 L 352,256" fill="none" stroke="black"/>
              <path d="M 408,256 L 520,256" fill="none" stroke="black"/>
              <path d="M 24,272 L 200,272" fill="none" stroke="black"/>
              <path d="M 216,272 L 536,272" fill="none" stroke="black"/>
              <path d="M 112,288 L 448,288" fill="none" stroke="black"/>
              <path d="M 24,304 L 88,304" fill="none" stroke="black"/>
              <path d="M 104,304 L 200,304" fill="none" stroke="black"/>
              <path d="M 216,304 L 320,304" fill="none" stroke="black"/>
              <path d="M 336,304 L 456,304" fill="none" stroke="black"/>
              <path d="M 472,304 L 536,304" fill="none" stroke="black"/>
              <path d="M 40,336 L 88,336" fill="none" stroke="black"/>
              <path d="M 104,336 L 144,336" fill="none" stroke="black"/>
              <path d="M 160,336 L 200,336" fill="none" stroke="black"/>
              <path d="M 216,336 L 272,336" fill="none" stroke="black"/>
              <path d="M 288,336 L 320,336" fill="none" stroke="black"/>
              <path d="M 336,336 L 400,336" fill="none" stroke="black"/>
              <path d="M 416,336 L 456,336" fill="none" stroke="black"/>
              <path d="M 472,336 L 520,336" fill="none" stroke="black"/>
              <path d="M 40,384 L 144,384" fill="none" stroke="black"/>
              <path d="M 160,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 288,384 L 400,384" fill="none" stroke="black"/>
              <path d="M 416,384 L 520,384" fill="none" stroke="black"/>
              <path d="M 24,416 L 536,416" fill="none" stroke="black"/>
              <path d="M 8,432 L 552,432" fill="none" stroke="black"/>
              <path d="M 112,464 L 136,464" fill="none" stroke="black"/>
              <path d="M 216,464 L 240,464" fill="none" stroke="black"/>
              <path d="M 328,464 L 344,464" fill="none" stroke="black"/>
              <path d="M 320,192 C 311.16936,192 304,199.16936 304,208" fill="none" stroke="black"/>
              <path d="M 352,192 C 360.83064,192 368,199.16936 368,208" fill="none" stroke="black"/>
              <path d="M 320,256 C 311.16936,256 304,248.83064 304,240" fill="none" stroke="black"/>
              <path d="M 352,256 C 360.83064,256 368,248.83064 368,240" fill="none" stroke="black"/>
              <path d="M 112,288 C 103.16936,288 96,295.16936 96,304" fill="none" stroke="black"/>
              <path d="M 448,288 C 456.83064,288 464,295.16936 464,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="472,72 460,66.4 460,77.6" fill="black" transform="rotate(270,464,72)"/>
              <polygon class="arrowhead" points="384,224 372,218.4 372,229.6" fill="black" transform="rotate(180,376,224)"/>
              <polygon class="arrowhead" points="304,224 292,218.4 292,229.6" fill="black" transform="rotate(0,296,224)"/>
              <polygon class="arrowhead" points="248,464 236,458.4 236,469.6" fill="black" transform="rotate(0,240,464)"/>
              <polygon class="arrowhead" points="144,464 132,458.4 132,469.6" fill="black" transform="rotate(0,136,464)"/>
              <circle cx="96" cy="336" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="208" cy="336" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="328" cy="336" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="352" cy="464" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="464" cy="336" r="6" class="opendot" fill="white" stroke="black"/>
              <g class="text">
                <text x="468" y="52">Verifier</text>
                <text x="392" y="116">PSA</text>
                <text x="432" y="116">Token</text>
                <text x="72" y="180">Attesting</text>
                <text x="160" y="180">Environment</text>
                <text x="188" y="212">Main</text>
                <text x="332" y="212">Main</text>
                <text x="448" y="212">Initial</text>
                <text x="212" y="228">Bootloader</text>
                <text x="332" y="228">Boot</text>
                <text x="464" y="228">Attestation</text>
                <text x="280" y="244">W</text>
                <text x="336" y="244">State</text>
                <text x="392" y="244">R</text>
                <text x="448" y="244">Service</text>
                <text x="92" y="356">Updateable</text>
                <text x="216" y="356">Application</text>
                <text x="344" y="356">Application</text>
                <text x="440" y="356">PSA</text>
                <text x="472" y="356">RoT</text>
                <text x="64" y="372">PSA</text>
                <text x="96" y="372">RoT</text>
                <text x="184" y="372">RoT</text>
                <text x="324" y="372">Loader</text>
                <text x="468" y="372">Parameters</text>
                <text x="60" y="404">Target</text>
                <text x="136" y="404">Environment</text>
                <text x="32" y="452">Legend:</text>
                <text x="164" y="468">read</text>
                <text x="272" y="468">write</text>
                <text x="392" y="468">measure</text>
                <text x="120" y="484">R</text>
                <text x="224" y="484">W</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                                                    .----------.
                                                    | Verifier |
                                                    '----------'
                                                         ^
                                                         |
                                               PSA Token |
                                                         |
.--------------------------------------------------------|----------.
| .------------------------------------------------------|--------. |
| | Attesting Environment                                |        | |
| |                .------------.     .-----.     .------+------. | |
| |                | Main       |    | Main  |    | Initial     | | |
| |                | Bootloader +--->| Boot  |<---+ Attestation | | |
| |                |            | W  | State |  R | Service     | | |
| |                '-----+------'     '-----'     '-------------' | |
| '----------------------|----------------------------------------' |
|           .------------+--------------+---------------.           |
| .--------|-------------|--------------|----------------|--------. |
| |        |             |              |                |        | |
| | .------o-----. .-----o-------. .----o--------. .-----o------. | |
| | | Updateable | | Application | | Application | | PSA RoT    | | |
| | | PSA RoT    | | RoT         | | Loader      | | Parameters | | |
| | '------------' '-------------' '-------------' '------------' | |
| | Target Environment                                            | |
| '---------------------------------------------------------------' |
'-------------------------------------------------------------------'
Legend:
             ---> read    ---> write    ---o measure
              R            W
]]></artwork>
        </artset>
      </figure>
      <t>The PSA Attester is a relatively straightforward embodiment of the RATS
Attester with exactly one Attesting Environment and one or more Target Environments.</t>

      <t>The Attesting Environment is responsible for collecting the
  information to be represented in PSA claims and to assemble them into
  Evidence.  The Attesting Environment is made of two cooperating
  components:</t>
      <ul spacing="normal">
        <li>
          <t>Executing at boot-time, the Main Bootloader measures the Target Environments (i.e., loaded software
components and all the relevant PSA RoT parameters) and stores the recorded
information in secure memory (Main Boot State). See <xref target="fig-psa-attester-boot"/>.</t>

      <figure anchor="fig-psa-attester-boot">
        <name>PSA Attester Boot Phase</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="352" viewBox="0 0 352 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,80 L 8,192" fill="none" stroke="black"/>
              <path d="M 80,64 L 80,208" fill="none" stroke="black"/>
              <path d="M 192,64 L 192,208" fill="none" stroke="black"/>
              <path d="M 304,64 L 304,208" fill="none" stroke="black"/>
              <path d="M 344,80 L 344,192" fill="none" stroke="black"/>
              <path d="M 8,80 L 72,80" fill="none" stroke="black"/>
              <path d="M 88,80 L 184,80" fill="none" stroke="black"/>
              <path d="M 200,80 L 296,80" fill="none" stroke="black"/>
              <path d="M 312,80 L 344,80" fill="none" stroke="black"/>
              <path d="M 96,128 L 192,128" fill="none" stroke="black"/>
              <path d="M 192,176 L 296,176" fill="none" stroke="black"/>
              <path d="M 8,192 L 72,192" fill="none" stroke="black"/>
              <path d="M 88,192 L 184,192" fill="none" stroke="black"/>
              <path d="M 200,192 L 296,192" fill="none" stroke="black"/>
              <path d="M 312,192 L 344,192" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="304,176 292,170.4 292,181.6" fill="black" transform="rotate(0,296,176)"/>
              <circle cx="88" cy="128" r="6" class="opendot" fill="white" stroke="black"/>
              <g class="text">
                <text x="52" y="36">i-th</text>
                <text x="100" y="36">Target</text>
                <text x="172" y="36">Main</text>
                <text x="212" y="36">Boot</text>
                <text x="284" y="36">Main</text>
                <text x="324" y="36">Boot</text>
                <text x="80" y="52">Environment</text>
                <text x="196" y="52">Loader</text>
                <text x="304" y="52">State</text>
                <text x="36" y="100">loop</text>
                <text x="64" y="100">i</text>
                <text x="120" y="116">measure</text>
                <text x="224" y="148">write</text>
                <text x="248" y="164">measurement</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
    i-th Target    Main Boot     Main Boot
    Environment      Loader        State
         |             |             |
.--------|-------------|-------------|----.
| loop i |             |             |    |
|        | measure     |             |    |
|        |o------------+             |    |
|        |             | write       |    |
|        |             | measurement |    |
|        |             +------------>|    |
'--------|-------------|-------------|----'
         |             |             |
]]></artwork>
        </artset>
      </figure>
	</li>
        <li>The Initial Attestation Service (executing at run-time in SPE)
        answers requests coming from NSPE via the PSA attestation API <xref
        target="PSA-API"/>, collects and formats the claims from Main Boot
        State, and uses the Initial Attestation Key (IAK) to sign them and
        produce Evidence. See <xref target="fig-psa-attester-runtime"/>.</li>
      </ul>
      <t>The word "Initial" in "Initial Attestation Service" refers to a limited set of
Target Environments, namely those representing the first foundational stages
establishing the chain of trust of a PSA device.
Collecting measurements from Target Environments after this initial phase is outside the scope of this specification. Extensions of this specification could collect up-to-date measurements from additional Target Environments and define additional claims for use within those environments, but these are, by definition, custom.</t>
      <figure anchor="fig-psa-attester-runtime">
        <name>PSA Attester Run-Time Phase</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="360" viewBox="0 0 360 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,96 L 8,192" fill="none" stroke="black"/>
              <path d="M 80,80 L 80,288" fill="none" stroke="black"/>
              <path d="M 184,208 L 184,240" fill="none" stroke="black"/>
              <path d="M 216,80 L 216,288" fill="none" stroke="black"/>
              <path d="M 312,80 L 312,288" fill="none" stroke="black"/>
              <path d="M 352,96 L 352,192" fill="none" stroke="black"/>
              <path d="M 8,96 L 72,96" fill="none" stroke="black"/>
              <path d="M 88,96 L 208,96" fill="none" stroke="black"/>
              <path d="M 224,96 L 304,96" fill="none" stroke="black"/>
              <path d="M 320,96 L 352,96" fill="none" stroke="black"/>
              <path d="M 88,176 L 216,176" fill="none" stroke="black"/>
              <path d="M 8,192 L 72,192" fill="none" stroke="black"/>
              <path d="M 88,192 L 208,192" fill="none" stroke="black"/>
              <path d="M 224,192 L 304,192" fill="none" stroke="black"/>
              <path d="M 320,192 L 352,192" fill="none" stroke="black"/>
              <path d="M 184,208 L 216,208" fill="none" stroke="black"/>
              <path d="M 184,240 L 208,240" fill="none" stroke="black"/>
              <path d="M 216,272 L 304,272" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="312,272 300,266.4 300,277.6" fill="black" transform="rotate(0,304,272)"/>
              <polygon class="arrowhead" points="216,240 204,234.4 204,245.6" fill="black" transform="rotate(0,208,240)"/>
              <polygon class="arrowhead" points="96,176 84,170.4 84,181.6" fill="black" transform="rotate(180,88,176)"/>
              <g class="text">
                <text x="216" y="36">Initial</text>
                <text x="60" y="52">Main</text>
                <text x="100" y="52">Boot</text>
                <text x="216" y="52">Attestation</text>
                <text x="80" y="68">State</text>
                <text x="216" y="68">Service</text>
                <text x="316" y="68">Verifier</text>
                <text x="36" y="116">loop</text>
                <text x="64" y="116">i</text>
                <text x="108" y="116">read</text>
                <text x="136" y="132">measurement</text>
                <text x="196" y="132">of</text>
                <text x="108" y="148">i-th</text>
                <text x="156" y="148">Target</text>
                <text x="136" y="164">Environment</text>
                <text x="156" y="228">sign</text>
                <text x="240" y="260">PSA</text>
                <text x="280" y="260">Token</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                       Initial
     Main Boot       Attestation
       State           Service     Verifier
         |                |           |
.--------|----------------|-----------|----.
| loop i | read           |           |    |
|        | measurement of |           |    |
|        | i-th Target    |           |    |
|        | Environment    |           |    |
|        |<---------------+           |    |
'--------|----------------|-----------|----'
         |            .---+           |
         |       sign |   |           |
         |            '-->|           |
         |                | PSA Token |
         |                +---------->|
         |                |           |
]]></artwork>
        </artset>
      </figure>
      <t>The Target Environments can be of four types, some of
which may or may not be present depending on the device architecture:</t>
      <ul spacing="normal">
        <li>(A subset of) the PSA RoT parameters, including Instance and
        Implementation IDs.</li>
        <li>The updateable PSA RoT, including the Secure Partition Manager and
        all PSA RoT services.</li>
        <li>The (optional) Application RoT, that is any application-defined
        security service possibly making use of the PSA RoT services.</li>
        <li>The loader of the application software running in NSPE.</li>
      </ul>
      <t>A reference implementation of the PSA Attester is provided by <xref target="TF-M"/>.</t>
    </section>
    <section anchor="sec-psa-claims">
      <name>PSA Claims</name>
      <t>This section describes the claims to be used in a PSA attestation token.
A more comprehensive treatment of the EAT profiles defined by PSA is found in <xref target="sec-profiles"/>.</t>
      <t>CDDL <xref target="RFC8610"/> along with text descriptions is used to define each claim
independent of encoding.  The following CDDL types are reused by different
claims:</t>
      <sourcecode type="cddl"><![CDATA[
psa-hash-type = bytes .size 32 / bytes .size 48 / bytes .size 64]]></sourcecode>

      <t>Two conventions are used to encode the Right-Hand-Side (RHS) of a claim. The postfix <tt>-label</tt> is used for EAT-defined claims and the postfix <tt>-key</tt> is used for PSA-originated claims.</t>
      <section anchor="caller-claims">
        <name>Caller Claims</name>
        <section anchor="sec-nonce-claim">
          <name>Nonce</name>
          <t>The EAT <xref target="RFC9711"/> "nonce" (claim key 10) is used to carry the challenge provided by the caller to demonstrate freshness of the generated token.</t>
          <t>Since the EAT nonce claim offers flexibility for different
attestation technologies, this specification applies the following constraints
 to the <tt>nonce-type</tt>:</t>
          <ul spacing="normal">
            <li>The length <bcp14>MUST</bcp14> be either 32, 48, or 64 bytes.</li>
            <li>Only a single nonce value is conveyed. The array notation
            <bcp14>MUST NOT</bcp14> be used for encoding the nonce value.</li>
          </ul>
          <t>This claim <bcp14>MUST</bcp14> be present in a PSA attestation token.</t>

          <sourcecode type="cddl">
psa-nonce = (
    nonce-label => psa-hash-type
)</sourcecode>

        </section>
        <section anchor="sec-client-id">
          <name>Client ID</name>
          <t>The Client ID claim represents the security domain of the caller.</t>
          <t>In PSA, a security domain is represented by a signed
integer whereby negative values represent callers from the NSPE and where
positive IDs represent callers from the SPE. The value 0 is not permitted.</t>
          <t>For an example definition of client IDs, see the PSA Firmware Framework <xref target="PSA-FF"/>.</t>
          <t>It is essential that this claim is checked in the verification process to
ensure that a security domain, i.e., an attestation endpoint, cannot spoof a
report from another security domain.</t>
          <t>This claim <bcp14>MUST</bcp14> be present in a PSA attestation token.</t>

          <sourcecode type="cddl">
psa-client-id-nspe-type = -2147483648...0
psa-client-id-spe-type = 1..2147483647

psa-client-id-type = psa-client-id-nspe-type / psa-client-id-spe-type

psa-client-id = (
    psa-client-id-key => psa-client-id-type
)</sourcecode>

        </section>
      </section>
      <section anchor="target-identification-claims">
        <name>Target Identification Claims</name>
        <section anchor="sec-instance-id-claim">
          <name>Instance ID</name>
          <t>The Instance ID claim represents the unique identifier of the IAK.  The full definition is in <xref target="PSA-SM"/>.</t>
          <t>The EAT <tt>ueid</tt> (claim key 256) of type RAND is used.  The following constraints
apply to the <tt>ueid-type</tt>:</t>
          <ul spacing="normal">
            <li>The length <bcp14>MUST</bcp14> be 33 bytes.</li>
            <li>The first byte <bcp14>MUST</bcp14> be 0x01 (RAND) followed by
            the 32-byte unique identifier of the IAK. <xref target="PSA-API"/>
            provides implementation options for deriving the IAK unique
            identifier from the IAK itself.</li>
          </ul>
          <t>This claim <bcp14>MUST</bcp14> be present in a PSA attestation token.</t>

          <sourcecode type="cddl">
psa-instance-id-type = bytes .size 33

psa-instance-id = (
    ueid-label => psa-instance-id-type
)</sourcecode>

        </section>
        <section anchor="sec-implementation-id">
          <name>Implementation ID</name>
          <t>The Implementation ID claim uniquely identifies the hardware assembly of the
immutable PSA RoT. A verification service uses this claim to locate the
details of the PSA RoT implementation from an Endorser or manufacturer.
Such details are used by a verification service to determine the security properties
or certification status of the PSA RoT implementation.</t>
          <t>The value and format of the ID is decided by
the manufacturer or a particular certification scheme. For example, the ID
could take the form of a product serial number,
database ID, or other appropriate identifier.</t>
          <t>This claim <bcp14>MUST</bcp14> be present in a PSA attestation token.</t>

          <t>Note that this identifies the PSA RoT implementation, not a particular instance.
To uniquely identify an instance, see the Instance ID claim <xref target="sec-instance-id-claim"/>.</t>

          <sourcecode type="cddl">
psa-implementation-id-type = bytes .size 32

psa-implementation-id = (
    psa-implementation-id-key => psa-implementation-id-type
)</sourcecode>

        </section>
        <section anchor="sec-certification-reference">
          <name>Certification Reference</name>
          <t>The Certification Reference claim is used to link the class of chip and PSA RoT
of the attesting device to an associated entry in the PSA Certification
database. 
The Certification Reference claim <bcp14>MUST</bcp14> be represented as a
string made of nineteen numeric characters: a thirteen-digit EAN-13 <xref
target="EAN-13"/> followed by a dash "-" and the five-digit versioning
information described in <xref target="PSA-Cert-Guide"/>.</t>
          <t>Linking to the PSA Certification entry can still be achieved if this claim is
not present in the token by making an association at a Verifier between the
reference value and other token claim values, for example, the Implementation
ID.</t>
          <t>This claim <bcp14>MAY</bcp14> be present in a PSA attestation token.</t>

          <sourcecode type="cddl">
psa-certification-reference-type = text .regexp "[0-9]{13}-[0-9]{5}"

psa-certification-reference = (
    ? psa-certification-reference-key => 
        psa-certification-reference-type
)</sourcecode>

        </section>
      </section>
      <section anchor="target-state-claims">
        <name>Target State Claims</name>
        <section anchor="sec-security-lifecycle">
          <name>Security Lifecycle</name>
          <t>The Security Lifecycle claim represents the current lifecycle state of the PSA
RoT. The state is represented by an integer that is divided to convey a major
state and a minor state. A major state is mandatory and defined by <xref target="PSA-SM"/>.
A minor state is optional and 'IMPLEMENTATION DEFINED'. The PSA security
lifecycle state and implementation state are encoded as follows:</t>
          <ul spacing="normal">
            <li>major[15:8] - PSA security lifecycle state, and</li>
            <li>minor[7:0] - IMPLEMENTATION DEFINED state.</li>
          </ul>
          <t>The PSA lifecycle states are illustrated in <xref target="fig-lifecycle-states"/>. For PSA,
a Verifier can only trust reports from the PSA RoT when it is in SECURED or
NON_PSA_ROT_DEBUG major states.</t>
          <t>This claim <bcp14>MUST</bcp14> be present in a PSA attestation token.</t>
          <figure anchor="fig-lifecycle-states">
            <name>PSA Lifecycle States</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="472" viewBox="0 0 472 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 24,272 L 24,416" fill="none" stroke="black"/>
                  <path d="M 24,448 L 24,480" fill="none" stroke="black"/>
                  <path d="M 104,48 L 104,64" fill="none" stroke="black"/>
                  <path d="M 112,144 L 112,160" fill="none" stroke="black"/>
                  <path d="M 128,352 L 128,400" fill="none" stroke="black"/>
                  <path d="M 144,240 L 144,272" fill="none" stroke="black"/>
                  <path d="M 144,480 L 144,512" fill="none" stroke="black"/>
                  <path d="M 160,272 L 160,288" fill="none" stroke="black"/>
                  <path d="M 160,320 L 160,344" fill="none" stroke="black"/>
                  <path d="M 208,64 L 208,120" fill="none" stroke="black"/>
                  <path d="M 208,160 L 208,232" fill="none" stroke="black"/>
                  <path d="M 208,400 L 208,416" fill="none" stroke="black"/>
                  <path d="M 208,448 L 208,472" fill="none" stroke="black"/>
                  <path d="M 232,208 L 232,232" fill="none" stroke="black"/>
                  <path d="M 264,280 L 264,304" fill="none" stroke="black"/>
                  <path d="M 264,336 L 264,352" fill="none" stroke="black"/>
                  <path d="M 280,240 L 280,272" fill="none" stroke="black"/>
                  <path d="M 280,480 L 280,512" fill="none" stroke="black"/>
                  <path d="M 288,352 L 288,400" fill="none" stroke="black"/>
                  <path d="M 304,128 L 304,144" fill="none" stroke="black"/>
                  <path d="M 312,352 L 312,400" fill="none" stroke="black"/>
                  <path d="M 320,32 L 320,48" fill="none" stroke="black"/>
                  <path d="M 352,304 L 352,344" fill="none" stroke="black"/>
                  <path d="M 368,400 L 368,416" fill="none" stroke="black"/>
                  <path d="M 368,448 L 368,480" fill="none" stroke="black"/>
                  <path d="M 400,208 L 400,304" fill="none" stroke="black"/>
                  <path d="M 400,336 L 400,352" fill="none" stroke="black"/>
                  <path d="M 440,352 L 440,400" fill="none" stroke="black"/>
                  <path d="M 120,32 L 320,32" fill="none" stroke="black"/>
                  <path d="M 104,64 L 304,64" fill="none" stroke="black"/>
                  <path d="M 128,128 L 304,128" fill="none" stroke="black"/>
                  <path d="M 112,160 L 288,160" fill="none" stroke="black"/>
                  <path d="M 248,192 L 384,192" fill="none" stroke="black"/>
                  <path d="M 144,240 L 280,240" fill="none" stroke="black"/>
                  <path d="M 40,256 L 144,256" fill="none" stroke="black"/>
                  <path d="M 280,256 L 336,256" fill="none" stroke="black"/>
                  <path d="M 144,272 L 280,272" fill="none" stroke="black"/>
                  <path d="M 128,352 L 288,352" fill="none" stroke="black"/>
                  <path d="M 312,352 L 440,352" fill="none" stroke="black"/>
                  <path d="M 128,400 L 288,400" fill="none" stroke="black"/>
                  <path d="M 312,400 L 440,400" fill="none" stroke="black"/>
                  <path d="M 144,480 L 280,480" fill="none" stroke="black"/>
                  <path d="M 40,496 L 136,496" fill="none" stroke="black"/>
                  <path d="M 288,496 L 352,496" fill="none" stroke="black"/>
                  <path d="M 144,512 L 280,512" fill="none" stroke="black"/>
                  <path d="M 120,32 C 111.16936,32 104,39.16936 104,48" fill="none" stroke="black"/>
                  <path d="M 304,64 C 312.83064,64 320,56.83064 320,48" fill="none" stroke="black"/>
                  <path d="M 128,128 C 119.16936,128 112,135.16936 112,144" fill="none" stroke="black"/>
                  <path d="M 288,160 C 296.83064,160 304,152.83064 304,144" fill="none" stroke="black"/>
                  <path d="M 248,192 C 239.16936,192 232,199.16936 232,208" fill="none" stroke="black"/>
                  <path d="M 384,192 C 392.83064,192 400,199.16936 400,208" fill="none" stroke="black"/>
                  <path d="M 40,256 C 31.16936,256 24,263.16936 24,272" fill="none" stroke="black"/>
                  <path d="M 336,256 C 344.83064,256 352,263.16936 352,272" fill="none" stroke="black"/>
                  <path d="M 40,496 C 31.16936,496 24,488.83064 24,480" fill="none" stroke="black"/>
                  <path d="M 352,496 C 360.83064,496 368,488.83064 368,480" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="360,344 348,338.4 348,349.6" fill="black" transform="rotate(90,352,344)"/>
                  <polygon class="arrowhead" points="296,496 284,490.4 284,501.6" fill="black" transform="rotate(180,288,496)"/>
                  <polygon class="arrowhead" points="272,280 260,274.4 260,285.6" fill="black" transform="rotate(270,264,280)"/>
                  <polygon class="arrowhead" points="240,232 228,226.4 228,237.6" fill="black" transform="rotate(90,232,232)"/>
                  <polygon class="arrowhead" points="216,472 204,466.4 204,477.6" fill="black" transform="rotate(90,208,472)"/>
                  <polygon class="arrowhead" points="216,232 204,226.4 204,237.6" fill="black" transform="rotate(90,208,232)"/>
                  <polygon class="arrowhead" points="216,120 204,114.4 204,125.6" fill="black" transform="rotate(90,208,120)"/>
                  <polygon class="arrowhead" points="168,344 156,338.4 156,349.6" fill="black" transform="rotate(90,160,344)"/>
                  <polygon class="arrowhead" points="144,496 132,490.4 132,501.6" fill="black" transform="rotate(0,136,496)"/>
                  <g class="text">
                    <text x="140" y="52">Device</text>
                    <text x="204" y="52">Assembly</text>
                    <text x="256" y="52">and</text>
                    <text x="292" y="52">Test</text>
                    <text x="244" y="84">Device</text>
                    <text x="252" y="100">Lockdown</text>
                    <text x="136" y="148">PSA</text>
                    <text x="168" y="148">RoT</text>
                    <text x="236" y="148">Provisioning</text>
                    <text x="148" y="196">Provisioning</text>
                    <text x="148" y="212">Lockdown</text>
                    <text x="208" y="260">Secured</text>
                    <text x="352" y="292">Debug</text>
                    <text x="160" y="308">Debug</text>
                    <text x="272" y="324">Recoverable</text>
                    <text x="416" y="324">Recoverable</text>
                    <text x="208" y="372">(Non-Recoverable)</text>
                    <text x="368" y="372">Recoverable</text>
                    <text x="168" y="388">Non-PSA</text>
                    <text x="216" y="388">RoT</text>
                    <text x="256" y="388">Debug</text>
                    <text x="336" y="388">PSA</text>
                    <text x="368" y="388">RoT</text>
                    <text x="408" y="388">Debug</text>
                    <text x="40" y="436">Terminate</text>
                    <text x="208" y="436">Non-Recoverable</text>
                    <text x="328" y="436">PSA</text>
                    <text x="360" y="436">RoT</text>
                    <text x="424" y="436">Compromised</text>
                    <text x="212" y="500">Decommissioned</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
             .-------------------------.
            | Device Assembly and Test |
            '------------+------------'
                         | Device
                         | Lockdown
                         v
              .----------------------.
             | PSA RoT Provisioning  |
             '-----------+----------'
                         |
            Provisioning |   .------------------.
              Lockdown   |  |                    |
                         v  v                    |
                 .----------------.              |
   .-------------+    Secured     +-------.      |
  |              '-+--------------'        |     |
  |                |            ^        Debug   |
  |              Debug          |          |     |
  |                |        Recoverable    |  Recoverable
  |                v            |          v     |
  |            .----------------+--.  .----------+----.
  |            | (Non-Recoverable) |  | Recoverable   |
  |            | Non-PSA RoT Debug |  | PSA RoT Debug |
  |            '---------+---------'  '------+--------'
  |                      |                   |
Terminate         Non-Recoverable      PSA RoT Compromised
  |                      |                   |
  |                      v                   |
  |              .----------------.          |
   '------------>| Decommissioned |<--------'
                 '----------------'
]]></artwork>
            </artset>
          </figure>
          <t>The CDDL representation is shown below.
<xref target="tab-states-map"/> provides the mappings between <xref target="fig-lifecycle-states"/> and the data model.</t>

          <sourcecode type="cddl"><![CDATA[
psa-lifecycle-unknown-type = 0x0000..0x00ff
psa-lifecycle-assembly-and-test-type = 0x1000..0x10ff
psa-lifecycle-psa-rot-provisioning-type = 0x2000..0x20ff
psa-lifecycle-secured-type = 0x3000..0x30ff
psa-lifecycle-non-psa-rot-debug-type = 0x4000..0x40ff
psa-lifecycle-recoverable-psa-rot-debug-type = 0x5000..0x50ff
psa-lifecycle-decommissioned-type = 0x6000..0x60ff

psa-lifecycle-type = 
    psa-lifecycle-unknown-type /
    psa-lifecycle-assembly-and-test-type /
    psa-lifecycle-psa-rot-provisioning-type /
    psa-lifecycle-secured-type /
    psa-lifecycle-non-psa-rot-debug-type /
    psa-lifecycle-recoverable-psa-rot-debug-type /
    psa-lifecycle-decommissioned-type

psa-lifecycle = (
    psa-lifecycle-key => psa-lifecycle-type
)]]></sourcecode>

          <t><tt>psa-lifecycle-unknown-type</tt> is not shown in <xref target="fig-lifecycle-states"/>; it represents an invalid state that must not occur in a system.</t>
          <table anchor="tab-states-map">
            <name>Lifecycle States Mappings</name>
            <thead>
              <tr>
                <th align="left">CDDL</th>
                <th align="left">Lifecycle States</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>psa-lifecycle-unknown-type</tt></td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">
                  <tt>psa-lifecycle-assembly-and-test-type</tt></td>
                <td align="left">Assembly and Test</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>psa-lifecycle-psa-rot-provisioning-type</tt></td>
                <td align="left">PSA RoT Provisioning</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>psa-lifecycle-secured-type</tt></td>
                <td align="left">Secured</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>psa-lifecycle-non-psa-rot-debug-type</tt></td>
                <td align="left">Non-Recoverable PSA RoT Debug</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>psa-lifecycle-recoverable-psa-rot-debug-type</tt></td>
                <td align="left">Recoverable PSA RoT Debug</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>psa-lifecycle-decommissioned-type</tt></td>
                <td align="left">Decommissioned</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="sec-boot-seed">
          <name>Boot Seed</name>
          <t>The "bootseed" claim contains a value created at system boot time
that allows differentiation of attestation reports from different
boot sessions of a particular entity (i.e., a certain Instance ID).</t>
          <t>The EAT "bootseed" (claim key 268) is used.
The following constraints apply to the <tt>binary-data</tt> type:</t>
          <ul spacing="normal">
            <li>The length <bcp14>MUST</bcp14> be between 8 and 32 bytes.</li>
          </ul>
          <t>This claim <bcp14>MAY</bcp14> be present in a PSA attestation token.</t>

          <sourcecode type="cddl">
psa-boot-seed-type = bytes .size (8..32)

psa-boot-seed = (
    boot-seed-label => psa-boot-seed-type
)</sourcecode>

        </section>
      </section>
      <section anchor="software-inventory-claims">
        <name>Software Inventory Claims</name>
        <section anchor="sec-sw-components">
          <name>Software Components</name>
          <t>The Software Components claim is a list of software components that includes
all the software (both code and configuration) loaded by the PSA RoT.  This
claim <bcp14>MUST</bcp14> be included in attestation tokens produced by an implementation
conformant with <xref target="PSA-SM"/>.</t>
          <t>Each entry in the Software Components list describes one software component
using the attributes described in the following subsections.  Unless explicitly
stated, the presence of an attribute is <bcp14>OPTIONAL</bcp14>.</t>
          <t>Note that a Relying Party will typically see the
result of the appraisal process from the Verifier in form of an Attestation
Result rather than the PSA token from the attesting endpoint as described in <xref target="RFC9334"/>.
Therefore, a Relying Party is not expected to understand the Software
Components claim.  Instead, it is for the Verifier to check this claim against
the available Reference Values and provide an answer in form of a "high-level"
Attestation Result, which may or may not include the original Software
Components claim.</t>

          <sourcecode type="cddl"><![CDATA[
psa-software-component = {
  ? &(measurement-type: 1) => text
    &(measurement-value: 2) => psa-hash-type
  ? &(version: 4) => text
    &(signer-id: 5) => psa-hash-type
  ? &(measurement-desc: 6) => text
}

psa-software-components = (
    psa-software-components-key => [ + psa-software-component ]
)]]></sourcecode>

          <section anchor="measurement-type">
            <name>Measurement Type</name>
            <t>The Measurement Type attribute (key=1) is a short string representing the role of
this software component.</t>
            <t>The following measurement types <bcp14>MAY</bcp14> be used for code measurements:</t>
            <dl spacing="normal" newline="false">
              <dt>"BL":</dt><dd>a Boot Loader</dd>
              <dt>"PRoT":</dt><dd>a component of the PSA Root of Trust</dd>
              <dt>"ARoT":</dt><dd>a component of the Application Root of Trust</dd>
              <dt>"App":</dt><dd>a component of the NSPE application</dd>
              <dt>"TS":</dt><dd>a component of a Trusted Subsystem</dd>
            </dl>
            <t>The same labels with a "_CONFIG" postfix (e.g., "PRoT_CONFIG") <bcp14>MAY</bcp14> be used for
configuration measurements.</t>
            <t>This attribute <bcp14>SHOULD</bcp14> be present in a PSA software component unless
there is a very good reason to leave it out, for example, in networks
with severely constrained bandwidth where sparing a few bytes really
makes a difference.</t>
          </section>
          <section anchor="measurement-value">
            <name>Measurement Value</name>
            <t>The Measurement Value attribute (key=2) represents a hash of the invariant
software component in memory at startup time. The value <bcp14>MUST</bcp14> be a cryptographic
hash of 256 bits or stronger.</t>
            <t>This attribute <bcp14>MUST</bcp14> be present in a PSA software component.</t>
          </section>
          <section anchor="version">
            <name>Version</name>
            <t>The Version attribute (key=4) is the issued software version in the form of a
text string. The value of this attribute will correspond to the entry in the
original signed manifest of the component.</t>
          </section>
          <section anchor="signer-id">
            <name>Signer ID</name>
            <t>The Signer ID attribute (key=5) uniquely identifies the signer of the software component. The identification is typically accomplished by hashing the signer's public key.
The value of this attribute will correspond to the
entry in the original manifest for the component. This can be used by a
Verifier to ensure the components were signed by an expected trusted source.</t>
            <t>This attribute <bcp14>MUST</bcp14> be present in a PSA software component to be compliant with
<xref target="PSA-SM"/>.</t>
          </section>
          <section anchor="measurement-description">
            <name>Measurement Description</name>
            <t>The Measurement Description attribute (key=6) contains a string identifying the
hash algorithm used to compute the corresponding Measurement Value.  The string
<bcp14>SHOULD</bcp14> be encoded according to "Hash Name String" in the "Named Information Hash Algorithm Registry" <xref target="NAMED-INFO"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="verification-claims">
        <name>Verification Claims</name>
        <t>  The following claims, although part of Evidence, do not reflect the
  internal state of the Attester. Instead, they aim to help receivers,
  including Relying Parties, in processing the received attestation
  Evidence.</t>
        <section anchor="sec-verification-service-indicator">
          <name>Verification Service Indicator</name>
          <t>The Verification Service Indicator claim is a hint used by a Relying Party to
locate a verification service for the token. The value is a text string that
can be used to locate the service (typically, a URL specifying the address of
the verification service API). A Relying Party may choose to ignore this claim
in favor of other information.</t>

          <sourcecode type="cddl">
psa-verification-service-indicator-type = text

psa-verification-service-indicator = (
    ? psa-verification-service-indicator-key =>
        psa-verification-service-indicator-type
)</sourcecode>

          <t>It is assumed that the Relying Party is pre-configured with a list of trusted
verification services and that the contents of this hint can be used to look
up the correct one. Under no circumstances must the Relying Party be tricked
into contacting an unknown and untrusted verification service since the
returned Attestation Result cannot be relied on.</t>
          <t>Note: This hint requires the Relying Party to parse the content of the
PSA token. Since the Relying Party may not be in possession of a trust
anchor to verify the digital signature, it uses the hint in the same way
as it would treat any other information provided by an external party,
which includes attacker-provided data.</t>
        </section>
        <section anchor="sec-profile-definition-claim">
          <name>Profile Definition</name>
          <t>The Profile Definition claim encodes the unique identifier that corresponds to
the EAT profile described by this document.  This allows a receiver to assign
the intended semantics to the rest of the claims found in the token.</t>
          <t>The EAT <tt>eat_profile</tt> (claim key 265) is used.</t>
          <t>The URI encoding <bcp14>MUST</bcp14> be used.</t>
          <t>The value <bcp14>MUST</bcp14> be <tt>tag:psacertified.org,2023:psa#tfm</tt> for the profile defined in <xref target="sec-tfm-profile"/>.</t>
          <t>Future profiles derived from the baseline PSA profile <bcp14>SHALL</bcp14> create their unique value as described in <xref target="sec-profile-uri-structure"/>.</t>
          <t>This claim <bcp14>MUST</bcp14> be present in a PSA attestation token.</t>
          <t>See <xref target="sec-backwards-compat"/> for considerations about backwards compatibility
with previous versions of the PSA attestation token format.</t>

          <sourcecode type="cddl">
psa-profile-type = "tag:psacertified.org,2023:psa#tfm"

psa-profile = (
    profile-label => psa-profile-type
)</sourcecode>

          <section anchor="sec-profile-uri-structure">
            <name>URI Structure for the Derived Profile Identifiers</name>
            <t>A new profile is associated with a unique string.</t>
            <t>The string <bcp14>MUST</bcp14> use the URI fragment syntax defined in <xref section="3.5" sectionFormat="of" target="RFC3986"/>.</t>
            <t>The string <bcp14>SHOULD</bcp14> be short to avoid unnecessary overhead.</t>
            <t>To avoid collisions, profile authors <bcp14>SHOULD</bcp14> communicate their intent upfront to use a certain string that uses the inquiry form on the website <xref target="PSACertified"/>.</t>
            <t>To derive the value to be used for the <tt>eat_profile</tt> claim, the string is added as a fragment to the <tt>tag:psacertified.org,2023:psa</tt> tag URI <xref target="RFC4151"/>.</t>
            <t>For example, a hypothetical profile using only COSE_Mac0 with the AES Message Authentication Code (AES-MAC) may decide to use the string "aes-mac".  The <tt>eat_profile</tt> value would then be <tt>tag:psacertified.org,2023:psa#aes-mac</tt>.</t>
          </section>
        </section>
      </section>
      <section anchor="sec-backwards-compat">
        <name>Backwards Compatibility Considerations</name>
        <t>An earlier draft of this document <xref target="I-D.tschofenig-rats-psa-token"/> identified by the <tt>PSA_IOT_PROFILE_1</tt>
profile, used claim key values from the "private use range" of the CWT Claims
registry.  These claim keys have now been deprecated.</t>
        <t><xref target="tab-claim-map"/> provides the mappings between the deprecated and new claim
keys.</t>
        <table anchor="tab-claim-map">
          <name>Claim Key Mappings</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="left">PSA_IOT_PROFILE_1</th>
              <th align="left">tag:psacertified.org,2023:psa#tfm</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Nonce</td>
              <td align="left">-75008</td>
              <td align="left">10 (EAT nonce)</td>
            </tr>
            <tr>
              <td align="left">Instance ID</td>
              <td align="left">-75009</td>
              <td align="left">256 (EAT euid)</td>
            </tr>
            <tr>
              <td align="left">Profile Definition</td>
              <td align="left">-75000</td>
              <td align="left">265 (EAT eat_profile)</td>
            </tr>
            <tr>
              <td align="left">Client ID</td>
              <td align="left">-75001</td>
              <td align="left">2394</td>
            </tr>
            <tr>
              <td align="left">Security Lifecycle</td>
              <td align="left">-75002</td>
              <td align="left">2395</td>
            </tr>
            <tr>
              <td align="left">Implementation ID</td>
              <td align="left">-75003</td>
              <td align="left">2396</td>
            </tr>
            <tr>
              <td align="left">Boot Seed</td>
              <td align="left">-75004</td>
              <td align="left">268 (EAT bootseed)</td>
            </tr>
            <tr>
              <td align="left">Certification Reference</td>
              <td align="left">-75005</td>
              <td align="left">2398</td>
            </tr>
            <tr>
              <td align="left">Software Components</td>
              <td align="left">-75006</td>
              <td align="left">2399</td>
            </tr>
            <tr>
              <td align="left">Verification Service Indicator</td>
              <td align="left">-75010</td>
              <td align="left">2400</td>
            </tr>
          </tbody>
        </table>
        <t>The new profile introduces three further changes:</t>
        <ul spacing="normal">
          <li>The "bootseed" claim is now optional and of variable length
          (see <xref target="sec-boot-seed"/>).</li>
          <li>The "No Software Measurements" claim has been retired.</li>
          <li>The "Certification Reference" claim syntax changed from EAN-13
          to EAN-13+5 (see <xref target="sec-certification-reference"/>).</li>
        </ul>

        <t>To simplify the transition to the token format described in this
document, it is <bcp14>RECOMMENDED</bcp14> that Verifiers
accept tokens encoded according to the old profile (<tt>PSA_IOT_PROFILE_1</tt>) as well as
to the profile defined in this document (<tt>tag:psacertified.org,2023:psa#tfm</tt>), at least for the time needed to
their devices to upgrade.</t>
      </section>
    </section>
    <section anchor="sec-profiles">
      <name>Profiles</name>
      <t>This document defines a baseline with common requirements that all PSA profiles must satisfy.
(Note that this does not apply to <xref target="I-D.tschofenig-rats-psa-token"/>.)</t>
      <t>This document also defines a "TFM" profile (<xref target="sec-tfm-profile"/>) that builds on the baseline while constraining the use of COSE algorithms to improve interoperability between Attesters and Verifiers.</t>
      <t>Baseline and TFM are what the EAT calls a "partial" and "full" profile, respectively. See <xref section="6.2" sectionFormat="of" target="RFC9711"/> for further details regarding profiles.</t>
      <section anchor="baseline-profile">
        <name>Baseline Profile</name>
        <section anchor="sec-token-encoding-and-signing">
          <name>Token Encoding and Signing</name>
          <t>The PSA attestation token is encoded in CBOR <xref target="STD94"/> format.
The CBOR representation of a PSA token <bcp14>MUST</bcp14> be "valid" according to the definition in Section <xref section="1.2" sectionFormat="bare" target="RFC8949"/> of RFC 8949 <xref target="STD94"/>.
Besides, only definite-length string, arrays, and maps are allowed.
Given that a PSA Attester is typically found in a constrained device, it <bcp14>MAY</bcp14>
NOT emit CBOR preferred serializations (Section <xref section="4.1" sectionFormat="bare" target="RFC8949"/> of RFC 8949 <xref target="STD94"/>).
Therefore, the Verifier <bcp14>MUST</bcp14> be a variation-tolerant CBOR decoder.</t>
          <t>Cryptographic protection is obtained by wrapping the <tt>psa-token</tt> claims set in a COSE
Web Token (CWT) <xref target="RFC8392"/>.  For asymmetric key algorithms, the signature
structure <bcp14>MUST</bcp14> be a tagged (18) COSE_Sign1.  For symmetric key algorithms, the signature
structure <bcp14>MUST</bcp14> be a tagged (17) COSE_Mac0.</t>
          <t>Acknowledging the variety of markets, regulations, and use cases in which the
PSA attestation token can be used, the baseline profile does not impose any
strong requirement on the cryptographic algorithms that need to be supported by
Attesters and Verifiers.  The flexibility provided by the COSE format should be
sufficient to deal with the level of cryptographic agility needed to adapt to
specific use cases.  It is <bcp14>RECOMMENDED</bcp14> that commonly adopted algorithms are
used, such as those discussed in <xref target="RFC9053"/>.  It is expected that receivers
will accept a wider range of algorithms while Attesters would produce PSA tokens
using only one such algorithm.</t>
          <t>The CWT CBOR tag (61) is not used.  An application that needs to exchange PSA
attestation tokens can wrap the serialized COSE_Sign1 or COSE_Mac0 in the media
type defined in <xref target="sec-iana-media-types"/> or the CoAP Content-Format defined in
<xref target="sec-iana-coap-content-format"/>.</t>
          <t>A PSA token is always directly signed by the PSA RoT.  Therefore,
          a PSA-token claims set (<xref target="sec-psa-claims"/>) is never
          carried in a Detached EAT bundle (<xref section="5"
          sectionFormat="of" target="RFC9711"/>).</t>
        </section>
        <section anchor="freshness-model">
          <name>Freshness Model</name>
          <t>The PSA token supports the freshness models for attestation Evidence based on
nonces and epoch handles (Section <xref target="RFC9334" section="10.2" sectionFormat="bare"/> and Section <xref target="RFC9334" section="10.3" sectionFormat="bare"/> of <xref target="RFC9334"/>) using
the "nonce" claim to convey the nonce or epoch handle supplied by the Verifier.
No further assumption on the specific remote attestation protocol is made.</t>
          <t>Note that use of epoch handles is constrained by the type restrictions imposed by the <tt>eat_nonce</tt> syntax.
For use in PSA tokens, it must be possible to encode the epoch handle as an opaque binary string between 8 and 64 octets.</t>
        </section>
        <section anchor="synopsis">
          <name>Synopsis</name>
          <t><xref target="tbl-baseline-profile"/> presents a concise view of the requirements described in the preceding sections.</t>
          <table anchor="tbl-baseline-profile">
            <name>Baseline Profile</name>
            <thead>
              <tr>
                <th align="left">Issue</th>
                <th align="left">Profile Definition</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">CBOR/JSON</td>
                <td align="left">CBOR <bcp14>MUST</bcp14> be used.</td>
              </tr>
              <tr>
                <td align="left">CBOR Encoding</td>
                <td align="left">Definite length maps and arrays <bcp14>MUST</bcp14> be used.</td>
              </tr>
              <tr>
                <td align="left">CBOR Encoding</td>
                <td align="left">Definite length strings <bcp14>MUST</bcp14> be used.</td>
              </tr>
              <tr>
                <td align="left">CBOR Serialization</td>
                <td align="left">Variant serialization <bcp14>MAY</bcp14> be used.</td>
              </tr>
              <tr>
                <td align="left">COSE Protection</td>
                <td align="left">COSE_Sign1 and/or COSE_Mac0 <bcp14>MUST</bcp14> be used.</td>
              </tr>
              <tr>
                <td align="left">Algorithms</td>
                <td align="left">
                  <xref target="RFC9053"/> <bcp14>SHOULD</bcp14> be used.</td>
              </tr>
              <tr>
                <td align="left">Detached EAT Bundle Usage</td>
                <td align="left">Detached EAT bundles <bcp14>MUST NOT</bcp14> be sent.</td>
              </tr>
              <tr>
                <td align="left">Verification Key Identification</td>
                <td align="left">Any identification method listed in <xref section="F.1" sectionFormat="of" target="RFC9711"/>.</td>
              </tr>
              <tr>
                <td align="left">Endorsements</td>
                <td align="left">See <xref target="sec-psa-endorsements"/>.</td>
              </tr>
              <tr>
                <td align="left">Freshness</td>
                <td align="left">Nonce or epoch ID-based.</td>
              </tr>
              <tr>
                <td align="left">Claims</td>
                <td align="left">Those defined in <xref target="sec-psa-claims"/>. As per general EAT rules, the receiver <bcp14>MUST NOT</bcp14> error out on claims it does not understand.</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="sec-tfm-profile">
        <name>Profile TFM</name>
        <t>The TFM profile is appropriate for the code base implemented in <xref target="TF-M"/> and should apply for most derivative implementations. If an implementation changes the requirements described below, then a different profile value should be used (<xref target="sec-profile-uri-structure"/>) to ensure interoperability. This includes a restriction of the profile to a subset of the COSE Protection scheme requirements.</t>
        <t><xref target="tbl-tfm-profile"/> presents a concise view of the requirements.</t>
        <t>The value of the <tt>eat_profile</tt> <bcp14>MUST</bcp14> be <tt>tag:psacertified.org,2023:psa#tfm</tt>.</t>
        <table anchor="tbl-tfm-profile">
          <name>TF-M Profile</name>
          <thead>
            <tr>
              <th align="left">Issue</th>
              <th align="left">Profile Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">CBOR/JSON</td>
              <td align="left">See <xref target="baseline-profile"/>.</td>
            </tr>
            <tr>
              <td align="left">CBOR Encoding</td>
              <td align="left">See <xref target="baseline-profile"/>.</td>
            </tr>
            <tr>
              <td align="left">CBOR Encoding</td>
              <td align="left">See <xref target="baseline-profile"/>.</td>
            </tr>
            <tr>
              <td align="left">CBOR Serialization</td>
              <td align="left">See <xref target="baseline-profile"/>.</td>
            </tr>
            <tr>
              <td align="left">COSE Protection</td>
              <td align="left">COSE_Sign1 or COSE_Mac0 <bcp14>MUST</bcp14> be used.</td>
            </tr>
            <tr>
              <td align="left">Algorithms</td>
              <td align="left">The receiver <bcp14>MUST</bcp14> accept ES256, ES384, and ES512 with COSE_Sign1 and HMAC256/256, HMAC384/384, and HMAC512/512 with COSE_Mac0; the sender <bcp14>MUST</bcp14> send one of these.</td>
            </tr>
            <tr>
              <td align="left">Detached EAT Bundle Usage</td>
              <td align="left">See <xref target="baseline-profile"/>.</td>
            </tr>
            <tr>
              <td align="left">Verification Key Identification</td>
              <td align="left">Claim-Based Key Identification (<xref section="F.1.4" sectionFormat="of" target="RFC9711"/>) using Instance ID.</td>
            </tr>
            <tr>
              <td align="left">Endorsements</td>
              <td align="left">See <xref target="sec-psa-endorsements"/>.</td>
            </tr>
            <tr>
              <td align="left">Freshness</td>
              <td align="left">See <xref target="baseline-profile"/>.</td>
            </tr>
            <tr>
              <td align="left">Claims</td>
              <td align="left">See <xref target="baseline-profile"/>.</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="collated-cddl">
      <name>Collated CDDL</name>

      <sourcecode type="cddl"><![CDATA[
psa-token = {
    psa-nonce
    psa-instance-id
    psa-verification-service-indicator
    psa-profile
    psa-implementation-id
    psa-client-id
    psa-lifecycle
    psa-certification-reference
    ? psa-boot-seed
    psa-software-components
}

psa-client-id-key = 2394
psa-lifecycle-key = 2395
psa-implementation-id-key = 2396
psa-certification-reference-key = 2398
psa-software-components-key = 2399
psa-verification-service-indicator-key = 2400

nonce-label = 10
ueid-label = 256
boot-seed-label = 268
profile-label = 265

psa-hash-type = bytes .size 32 / bytes .size 48 / bytes .size 64

psa-boot-seed-type = bytes .size (8..32)

psa-boot-seed = (
    boot-seed-label => psa-boot-seed-type
)

psa-client-id-nspe-type = -2147483648...0
psa-client-id-spe-type = 1..2147483647

psa-client-id-type = psa-client-id-nspe-type / psa-client-id-spe-type

psa-client-id = (
    psa-client-id-key => psa-client-id-type
)

psa-certification-reference-type = text .regexp "[0-9]{13}-[0-9]{5}"

psa-certification-reference = (
    ? psa-certification-reference-key => 
        psa-certification-reference-type
)

psa-implementation-id-type = bytes .size 32

psa-implementation-id = (
    psa-implementation-id-key => psa-implementation-id-type
)

psa-instance-id-type = bytes .size 33

psa-instance-id = (
    ueid-label => psa-instance-id-type
)

psa-nonce = (
    nonce-label => psa-hash-type
)

psa-profile-type = "tag:psacertified.org,2023:psa#tfm"

psa-profile = (
    profile-label => psa-profile-type
)

psa-lifecycle-unknown-type = 0x0000..0x00ff
psa-lifecycle-assembly-and-test-type = 0x1000..0x10ff
psa-lifecycle-psa-rot-provisioning-type = 0x2000..0x20ff
psa-lifecycle-secured-type = 0x3000..0x30ff
psa-lifecycle-non-psa-rot-debug-type = 0x4000..0x40ff
psa-lifecycle-recoverable-psa-rot-debug-type = 0x5000..0x50ff
psa-lifecycle-decommissioned-type = 0x6000..0x60ff

psa-lifecycle-type = 
    psa-lifecycle-unknown-type /
    psa-lifecycle-assembly-and-test-type /
    psa-lifecycle-psa-rot-provisioning-type /
    psa-lifecycle-secured-type /
    psa-lifecycle-non-psa-rot-debug-type /
    psa-lifecycle-recoverable-psa-rot-debug-type /
    psa-lifecycle-decommissioned-type

psa-lifecycle = (
    psa-lifecycle-key => psa-lifecycle-type
)

psa-software-component = {
  ? &(measurement-type: 1) => text
    &(measurement-value: 2) => psa-hash-type
  ? &(version: 4) => text
    &(signer-id: 5) => psa-hash-type
  ? &(measurement-desc: 6) => text
}

psa-software-components = (
    psa-software-components-key => [ + psa-software-component ]
)

psa-verification-service-indicator-type = text

psa-verification-service-indicator = (
    ? psa-verification-service-indicator-key =>
        psa-verification-service-indicator-type
)]]></sourcecode>

    </section>
    <section anchor="sec-scalability">
      <name>Scalability Considerations</name>
      <t>IAKs (see <xref target="sec-psa-attester-model"/>) can be either raw public keys or certified public keys.</t>
      <t>Certified public keys require the manufacturer to run the certification
authority (CA) that issues X.509 certificates for the IAKs.  (Note that operating a CA
is a complex and expensive task that may be unaffordable to certain
manufacturers.)</t>
      <t>Using certified public keys offers better scalability properties when compared to using raw public keys, namely:</t>
      <ul spacing="normal">
        <li>Storage requirements for the Verifier are minimized; the same
        manufacturer's trust anchor is used for any number of devices.</li>
	<li>The provisioning model is simpler and more robust since there is no
	need to notify the Verifier about each newly manufactured device.</li>
      </ul>

      <t>Furthermore, existing and well-understood revocation mechanisms can be readily used.</t>
      <t>The IAK's X.509 certificates can be inlined in the PSA token using the <tt>x5chain</tt> COSE
header parameter <xref target="RFC9360"/> at the cost of an increase in the PSA token
size.  <xref section="4.4" sectionFormat="of" target="RFC7925"/> and <xref section="15" sectionFormat="of" target="I-D.ietf-uta-tls13-iot-profile"/> provide
guidance for profiling X.509 certificates used in IoT deployments.
Note that the exact split between pre-provisioned and inlined certificates may vary
depending on the specific deployment.  In that respect, <tt>x5chain</tt> is quite
flexible. It can contain the end entity (EE) certification only, the EE and a partial
chain, or the EE and the full chain up to the trust anchor (see <xref section="2" sectionFormat="of" target="RFC9360"/> for the details).
Constraints around network bandwidth and computing resources available to endpoints, such as network buffers, may dictate a reasonable split point.</t>
    </section>
    <section anchor="psa-token-verification">
      <name>PSA Token Verification</name>
      <t>To verify the token, the primary need is to check correct encoding and signing
as detailed in <xref target="sec-token-encoding-and-signing"/>.
The key used for verification is either supplied to the Verifier by an
authorized Endorser along with the corresponding Attester's Instance ID or
inlined in the token using the <tt>x5chain</tt> header parameter as described in
<xref target="sec-scalability"/>.
If the IAK is a raw public key and the Instance ID claim is
used to assist in
locating the key used to verify the signature covering the CWT token.
If the IAK is a certified public key, X.509 path construction and validation
(<xref section="6" sectionFormat="of" target="RFC5280"/>) up to a trusted CA <bcp14>MUST</bcp14> be successful before the key is
used to verify the token signature.  This also includes revocation checking.</t>
      <t>The Verifier typically has a policy where it compares some claims in
  this profile to reference values registered with it for a given
  deployment.  This verification process serves to confirm that the
  device is endorsed by the manufacturer supply chain. The policy may require that the
relevant claims must have a match to a registered reference value.  All claims
may be worthy of additional appraisal.  It is likely that most deployments
would include a policy with appraisal for the following claims:</t>
      <ul spacing="normal">
        <li>Implementation ID: The value of the Implementation ID can be used
        to identify the verification requirements of the deployment.</li>
        <li>Software Component, Measurement Value: This value can uniquely
        identify a firmware release from the supply chain. In some cases, a
        Verifier may maintain a record for a series of firmware releases
        being patches to an original baseline release. A verification policy
        may then allow this value to match any point on that release sequence
        or expect some minimum level of maturity related to the sequence.</li>
        <li>Software Component, Signer ID: Where present in a deployment, this
        could allow a Verifier to operate a more general policy than that for
        Measurement Value as above by allowing a token to contain any
        firmware entries signed by a known Signer ID without checking for a
        uniquely registered version.</li>
        <li>Certification Reference: If present, this value could be used as a
        hint to locate security certification information associated with the
        attesting device. An example could be a reference to a <xref
        target="PSACertified"/> certificate.</li>
      </ul>
      <section anchor="ar4si-trustworthiness-claims-mappings">
        <name>AR4SI Trustworthiness Claims Mappings</name>
        <t><xref target="I-D.ietf-rats-ar4si"/> defines an information model that Verifiers can employ to
produce Attestation Results.
AR4SI provides a set of standardized appraisal categories and tiers that
greatly simplifies the task of writing Relying Party policies in Multi-Attester
environments.</t>
        <t>The contents of <xref target="tab-ar4si-map"/> are intended as guidance for implementing a
PSA Verifier that computes its results using AR4SI.
The table describes which PSA Evidence claims (if any) are related to which
AR4SI trustworthiness claim, and therefore what the Verifier must consider when
deciding if and how to appraise a certain feature associated with the PSA
Attester.</t>
        <table anchor="tab-ar4si-map">
          <name>AR4SI Claims mappings</name>
          <thead>
            <tr>
              <th align="left">Trustworthiness Vector claims</th>
              <th align="left">Related PSA claims</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                "configuration"</td>
              <td align="left">Software Components (<xref target="sec-sw-components"/>)</td>
            </tr>
            <tr>
              <td align="left">
                "executables"</td>
              <td align="left">ditto</td>
            </tr>
            <tr>
              <td align="left">
                "file-system"</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">
                "hardware"</td>
              <td align="left">Implementation ID (<xref target="sec-implementation-id"/>)</td>
            </tr>
            <tr>
              <td align="left">
                "instance-identity"</td>
              <td align="left">Instance ID (<xref target="sec-instance-id-claim"/>).  The Security Lifecycle (<xref target="sec-security-lifecycle"/>) can also impact the derived identity.</td>
            </tr>
            <tr>
              <td align="left">
                "runtime-opaque"</td>
              <td align="left">Indirectly derived from "executables", "hardware", and "instance-identity".  The Security Lifecycle (<xref target="sec-security-lifecycle"/>) can also be relevant, e.g., any debug state will expose otherwise protected memory.</td>
            </tr>
            <tr>
              <td align="left">
                "sourced-data"</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">
                "storage-opaque"</td>
              <td align="left">Indirectly derived from "executables", "hardware", and "instance-identity".</td>
            </tr>
          </tbody>
        </table>
        <t>This document does not prescribe what value must be chosen based on each
possible situation. When assigning specific Trustworthiness Claim values, an
implementation is expected to follow the algorithm described in <xref section="2.3.3" sectionFormat="of" target="I-D.ietf-rats-ar4si"/>.</t>
      </section>
      <section anchor="sec-psa-endorsements">
        <name>Endorsements, Reference Values, and Verification Key Material</name>
        <t><xref target="I-D.fdb-rats-psa-endorsements"/> defines a protocol based on the <xref target="I-D.ietf-rats-corim"/> data model
that can be used to convey PSA Endorsements, Reference Values, and verification
key material to the Verifier.</t>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>This specification reuses the EAT specification and therefore the CWT specification.
Hence, the security and privacy considerations of those specifications apply here as well.</t>
      <t>Since CWTs offer different ways to protect the token, this specification
profiles those options and allows signatures using public key cryptography as
well as message authentication codes (MACs). COSE_Sign1 is used for digital
signatures and COSE_Mac0 for MACs as defined in the COSE specification <xref target="STD96"/>.
Note, however, that the use of MAC authentication is <bcp14>NOT RECOMMENDED</bcp14> due to the associated
infrastructure costs for key management and protocol complexities.</t>
      <t>A PSA Attester <bcp14>MUST NOT</bcp14> provide Evidence to an untrusted
challenger, as it may allow attackers to interpose and trick the Verifier into
believing the attacker is a legitimate Attester.
This is especially relevant to protocols that use PSA attestation tokens to authenticate the attester to a Relying Party.</t>
      <t>Attestation tokens contain information that may be unique to a device. Therefore, they may allow to single out an individual device for tracking
purposes.  Deployments that have privacy requirements must take appropriate
measures to ensure that the token is only used to provision anonymous/pseudonym
keys.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="cbor-web-token-claims-registration">
        <name>CBOR Web Token Claims Registration</name>
        <t>IANA has registered the following claims 
in the "CBOR Web Token (CWT) Claims" registry
<xref target="CWT"/>.</t>
        <section anchor="client-id-claim">
          <name>Client ID Claim</name>
          <dl spacing="compact" newline="false">
            <dt>Claim Name:</dt><dd>psa-client-id</dd>
            <dt>Claim Description:</dt><dd>PSA Client ID</dd>
            <dt>JWT Claim Name:</dt><dd>N/A</dd>
            <dt>Claim Key:</dt><dd>2394</dd>
            <dt>Claim Value Type(s):</dt><dd>signed integer</dd>
            <dt>Change Controller:</dt><dd>Hannes Tschofenig</dd>
            <dt>Specification Document(s):</dt><dd><xref target="sec-client-id"/> of RFC 9783</dd>
          </dl>
        </section>
        <section anchor="security-lifecycle-claim">
          <name>Security Lifecycle Claim</name>
          <dl spacing="compact" newline="false">
            <dt>Claim Name:</dt><dd>psa-security-lifecycle</dd>
            <dt>Claim Description:</dt><dd>PSA Security Lifecycle</dd>
            <dt>JWT Claim Name:</dt><dd>N/A</dd>
            <dt>Claim Key:</dt><dd>2395</dd>
            <dt>Claim Value Type(s):</dt><dd>unsigned integer</dd>
            <dt>Change Controller:</dt><dd>Hannes Tschofenig</dd>
            <dt>Specification Document(s):</dt><dd><xref target="sec-security-lifecycle"/> of RFC 9783</dd>
          </dl>
        </section>
        <section anchor="implementation-id-claim">
          <name>Implementation ID Claim</name>
	  <dl spacing="compact" newline="false">
            <dt>Claim Name:</dt><dd>psa-implementation-id</dd>
            <dt>Claim Description:</dt><dd>PSA Implementation ID</dd>
            <dt>JWT Claim Name:</dt><dd>N/A</dd>
            <dt>Claim Key:</dt><dd>2396</dd>
            <dt>Claim Value Type(s):</dt><dd>byte string</dd>
            <dt>Change Controller:</dt><dd>Hannes Tschofenig</dd>
            <dt>Specification Document(s):</dt><dd><xref target="sec-implementation-id"/> of RFC 9783</dd>
          </dl>
        </section>
        <section anchor="certification-reference-claim">
          <name>Certification Reference Claim</name>
	  <dl spacing="compact" newline="false">
            <dt>Claim Name:</dt><dd>psa-certification-reference</dd>
            <dt>Claim Description:</dt><dd>PSA Certification Reference</dd>
            <dt>JWT Claim Name:</dt><dd>N/A</dd>
            <dt>Claim Key:</dt><dd>2398</dd>
            <dt>Claim Value Type(s):</dt><dd>text string</dd>
            <dt>Change Controller:</dt><dd>Hannes Tschofenig</dd>
            <dt>Specification Document(s):</dt><dd><xref target="sec-certification-reference"/> of RFC 9783</dd>
          </dl>
        </section>
        <section anchor="software-components-claim">
          <name>Software Components Claim</name>
	  <dl spacing="compact" newline="false">
            <dt>Claim Name:</dt><dd>psa-software-components</dd>
            <dt>Claim Description:</dt><dd>PSA Software Components</dd>
            <dt>JWT Claim Name:</dt><dd>N/A</dd>
            <dt>Claim Key:</dt><dd>2399</dd>
            <dt>Claim Value Type(s):</dt><dd>array</dd>
            <dt>Change Controller:</dt><dd>Hannes Tschofenig</dd>
            <dt>Specification Document(s):</dt><dd><xref target="sec-sw-components"/> of RFC 9783</dd>
          </dl>
        </section>
        <section anchor="verification-service-indicator-claim">
          <name>Verification Service Indicator Claim</name>
	  <dl spacing="compact" newline="false">
            <dt>Claim Name:</dt><dd>psa-verification-service-indicator</dd>
            <dt>Claim Description:</dt><dd>PSA Verification Service Indicator</dd>
            <dt>JWT Claim Name:</dt><dd>N/A</dd>
            <dt>Claim Key:</dt><dd>2400</dd>
            <dt>Claim Value Type(s):</dt><dd>text string</dd>
            <dt>Change Controller:</dt><dd>Hannes Tschofenig</dd>
            <dt>Specification Document(s):</dt><dd><xref target="sec-verification-service-indicator"/> of RFC 9783</dd>
          </dl>
        </section>
      </section>
      <section anchor="sec-iana-media-types">
        <name>Media Types</name>
        <t>This document does not register any new media types. 
To indicate that the transmitted content is a PSA attestation token,
applications can use the <tt>application/eat+cwt</tt> media type defined in
<xref target="RFC9782"/> with the <tt>eat_profile</tt> parameter set to
<tt>tag:psacertified.org,2023:psa#tfm</tt> (or <tt>tag:psacertified.org,2019:psa#legacy</tt> if the token is encoded
according to the old profile; see <xref target="sec-backwards-compat"/>).</t>
      </section>
      <section anchor="sec-iana-coap-content-format">
        <name>CoAP Content-Formats Registration</name>

        <t>IANA has registered two CoAP Content-Format IDs in the First Come First Served range of the "CoAP
Content-Formats" registry <xref target="Content-Formats"/>:</t>
        <ul spacing="normal">
          <li>One for the <tt>application/eat+cwt</tt> media type with the <tt>eat_profile</tt> parameter 
	  equal to <tt>tag:psacertified.org,2023:psa#tfm</tt>.</li>
          <li>Another for the <tt>application/eat+cwt</tt> media type with the <tt>eat_profile</tt>
	  parameter equal to <tt>tag:psacertified.org,2019:psa#legacy</tt>.</li>
        </ul>

        <section anchor="registry-contents">
          <name>Registry Contents</name>

	  <dl spacing="compact" newline="false">
            <dt>Media Type:</dt><dd><tt>application/eat+cwt; eat_profile="tag:psacertified.org,2023:psa#tfm"</tt></dd>
            <dt>Encoding:</dt><dd>-</dd>
            <dt>ID:</dt><dd>10003</dd>
            <dt>Reference:</dt><dd>RFC 9783</dd>
	  </dl>
<dl spacing="compact" newline="false">
            <dt>Media Type:</dt><dd><tt>application/eat+cwt; eat_profile="tag:psacertified.org,2019:psa#legacy"</tt></dd>
            <dt>Encoding:</dt><dd>-</dd>
            <dt>ID:</dt><dd>10004</dd>
            <dt>Reference:</dt><dd>RFC 9783</dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
<back>

    <displayreference target="I-D.fdb-rats-psa-endorsements" to="PSA-Endorsements"/>
    <displayreference target="I-D.ietf-rats-ar4si" to="RATS-AR4SI"/>
    <displayreference target="I-D.ietf-rats-corim" to="RATS-CoRIM"/>
    <displayreference target="I-D.ietf-uta-tls13-iot-profile" to="TLS13-IoT"/>
    <displayreference target="I-D.tschofenig-rats-psa-token" to="PSA-OLD"/>
    <displayreference target="RFC5280" to="X509"/>
    <displayreference target="RFC7925" to="TLS12-IoT"/>
    <displayreference target="RFC9053" to="COSE-ALGS"/>
    <displayreference target="RFC9360" to="COSE-X509"/>
<displayreference target="RFC9711" to="EAT"/> 
<displayreference target="RFC9782" to="EAT-MEDIATYPES"/> 
<displayreference target="I-D.mandyam-rats-qwestoken" to="RATS-QWESTOKEN"/>
<displayreference target="I-D.kdyxy-rats-tdx-eat-profile" to="RATS-TDX"/>

    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>

        <reference anchor="PSA-SM" target="https://www.psacertified.org/app/uploads/2021/12/JSADEN014_PSA_Certified_SM_V1.1_BET0.pdf">
          <front>
            <title>Platform Security Model 1.1</title>
            <author>
              <organization>Arm</organization>
            </author>
            <date year="2021" month="December"/>
          </front>
        </reference>

        <reference anchor="EAN-13" target="https://www.gs1.org/standards/barcodes/ean-upc">
          <front>
            <title>EAN/UPC barcodes</title>
            <author>
              <organization>GS1</organization>
            </author>
          </front>
        </reference>

        <reference anchor="PSA-FF" target="https://developer.arm.com/documentation/den0063/a">
          <front>
            <title>Arm PSA Firmware Framework 1.0</title>
            <author>
              <organization>Arm</organization>
            </author>
          </front>
        </reference>

        <reference anchor="PSA-Cert-Guide" target="https://www.psacertified.org/app/uploads/2020/07/JSADEN011-PSA_Certified_Level_2_Step-by-Step-1.1-20200403.pdf">
          <front>
            <title>PSA Certified Level 2 Step by Step Guide Version 1.1</title>
            <author>
              <organization>PSA Certified</organization>
            </author>
            <date month="April" year="2020"/>
          </front>
        </reference>

	<xi:include href="https://bib.ietf.org/public/rfc/bibxml9/reference.STD.094.xml"/>


	<xi:include href="https://bib.ietf.org/public/rfc/bibxml9/reference.STD.096.xml"/>

	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9053.xml"/>

        <reference anchor="CWT" target="https://www.iana.org/assignments/cwt">
          <front>
            <title>CBOR Web Token (CWT) Claims</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>

	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9711.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9782.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml"/>

        <reference anchor="NAMED-INFO" target="https://www.iana.org/assignments/named-information">
          <front>
            <title>Named Information Hash Algorithm Registry</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4151.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml"/>
      </references>
      <references anchor="sec-informative-references">

        <name>Informative References</name>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.kdyxy-rats-tdx-eat-profile.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mandyam-rats-qwestoken.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7925.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-uta-tls13-iot-profile.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9360.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9334.xml"/>

        <reference anchor="Content-Formats" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>CoAP Content-Formats</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>

        <reference anchor="TF-M" target="https://www.trustedfirmware.org/projects/tf-m/">
          <front>
            <title>Trusted Firmware-M</title>
            <author>
              <organization>Trusted Firmware</organization>
            </author>
          </front>
        </reference>

        <reference anchor="IAT-VERIFIER" target="https://git.trustedfirmware.org/plugins/gitiles/TF-M/tf-m-tools/+/refs/heads/main/iat-verifier/">
          <front>
            <title>iat-verifier</title>
            <author>
              <organization>Trusted Firmware</organization>
            </author>
<date year="2023" month="August" day="18"/>
          </front>
<refcontent>commit: 0b49b00195b7733d6fe74e8f42ed4d7b81242801</refcontent>
        </reference>

        <reference anchor="PSA" target="https://developer.arm.com/documentation/101892/0100/Security---Platform-Security-Architecture?lang=en">
          <front>
            <title>Security - Platform Security Architecture</title>
            <author>
              <organization>Arm</organization>
            </author>
          </front>
        </reference>

        <reference anchor="PSACertified" target="https://psacertified.org">
          <front>
            <title>PSA Certified: IoT Security Framework and Certification</title>
            <author>
              <organization>PSA Certified</organization>
            </author>
          </front>
        </reference>

        <reference anchor="PSA-API" target="https://arm-software.github.io/psa-api/attestation/1.0/IHI0085-PSA_Certified_Attestation_API-1.0.3.pdf">
          <front>
            <title>PSA Certified Attestation API 1.0</title>
            <author>
              <organization>Arm</organization>
            </author>
            <date month="October" year="2022"/>
          </front>
        </reference>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.fdb-rats-psa-endorsements.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rats-corim.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rats-ar4si.xml"/>

<reference anchor="I-D.tschofenig-rats-psa-token" target="https://datatracker.ietf.org/doc/html/draft-tschofenig-rats-psa-token-07">
<front>
<title>
Arm's Platform Security Architecture (PSA) Attestation Token
</title>
<author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig"/>
<author fullname="Simon Frost" initials="S." surname="Frost"/>
<author fullname="Mathias Brossard" initials="M." surname="Brossard"/>
<author fullname="Adrian L. Shaw" initials="A. L." surname="Shaw" />
<author fullname="Thomas Fossati" initials="T." surname="Fossati" />
<date day="1" month="February" year="2021"/></front>
<seriesInfo name="Internet-Draft" value="draft-tschofenig-rats-psa-token-07"/>
</reference>



      </references>
    </references>

<section anchor="examples">
      <name>Examples</name>
      <t>The following examples show PSA attestation tokens for a hypothetical system
comprising a single measured software component.
The attesting device is in a lifecycle state (<xref target="sec-security-lifecycle"/>) of
SECURED.  The attestation has been requested from a client residing in the
SPE.</t>
      <t>The example in <xref target="ex-sign1"/> illustrates the case where the IAK is an asymmetric key.  A COSE Sign1 envelope is used to wrap the PSA-token claims set.</t>
      <t><xref target="ex-mac0"/> illustrates the case where the IAK is a symmetric key and a COSE Mac0 envelope is used instead.</t>
      <t>The claims sets are identical, except for the Instance ID which is synthesized from the key material.</t>
      <t>The examples have been created using the <tt>iat-verifier</tt> tool <xref target="IAT-VERIFIER"/>.</t>
      <section anchor="ex-sign1">
        <name>COSE Sign1 Token</name>

        <sourcecode>
{
  / ueid /                     256: h'01020202020202020202020202
0202020202020202020202020202020202020202',
  / psa-implementation-id /   2396: h'00000000000000000000000000
00000000000000000000000000000000000000',
  / eat_nonce /                 10: h'01010101010101010101010101
01010101010101010101010101010101010101',
  / psa-client-id /           2394: 2147483647,
  / psa-security-lifecycle /  2395: 12288,
  / eat_profile /           265: "tag:psacertified.org,2023:psa#tfm",
  / bootseed /                 268: h'0000000000000000',
  / psa-software-components / 2399: [
    {
      / signer ID /         5: h'0404040404040404040404040404040
404040404040404040404040404040404',
      / measurement value / 2: h'0303030303030303030303030303030
303030303030303030303030303030303',
      / measurement type /  1: "PRoT"
    }
  ]
}</sourcecode>

        <t>The JWK representation of the IAK used for creating the COSE Sign1 signature
over the PSA token is:</t>

        <sourcecode>
{
  "kty": "EC",
  "crv": "P-256",
  "alg": "ES256",
  "x": "Tl4iCZ47zrRbRG0TVf0dw7VFlHtv18HInYhnmMNybo8",
  "y": "gNcLhAslaqw0pi7eEEM2TwRAlfADR0uR4Bggkq-xPy4",
  "d": "Q__-y5X4CFp8QOHT6nkL7063jN131YUDpkwWAPkbM-c"
}</sourcecode>

        <t>The resulting COSE object is:</t>
        <sourcecode>
18([
  h'A10126',
  {},
  h'A81901005821010202020202020202020202020202020202020202020202
02020202020202020219095C5820000000000000000000000000000000000000
00000000000000000000000000000A5820010101010101010101010101010101
010101010101010101010101010101010119095A1A7FFFFFFF19095B19300019
010978217461673A7073616365727469666965642E6F72672C323032333A7073
612374666D19010C48000000000000000019095F81A305582004040404040404
0404040404040404040404040404040404040404040404040402582003030303
0303030303030303030303030303030303030303030303030303030301645052
6F54',
  h'786E937A4C42667AF3847399319CA95C7E7DBABDC9B50FDB8DE3F6BFF4AB
82FF80C42140E2A488000219E3E10663193DA69C75F52B798EA10B2F7041A90E
8E5A'
])</sourcecode>

        <t>which has the following base16 encoding:</t>

        <sourcecode>
d28443a10126a0590100a819010058210102020202020202020202020202
0202020202020202020202020202020202020219095c5820000000000000
00000000000000000000000000000000000000000000000000000a582001
010101010101010101010101010101010101010101010101010101010101
0119095a1a7fffffff19095b19300019010978217461673a707361636572
7469666965642e6f72672c323032333a7073612374666d19010c48000000
000000000019095f81a30558200404040404040404040404040404040404
040404040404040404040404040404025820030303030303030303030303
0303030303030303030303030303030303030303016450526f545840786e
937a4c42667af3847399319ca95c7e7dbabdc9b50fdb8de3f6bff4ab82ff
80c42140e2a488000219e3e10663193da69c75f52b798ea10b2f7041a90e
8e5a</sourcecode>

      </section>
      <section anchor="ex-mac0">
        <name>COSE Mac0 Token</name>

        <sourcecode>
{
  / ueid /                     256: h'01C557BD4FADC83F756FCA2CD5
EA2DCC8B82159BB4E7453D6A744D4EECD6D0AC60',
  / psa-implementation-id /   2396: h'00000000000000000000000000
00000000000000000000000000000000000000',
  / eat_nonce /                 10: h'01010101010101010101010101
01010101010101010101010101010101010101',
  / psa-client-id /           2394: 2147483647,
  / psa-security-lifecycle /  2395: 12288,
  / eat_profile /           265: "tag:psacertified.org,2023:psa#tfm",
  / psa-boot-seed /            268: h'0000000000000000',
  / psa-software-components / 2399: [
    {
      / signer ID /         5: h'0404040404040404040404040404040
404040404040404040404040404040404',
      / measurement value / 2: h'0303030303030303030303030303030
303030303030303030303030303030303',
      / measurement type /  1: "PRoT"
    }
  ]
}</sourcecode>

        <t>The JWK representation of the IAK used for creating the COSE Mac0 signature
over the PSA token is:</t>

        <sourcecode>
========== NOTE: '\\' line wrapping per RFC 8792 ==========

{
  "kty": "oct",
  "alg": "HS256",
  "k": "3gOLNKyhJXaMXjNXq40Gs2e5qw1-i-Ek7cpH_gM6W7epPTB_8imqNv8k\
       \bBKVlk-s9xq3qm7E_WECt7OYMlWtkg"
}</sourcecode>

        <t>The resulting COSE object is:</t>

        <sourcecode>
17([
  h'A10105',
  {},
  h'A8190100582101C557BD4FADC83F756FCA2CD5EA2DCC8B82159BB4E7453D
6A744D4EECD6D0AC6019095C5820000000000000000000000000000000000000
00000000000000000000000000000A5820010101010101010101010101010101
010101010101010101010101010101010119095A1A7FFFFFFF19095B19300019
010978217461673A7073616365727469666965642E6F72672C323032333A7073
612374666D19010C48000000000000000019095F81A305582004040404040404
0404040404040404040404040404040404040404040404040402582003030303
0303030303030303030303030303030303030303030303030303030301645052
6F54',
  h'CF88D330E7A5366A95CF744A4DBF0D50304D405EDD8B2530E243EDDBD317
7820'
])</sourcecode>

        <t>which has the following base16 encoding:</t>
        <sourcecode>
d18443a10105a0590100a8190100582101c557bd4fadc83f756fca2cd5ea
2dcc8b82159bb4e7453d6a744d4eecd6d0ac6019095c5820000000000000
00000000000000000000000000000000000000000000000000000a582001
010101010101010101010101010101010101010101010101010101010101
0119095a1a7fffffff19095b19300019010978217461673a707361636572
7469666965642e6f72672c323032333a7073612374666d19010c48000000
000000000019095f81a30558200404040404040404040404040404040404
040404040404040404040404040404025820030303030303030303030303
0303030303030303030303030303030303030303016450526f545820cf88
d330e7a5366a95cf744a4dbf0d50304d405edd8b2530e243eddbd3177820</sourcecode>

      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thank you <contact fullname="Carsten Bormann"/> for help with the
      CDDL.  Thanks to <contact fullname="Nicholas Wood"/>, <contact
      fullname="Eliot Lear"/>, <contact fullname="Yaron Sheffer"/>, <contact
      fullname="Kathleen Moriarty"/>, and <contact fullname="Ned Smith"/> for
      ideas, comments, and suggestions.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="L." surname="Lundblade" fullname="Laurence Lundblade">
        <organization>Security Theory LLC</organization>
        <address>
          <email>lgl@securitytheory.com</email>
        </address>
      </contact>
      <contact initials="T." surname="Ban" fullname="Tamas Ban">
        <organization>Arm Limited</organization>
        <address>
          <email>Tamas.Ban@arm.com</email>
        </address>
      </contact>
      <contact initials="S." surname="Trofimov" fullname="Sergei Trofimov">
        <organization>Arm Limited</organization>
        <address>
          <email>Sergei.Trofimov@arm.com</email>
        </address>
      </contact>
    </section>
  </back>
</rfc>
