<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.26 (Ruby 2.7.0) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-dthaler-rats-endorsements-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="RATS Endorsements">RATS Endorsements</title>

    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization>Microsoft</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>dthaler@microsoft.com</email>
      </address>
    </author>

    <date year="2023" month="July" day="10"/>

    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<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 a format needed by a Relying Party.  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>


<section anchor="introduction"><name>Introduction</name>

<t>Section 3 in the RATS Architecture <xref target="RFC9334"/> gives an overview of the roles
and conceptual messages in the IETF Remote Attestation Architecture.
As discussed in that document, a Verifier accepts Evidence and Endorsements,
and appraises them using Appraisal Policy for Evidence, typically against
a set of Reference Values.</t>

<t>Various formats exist, including standard and vendor-specific formats, for
the conceptual messages shown.  Indeed, one of the purposes of a Verifer as depicted
in Figure 9 of <xref target="RFC9334"/> is to be able to accept Evidence in a variety of
formats and generate Attestation Results in the format needed by a Relying Party.</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.  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>"Actual state" is a group of claims about the actual state of the attester at a
given point in time.  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>Each attester in general has multiple components (e.g., hardware, firmware,
Operating System, etc.), each with their own set of claims (sometimes called
a "claimset"), where the actual state of the attester is a group of such claimsets,
for all the key components of the attester that are essential to determining
trustworthiness.</t>

<t>"Reference state" is a group of claims 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 component
applying to one device at one point in time, reference state has a set of values
per claim per component.  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>

<t><list style="symbols">
  <t>The actual value must be in the set of allowed reference values.</t>
  <t>The actual value must not be in the set of disallowed reference values.</t>
  <t>The actual value must be in a range where two reference values are the min and max.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>Actual state: Evidence, Endorsements, Attestation Results</t>
  <t>Reference state: Reference Values</t>
  <t>Appraisal policy: Appraisal Policy for Evidence, Appraisal Policy for Attestation Results</t>
</list></t>

<t>The figure below shows an example of verifier input for a layered attester
as discussed in <xref target="RFC9334"/>.</t>

<figure title="Example Verifier Input" anchor="input"><artwork 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></figure>

<t>While the above example only shows one layer within Endorsements as
the typical case, there could be multiple layers within it, 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 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 component, containing additional claims
about that component.  Thus each component (application, OS, firware,
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 component.</t>

<figure title="Multiple Endorsements" anchor="multiple"><artwork 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></figure>

</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 Verifiers 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 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>


  </middle>

  <back>


    <references title='Normative References'>



<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 title='Informative References'>

<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 year="n.d."/>
  </front>
</reference>


    </references>




  </back>

<!-- ##markdown-source:
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

-->

</rfc>

