<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.15 (Ruby 3.3.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-endorsements-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="RATS Endorsements">RATS Endorsements</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-01"/>
    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization/>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country>USA</country>
        </postal>
        <email>dave.thaler.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</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="2024" month="June" day="12"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 50?>

<t>In the IETF Remote Attestation Procedures (RATS) architecture, a Verifier
accepts Evidence and, using Appraisal Policy typically with additional
input from Endorsements and Reference Values, generates Attestation Results
in formats needed by a Relying Parties.  This document explains the purpose and
role of Endorsements and discusses some considerations in the choice of
message format for Endorsements.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Remote ATtestation ProcedureS Working Group mailing list (rats@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/rats/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/dthaler/rats-endorsements"/>.</t>
    </note>
  </front>
  <middle>
    <?line 60?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Section 3 in the Remote ATtestation procedures (RATS) Architecture <xref target="RFC9334"/> gives an overview of the roles
and conceptual messages in the IETF RATS Architecture.
As discussed in that document, a Verifier accepts a well-defined set of RATS conceptual messages: Evidence, Endorsements
and Reference Values (as well es Policy for Appraisal of Evidence).  A Verifier appraises Evidence using Appraisal Policy for Evidence, typically against a set of Reference Values.</t>
      <t>Various formats of conceptual messages exist, including standard and vendor-specific formats.
One of the purposes of a Verifier is depicted
in Figure 9 of <xref target="RFC9334"/>. A Verifier is intended to be able to accept Evidence in a variety of
formats and generate Attestation Results in the formats needed by a Relying Parties it is intended to cater.</t>
    </section>
    <section anchor="statetypes">
      <name>Actual State vs Reference States</name>
      <t>Appraisal policies (Appraisal Policy for Evidence, and Appraisal Policy for
Attestation Results) involve comparing the actual state of an Attester against
desired or undesired states, in order to determine how trustworthy the Attester
is for its purposes.  The state of an Attester represents its composition of
components of execution environments (its "shape"), typically in a hierarchical
manner.  The state of an Attester also encompasses the combination of static and
dynamic constitution (e.g., provisioned and deployed software, firmware, and
micro-code), static and dynamic configuration, and the resulting operational state
of its components at a certain point of time. Thus, a Verifier needs to receive
messages with information about actual state, and information about desired/undesired
states, and an appraisal policy that controls how the two are compared.</t>
      <t>Each Attester in general has at least one Attesting Environment and one Target
Environment (e.g., hardware, firmware, Operating System, etc.).  Typically, each
Attester has multiple Target Environments, each with their own set of claims (sometimes
called a "claimset") representing their actual state.  Additionally, the number of
Target Environments is not limited.</t>
      <t>"Actual state" is a group of claimsets about the actual state of the Attester at a
given point in time. Each claimset holds claims about a specific Target Environment
that is essential to determining trustworthiness.  Generally speaking, each claim
has a name (or other ID)
and a singleton value, being the value of that specific Attester at a given point
in time. Some claims may inherently have multiple values, such as a list of
files in a given location on the device, but for our purposes we will treat such
a list as a single unit, meaning one Attester at one point in time.</t>
      <t>"Reference state" is a group of claimsets about the desired or undesired state of
the Attester.  Typically, each claim has a name (or other ID) and
a set of potential values, being the values that are allowed/disallowed
when determining whether to trust the Attester.  In general there may be more
gradation than simply "allowed or disallowed" so each value might include some
more complex level of gradation in some implementations.</t>
      <t>That is, where actual state has a single value per claim per Target Environment
applying to one device at one point in time, reference state can have a set of values
per claim per Target Environment.  The appraisal policy then specifies how to match
the actual value against the set of Reference Values.</t>
      <t>Some examples of such matching include:</t>
      <ul spacing="normal">
        <li>
          <t>The actual value must be in the set of allowed Reference Values.</t>
        </li>
        <li>
          <t>The actual value must not be in the set of disallowed Reference Values.</t>
        </li>
        <li>
          <t>The actual value must be in a range where two Reference Values are the min and max.</t>
        </li>
      </ul>
      <section anchor="rats-conceptual-messages">
        <name>RATS Conceptual Messages</name>
        <t>RATS conceptual messages in <xref target="RFC9334"/> fall into the above categories as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Actual state: Evidence, Endorsements, Attestation Results</t>
          </li>
          <li>
            <t>Reference state: Reference Values</t>
          </li>
          <li>
            <t>Appraisal policy: Appraisal Policy for Evidence, Appraisal Policy for Attestation Results</t>
          </li>
        </ul>
        <t>The figure below shows an example of Verifier input for a layered Attester
as discussed in <xref target="RFC9334"/>.</t>
        <figure anchor="input">
          <name>Example Verifier Input</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="576" viewBox="0 0 576 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 104,32 L 104,240" fill="none" stroke="black"/>
                <path d="M 104,272 L 104,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,80" fill="none" stroke="black"/>
                <path d="M 136,112 L 136,160" fill="none" stroke="black"/>
                <path d="M 136,192 L 136,240" fill="none" stroke="black"/>
                <path d="M 136,272 L 136,320" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,80" fill="none" stroke="black"/>
                <path d="M 240,112 L 240,160" fill="none" stroke="black"/>
                <path d="M 240,192 L 240,240" fill="none" stroke="black"/>
                <path d="M 240,272 L 240,320" fill="none" stroke="black"/>
                <path d="M 304,80 L 304,176" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,80" fill="none" stroke="black"/>
                <path d="M 376,112 L 376,160" fill="none" stroke="black"/>
                <path d="M 376,192 L 376,240" fill="none" stroke="black"/>
                <path d="M 376,272 L 376,320" fill="none" stroke="black"/>
                <path d="M 520,32 L 520,80" fill="none" stroke="black"/>
                <path d="M 520,112 L 520,160" fill="none" stroke="black"/>
                <path d="M 520,192 L 520,240" fill="none" stroke="black"/>
                <path d="M 520,272 L 520,320" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,320" fill="none" stroke="black"/>
                <path d="M 104,32 L 120,32" fill="none" stroke="black"/>
                <path d="M 136,32 L 240,32" fill="none" stroke="black"/>
                <path d="M 376,32 L 520,32" fill="none" stroke="black"/>
                <path d="M 536,32 L 552,32" fill="none" stroke="black"/>
                <path d="M 136,80 L 240,80" fill="none" stroke="black"/>
                <path d="M 376,80 L 520,80" fill="none" stroke="black"/>
                <path d="M 136,112 L 240,112" fill="none" stroke="black"/>
                <path d="M 376,112 L 520,112" fill="none" stroke="black"/>
                <path d="M 136,160 L 240,160" fill="none" stroke="black"/>
                <path d="M 376,160 L 520,160" fill="none" stroke="black"/>
                <path d="M 136,192 L 240,192" fill="none" stroke="black"/>
                <path d="M 264,190 L 352,190" fill="none" stroke="black"/>
                <path d="M 264,194 L 352,194" fill="none" stroke="black"/>
                <path d="M 376,192 L 520,192" fill="none" stroke="black"/>
                <path d="M 104,240 L 120,240" fill="none" stroke="black"/>
                <path d="M 136,240 L 240,240" fill="none" stroke="black"/>
                <path d="M 376,240 L 520,240" fill="none" stroke="black"/>
                <path d="M 104,272 L 120,272" fill="none" stroke="black"/>
                <path d="M 136,272 L 240,272" fill="none" stroke="black"/>
                <path d="M 376,272 L 520,272" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 240,320" fill="none" stroke="black"/>
                <path d="M 376,320 L 520,320" fill="none" stroke="black"/>
                <path d="M 536,320 L 552,320" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="360,192 348,186.4 348,197.6" fill="black" transform="rotate(0,352,192)"/>
                <polygon class="arrowhead" points="312,176 300,170.4 300,181.6" fill="black" transform="rotate(90,304,176)"/>
                <polygon class="arrowhead" points="272,192 260,186.4 260,197.6" fill="black" transform="rotate(180,264,192)"/>
                <g class="text">
                  <text x="304" y="36">Appraisal</text>
                  <text x="164" y="52">Actual</text>
                  <text x="216" y="52">state</text>
                  <text x="300" y="52">Policy</text>
                  <text x="424" y="52">Reference</text>
                  <text x="488" y="52">state</text>
                  <text x="180" y="68">(layer</text>
                  <text x="220" y="68">N)</text>
                  <text x="436" y="68">(layer</text>
                  <text x="476" y="68">N)</text>
                  <text x="568" y="68">R</text>
                  <text x="568" y="84">e</text>
                  <text x="568" y="100">f</text>
                  <text x="568" y="116">e</text>
                  <text x="60" y="132">Evidence</text>
                  <text x="164" y="132">Actual</text>
                  <text x="216" y="132">state</text>
                  <text x="424" y="132">Reference</text>
                  <text x="488" y="132">state</text>
                  <text x="568" y="132">r</text>
                  <text x="180" y="148">(layer</text>
                  <text x="220" y="148">2)</text>
                  <text x="436" y="148">(layer</text>
                  <text x="476" y="148">2)</text>
                  <text x="568" y="148">e</text>
                  <text x="568" y="164">n</text>
                  <text x="568" y="180">c</text>
                  <text x="568" y="196">e</text>
                  <text x="164" y="212">Actual</text>
                  <text x="216" y="212">state</text>
                  <text x="308" y="212">Comparison</text>
                  <text x="424" y="212">Reference</text>
                  <text x="488" y="212">state</text>
                  <text x="180" y="228">(layer</text>
                  <text x="220" y="228">1)</text>
                  <text x="304" y="228">Rules</text>
                  <text x="436" y="228">(layer</text>
                  <text x="476" y="228">1)</text>
                  <text x="568" y="228">V</text>
                  <text x="568" y="244">a</text>
                  <text x="568" y="260">l</text>
                  <text x="568" y="276">u</text>
                  <text x="48" y="292">Endorsement</text>
                  <text x="164" y="292">Actual</text>
                  <text x="216" y="292">state</text>
                  <text x="424" y="292">Reference</text>
                  <text x="488" y="292">state</text>
                  <text x="568" y="292">e</text>
                  <text x="180" y="308">(layer</text>
                  <text x="220" y="308">0)</text>
                  <text x="436" y="308">(layer</text>
                  <text x="476" y="308">0)</text>
                  <text x="568" y="308">s</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
            .-- .------------.   Appraisal    .-----------------. --.
            |   |Actual state|    Policy      | Reference state |   |
            |   |  (layer N) |                |    (layer N)    |   | R
            |   '------------'       |        '-----------------'   | e
            |                        |                              | f
            |   .------------.       |        .-----------------.   | e
   Evidence |   |Actual state|       |        | Reference state |   | r
            |   |  (layer 2) |       |        |    (layer 2)    |   | e
            |   '------------'       |        '-----------------'   | n
            |                        v                              | c
            |   .------------.  <==========>  .-----------------.   | e
            |   |Actual state|   Comparison   | Reference state |   |
            |   |  (layer 1) |     Rules      |    (layer 1)    |   | V
            '-- '------------'                '-----------------'   | a
                                                                    | l
            .-- .------------.                .-----------------.   | u
Endorsement |   |Actual state|                | Reference state |   | e
            |   |  (layer 0) |                |    (layer 0)    |   | s
            '-- '------------'                '-----------------' --'
]]></artwork>
          </artset>
        </figure>
        <t>While the above example only shows one layer within Endorsements as
the typical case, there could be multiple layers (see <xref target="multiple-endorsements"/>), such as
a chip added to a hardware board potentially from a different vendor.</t>
        <t>A Trust Anchor Store is a special case of
state above, where the Reference State would be the set of trust anchors
accepted (or rejected) by the Verifier, and the Actual State would be
a trust anchor used to verify Evidence or Endorsements.</t>
        <t>In layered attestation using DICE <xref target="TCG-DICE"/> for example, the actual state of each layer
is signed by a key held by the next lower layer.  Thus in the example diagram
above, the layer 2 actual state (e.g., OS state) is signed by a layer 1 key
(e.g., a signing key used by the firmware), the layer 1 actual state (e.g.,
firmware state) is signed by a layer 0 key (e.g., a hardware key stored in ROM),
and the layer 0 actual state (hardware specs and key ID) is signed by a layer 0
key (e.g., a vendor key) which is matched against the Verifier's trust anchor
store, which is part of the layer 0 reference state depicted above.</t>
      </section>
    </section>
    <section anchor="conditionally-endorsed-values">
      <name>Conditionally Endorsed Values</name>
      <t>Some claims in Endorsements might be conditional. A claim is conditional if
it only applies if actual state matches Reference Values, according to some
matching policy.</t>
      <t>Endorsers should not use conditionally endorsed values based on immutable
values of actual state in Evidence (such as an immutable serial number for example).
An Endorser can, however, use conditionally endorsed values based on mutable
values.  For example an Endorser for a given CPU might provide additional
information about what the CPU supports based on current firmware configuration
state.</t>
      <t>Policies around matching actual state in Evidence against
reference states are normally expressed in Appraisal Policy for Evidence.
Similarly, reference states are normally expressed in the Reference Values
conceptual message.  Such policies allow a Verifier and Relying Parties to make
their decisions about trustworthiness of an Attester.</t>
      <t>The use of conditionally endorsed values, however, is different in that
a matching policy is not about trustworthiness (and hence not "appraisal" per se)
but rather about whether an Endorser's claim is applicable or not, and thus
usable as input to trustworthiness appraisal or not.</t>
      <t>As such the matching policy for conditionally endorsed values must be
up to the Endorser not the Appraisal Policy Provider.  Thus, an Endorsement
format that supports conditionally endorsed values would probably include
some minimal matching policy (e.g., exact match against a singleton reference
value).  This unfortunately complicates design as a Verifier may need
multiple parsers for matching policies.</t>
    </section>
    <section anchor="endorsing-evidence-provenance">
      <name>Endorsing Evidence Provenance</name>
      <t>A Verifier receives Evidence from an Attester that must be considered untrusted
until verified through cryptography. Typically,
the bottom-most Attesting Environment in an Attester will sign claims about one or more Target Environments
with a private key that the Attesting Environment possesses and the Verifier will verify
the resulting Evidence with a public key it possesses, called a verification key below. While this is typical,
cryptography other than public key may also be used.</t>
      <t>Since it is not possible to establish trust in an Attester without cryptography,
the Verifier must have access to a verification key for each Attester. Such a key
could be provisioned directly in the Verifier, though for scalability the Verifier
typically is provisioned with a trusted root CA certificate such that an
Endorsement from an Endorser includes the Attester's verification key material
in the form of a certificate that chains up to that trusted root.  Such a certificate
need not be stored by the Verifier when the Endorsement can be resolved on demand
or passed to the Verifier along with the Evidence to verify, depending on the protocol.</t>
      <t>No particular algorithm or cryptographic protocol is assumed for the verification
of the Attester. The verification key could be, typically, a symmetric key, a raw public key, or a certified public key.</t>
      <t>Evidence typically contains an identifier for the Attester
(e.g., <xref target="I-D.ietf-rats-eat"/> <tt>ueid</tt>) in a claim, sometimes termed an "identity claim",
that can be used by the Verifier to look up its verification key for the Attester.</t>
      <t>While identity claims are just another
type of claims that may be endorsed, some implementations might treat them
differently. For example, a Verifier might perform a first step to
cryptographically verify that the Evidence
has been generated by the Attester that has the key material associated
with the identifier in the identity claim(s) before spending effort on
another step to appraise other claims for determining trustworthiness.</t>
      <t>This document treats identity claims as with any other claims but allows
Appraisal Policy for Evidence to have multiple steps if desired.</t>
    </section>
    <section anchor="multiple-endorsements">
      <name>Multiple Endorsements</name>
      <t>Figure <xref target="input"/> showed an example with an Endorsement at layer 0, such as
a hardware manufacturer providing claims about the hardware. However, the
same could be done at other layers in addition.  For example, an OS vendor
might provide additional static claims about the OS software it provides,
and application developers might provide additional static claims about
the applications they release.</t>
      <t><xref target="multiple"/> depicts an example with an Attester consisting of an application,
OS, firmware, and hardware, each from a different vendor that provides
an Endorsement for their own Target Environment, containing additional claims
about that Target Environment.  Thus each Target Environment (application, OS, firmware,
and hardware) has one set of claims in the Evidence, and an additional
set of claims in the Endorsement from its manufacturer.  A Verifier
that trusts each Endorser would thus use claims from both conceptual
messages when comparing against reference state for a given Target Environment.</t>
      <figure anchor="multiple">
        <name>Multiple Endorsements</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="512" width="456" viewBox="0 0 456 512" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 128,32 L 128,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 128,224" fill="none" stroke="black"/>
              <path d="M 128,256 L 128,336" fill="none" stroke="black"/>
              <path d="M 128,368 L 128,448" fill="none" stroke="black"/>
              <path d="M 232,48 L 232,96" fill="none" stroke="black"/>
              <path d="M 232,160 L 232,208" fill="none" stroke="black"/>
              <path d="M 232,272 L 232,320" fill="none" stroke="black"/>
              <path d="M 232,384 L 232,432" fill="none" stroke="black"/>
              <path d="M 304,48 L 304,96" fill="none" stroke="black"/>
              <path d="M 304,160 L 304,208" fill="none" stroke="black"/>
              <path d="M 304,272 L 304,320" fill="none" stroke="black"/>
              <path d="M 304,384 L 304,432" fill="none" stroke="black"/>
              <path d="M 320,32 L 320,112" fill="none" stroke="black"/>
              <path d="M 320,144 L 320,224" fill="none" stroke="black"/>
              <path d="M 320,256 L 320,336" fill="none" stroke="black"/>
              <path d="M 320,368 L 320,448" fill="none" stroke="black"/>
              <path d="M 336,32 L 336,448" fill="none" stroke="black"/>
              <path d="M 352,48 L 352,96" fill="none" stroke="black"/>
              <path d="M 352,160 L 352,208" fill="none" stroke="black"/>
              <path d="M 352,272 L 352,320" fill="none" stroke="black"/>
              <path d="M 352,384 L 352,432" fill="none" stroke="black"/>
              <path d="M 392,456 L 392,496" fill="none" stroke="black"/>
              <path d="M 424,48 L 424,96" fill="none" stroke="black"/>
              <path d="M 424,160 L 424,208" fill="none" stroke="black"/>
              <path d="M 424,272 L 424,320" fill="none" stroke="black"/>
              <path d="M 424,384 L 424,432" fill="none" stroke="black"/>
              <path d="M 448,32 L 448,448" fill="none" stroke="black"/>
              <path d="M 128,32 L 320,32" fill="none" stroke="black"/>
              <path d="M 336,32 L 448,32" fill="none" stroke="black"/>
              <path d="M 232,48 L 304,48" fill="none" stroke="black"/>
              <path d="M 352,48 L 424,48" fill="none" stroke="black"/>
              <path d="M 80,64 L 112,64" fill="none" stroke="black"/>
              <path d="M 232,96 L 304,96" fill="none" stroke="black"/>
              <path d="M 352,96 L 424,96" fill="none" stroke="black"/>
              <path d="M 128,112 L 320,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 320,144" fill="none" stroke="black"/>
              <path d="M 232,160 L 304,160" fill="none" stroke="black"/>
              <path d="M 352,160 L 424,160" fill="none" stroke="black"/>
              <path d="M 80,176 L 112,176" fill="none" stroke="black"/>
              <path d="M 232,208 L 304,208" fill="none" stroke="black"/>
              <path d="M 352,208 L 424,208" fill="none" stroke="black"/>
              <path d="M 128,224 L 320,224" fill="none" stroke="black"/>
              <path d="M 128,256 L 320,256" fill="none" stroke="black"/>
              <path d="M 232,272 L 304,272" fill="none" stroke="black"/>
              <path d="M 352,272 L 424,272" fill="none" stroke="black"/>
              <path d="M 80,288 L 112,288" fill="none" stroke="black"/>
              <path d="M 232,320 L 304,320" fill="none" stroke="black"/>
              <path d="M 352,320 L 424,320" fill="none" stroke="black"/>
              <path d="M 128,336 L 320,336" fill="none" stroke="black"/>
              <path d="M 128,368 L 320,368" fill="none" stroke="black"/>
              <path d="M 232,384 L 304,384" fill="none" stroke="black"/>
              <path d="M 352,384 L 424,384" fill="none" stroke="black"/>
              <path d="M 80,400 L 112,400" fill="none" stroke="black"/>
              <path d="M 232,432 L 304,432" fill="none" stroke="black"/>
              <path d="M 352,432 L 424,432" fill="none" stroke="black"/>
              <path d="M 128,448 L 320,448" fill="none" stroke="black"/>
              <path d="M 336,448 L 448,448" fill="none" stroke="black"/>
              <path d="M 80,496 L 392,496" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="400,456 388,450.4 388,461.6" fill="black" transform="rotate(270,392,456)"/>
              <polygon class="arrowhead" points="120,400 108,394.4 108,405.6" fill="black" transform="rotate(0,112,400)"/>
              <polygon class="arrowhead" points="120,288 108,282.4 108,293.6" fill="black" transform="rotate(0,112,288)"/>
              <polygon class="arrowhead" points="120,176 108,170.4 108,181.6" fill="black" transform="rotate(0,112,176)"/>
              <polygon class="arrowhead" points="120,64 108,58.4 108,69.6" fill="black" transform="rotate(0,112,64)"/>
              <g class="text">
                <text x="16" y="52">App</text>
                <text x="36" y="68">Endorser</text>
                <text x="176" y="68">Endorsement</text>
                <text x="264" y="68">app</text>
                <text x="384" y="68">app</text>
                <text x="268" y="84">claimset</text>
                <text x="388" y="84">claimset</text>
                <text x="440" y="100">E</text>
                <text x="440" y="116">v</text>
                <text x="440" y="132">i</text>
                <text x="440" y="148">d</text>
                <text x="12" y="164">OS</text>
                <text x="440" y="164">e</text>
                <text x="36" y="180">Endorser</text>
                <text x="176" y="180">Endorsement</text>
                <text x="268" y="180">OS</text>
                <text x="388" y="180">OS</text>
                <text x="440" y="180">n</text>
                <text x="268" y="196">claimset</text>
                <text x="388" y="196">claimset</text>
                <text x="440" y="196">c</text>
                <text x="440" y="212">e</text>
                <text x="36" y="276">Firmware</text>
                <text x="36" y="292">Endorser</text>
                <text x="176" y="292">Endorsement</text>
                <text x="268" y="292">firmware</text>
                <text x="388" y="292">firmware</text>
                <text x="268" y="308">claimset</text>
                <text x="388" y="308">claimset</text>
                <text x="36" y="388">Hardware</text>
                <text x="36" y="404">Endorser</text>
                <text x="176" y="404">Endorsement</text>
                <text x="268" y="404">hardware</text>
                <text x="388" y="404">hardware</text>
                <text x="268" y="420">claimset</text>
                <text x="388" y="420">claimset</text>
                <text x="36" y="500">Attester</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
               .-----------------------. .-------------.
App            |            .--------. | | .--------.  |
Endorser ----> |Endorsement |  app   | | | |  app   |  |
               |            |claimset| | | |claimset|  |
               |            '--------' | | '--------' E|
               '-----------------------' |            v|
                                         |            i|
               .-----------------------. |            d|
OS             |            .--------. | | .--------. e|
Endorser ----> |Endorsement |   OS   | | | |   OS   | n|
               |            |claimset| | | |claimset| c|
               |            '--------' | | '--------' e|
               '-----------------------' |             |
                                         |             |
               .-----------------------. |             |
Firmware       |            .--------. | | .--------.  |
Endorser ----> |Endorsement |firmware| | | |firmware|  |
               |            |claimset| | | |claimset|  |
               |            '--------' | | '--------'  |
               '-----------------------' |             |
                                         |             |
               .-----------------------. |             |
Hardware       |            .--------. | | .--------.  |
Endorser ----> |Endorsement |hardware| | | |hardware|  |
               |            |claimset| | | |claimset|  |
               |            '--------' | | '--------'  |
               '-----------------------' '-------------'
                                                ^
                                                |
Attester ---------------------------------------'
]]></artwork>
        </artset>
      </figure>
      <t>When Target Environments from different vendors each have their own
Endorser, it is important that a Verifier be able to distinguish
which Endorser is allowed to provide an Endorsement about which
Target Environment.  For example, the OS Endorser might be trusted to
provide additional claims about the OS, but not about the hardware.
Thus it is not as simple as saying that a Verifier has a trusted
set of Endorsers. The binding between Target Environment and Endorser might
be part of the Appraisal Policy for Evidence, or might be specified
as part of the Evidence itself, or some combination of the two.
An Endorsement format specification should explain how this concern
is addressed.</t>
    </section>
    <section anchor="endorsement-format-considerations">
      <name>Endorsement Format Considerations</name>
      <t>This section discusses considerations around formats for Endorsements.</t>
      <section anchor="security-considerations">
        <name>Security Considerations</name>
        <t>In many scenarios, a Verifier can also support a variety of different formats,
and while code size may not be a huge concern, simplicity and correctness of code
is essential to security.  "Complexity is the enemy of security" is a popular
security mantra and hence to increase security, any decrease in complexity
helps.  As such, using the same format for both Evidence and Endorsements
can reduce complexity and hence increase security.</t>
      </section>
      <section anchor="scalability">
        <name>Scalability Considerations</name>
        <t>We currently assume that Reference Value Providers and Endorsers typically
provide the same information to a potentially large number of clients
(Verifiers, or potentially to other entities for later relay to a Verifier),
and are generally on devices that are not constrained nodes, and hence additional
scalability, including code size, is not a significant concern.</t>
        <t>The scenario where scalability in terms of code size is strongest, however, is
when a Verifier is embedded into a constrained node.  For example, when a constrained
node is a Relying Party for most purposes, but still needs a way to establish
trust in the Verifier it will use.  In such a case, the Relying Party may have
a constrained Verifier embedded in it that is only capable of appraising Evidence
provided by its desired Verifier.  Thus, the Relying Party uses its embedded Verifier
for purposes of appraising its desired Verifier which it treats as only an Attester,
and once verified, then uses it for verification of all other Attesters.
In this scenario, the embedded Verifier may have code and data size constraints,
and a very simple (by comparison) Appraisal Policy for Evidence and desired state (e.g.,
a required trust anchor that Evidence must be signed with and little else).</t>
        <t>Using the same message format for Evidence, Endorsements, and (later) Attestation Results received
from the later Verifier, can provide a code size savings due to having only a single parser
in this limited case.</t>
        <t>Similarly, an embedded constrained Verifier can choose to not support conditionally
endorsed values, in order to avoid complexity introduced by such.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any actions by IANA.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to thank Thomas Hardjono, Laurence Lundblade, and Kathleen Moriarty
for feedback and ideas that contributed to this document.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-rats-eat">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <author fullname="Giridhar Mandyam" initials="G." surname="Mandyam">
              <organization>Mediatek USA</organization>
            </author>
            <author fullname="Jeremy O'Donoghue" initials="J." surname="O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author fullname="Carl Wallace" initials="C." surname="Wallace">
              <organization>Red Hound Software, Inc.</organization>
            </author>
            <date day="26" month="May" year="2024"/>
            <abstract>
              <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a smartphone, IoT device, network equipment or such.  This claims set
   is used by a relying party, server or service to determine the type
   and degree of trust placed in the entity.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-eat-27"/>
        </reference>
        <reference anchor="TCG-DICE" target="https://trustedcomputinggroup.org/wp-content/uploads/DICE-Attestation-Architecture-Version-1.1-Revision-18_pub.pdf">
          <front>
            <title>DICE Attestation Architecture</title>
            <author>
              <organization>Trusted Computing Group</organization>
            </author>
            <date year="2024" month="January"/>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA808aXMjN3bf8SsQzocRt0jOYW8Sq+ItK3PYSmzP1Ej2fssu
2A2SsLobTKObGlqa/Pa8A0CjD0qeqVRq6VKZ7AYe3o13ALNcLkVjmkKfy6cf
Lq6v5Jsqt7XTpa4a91So9brWh3M5eiVym1WqhGl5rTbN0uhms6xV45Y6GbV8
/kK4dl0a54ytmuMexl++uX4rMls5XbnWncumbrW43fo1/mrrG1Nt5fe1bffC
NarK/6YKW2k/0Oxr+uaal8+ff/P8pVC1VudydqWztjbNcSZubmGNqtF1pZvl
a0ROZKo5l6baWLE350LKxmbn8qgdfHW2bmq9cfH3sex+CtU2O1ufiyXMhmev
V/J6pwpdw0Am/rU66O6ZLpUpgCPwcNXQwxXy5bstPl9ltsQFYDkN6Mxm8COz
uQ5fAXn/tdZb4FYc0lZNDa9+uboIePywkv9u6pudLX6PmPygq5v0qa2BpW9r
1VY7u9G1vLq8hqdBnqMXHvUdQFmtPZTvnGlWmzhylesE/w87Dbg0tXJOy3/5
cyTm6T9//fKbPz+NFL1WdQlizJuUlu91XarqGOi5Xsm31jnVmEjO9c6WyiWP
gR5Vmd/hB7LmR1Op2nZ48/CVH/5dQa9XMEcIlDus1piDRtlfLl+vEmVFzQjf
4O31q++Xry9fvcGRwC0vfkkf4ujsGnVP5/KVLfdtE1V1RoO8Jc0QhLxoGg2U
I8Lyos52ptFZ09baD1X1Fvm4a5q9O3/2rGG4WQC7RahIwbPb/RLMpQF7etbu
C6ty9wzhLxP4yxT+8lddo7ktX6xeLD/og+Ef//q3fbte7fMNLZ+rBhD9D1W1
qj4u5MvnL78WYrlcgoagULNGCHFZyWanyWDlB13aRvdoel/bTOewoJNnaLtz
qRIsFlJJQMRsDJiGyjK9b5x8czC5rjItwawXsnXIvov9vlbGqUK+t4XJjhLc
hMlUURzlrWl2UuW5wfVUAaIE3shNbcueL0JogCCoKMH+VRWtdgu51ZUG0QJ6
KdYftGsL8F+mkqwXTlZa5yDR9RFQ/qCLI2L1XtWN0W4FKrEzToK3a3EtqT/u
CwVKS5zZt/XeOqJG1LbQ0m7GiOXGZS0YiQNfU2qJng+YUBM2DvSfIGU7azKc
L0oNKrzVHjn8Xw/kiqVUmjwvtBBP0NXVNm8zBCcEuEGi8qsAOMjtuuPAfiS3
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
AZwm/hdQIs6zNkYAAA==

-->

</rfc>
