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

<t>In the IETF Remote Attestation Procedures (RATS) architecture, a Verifier accepts Evidence and uses Appraisal Policy for Evidence, typically with additional input from Endorsements and Reference Values, to generate 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>
      <t>This document does not aim to define a conceptual message format for Endorsements and Reference Values.
Instead, it extends RFC9334 to provide further details on Reference Values and Endorsements, as these topics were outside the scope of the RATS charter when RFC9334 was developed.</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 74?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref section="3" sectionFormat="of" target="RFC9334"/> provides 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 Appraisal Policy for Evidence.
A Verifier appraises Evidence using Appraisal Policy for Evidence, typically against a set of Reference Values.</t>
      <t>When <xref target="RFC9334"/> was developed, providing details of Reference Values and Endorsements were outside the scope of the RATS Working Group's charter.
However, this has since changed, and the purpose of this document is to update <xref target="RFC9334"/> to provide further details on Reference Values and Endorsements.</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 the Attester's
"shape" as the arrangement of its various execution environments, which are
typically organized hierarchically.
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 in 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 "claims 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 claims sets about the actual state of the Attester at a
given point in time. Each claims set holds claims about a specific Target Environment
that is essential to determining trustworthiness.  Generally speaking, each claim
has a name
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 claims 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.
Generally, there may be varying degrees of gradation beyond just "allowed" or "disallowed."
Reference state can have a set of values per claim per Target Environment.
This is contrasted with actual state, which has a single value per claim per Target Environment.
Actual state applies to one device at one point in time.
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>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="584" viewBox="0 0 584 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 112,32 L 112,240" fill="none" stroke="black"/>
                <path d="M 112,272 L 112,320" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,80" fill="none" stroke="black"/>
                <path d="M 144,112 L 144,160" fill="none" stroke="black"/>
                <path d="M 144,192 L 144,240" fill="none" stroke="black"/>
                <path d="M 144,272 L 144,320" fill="none" stroke="black"/>
                <path d="M 248,32 L 248,80" fill="none" stroke="black"/>
                <path d="M 248,112 L 248,160" fill="none" stroke="black"/>
                <path d="M 248,192 L 248,240" fill="none" stroke="black"/>
                <path d="M 248,272 L 248,320" fill="none" stroke="black"/>
                <path d="M 312,80 L 312,176" fill="none" stroke="black"/>
                <path d="M 384,32 L 384,80" fill="none" stroke="black"/>
                <path d="M 384,112 L 384,160" fill="none" stroke="black"/>
                <path d="M 384,192 L 384,240" fill="none" stroke="black"/>
                <path d="M 384,272 L 384,320" fill="none" stroke="black"/>
                <path d="M 528,32 L 528,80" fill="none" stroke="black"/>
                <path d="M 528,112 L 528,160" fill="none" stroke="black"/>
                <path d="M 528,192 L 528,240" fill="none" stroke="black"/>
                <path d="M 528,272 L 528,320" fill="none" stroke="black"/>
                <path d="M 560,32 L 560,320" fill="none" stroke="black"/>
                <path d="M 112,32 L 128,32" fill="none" stroke="black"/>
                <path d="M 144,32 L 248,32" fill="none" stroke="black"/>
                <path d="M 384,32 L 528,32" fill="none" stroke="black"/>
                <path d="M 544,32 L 560,32" fill="none" stroke="black"/>
                <path d="M 144,80 L 248,80" fill="none" stroke="black"/>
                <path d="M 384,80 L 528,80" fill="none" stroke="black"/>
                <path d="M 144,112 L 248,112" fill="none" stroke="black"/>
                <path d="M 384,112 L 528,112" fill="none" stroke="black"/>
                <path d="M 144,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 384,160 L 528,160" fill="none" stroke="black"/>
                <path d="M 144,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 272,190 L 360,190" fill="none" stroke="black"/>
                <path d="M 272,194 L 360,194" fill="none" stroke="black"/>
                <path d="M 384,192 L 528,192" fill="none" stroke="black"/>
                <path d="M 112,240 L 128,240" fill="none" stroke="black"/>
                <path d="M 144,240 L 248,240" fill="none" stroke="black"/>
                <path d="M 384,240 L 528,240" fill="none" stroke="black"/>
                <path d="M 112,272 L 128,272" fill="none" stroke="black"/>
                <path d="M 144,272 L 248,272" fill="none" stroke="black"/>
                <path d="M 384,272 L 528,272" fill="none" stroke="black"/>
                <path d="M 112,320 L 128,320" fill="none" stroke="black"/>
                <path d="M 144,320 L 248,320" fill="none" stroke="black"/>
                <path d="M 384,320 L 528,320" fill="none" stroke="black"/>
                <path d="M 544,320 L 560,320" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="368,192 356,186.4 356,197.6" fill="black" transform="rotate(0,360,192)"/>
                <polygon class="arrowhead" points="320,176 308,170.4 308,181.6" fill="black" transform="rotate(90,312,176)"/>
                <polygon class="arrowhead" points="280,192 268,186.4 268,197.6" fill="black" transform="rotate(180,272,192)"/>
                <g class="text">
                  <text x="312" y="36">Appraisal</text>
                  <text x="172" y="52">Actual</text>
                  <text x="224" y="52">state</text>
                  <text x="300" y="52">Policy</text>
                  <text x="344" y="52">for</text>
                  <text x="432" y="52">Reference</text>
                  <text x="496" y="52">state</text>
                  <text x="188" y="68">(layer</text>
                  <text x="228" y="68">N)</text>
                  <text x="308" y="68">Evidence</text>
                  <text x="444" y="68">(layer</text>
                  <text x="484" y="68">N)</text>
                  <text x="576" y="68">R</text>
                  <text x="576" y="84">e</text>
                  <text x="576" y="100">f</text>
                  <text x="576" y="116">e</text>
                  <text x="68" y="132">Evidence</text>
                  <text x="172" y="132">Actual</text>
                  <text x="224" y="132">state</text>
                  <text x="432" y="132">Reference</text>
                  <text x="496" y="132">state</text>
                  <text x="576" y="132">r</text>
                  <text x="188" y="148">(layer</text>
                  <text x="228" y="148">2)</text>
                  <text x="444" y="148">(layer</text>
                  <text x="484" y="148">2)</text>
                  <text x="576" y="148">e</text>
                  <text x="576" y="164">n</text>
                  <text x="576" y="180">c</text>
                  <text x="576" y="196">e</text>
                  <text x="172" y="212">Actual</text>
                  <text x="224" y="212">state</text>
                  <text x="316" y="212">Comparison</text>
                  <text x="432" y="212">Reference</text>
                  <text x="496" y="212">state</text>
                  <text x="188" y="228">(layer</text>
                  <text x="228" y="228">1)</text>
                  <text x="296" y="228">Rules</text>
                  <text x="444" y="228">(layer</text>
                  <text x="484" y="228">1)</text>
                  <text x="576" y="228">V</text>
                  <text x="576" y="244">a</text>
                  <text x="576" y="260">l</text>
                  <text x="576" y="276">u</text>
                  <text x="52" y="292">Endorsements</text>
                  <text x="172" y="292">Actual</text>
                  <text x="224" y="292">state</text>
                  <text x="432" y="292">Reference</text>
                  <text x="496" y="292">state</text>
                  <text x="576" y="292">e</text>
                  <text x="188" y="308">(layer</text>
                  <text x="228" y="308">0)</text>
                  <text x="444" y="308">(layer</text>
                  <text x="484" y="308">0)</text>
                  <text x="576" y="308">s</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
             .-- .------------.   Appraisal    .-----------------. --.
             |   |Actual state|   Policy for   | Reference state |   |
             |   |  (layer N) |   Evidence     |    (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
Endorsements |   |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 appraise 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"/> shows 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 the CPU's supported features based on the current firmware configuration.
Alternatively, an Endorser might provide information indicating that a specific security certification (e.g., <xref target="GP-Cert"/> and <xref target="OCP-SAFE"/>) is associated with the device if the serial number falls within a given range and the firmware is configured in a specific way.</t>
      <figure anchor="conditional">
        <name>Conditional Endorsements</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="464" viewBox="0 0 464 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,80 L 8,112" fill="none" stroke="black"/>
              <path d="M 72,120 L 72,176" fill="none" stroke="black"/>
              <path d="M 128,80 L 128,112" fill="none" stroke="black"/>
              <path d="M 168,176 L 168,208" fill="none" stroke="black"/>
              <path d="M 248,80 L 248,112" fill="none" stroke="black"/>
              <path d="M 280,176 L 280,208" fill="none" stroke="black"/>
              <path d="M 344,80 L 344,112" fill="none" stroke="black"/>
              <path d="M 376,112 L 376,128" fill="none" stroke="black"/>
              <path d="M 376,160 L 376,176" fill="none" stroke="black"/>
              <path d="M 456,80 L 456,112" fill="none" stroke="black"/>
              <path d="M 256,48 L 448,48" fill="none" stroke="black"/>
              <path d="M 8,80 L 128,80" fill="none" stroke="black"/>
              <path d="M 248,80 L 456,80" fill="none" stroke="black"/>
              <path d="M 144,94 L 232,94" fill="none" stroke="black"/>
              <path d="M 144,98 L 232,98" fill="none" stroke="black"/>
              <path d="M 8,112 L 128,112" fill="none" stroke="black"/>
              <path d="M 248,112 L 456,112" fill="none" stroke="black"/>
              <path d="M 168,176 L 280,176" fill="none" stroke="black"/>
              <path d="M 88,192 L 168,192" fill="none" stroke="black"/>
              <path d="M 280,192 L 360,192" fill="none" stroke="black"/>
              <path d="M 168,208 L 280,208" fill="none" stroke="black"/>
              <path d="M 448,48 L 456,64" fill="none" stroke="black"/>
              <path d="M 248,64 L 256,48" fill="none" stroke="black"/>
              <path d="M 88,192 C 79.16936,192 72,184.83064 72,176" fill="none" stroke="black"/>
              <path d="M 360,192 C 368.83064,192 376,184.83064 376,176" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="240,96 228,90.4 228,101.6" fill="black" transform="rotate(0,232,96)"/>
              <polygon class="arrowhead" points="152,96 140,90.4 140,101.6" fill="black" transform="rotate(180,144,96)"/>
              <polygon class="arrowhead" points="80,120 68,114.4 68,125.6" fill="black" transform="rotate(270,72,120)"/>
              <g class="text">
                <text x="304" y="36">Conditional</text>
                <text x="404" y="36">Endorsements</text>
                <text x="44" y="100">Actual</text>
                <text x="96" y="100">State</text>
                <text x="296" y="100">Condition</text>
                <text x="400" y="100">claims-sets</text>
                <text x="192" y="116">Endorsement</text>
                <text x="180" y="132">Matching</text>
                <text x="168" y="148">Rules</text>
                <text x="356" y="148">[condition</text>
                <text x="412" y="148">is</text>
                <text x="444" y="148">met]</text>
                <text x="224" y="196">claims-sets</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
                                Conditional Endorsements
                               .-----------------------.
                              /                         \
.--------------.              .-----------+-------------.
| Actual State | <==========> | Condition | claims-sets |
'--------------'  Endorsement '-----------+---+---------'
        ^         Matching                    |
        |         Rules                [condition is met]
        |                                     |
        |           .-------------.           |
         '----------+ claims-sets +----------'
                    '-------------'
]]></artwork>
        </artset>
      </figure>
      <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 (<xref target="conditional"/>).
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 the 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 (e.g., <xref target="I-D.ietf-rats-corim"/>) would probably include some minimal matching policy (e.g., exact match against a singleton reference value).
This unfortunately complicates the Verifier design as it 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 appraise
the resulting Evidence with a public key it possesses, called a verification key below.
While use of public key cryptography is typical for a verification key, 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 Attesting Environment. Such a key
could be provisioned directly in the Verifier. However, for scalability the Verifier
typically is provisioned with a trusted root CA certificate (a trust anchor). This means that an
Endorsement from an Endorser includes the Attesting Enviroment's verification key material
in the form of a certificate that chains up to that trust anchor (a certification path).  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 appraise, depending on the protocol or general remote attestation procedure.
Details are out of scope of this document and left to protocol or procedure specifications.</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 (i.e., a key with the purpose of signature checking) 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="RFC9711"/> <tt>ueid</tt>) in a dedicated "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 appraise 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 phases 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 (i.e., claims representing invariant properties of the Environment) are provided in Endorsements, no additional steps
are needed for timeliness of those claims since they are static rather than
dynamically varying over time.  Once timeliness of Evidence is appraised,
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><xref target="input"/> shows 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 ("claims set 1") in the Evidence, and an additional
set of claims ("claims set 2") in the Endorsement from its manufacturer.
A Verifier that trusts each Endorser would thus use the claims sets from both conceptual messages (Endorsements and Evidence) 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="520" viewBox="0 0 520 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 336,48 L 336,96" fill="none" stroke="black"/>
              <path d="M 336,160 L 336,208" fill="none" stroke="black"/>
              <path d="M 336,272 L 336,320" fill="none" stroke="black"/>
              <path d="M 336,384 L 336,432" fill="none" stroke="black"/>
              <path d="M 352,32 L 352,112" fill="none" stroke="black"/>
              <path d="M 352,144 L 352,224" fill="none" stroke="black"/>
              <path d="M 352,256 L 352,336" fill="none" stroke="black"/>
              <path d="M 352,368 L 352,448" fill="none" stroke="black"/>
              <path d="M 368,32 L 368,448" fill="none" stroke="black"/>
              <path d="M 384,48 L 384,96" fill="none" stroke="black"/>
              <path d="M 384,160 L 384,208" fill="none" stroke="black"/>
              <path d="M 384,272 L 384,320" fill="none" stroke="black"/>
              <path d="M 384,384 L 384,432" fill="none" stroke="black"/>
              <path d="M 432,456 L 432,480" fill="none" stroke="black"/>
              <path d="M 488,48 L 488,96" fill="none" stroke="black"/>
              <path d="M 488,160 L 488,208" fill="none" stroke="black"/>
              <path d="M 488,272 L 488,320" fill="none" stroke="black"/>
              <path d="M 488,384 L 488,432" fill="none" stroke="black"/>
              <path d="M 512,32 L 512,448" fill="none" stroke="black"/>
              <path d="M 128,32 L 352,32" fill="none" stroke="black"/>
              <path d="M 368,32 L 512,32" fill="none" stroke="black"/>
              <path d="M 232,48 L 336,48" fill="none" stroke="black"/>
              <path d="M 384,48 L 488,48" fill="none" stroke="black"/>
              <path d="M 80,64 L 112,64" fill="none" stroke="black"/>
              <path d="M 232,96 L 336,96" fill="none" stroke="black"/>
              <path d="M 384,96 L 488,96" fill="none" stroke="black"/>
              <path d="M 128,112 L 352,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 352,144" fill="none" stroke="black"/>
              <path d="M 232,160 L 336,160" fill="none" stroke="black"/>
              <path d="M 384,160 L 488,160" fill="none" stroke="black"/>
              <path d="M 80,176 L 112,176" fill="none" stroke="black"/>
              <path d="M 232,208 L 336,208" fill="none" stroke="black"/>
              <path d="M 384,208 L 488,208" fill="none" stroke="black"/>
              <path d="M 128,224 L 352,224" fill="none" stroke="black"/>
              <path d="M 128,256 L 352,256" fill="none" stroke="black"/>
              <path d="M 232,272 L 336,272" fill="none" stroke="black"/>
              <path d="M 384,272 L 488,272" fill="none" stroke="black"/>
              <path d="M 80,288 L 112,288" fill="none" stroke="black"/>
              <path d="M 232,320 L 336,320" fill="none" stroke="black"/>
              <path d="M 384,320 L 488,320" fill="none" stroke="black"/>
              <path d="M 128,336 L 352,336" fill="none" stroke="black"/>
              <path d="M 128,368 L 352,368" fill="none" stroke="black"/>
              <path d="M 232,384 L 336,384" fill="none" stroke="black"/>
              <path d="M 384,384 L 488,384" fill="none" stroke="black"/>
              <path d="M 80,400 L 112,400" fill="none" stroke="black"/>
              <path d="M 232,432 L 336,432" fill="none" stroke="black"/>
              <path d="M 384,432 L 488,432" fill="none" stroke="black"/>
              <path d="M 128,448 L 352,448" fill="none" stroke="black"/>
              <path d="M 368,448 L 512,448" fill="none" stroke="black"/>
              <path d="M 80,496 L 416,496" fill="none" stroke="black"/>
              <path d="M 416,496 C 424.83064,496 432,488.83064 432,480" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,456 428,450.4 428,461.6" fill="black" transform="rotate(270,432,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="432" y="68">app</text>
                <text x="260" y="84">claims</text>
                <text x="304" y="84">set</text>
                <text x="328" y="84">2</text>
                <text x="412" y="84">claims</text>
                <text x="456" y="84">set</text>
                <text x="480" y="84">1</text>
                <text x="504" y="100">E</text>
                <text x="504" y="116">v</text>
                <text x="504" y="132">i</text>
                <text x="504" y="148">d</text>
                <text x="12" y="164">OS</text>
                <text x="504" y="164">e</text>
                <text x="36" y="180">Endorser</text>
                <text x="176" y="180">Endorsement</text>
                <text x="284" y="180">OS</text>
                <text x="436" y="180">OS</text>
                <text x="504" y="180">n</text>
                <text x="260" y="196">claims</text>
                <text x="304" y="196">set</text>
                <text x="328" y="196">2</text>
                <text x="412" y="196">claims</text>
                <text x="456" y="196">set</text>
                <text x="480" y="196">1</text>
                <text x="504" y="196">c</text>
                <text x="504" 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="284" y="292">firmware</text>
                <text x="436" y="292">firmware</text>
                <text x="260" y="308">claims</text>
                <text x="304" y="308">set</text>
                <text x="328" y="308">2</text>
                <text x="412" y="308">claims</text>
                <text x="456" y="308">set</text>
                <text x="480" 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="284" y="404">hardware</text>
                <text x="436" y="404">hardware</text>
                <text x="260" y="420">claims</text>
                <text x="304" y="420">set</text>
                <text x="328" y="420">2</text>
                <text x="412" y="420">claims</text>
                <text x="456" y="420">set</text>
                <text x="480" 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     |  |
               |            |claims set 2| | | |claims set 1|  |
               |            '------------' | | '------------' E|
               '---------------------------' |                v|
                                             |                i|
               .---------------------------. |                d|
OS             |            .------------. | | .------------. e|
Endorser ----> |Endorsement |     OS     | | | |     OS     | n|
               |            |claims set 2| | | |claims set 1| c|
               |            '------------' | | '------------' e|
               '---------------------------' |                 |
                                             |                 |
               .---------------------------. |                 |
Firmware       |            .------------. | | .------------.  |
Endorser ----> |Endorsement |  firmware  | | | |  firmware  |  |
               |            |claims set 2| | | |claims set 1|  |
               |            '------------' | | '------------'  |
               '---------------------------' |                 |
                                             |                 |
               .---------------------------. |                 |
Hardware       |            .------------. | | .------------.  |
Endorser ----> |Endorsement |  hardware  | | | |  hardware  |  |
               |            |claims set 2| | | |claims set 1|  |
               |            '------------' | | '------------'  |
               '---------------------------' '-----------------'
                                                     ^
                                                     |
Attester -------------------------------------------'
]]></artwork>
        </artset>
      </figure>
      <t>When Target Environments from different vendors each have their own
Endorser, a Verifier must 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 appraised, then uses it for appraisal 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 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 the 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.
A Verifier expresses its trust in an Endorser by storing a trust anchor for that 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 Sections 3.2 and 12) also discusses security considerations around the remote attestation of layers, and sources of appraisal policies.
<xref target="endorsing-keys"/> of this document covers additional considerations in these areas, while <xref target="formats-security"/> covers additional considerations around Endorsement formats.</t>
      <t>The integrity of public and private key material and the secrecy of private key material must be ensured at all times.
This includes public keys that identify trusted supply chain actors.
For more detailed information on protecting Trust Anchors, refer to <xref section="12.4" sectionFormat="of" target="RFC9334"/>.</t>
      <t>A Verifier can use cryptographically protected, mutually authenticated secure channels to all its trusted input sources, particularly, Endorsers and Reference Value Providers.
These links should reach as deep as possible into the Verifier, potentially terminating within the appraisal session context, to avoid man-in-the-middle attacks.
Minimizing the use of intermediaries is also vital, as each intermediary is another party that might need to be trusted.
Refer to <xref section="12.2" sectionFormat="of" target="RFC9334"/> for information on conceptual message protection.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The privacy considerations regarding conceptual messages, as discussed in <xref section="11" sectionFormat="of" target="RFC9334"/>, apply.
In particular, since Endorsements and Reference Values can contain personally identifiable information (PII) about a large number of devices, strong confidentiality protection is required at the time of conveyance.</t>
      <t>Utilizing the public part of an asymmetric key pair that is used for Evidence generation to identify an Attesting Environment raises privacy considerations that must be carefully considered.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any actions by IANA.</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="RFC9711">
        <front>
          <title>The Entity Attestation Token (EAT)</title>
          <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
          <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
          <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
          <author fullname="C. Wallace" initials="C." surname="Wallace"/>
          <date month="April" year="2025"/>
          <abstract>
            <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (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.</t>
            <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9711"/>
        <seriesInfo name="DOI" value="10.17487/RFC9711"/>
      </reference>
      <reference anchor="I-D.ietf-rats-corim">
        <front>
          <title>Concise Reference Integrity Manifest</title>
          <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
            <organization>Fraunhofer SIT</organization>
          </author>
          <author fullname="Thomas Fossati" initials="T." surname="Fossati">
            <organization>Linaro</organization>
          </author>
          <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
            <organization>arm</organization>
          </author>
          <author fullname="Ned Smith" initials="N." surname="Smith">
            <organization>Independent</organization>
          </author>
          <author fullname="Wei Pan" initials="W." surname="Pan">
            <organization>Huawei Technologies</organization>
          </author>
          <date day="20" month="October" year="2025"/>
          <abstract>
            <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether or not to engage in secure interactions with it.  Evidence
   about trustworthiness can be rather complex and it is deemed
   unrealistic that every Relying Party is capable of the appraisal of
   Evidence.  Therefore that burden is typically offloaded to a
   Verifier.  In order to conduct Evidence appraisal, a Verifier
   requires not only fresh Evidence from an Attester, but also trusted
   Endorsements and Reference Values from Endorsers and Reference Value
   Providers, such as manufacturers, distributors, or device owners.
   This document specifies the information elements for representing
   Endorsements and Reference Values in CBOR format.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-rats-corim-09"/>
      </reference>
      <reference anchor="TCG-DICE" target="https://trustedcomputinggroup.org/wp-content/uploads/DICE-Attestation-Architecture-v1.2_pub.pdf">
        <front>
          <title>DICE Attestation Architecture</title>
          <author>
            <organization>Trusted Computing Group</organization>
          </author>
          <date year="2025" month="April"/>
        </front>
      </reference>
      <reference anchor="GP-Cert" target="https://globalplatform.org/certifications/security-certification/">
        <front>
          <title>Security Certification</title>
          <author>
            <organization>GlobalPlatform</organization>
          </author>
          <date year="2026" month="March"/>
        </front>
      </reference>
      <reference anchor="OCP-SAFE" target="https://www.opencompute.org/projects/ocp-safe-program">
        <front>
          <title>The OCP Security Appraisal Framework and Enablement (S.A.F.E.) Program</title>
          <author>
            <organization>Open Compute Project</organization>
          </author>
          <date year="2026" month="March"/>
        </front>
      </reference>
    </references>
    <?line 429?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to thank the following individuals for feedback and ideas that contributed to this document:
<contact fullname="Yogesh Deshpande"/>,
<contact fullname="Thomas Hardjono"/>,
<contact fullname="Laurence Lundblade"/>,
<contact fullname="Kathleen Moriarty"/>,
<contact fullname="Michael Richardson"/>,
<contact fullname="Ned Smith"/>, and
<contact fullname="Carl Wallace"/></t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9U8aXPktpXf8StQ7Q9Sb7p7DudYq9apaOewp5LxTI3GSW3t
bhI0ie6mh032EqQ0bY32t++7AAIkW5rYrtqKUhNLJPjw8C68C1gul6ot2tJe
6LN3l++v9Isqrxtn97Zq3Zky63Vjry/06JXK66wye/gsb8ymXRa23Swb07ql
jUYtH3+lukNuWusu9Fdffvlr5br1vnCuqKv2eICvX714/1JldeVs5ToY1Dad
VTdbmfEvdfOhqLb6m6buDsq1psr/Zsq6sjKwODT0m2ufPn781eOnyjTWXOjZ
lc26pmiPM/XhBuaoWttUtl0+R1RVZtoLXVSbWh2KC6V1W2cX+mgd/Orqpm3s
xoW/j/v+T2W6dlc3F2oJX8Oz5yv9fmdK28BAJsVzc237Z3WzNVXxo2lhsRf6
stkXObzRz2CxXdnCsmCM3ZuiBBrCh6uWPlwhJf+wxeerrN4jEoCSBZRnM/gj
q3Prf4UFyq+N3dIkMqSr2gZefX916XH9dqX/vWg+7Oryx4Dtt7b6ED8FfC/0
y8Z01a7e2EZfvXoPT70EjF4I6juAsloLlD+4ol1twshVbiP83+0s4NI2xjmr
f/ebsJiz3/766Ve/OQsrem6aPbA6b+O1fGObvamOfj3vV/pl7RzQNizn/a7e
Gxc9Tun/p6IyTd3jzcNXMvwPJb1ewTdKoWzAbG1xbVE+3r18hqJ7oUm8TZPt
5OHvnjyRh9Ygsq+Wz1e9HmR1U+zlPf0OI94/+2b5/NWzFwgWSCvypOmHyD97
j8Jsc5CS/aFrg+zPaJAo6gxB6MsWtKql1YFwZbuitVnbNVaGmmaLRN+17cFd
PHrUMtzMg90iVFzuo5sDoAcaUrWPukNZm9w9QvjLCP4yhr+8frJ6+rdDt14d
8g3NhfoNAn5oinKhnz5+iqz95u3ymW3akwv9pqzXpnxbmhZpnazOK69GAMWm
yAiH6WVtCcxBwNB6svgr98gJtGXy/FGE+GtkKSH+W3j65tnb5dXly9MsenOw
lbDH6rdN/QOQJcH//c4iFB3WcXk4NKZwpkQl2tsbMGoaLBnYU7MuyVDq86vV
5erl6sVqjiC3MGx6vTc3N6saEGA+WlrwgXFwj+rssHRmY5cHBnFijWq5XIJa
oyYC5upVpVvAGA2xfmf3NawqFi1AJ7M58N3pc7TJc20iYVhoo/9sG6Ar2AWT
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
Yy0NEz45GVJG0ZU7FH4l9ycljXdI5cZiwTyCH6E2wkt4HtUU72V7VHxE2x1n
u4xz3V5y6afO17m+khKsX1hl3FtJFda41b5EDe8P9IP+F1yd9wLmSDnjT/AE
LKVuKL2NmTtuxOVbOkpz5Fk8AOmXRk9iG866c76lyOLzyyiAqFjAdOofq+rc
V+yZyHH83tNrIcaIk5ki0Ytgt7mBHI0EdxKjVGO+WFLfTN0+i0jHyTubWm6u
W3v9k9MEcb0Y8wW22QeVYK1C09GC3cQDlUmfEp/LjpQYNQg4kHNiueXDlikl
hhuhgIiGKRzGupSeXKSeFGzn8Pes8NYH23ZZyj0dBntUkW9Y+VyXuJdzGXhQ
w8UdkTomOocYvZLuAdOfFhnMjZYFvQqVrijAi5aNsP0FCtQ2nZkDt01tfPY6
bspQIRW/PlJixh+87+v7civJGCu6Gw2/CdOHaj8Sy9NpMPPUJL7NPlR9jCAf
ZfRYAWoS4ZCF54ZDQYQzNH2nFx3EFi3zUOjSL97RvCTy0kZrCERnWaR7YExr
WCgDF/xeQB0XR+/dnK+P0Tnf+f2uhtxNE993IEcuDFiC/+noedJOQPwNn3tX
Us5ESCY016BT4NxqWzrs0lLfp1Z76sK0E2etEdg5Wab55L10cjdNrsjf4QMS
aMb6loXYg+k125lrQAmkofNFOW4tQL77Wwa4I4w7MIBncp8JKQoW/PueTcwF
exZO6giVtHd1TReykVXze31SvFGj1sj4ViZzXRfc+hRtYIVcwSbduqDK5Bid
cFXSgt2v7ynY7dIeUeoHcUlHWHLGipU/PcbCHyUJVt/A6qLByWHxhnuOa06G
puA2QfpkLF/k5P3xQd8N13Hre7Km1G5KlYzR4epBL9/dqEOEqgIJ6c6tnF8D
CRISOzqcjRL85OmcN6voTsNwEGLSE+Xq1aibBfDgcstCDr10TZZYuejesZX6
jIXA9FiuSyKtqYsWHZXwDF+1VeKJwZGfe/cwLFncOBDwOzSIs902UquT9hBc
aNwq2HcTCJ0c+o4ZfzI1zhspvCeZz+CRccZyo7+pMvRo9S0p4tdIcHQM4Snd
l3DkritsC6/Rrr/0WsHXy9n0vituQ8I7C1FQ4/OPThq+UVKjyuPTsW7SMaXE
oGAhYty6IRPh/rTvsA6BFq3vJ6UbDzPu5jFVBQaalAQvyfAaSchjL7NI10L3
XUlo7YJXNXWxZe/QknY6blZ0PrRrKElBlyjYA/4XWzCpayHc0dFb7sRlpd4N
E44iiFfTSz02ciLt5MqhRW8xIQpZFtUShi/56krUKJN9AAxfYz9y8aPfnKS7
E4Ww2du8MHRHCOVAQHevi9aUdMUjLSIaRZGR70Q5kH/CLT0UaVObcVtHKY4V
X6IzYvroJge+Xy+VpImLR71wSaX5LSpBNrb976lrjt8NFLOxW9OIAz4qYC0m
LGTAetT1seBqPPk6veAspD/iwYtRk/YvrOVKX4NPUhgWlp4k529fvZqHu72G
0ZDEKAvx4/mEV85ihWamJx3yMLg80vWEJkIOMFzbo6GzGup78Lp7mRGD4RMz
GMsnbXDwpmiCVxy69YIHJW1UEtoFaxOcz2EntNwUeoKPLHZi7zKw2JuuLPtR
kjZ5dfnd5XSiZHzvrZCEgnQj2xrs0QhC7oNdgy7xRZnY1gG2bysh9+2FMMLm
X882oEOWTx1ZuYAFu6ncTrpWqw/S54rpRm7qyQsgEggih6cbUCOcim8TzK2R
1dLlUQWEQ76zNFrGBWyBt/9Rgwzv9HP4vwN8a+9ARvG53HqOifkf6qr2j/9k
OpbHP8FWtS5N/8EfTbsrMeX3GvwT1HL/4jUEEMaW+h3+t8lBZP2b7wCpK3Ab
d3ekGFWOD5+BHdV/Aak2GcJW/wdXNgl0SWAAAA==

-->

</rfc>
