<?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.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-endorsements-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="RATS Endorsements">RATS Endorsements</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-02"/>
    <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="July" day="08"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 51?>

<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 that are useful for Relying Parties.  This document illustrates the purpose and
role of Endorsements and discusses some considerations in the choice of
message format for Endorsements in the scope of the RATS architecture.</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 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Section 3 in the Remote ATtestation procedures (RATS) Architecture <xref section="3" sectionFormat="of" 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 as 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 State</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" or "composition"), typically in a hierarchical
manner, i.e., a tree.
The state of an Attester also encompasses the combination of static and
dynamic composition (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
conceptual 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 "claim sets") representing their actual state.  Additionally, the number of
Target Environments and Attesting Environments that are components of an Attester are not limited.</t>
      <t>"Actual state" is a group of claim sets about the actual state of the Attester at a
given point in time. Each claim set holds claims about a specific Target Environment
that is essential to determining trustworthiness.  Generally speaking, each claim
has a name (typically referred to as label and occasionally referred to as a key, code-point, or some other ID)
and a singleton value, being a value collected from a Target Environment of a 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 in the context of this document such
a list is treated as a single unit, representing one Attester at one point in time.</t>
      <t>"Reference state" is a group of claim sets about the desired or undesired state of
an Attester.  Typically, each claim has a name and
a set of potential values, being the values that are allowed/disallowed
when determining the trustworthiness of 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.  Appraisal policy then specifies how to match
the actual state values against a set of Reference Values.</t>
      <t>Some examples of such matching include:</t>
      <ul spacing="normal">
        <li>
          <t>An actual value must be in the set of allowed Reference Values.</t>
        </li>
        <li>
          <t>An actual value must not be in the set of disallowed Reference Values.</t>
        </li>
        <li>
          <t>An actual value must be in a range where two Reference Values are the min and max.</t>
        </li>
      </ul>
      <section anchor="conceptual">
        <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>In some implementations, hints or suggestions for how to do a comparison might
be supplied by a Reference Value Provider (as part of Reference Values),
an Endorser (in an Endorsement), and/or an Attester (in Evidence),
but the Verifier Owner is authoritative for Appraisal Policy for Evidence,
and the Relying Party Owner is authoritative for Appraisal Policy for
Attestation Results as depicted in <xref section="3" sectionFormat="of" target="RFC9334"/>.</t>
        <t><xref target="input"/> below shows an example of Verifier input for a layered Attester
as discussed in <xref section="3.2" sectionFormat="of" 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>The example in <xref target="input"/> showed an actual state from Evidence for other layers,
and an Endorsement containing actual state for layer 0. However,
some claims in Endorsements might be conditional and so are only treated as actual
state if a condition is met.</t>
      <t>A claim is conditional if
it only applies if other actual state matches Reference Values, according to some
matching policy.
For example an Endorser for a given CPU might provide additional
information about what the CPU supports based on current firmware configuration
state, or an Endorser might provide additional information that if the
serial number is in a given range, then a specific security guarantee is present.</t>
      <t>Thus, actual state is determined by starting with a collection of unconditional claims,
and adding any conditional claims that whose conditions are met based on the actual
state, and then repeating until no more conditional claims are added.</t>
      <t>Verifier policies around matching actual state against
reference state are normally expressed in Appraisal Policy for Evidence.
Similarly, reference state is 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
(see also the DICE example at the end of {conceptual})
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
might be stored in the Verifier, or might be resolved on demand via some protocol,
or might be passed to the Verifier along with the Evidence to verify, depending on the protocol.
Details are out of scope of this document and left to specific protocol documents.</t>
      <t>Specific protocol documents are also responsible for documenting what
particular algorithm or cryptographic protocol is used 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 can contain 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 ("claim set 1") in the Evidence, and an additional
set of claims ("claim set 2") in the Endorsement from its manufacturer.  A Verifier
that trusts each Endorser would thus use the claim sets 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="504" viewBox="0 0 504 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 328,48 L 328,96" fill="none" stroke="black"/>
              <path d="M 328,160 L 328,208" fill="none" stroke="black"/>
              <path d="M 328,272 L 328,320" fill="none" stroke="black"/>
              <path d="M 328,384 L 328,432" fill="none" stroke="black"/>
              <path d="M 344,32 L 344,112" fill="none" stroke="black"/>
              <path d="M 344,144 L 344,224" fill="none" stroke="black"/>
              <path d="M 344,256 L 344,336" fill="none" stroke="black"/>
              <path d="M 344,368 L 344,448" fill="none" stroke="black"/>
              <path d="M 360,32 L 360,448" fill="none" stroke="black"/>
              <path d="M 376,48 L 376,96" fill="none" stroke="black"/>
              <path d="M 376,160 L 376,208" fill="none" stroke="black"/>
              <path d="M 376,272 L 376,320" fill="none" stroke="black"/>
              <path d="M 376,384 L 376,432" fill="none" stroke="black"/>
              <path d="M 424,456 L 424,496" fill="none" stroke="black"/>
              <path d="M 472,48 L 472,96" fill="none" stroke="black"/>
              <path d="M 472,160 L 472,208" fill="none" stroke="black"/>
              <path d="M 472,272 L 472,320" fill="none" stroke="black"/>
              <path d="M 472,384 L 472,432" fill="none" stroke="black"/>
              <path d="M 496,32 L 496,448" fill="none" stroke="black"/>
              <path d="M 128,32 L 344,32" fill="none" stroke="black"/>
              <path d="M 360,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 232,48 L 328,48" fill="none" stroke="black"/>
              <path d="M 376,48 L 472,48" fill="none" stroke="black"/>
              <path d="M 80,64 L 112,64" fill="none" stroke="black"/>
              <path d="M 232,96 L 328,96" fill="none" stroke="black"/>
              <path d="M 376,96 L 472,96" fill="none" stroke="black"/>
              <path d="M 128,112 L 344,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 344,144" fill="none" stroke="black"/>
              <path d="M 232,160 L 328,160" fill="none" stroke="black"/>
              <path d="M 376,160 L 472,160" fill="none" stroke="black"/>
              <path d="M 80,176 L 112,176" fill="none" stroke="black"/>
              <path d="M 232,208 L 328,208" fill="none" stroke="black"/>
              <path d="M 376,208 L 472,208" fill="none" stroke="black"/>
              <path d="M 128,224 L 344,224" fill="none" stroke="black"/>
              <path d="M 128,256 L 344,256" fill="none" stroke="black"/>
              <path d="M 232,272 L 328,272" fill="none" stroke="black"/>
              <path d="M 376,272 L 472,272" fill="none" stroke="black"/>
              <path d="M 80,288 L 112,288" fill="none" stroke="black"/>
              <path d="M 232,320 L 328,320" fill="none" stroke="black"/>
              <path d="M 376,320 L 472,320" fill="none" stroke="black"/>
              <path d="M 128,336 L 344,336" fill="none" stroke="black"/>
              <path d="M 128,368 L 344,368" fill="none" stroke="black"/>
              <path d="M 232,384 L 328,384" fill="none" stroke="black"/>
              <path d="M 376,384 L 472,384" fill="none" stroke="black"/>
              <path d="M 80,400 L 112,400" fill="none" stroke="black"/>
              <path d="M 232,432 L 328,432" fill="none" stroke="black"/>
              <path d="M 376,432 L 472,432" fill="none" stroke="black"/>
              <path d="M 128,448 L 344,448" fill="none" stroke="black"/>
              <path d="M 360,448 L 496,448" fill="none" stroke="black"/>
              <path d="M 80,496 L 424,496" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="432,456 420,450.4 420,461.6" fill="black" transform="rotate(270,424,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="280" y="68">app</text>
                <text x="424" y="68">app</text>
                <text x="256" y="84">claim</text>
                <text x="296" y="84">set</text>
                <text x="320" y="84">2</text>
                <text x="400" y="84">claim</text>
                <text x="440" y="84">set</text>
                <text x="464" y="84">1</text>
                <text x="488" y="100">E</text>
                <text x="488" y="116">v</text>
                <text x="488" y="132">i</text>
                <text x="488" y="148">d</text>
                <text x="12" y="164">OS</text>
                <text x="488" y="164">e</text>
                <text x="36" y="180">Endorser</text>
                <text x="176" y="180">Endorsement</text>
                <text x="276" y="180">OS</text>
                <text x="420" y="180">OS</text>
                <text x="488" y="180">n</text>
                <text x="256" y="196">claim</text>
                <text x="296" y="196">set</text>
                <text x="320" y="196">2</text>
                <text x="400" y="196">claim</text>
                <text x="440" y="196">set</text>
                <text x="464" y="196">1</text>
                <text x="488" y="196">c</text>
                <text x="488" 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="276" y="292">firmware</text>
                <text x="420" y="292">firmware</text>
                <text x="256" y="308">claim</text>
                <text x="296" y="308">set</text>
                <text x="320" y="308">2</text>
                <text x="400" y="308">claim</text>
                <text x="440" y="308">set</text>
                <text x="464" y="308">1</text>
                <text x="36" y="388">Hardware</text>
                <text x="36" y="404">Endorser</text>
                <text x="176" y="404">Endorsement</text>
                <text x="276" y="404">hardware</text>
                <text x="420" y="404">hardware</text>
                <text x="256" y="420">claim</text>
                <text x="296" y="420">set</text>
                <text x="320" y="420">2</text>
                <text x="400" y="420">claim</text>
                <text x="440" y="420">set</text>
                <text x="464" y="420">1</text>
                <text x="36" y="500">Attester</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
               .--------------------------. .----------------.
App            |            .-----------. | | .-----------.  |
Endorser ----> |Endorsement |    app    | | | |    app    |  |
               |            |claim set 2| | | |claim set 1|  |
               |            '-----------' | | '-----------' E|
               '--------------------------' |               v|
                                            |               i|
               .--------------------------. |               d|
OS             |            .-----------. | | .-----------. e|
Endorser ----> |Endorsement |    OS     | | | |    OS     | n|
               |            |claim set 2| | | |claim set 1| c|
               |            '-----------' | | '-----------' e|
               '--------------------------' |                |
                                            |                |
               .--------------------------. |                |
Firmware       |            .-----------. | | .-----------.  |
Endorser ----> |Endorsement | firmware  | | | | firmware  |  |
               |            |claim set 2| | | |claim set 1|  |
               |            '-----------' | | '-----------'  |
               '--------------------------' |                |
                                            |                |
               .--------------------------. |                |
Hardware       |            .-----------. | | .-----------.  |
Endorser ----> |Endorsement | hardware  | | | | hardware  |  |
               |            |claim set 2| | | |claim set 1|  |
               |            '-----------' | | '-----------'  |
               '--------------------------' '----------------'
                                                    ^
                                                    |
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 (e.g., claims from a Target Environment
might include a secure identifier of what Endorser can provide additional
claims about it), 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 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.  We also assume
the same is true of Endorsers.</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, Kathleen Moriarty, and Ned Smith
for feedback and ideas that contributed to this document.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-informative-references">
      <name>Informative 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>
      <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="8" month="July" 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-29"/>
      </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>
  </back>
  <!-- ##markdown-source:
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
wWnifwGE1+tN7EwAAA==

-->

</rfc>
