<?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.20 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-endorsements-05" category="info" consensus="true" submissionType="IETF" updates="9334" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="RATS Endorsements">RATS Endorsements</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-05"/>
    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization>Armidale Consulting</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="November" day="08"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 53?>

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

<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-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="timeliness">
      <name>Timeliness</name>
      <t>Specific protocol documents are also responsible for documenting how Timeliness
of the Endorsement itself (e.g., using a certificate lifetime) is provided.</t>
      <t><xref section="8.1" sectionFormat="of" target="RFC9334"/> discusses timeliness of claims in Evidence.  When
additional static claims are provided in Endorsements, no additional steps
are needed for timeliness of those claims since they are static rather than
dynamically varying by time.  Once timeliness of Evidence is verified,
any matching conditionally endorsed values can be applied.</t>
      <t>If Endorsements ever carry dynamic claims in the future (e.g., whether
any vulnerabilities in the version of firmware are currently known), then
the same timeliness considerations as for claims in Evidence would apply,
and would be the responsibility of specific protocol documents. See
<xref section="10" sectionFormat="of" target="RFC9334"/> and <xref section="A" sectionFormat="of" target="RFC9334"/> for further discussion.</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 an 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="formats-security">
        <name>Security Considerations for Formats</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 for Formats</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="security-considerations">
      <name>Security Considerations</name>
      <t><xref section="8.4" sectionFormat="of" target="RFC9334"/> discusses how a Verifier stores one or more trust anchors
in its trust anchor store.  The Verifier's trust in an Endorser is expressed via
storing a trust anchor for the Endorser.  The binding from an Endorsement to
a given Target Environment is done as discussed in <xref target="endorsing-keys"/> of this document.</t>
      <t><xref target="RFC9334"/> (especially Section 3.2 and Section 12) also discusses security considerations
around the attestation of layers, and around sources of appraisal policies.
<xref target="endorsing-keys"/> of this document covers additional considerations in these areas,
and <xref target="formats-security"/> covers additional considerations around Endorsement formats.</t>
    </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, Ned Smith,
and Carl Wallace 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="6" month="September" 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-31"/>
      </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:
H4sIAAAAAAAAA9U823LjNpbv+AqU+qGtKUl9SbI7cW2m4nV3J95J0qm2k7zt
DERCEmJetAQpt+Lu/fY9FwAESMruSaZqa5zqik0CBwfnhnMDl8ulaE1b6HP5
9N3FzbV8XeV1Y3Wpq9Y+FWq9bvThXI5eibzOKlXCtLxRm3ZpdLtZNqq1Sx2N
Wj7/QnT7XLXanssvP/vsc2G7dWmsNXXVHvcw++r1zRuR1ZXVle1gUNt0Wtxt
3Yq/1M2tqbbym6bu9sK2qsr/poq60m6g2Tf0m21fPn/+5fOXQjVancvZtc66
xrTHmbi9gzWqVjeVbpevEFWRqfZcmmpTi705F1K2dXYuj9rCr7Zu2kZvbPj7
WPZ/CtW1u7o5F0uYDc9ereTNThW6gYFMilfqoPtndbNVlflNtbDZc3nRlCaH
N/ISNtsVLWwLxuhSmQJoCBNXLU1cISW/3uLzVVaXiASgpAHl2Qz+yOpc+19h
g+7XRm9pETekq9oGXv10feFx/XYl/9M0t7u6+C1g+62ubuOngO+5fNOortrV
G93I66sbeOolYPTCob4DKKu1g/K1Ne1qE0auch3h/26nAZe2UdZq+e9fhM08
/bfPX375xdOwo1eqKYHVeRvv5RvdlKo6+v3crOSb2lqgbdjOza4ulY0ep/T/
zlSqqXu8efjKDf+6oNcrmCMEygas1pqDRvl49+YSRfdcknirJtvBw6vlq1Uk
8yhS/jd4e3P5zfLV1eVrnA4kdHIj6YfIPLtBodU5SEO579og4zMa5BRyhiDk
RQva09IuQIiynWl11naNdkNVs0Xi7tp2b8+fPWsZbubBbhEqbuvZ3X4JetaC
Wj7r9kWtcvsM4S8j+MsY/vJn3aCeLl+sXizf6YPhP/78t323Xu3zDS2Pqn0u
/0tVnWqOC/ny+cvPhVgulyA2yOmsFUJcVbLdadJ0+U6XdauTPf3Y1JnOYUEr
z1Dp51JFWCykkoCI2RjQKZVlet9a+fpgcl1lWoI9WMjOIvku9vtGGasK+WNd
mOwowb6YTBXFUd6ZdidVnhtcTxXAX6CN3DR1mZg0hAYIgtwS7J9V0Wm7kFtd
6QYtWIL1O41KbAGWZGGxsEnVAu4aENKbrsDnMKw4InY/qqY12q5ANHbGSjCe
Ha4pTVF0SCgEj0Tad82+trQx0dRgLerNGMfc2KwDJbJgr0ot0XoCPRpCzIJ+
EKRsV5sM54tSg4hvtcOT0EpAugk2q/e0Hv5B1jfmw4rZCjYsL7QQT9CoNnXe
ZbioEGBwiSyfeWie0Tc9yfYjRsfiJu/veyCAxTJo28ePcguqiHuX9UE3B6Pv
PJ5IIyuQKEAFFI4OBMBtOOyMJQ93dJHs6MIGUuY8FsjjWRMLnvSCp+SdLopl
rjemgjlWt4gIgZ5Y/zwI6iI9O6cFDYwXQsf/OxFGVvVyjaLg4IEcXUTY8RAd
KcYJnSDeB5x6DVFbhaYZ9ue3NMAO2P+zakzd2SDuMGqK5vq9sUA8U2VFlyMS
dGqrJifRPZB3sLR7nQHumQe2Em+rIHtOB2iFiAeoNhoQBuuGWvfGbFFqvsRR
9/extKxi2hiUAjB6ObCrreUaVGsNagW/Mk97kgFMJQ+wSd0eUW38PhFtbwOm
TICXMj++0hoXWwNVh+ovTTtECJwROCdRoS4yIuR1i+scbMQCfnT/BBfW6DbZ
j0L0vN0jbxH62SP8xp1MDRETu5oDloe6OKB5KfdAFdgF7lIxloQKMahyNEE5
ZCkSubamge3B4l3l/6AZFgUDnoO1ws3nGqaVoEpyV9+xH3cHHtjuSEt5uMKQ
0AHxbJANMqR6Go1G78HGsGmDf4h/bcn2I1vpz4rewjz9HjxFeqWrg2nqik3i
GU6c2Z3a6xluYxYBmc1jzSGp2YGkkbGEZwLcFBAW2OhKr9CIoPezEiexVYWt
YXGiMtl0Mt51uQaHxOFME0FZ8FDIj+DtwO/xrs70agtLgX3lQ1qzroG2FPUR
SV9v2juFZ+nGNCX/hrAATlMv0QmDLfVryH6NaoNaRniw+JDN1c5/lXBg8Esv
EQKQDTRnIuOZKDPdtCAbIKog+6TnptToPnc2sbOoOxYlo9GZBpsvpiwMHefB
R4P9q3UN53ksmYzseIwTxmdBLIUXSxwPbFGpVh35TEC/CU4ay2IKJAAxpZOe
dUPnoMCvVbbruQp7ZZtRyJ0iIhRagYEForhBSL/XvcwRAvj2hhw6Eb9y/N2B
ER2y8S1zAGBdH2HhciF1m63mqB5eROERoCYCaohPiQzcF361GBHL45nKsFfT
yPqu8udCVihTgn6g44E8tALXQIEDHcF3ONDO5r0SOsNhmoRBeIAFhwxxRKpW
XbkGBEFJJ9Bi6zVFusjzSpU7UTN4W9XABlOCA4AMm11E+MzQLitJ3nLYJ+3F
Sc6U7YuNFMm5QD/FSzkeCyTlJBkBIMhQATLuCOlEV4YDcbxzQbsD9ED+kZ6A
QWQ6ibzBcIIptWgbv2HZA/sEgBWG0I6rtKwgkaSwSZ71pqzBA6fhYwkGFGqt
CxbLLFPWcWo4SslbDexDI7KkfS/QXpJfWgN9Gnn1ak7+DuwR0Ch0C8p4QJ9i
AYcxYq/4TwABgoSnO3vmaoIU7BEEWiW0lxHtRaD9NTnITOtSobne4aHawkZ2
GKwHRTg4J8x2QCXaV2FQX8EPMAW7kn6Jos6cZeaDP4fYCI/XddcG5xsDrfds
6RJ/H8ELBxuew9mgcMe0INMHjkwDREz0p7cavFn8OxUyEOfeX/h0iT59UuPO
I/0ZGxQHMBIlPFKCA7mvWyesnrLMbVyVn/RaC0DrO7DKORpe+lXc7YDQiYyj
1U3lfKiCgONVMLtkUQA2Mh2cvrJutNg2KmfOwdJg0ky5BzmYuTWRCD0GM4nH
Mu6TpbM0213rvFpN8i0QJlmcQr8H837Q5KL3iwBvSA9wGXL8OUADXt2wRi/k
HeGY2JVdLAu8Nth4R238bcJCwKnFfiboJMoGS+SkpCxYgXs5AQ+0Yl0IvGP+
iMeWRRs+Pi6Bb05BtTsva2BCC2I/MqFODj4l+CA91u8VkpIYT3pKcHHfji/n
QvxJXlR+Fcc5EBoUAR/m8hqe6eO1TkDAw2MEpZeXTwe0dqFGoyoIylkC0J8Y
AiDVwLVKHA4WtFTvMVB4wvHmZe8Zfe89o/snvb8EIcKpuBTXv793aS2Irjew
BwxKaj7l1jV6/cCgbd0gExW637hLy/SNWHgqwl1M5kr+JAc26ny0aYQ/kKnz
x8LYyddT62MmakojwbUy5DLAwdVtt+hhYCIFwTgBzmt0YjkQsgCRrIEATtoO
VM/04V6yG0xtIZaNPAMawtxJ6Z4v0NA66sFQ4nZMzTl5p88Am9ihwXGeBgBi
7Sx6cKXf3lUc/nL20bSUzxykFKboKbyfHwevx38U3lRMiZLkQ3iWwSTjEwQS
pPz+npJ0IJzghAAPLDCCEkDOBuD4PsbnfB4SCLyWo8ZDLASPapDkiRZdvRwu
+7/wI5Wyh61L1vLParnEf/0PmL5o1zxi8LOS8C+B8gH/xdqDDzzJ3IiBgvCc
MRQpz2ij8oc5PZDDEdH7MOfdCM7TGOGn8XQ5fBuGfJB6BGfy5+QL/3ozgjOi
cQJnisYBn5DGmaZyDOcElWXzAJ1f9nT+EI+I3oc5Y/r8PjpXn0bnw6kXfl72
KJ3/46vw85dH6JzSZ0jny95E/h5pfuGp/K7DY77fd/8+zPk5gQM0nKZyPGKS
ykoMR/6enw+yeNxiyMGISSp3IjL9p6U5Wnlamie4Fej4/BGr8Tyis/0n0Bn+
kWkV9+fyCVtrOFPAk79dqsJsq69mmcYa7YwrX1/NXjsrH0z8FU6agU/zy84U
OvJTwnlQYbBLpwT6vLwPzGGYalBAseSIurAX/ByrfayQ1V2RU7Tgo0ICg+kO
jfUJ/zgpcX/8OA9RI4Q/4I/usdbkAuSQtJHrGnPgISwCbF2Ym5sN8a91yXE4
hi4klQfBf8zgqJXXLUYaFM6Ra+3QxhCNOU6k8NEEH91p7vjO7yzyXSmagiMV
l7CutAZYn9WYQf2VIvE5ujWxV9EnAZNstQcvVAIVC2FEhgNOP/Y2elCBWpFn
5k9uFTkOXMagMuj9vS+qoscKEBznF5OpGYrcCCJmjy3ImPfRbjWE/rrI/dYq
jNPRhW94PGWWu5DV9/KVGwWRXSkcqfGVs/zp2i5X9/aa/57LwfLOkCEawo1V
NAA3irgRzRxuPs83jxd8MbWg8EMfXPY5rRCWDbKJTy0KGXlI795+P++9QD8z
XTRMRYHk3BwCuXp1amWRrMySjlPmILUGeGUsR3MoAC4ejAXvqU0kSxC2i36u
d65jjIeBbnA9iYdUc4Egqk9CepnMfSxCSXsvAOQ6eqcUDQ2MCwKN+R7FiYqE
Tiinzoa8ANyautvu5A9M3NTJfxyEfL6S38KyoEwLYaO81tDCcapiTVj53RGH
LCetyVTGmSdazpkSs6FIx00ktuiWTBKnAoxNwJqNMC1DVBQJWYTAmb9kG8xc
O4p+FliHq5vcZS84seLDeg4AV+JNr+4yjpXY5ees3OWPP7md7znqSiv+w0rA
HaZgUFpwHkZxdQOkWytkPwzKuoZMclCrpBYiXJGBQ7KAzqnlk0IEZ3NJUgVM
QmPu8t4myTJSemDBCZUo52ldZ5PcdgqGtJoOBpcrpNQSlVRi0lPh1BXaSCnh
cUN5RW6M8JlXV2zqqpjBLGMssDlxSVVHOR4BBMW+hfCC0xcgOz1NezstfA2A
miGoL8Bayofibhu9Z9ns4KQE6tTSZdpGa1LyEM9aLE97VyGUQxWoG6VNnDQl
RPG1yqGR4DoBMAsNgn6PhHWB44NR80pcm9IUqsH06BAmbGwaZHpUO6szTtgA
oa7Rweh3htmYpD+BGgrSWjPl3W614OJLDvJjmS+c/R3nUuN0L9u+jpyMmPK4
A28lfWJ354wSCVpwZlw/BbgEA3VmcrQn8DjDreyIHjhoFgpyM8pCWj2nVAfo
IZkYp8ua/+p18ant7RUZpozK/sAxgOq9mM6KztJzZV0SAXNgA4z6kiDPRmNo
2eOj7NxgdygVDxLMZwFFt5cu5RYsCG6ZvKuhrPlMkvNOFoPTwzUrsHEJ1uxh
NNhpA+VbAwmOPoXKJwsm3UsUwMHm3AEOtjhr+WWcvQ31naAAgtaae03v0A62
XQVKURw5dW4y6n3C2sO24jpIkGrM3WNFWAR/HI55i4cpEjnFzVCa+IkjCj5m
MK5U81d9xPSo9m+X4HpQF8V0QZHy4Vlz3Lc1eH178DLQV/ElC9a+Do1VSwu4
+kRwB1p3uByRvHmH5kH05ROKP9Z129blsqzRzZ8sCHMeMOT77kxRkGOVlg4x
2EFioIWcqJoKCl2oxwBXJU86nKQsaxorfNhDE+WOP86FOxv2jTmgDUP3zW/r
BML7GvsXrK+mJ9lIwp7DAJH2EASi+QW7dcHkxm6ZCGYoNB9ixuI4ShGupA8N
DR8lTO+FiNh4dJ4JlX+ihVDQiEZrsnlUzg9yRC6lqW6xhW6t2zuNFQ7U/iEe
1m8ba93W1hCotfpkzRodqabLXDmXymIxPHcoOkPcqwTaDq7WZHRoUpA5ogjF
R3FDwopPEAp/RIhz446R3DTgA3BHSxrytTtyWxGmBYqqtSnQAYkHiaghxiZg
HVddW6psarBwlxfUEMIoa29KUbOqJPnBAXLkYDkbZZOyH5j60f5L7Koy5PiF
3iwuHscLc2/HDu2X9MZYtQmu/uhNJorgYfdBU0qyuum9cBB17KMiFyjXJXXB
GcWFCKBUW4P7tRDxDGoEyr1Y9Id8UXufLbU2PsBeYIgD6swlY+6lcwusxCsN
4UXBPhMZjk3c8RnXqBHDQm/oMAx+pwcUhlFV7vRbV9i12Mpj99ihiucsypAf
Qg4oeggYu5msA+cJJmDNqd2VSMHU/oYl8BxB8iCsodqIUUn4ZqhYKB5eAaJG
LgrDjyU4rA0bhQWV6O4iM8H+vhcEwKB/hQYjxIIgsS6YQ+HFpy0z0GMcahPu
OPXti+D1Qmz5906b/O9zjgXI1i9kaLeR6MdTf5ecMWTQRBo0W3CjCC7vzNgw
e4MMLer6FoUdu7QmzUZCPp9vS5di5v7K4ThZVNR/HfUHESau9O79jsVk7c1J
PYWjuHYpggtZHLHJP0r0xK4Bh1q6Ic1WGKcBNoAzqrFIJIeskstAhRPMc4ta
YdZo0n2LZ6BaOHlpEo7Dp7F1iay8CGoZ8duZhZR4Z3YOC25qzp2wsuoN+kWg
s8LR0+8ktPa6g8uRl9TogQYgPDRijSbq2jEXXS8dRnQJfPSwycux4sGoBzFM
22gQb0oBuGYS8sluQHILwuyfYDKwIhsBdAofHxsg2rrYeF+VU4ip4S/MhtRp
Hk4rjiH72uCfVy+S2mDUc9+GxSOBj4qxcGT8Ap6hiOJ/11sZKY9fdJi8WWC4
m8wEegoKSrmtmFQ0waDlwJthw2bJ/wQp9clAWNhFS+j2+AZS1grVUMiIEk/t
UvItTU/g9w3S3mKALguUmeCBPxxoOIvE+SEk89XgTgNGjzCqaY5962kgKx3f
Hd0QcBx14R6hcOgKVFtySUzf8X/gqyuIfsjgUBaH0zqA5G1V31WcV63II7XY
whTtfHCrQrHWjdnt4ihqweHEXpJsD6LMThOeug8cqfJa60gKXzxPhRCh39+D
SqLdeC8v0reI36ZriNVOXAEIaeD3Xj8Tut8/ma5oCOGa60cJz6gA7yxHonnY
5sqpyrgkEnLF4Pt0G0WXLxqnASQ9cTyDNPMT+nwnZ8tUGdVocox8sMOJ9uuS
rHhmOuUBYU4PjwqT8px4FiczdQNNDShhPt91UVNYwjOty+RygoFYlmMfGPZF
29PpwIlFuDmqh2NZhxuNbcOaTJPnFRojymTbKXaEU4vkl+MOzu1E0Bfi7fWg
GTzqLqbA4URxig9Dv30x4L/zH1zL8DgcXSRZ7nyUZHTkhhUmu82oLkPYTbSG
nsX7k8n+RLy/OR3lKDyDlua+f1m+mM29JUlvT6gqziqfBvAyAjAMaNDzijUh
ucsj+gjEbTUEP2xWMGtFeTlqM+17Ogn0GpQhavgSfcs85lX7ixw+ZzNMVMb5
9AkOnOyPmSxnR3Xt0csV+hWj6vMUrBW8+jB4Ij+IQBV88hf5YVgzR2lnuPxf
/GTQgjBc/UPERjc9koxHp8f176c0PX3yejR9XDFPAKQ/h9H0B3+G081o+oOM
G07PP4DlOL3AY4zTn8A4Bz9iXHhS/THGZX+McfqPMW4sNg/+PD79H2IcTH/j
HaGJBf6wxgUvKzAufvL/q3Hj6f9ajPvW+08TC/xhxgXnLDAufvIvxbjRy6e/
q7Xrv3/XrA/9BavTOI6R7tuiQgj9cGfUpCfPjVGTh7bzDIZ+nHMuKHgPHlsQ
lYW/qFpiIUlVzimL8i/RPdqcvczO2J3gfow+X2tDnz0MDJ7wIGhwNTyYOXHv
a+jGO2d8UHNf65C1bWsx4XJPOPR8YSeqRMaRh+AeoDYUKy1fF6FSoVV82WJA
E7654fDwzqFH1HIqcm044+MLCROOLPqZ6fYE5YT7BpdH+uHjVLK/ipELlTbJ
9FF9ki3xCaZTN7BEeg8mzW8CaGqrCNhj5D/RjZEww2B/u78yNrj36q5agrc4
ijOw2ukjaR4PISo6yPr9vsDUK1/V5HaVTDcV9oEBDlx8j0qFDPENQ7xMgn6X
RrMuGu9TQMPcADca+Avgww8s8KUN/0mawRo0+o2bef/EwVj6No+P1BqHXz6R
FiwBXsFPb8wiiSln5qq+yR32SO0dYJehoKQu3tkDqf6NL0m5+y0Qrndb7Ym2
YKk3+GEWyV9ZaLBMFLJfAEIMryZ63EF1Z5d8PQqnc3uH1JUuOQ/iv9HDnY37
eo8lABEaXGDTbaNk3w8AoEHuGgyIw+QFJS9z7R6byl/Igndip4s93oZ05Xqf
CwzZnuiDGBQ5xZ8VST/YgFRuNFZyI/gRaiO8HM+jctmDbI/qamjK40SVsrYr
Xa3q1P0S29cxgvELu0yaj2qidN+DWqCG9xdvQf8Nl429gFlSzngK3jGjnAsl
kzHpxi1qfPW+UEdexQNwrYToUGzDrVROlJgsvgWIAoiKBUynRqWqzn0pmYkc
R949veJPTQSJXgS7zb2VaCS4xw6lGjO0LtPM1O0TgHQns9Op5eYarNc/12Yb
l0Ix1NdNGVSCtQpNRwt2Ey8UJV0yfLsx/bSFBg7knBBu+bJRSonhOehARMME
DmNdSm/uULME9hn4jyfwyQendlG4G/dK3jHfsPN2XeBRzu2Wg8omnohUyu+s
5uuW1lVHfRv1YG20LOhkiHRHAV60bYTtrzpTQ2Gm9ty0s/FlkLhfQIQU+vpI
ORV/fdXDDq0yY6w6q/nbEGH5kH9BYiUfIOlXnlrEd6CGGotyyEepOFYAFL0+
f86dbg4P4lBSjOMLik7PPBwQRPqUEsqVk0Xe3GgXgewsjfRNB9UqFsvAB38a
UP/A0fs3Z+tjdNNt/rCz4b4zEd8bdv3ICmzB/3T0PGkJJw6H6f5CpGsYdknM
XIJWgbcrdWH1HNTvp9RuT33Q6MQ1RAR2RrZpPvntFvediVyQx8Pdw2jI+lJ+
4sNE2m3VAZACieh8GYzL7sh7f32X25W4CQG45r49QMqC1fO+YxATuZ6Jk3pC
ReVdjZUeWAwtmz/vk9qLGDXnxZ9bUYfa5PEBZtw3nFxbKKgyOUYnXJW0Pvb5
qfrYLm1NpBYJm/QppTcPSPPT9m6e5L7xMmoBTy5IsvEMTZUHo6g3nGt+CUxf
3PYTHXjvkQ+aTbhuWovT6VBqd6QixOiG4aDN7OOox4IS+j3xzrS71wHCE99O
ROkNtaCXcz6yoq9/eT6l/qhw/iiVFCKZByS4TOJy2TzK1l2TJbYu+qTQSnzC
ZmB5rLcl4dbUJ8ks1eCUszr39yNf9+PjkBzS42CAu/+uLn64mHbiA7J5rdk1
cPaJHEiVMXjQAgThvseENcJC51vnBJIXwLdfsXBud65jqLr13x7ETM2vdQVm
+TvVsaP2HaC7LlQOlumvqt0VGPR9D/KJ59BC/gAScw1GYcc0uQRrIH8BMVAZ
J+M3cDqvVXbLn7PJtXL+En2QxsAp7tuEUtlaLpcSp4n/Az1mZKPeUwAA

-->

</rfc>
