<?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.18 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-endorsements-03" 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-03"/>
    <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="24"/>
    <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 Evidence containing actual state for layers 1 through N,
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 whose conditions are met based on the actual
state.  This process is then repeated 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-verification-keys">
      <name>Endorsing Verification Keys</name>
      <t>Attesting Environments have cryptographic keys that allow authenticating the Evidence that they produce.</t>
      <t>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 <xref target="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>Endorsing the linkage between such verification keys and their associated Attesting Environments is crucial to the verification process.</t>
      <t>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:
H4sIAAAAAAAAA9U8aZPjNnbf8StQmg/T2pI0h71J3BVvuTOH3Vnb45pu29+y
C5GQBDcPhSClkXsmvz3vAECApLq9dqpSK9eUWyTw8PAuvAtaLpeiNW2hL+XT
91e3N/JNldeN1aWuWvtUqPW60YdLOXol8jqrVAnT8kZt2qXR7WbZqNYudTRq
+fwzYbt1aaw1ddWe9jD++s3tW5HVldWV7eylbJtOi+PWrfFz3dyZaiu/bupu
L2yrqvxvqqgr7QaafUN/2fbl8+dfPH8pVKPVpZzd6KxrTHuaibsjrFG1uql0
u3yNyIlMtZfSVJta7M2lkLKts0t50hb+tHXTNnpjw/dT2X8Vqmt3dXMpljAb
nr1eydudKnQDA3nzr9VB9890qUwBFIGHq5YerpAuX23x+SqrS1wAltOAzmwG
X7I61/5PQN792egtUCsM6aq2gVc/3lx5PL5Zyf8wzd2uLn4NmHyjq7v4ad0A
Sd82qqt29UY38ub6Fp56fo5eONR3AGW1dlC+sqZdbcLIVa4j/N/vNODSNspa
Lf/1z2EzT//l85df/Plp2NFr1ZTAxryN9/K1bkpVnfx+blfybW2tak3Yzu2u
LpWNHsN+VGV+hS9Imm9NpZq6x5uHr9zwrwp6vYI5QiDfYbXWHDTy/v3bV198
9tnnl5KEVTXZDh5eL1+vIglGcfF/wdvbV18vX1+/eoPTgYROJiR9iMyzWxRI
nctXdbnv2iC/Mxrk1GuGIORV22ogB+5CXsHiptVZ2zXaDVXNFom7a9u9vXz2
rGW4mQe7Rai4rWfH/RJ0qAUle9bti1rl9hnCX0bwlzH85U+6QR1cvli9WL7X
B8Nf/u1v+2692ucbWj5XLSD6n6rqVHNayJfPX34uxHK5BLFBTmetEOK6ku1O
kxbL97qsW53s6YemznQOC1p5gQo9lyrCYiGVBETMxoC+qCzT+9bKNweT6yrT
EnR9ITuL5Lva7xtlrCrkD3VhspME22EyVRQneTTtTqo8N7ieKoC/QBu5aeoy
MVAIDRAEuSXYP6mi03Yht7rSwFpAL8b6vbZdAUbNVJKFxcImVQu4a0BIb7oC
n8Ow4oTY/aCa1mi7AtHYGSvBFHa4pjRF0SGhEDwSad81+9rSxkRTF1rWmzGO
ubFZB0pkwRaVWqJlBHo0hJgF/SBI2a42Gc4XpQYR32qHJ6GVgHQTbFbvaT38
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

-->

</rfc>
