<?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.1 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dthaler-rats-endorsements-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="RATS Endorsements">RATS Endorsements</title>
    <seriesInfo name="Internet-Draft" value="draft-dthaler-rats-endorsements-latest"/>
    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization>Microsoft</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>Arm</organization>
      <address>
        <email>Thomas.Fossati@arm.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="20"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 49?>

<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>
  </front>
  <middle>
    <?line 59?>

<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-identity">
      <name>Endorsing Identity</name>
      <t>One type of claims that might be endorsed would be claims having to do with
identity, such as verification keys.  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 the Attester's identity 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="TCG-DICE" target="https://trustedcomputinggroup.org/wp-content/uploads/DICE-Certificate-Profiles-r01_3june2020-1.pdf">
          <front>
            <title>DICE Certificate Profiles</title>
            <author>
              <organization>Trusted Computing Group</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 328?>



  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81bW48bN5Z+F6D/wG0/uHsgyY4zs4s0NoP0+pIYOxkb7k7m
bQdUFdWquC5askptpe397Xu+c0gWq1RqJ54FdhQY6brw8NyvrOVyOZ+1RVua
S/X43dXNtXpZ5411pjJ16x7PZ3q9tmZ/qY6ezWd5k9W6ooW51Zt2mbdbXRq7
tLp1S5O8uSx1a1w7n7luXRXOFU3dHna07vXLm1fzWdbUztSuc5eqtZ2Zz+5u
/XZ/a+z7or5V39um29HyVtf533XZ1Ca8Wuws/+naZ0+ffvP0GeFrjb5UZ9cm
62zRHs7ms/d3tFPdGlubdvkCqNKeur1URb1p5rNdcTmfKdU22aU6GIe/XWNb
azauv3GokmvapGu3jaV1SwJCt1+s1A0Tj5eFJy/03iQ3G0tE/VhktnENEFDK
VLooiXf03ko4typMu/nuFvdXWVPxxoSHIVTPznCVNbmJfxNx4W9rbomn/Vtd
3Vp6+NP1VcTwh5X6j8K+3zblrz2OP5j6/eA2Y/nK6q7eNhtj1fXrG9wOOnD8
xBOxJUCrtQf0nSva1Sa+uspNSsm7rSGEWqudM+rf/tST9fhf//jsmz897ml7
oW1FIs/bAVHfG1vp+hAJu1mpV41zui16um62TaVdep8I03XxK12BT1e2SpCX
t1f+7e9oV+E+aRcpCO3WFnvDOnLz/Pvli9fPX/IFsSVogeIfM+/sBspocvW8
qXZdG7X3TN7ylnYGKOq5sW2xKUgXjXprm01RGhfe0/YW3Nq27c5dPnnSCtQs
AL0FzBXt+ORutyQDasnOnnS7stG5ewLgywT4MgBf2qdf/f3rX7raPHv67Ony
q9Uu34DO5XJJMoZQshbX89nrWrVbwwaq3pmqIQyvWhgxcxDYZibvrHHqHJZ6
obTNtkVrspZuLpRWPxtLu0P3dZaZXevUy32Rmzoziox4oToH1lztdlYXTpfq
bVMW2UGRXyCUy/Kg7op2q3SeF9hQlxAGka42tqkGbgjgCEVSNAb+sy474xbq
1tTGwu0M8H5nXFfCdRW1EtE6VRuTk7zWB8L6nSkPwOutJuYZtyKRbwunyNF1
2EyZD7tSk9oxc3ad3TWO6ZnPbFMa1WyOUcsLl3Wk6468SmUUnB3xwTI+jlSY
QWXbpsiwfj6rDKnhrfHo4X8DmKsgr6rI89Lg6hG8m23yLgNM3CHnx+R+HeAH
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

-->

</rfc>
