<?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-04" 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-04"/>
    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization/>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country>USA</country>
        </postal>
        <email>dave.thaler.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>Thomas.Fossati@linaro.org</email>
      </address>
    </author>
    <date year="2024" month="November" day="08"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 52?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>Section 3 in the Remote ATtestation procedures (RATS) Architecture <xref section="3" sectionFormat="of" target="RFC9334"/> gives an overview of the roles
and conceptual messages in the IETF RATS Architecture.
As discussed in that document, a Verifier accepts a well-defined set of RATS conceptual messages: Evidence, Endorsements
and Reference Values, as well as Policy for Appraisal of Evidence.  A Verifier appraises Evidence using Appraisal Policy for Evidence, typically against a set of Reference Values.</t>
      <t>Various formats of conceptual messages exist, including standard and vendor-specific formats.
One of the purposes of a Verifier is depicted
in Figure 9 of <xref target="RFC9334"/>. A Verifier is intended to be able to accept Evidence in a variety of
formats and generate Attestation Results in the formats needed by a Relying Parties it is intended to cater.</t>
    </section>
    <section anchor="statetypes">
      <name>Actual State vs Reference State</name>
      <t>Appraisal policies (Appraisal Policy for Evidence, and Appraisal Policy for
Attestation Results) involve comparing the actual state of an Attester against
desired or undesired states, in order to determine how trustworthy the Attester
is for its purposes.  The state of an Attester represents its composition of
components of execution environments (its "shape" or "composition"), typically in a hierarchical
manner, i.e., a tree.
The state of an Attester also encompasses the combination of static and
dynamic composition (e.g., provisioned and deployed software, firmware, and
micro-code), static and dynamic configuration, and the resulting operational state
of its components at a certain point of time. Thus, a Verifier needs to receive
conceptual messages with information about actual state, and information about desired/undesired
states, and an appraisal policy that controls how the two are compared.</t>
      <t>Each Attester in general has at least one Attesting Environment and one Target
Environment (e.g., hardware, firmware, Operating System, etc.).  Typically, each
Attester has multiple Target Environments, each with their own set of claims (sometimes
called a "claim sets") representing their actual state.  Additionally, the number of
Target Environments and Attesting Environments that are components of an Attester are not limited.</t>
      <t>"Actual state" is a group of claim sets about the actual state of the Attester at a
given point in time. Each claim set holds claims about a specific Target Environment
that is essential to determining trustworthiness.  Generally speaking, each claim
has a name (typically referred to as label and occasionally referred to as a key, code-point, or some other ID)
and a singleton value, being a value collected from a Target Environment of a specific Attester at a given point
in time. Some claims may inherently have multiple values, such as a list of
files in a given location on the device, but in the context of this document such
a list is treated as a single unit, representing one Attester at one point in time.</t>
      <t>"Reference state" is a group of claim sets about the desired or undesired state of
an Attester.  Typically, each claim has a name and
a set of potential values, being the values that are allowed/disallowed
when determining the trustworthiness of the Attester.  In general, there may be more
gradation than simply "allowed or disallowed" so each value might include some
more complex level of gradation in some implementations.</t>
      <t>That is, where actual state has a single value per claim per Target Environment
applying to one device at one point in time, reference state can have a set of values
per claim per Target Environment.  Appraisal policy then specifies how to match
the actual state values against a set of Reference Values.</t>
      <t>Some examples of such matching include:</t>
      <ul spacing="normal">
        <li>
          <t>An actual value must be in the set of allowed Reference Values.</t>
        </li>
        <li>
          <t>An actual value must not be in the set of disallowed Reference Values.</t>
        </li>
        <li>
          <t>An actual value must be in a range where two Reference Values are the min and max.</t>
        </li>
      </ul>
      <section anchor="conceptual">
        <name>RATS Conceptual Messages</name>
        <t>RATS conceptual messages in <xref target="RFC9334"/> fall into the above categories as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Actual state: Evidence, Endorsements, Attestation Results</t>
          </li>
          <li>
            <t>Reference state: Reference Values</t>
          </li>
          <li>
            <t>Appraisal policy: Appraisal Policy for Evidence, Appraisal Policy for Attestation Results</t>
          </li>
        </ul>
        <t>In some implementations, hints or suggestions for how to do a comparison might
be supplied by a Reference Value Provider (as part of Reference Values),
an Endorser (in an Endorsement), and/or an Attester (in Evidence),
but the Verifier Owner is authoritative for Appraisal Policy for Evidence,
and the Relying Party Owner is authoritative for Appraisal Policy for
Attestation Results as depicted in <xref section="3" sectionFormat="of" target="RFC9334"/>.</t>
        <t><xref target="input"/> below shows an example of Verifier input for a layered Attester
as discussed in <xref section="3.2" sectionFormat="of" target="RFC9334"/>.</t>
        <figure anchor="input">
          <name>Example Verifier Input</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="576" viewBox="0 0 576 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 104,32 L 104,240" fill="none" stroke="black"/>
                <path d="M 104,272 L 104,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,80" fill="none" stroke="black"/>
                <path d="M 136,112 L 136,160" fill="none" stroke="black"/>
                <path d="M 136,192 L 136,240" fill="none" stroke="black"/>
                <path d="M 136,272 L 136,320" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,80" fill="none" stroke="black"/>
                <path d="M 240,112 L 240,160" fill="none" stroke="black"/>
                <path d="M 240,192 L 240,240" fill="none" stroke="black"/>
                <path d="M 240,272 L 240,320" fill="none" stroke="black"/>
                <path d="M 304,80 L 304,176" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,80" fill="none" stroke="black"/>
                <path d="M 376,112 L 376,160" fill="none" stroke="black"/>
                <path d="M 376,192 L 376,240" fill="none" stroke="black"/>
                <path d="M 376,272 L 376,320" fill="none" stroke="black"/>
                <path d="M 520,32 L 520,80" fill="none" stroke="black"/>
                <path d="M 520,112 L 520,160" fill="none" stroke="black"/>
                <path d="M 520,192 L 520,240" fill="none" stroke="black"/>
                <path d="M 520,272 L 520,320" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,320" fill="none" stroke="black"/>
                <path d="M 104,32 L 120,32" fill="none" stroke="black"/>
                <path d="M 136,32 L 240,32" fill="none" stroke="black"/>
                <path d="M 376,32 L 520,32" fill="none" stroke="black"/>
                <path d="M 536,32 L 552,32" fill="none" stroke="black"/>
                <path d="M 136,80 L 240,80" fill="none" stroke="black"/>
                <path d="M 376,80 L 520,80" fill="none" stroke="black"/>
                <path d="M 136,112 L 240,112" fill="none" stroke="black"/>
                <path d="M 376,112 L 520,112" fill="none" stroke="black"/>
                <path d="M 136,160 L 240,160" fill="none" stroke="black"/>
                <path d="M 376,160 L 520,160" fill="none" stroke="black"/>
                <path d="M 136,192 L 240,192" fill="none" stroke="black"/>
                <path d="M 264,190 L 352,190" fill="none" stroke="black"/>
                <path d="M 264,194 L 352,194" fill="none" stroke="black"/>
                <path d="M 376,192 L 520,192" fill="none" stroke="black"/>
                <path d="M 104,240 L 120,240" fill="none" stroke="black"/>
                <path d="M 136,240 L 240,240" fill="none" stroke="black"/>
                <path d="M 376,240 L 520,240" fill="none" stroke="black"/>
                <path d="M 104,272 L 120,272" fill="none" stroke="black"/>
                <path d="M 136,272 L 240,272" fill="none" stroke="black"/>
                <path d="M 376,272 L 520,272" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 240,320" fill="none" stroke="black"/>
                <path d="M 376,320 L 520,320" fill="none" stroke="black"/>
                <path d="M 536,320 L 552,320" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="360,192 348,186.4 348,197.6" fill="black" transform="rotate(0,352,192)"/>
                <polygon class="arrowhead" points="312,176 300,170.4 300,181.6" fill="black" transform="rotate(90,304,176)"/>
                <polygon class="arrowhead" points="272,192 260,186.4 260,197.6" fill="black" transform="rotate(180,264,192)"/>
                <g class="text">
                  <text x="304" y="36">Appraisal</text>
                  <text x="164" y="52">Actual</text>
                  <text x="216" y="52">state</text>
                  <text x="300" y="52">Policy</text>
                  <text x="424" y="52">Reference</text>
                  <text x="488" y="52">state</text>
                  <text x="180" y="68">(layer</text>
                  <text x="220" y="68">N)</text>
                  <text x="436" y="68">(layer</text>
                  <text x="476" y="68">N)</text>
                  <text x="568" y="68">R</text>
                  <text x="568" y="84">e</text>
                  <text x="568" y="100">f</text>
                  <text x="568" y="116">e</text>
                  <text x="60" y="132">Evidence</text>
                  <text x="164" y="132">Actual</text>
                  <text x="216" y="132">state</text>
                  <text x="424" y="132">Reference</text>
                  <text x="488" y="132">state</text>
                  <text x="568" y="132">r</text>
                  <text x="180" y="148">(layer</text>
                  <text x="220" y="148">2)</text>
                  <text x="436" y="148">(layer</text>
                  <text x="476" y="148">2)</text>
                  <text x="568" y="148">e</text>
                  <text x="568" y="164">n</text>
                  <text x="568" y="180">c</text>
                  <text x="568" y="196">e</text>
                  <text x="164" y="212">Actual</text>
                  <text x="216" y="212">state</text>
                  <text x="308" y="212">Comparison</text>
                  <text x="424" y="212">Reference</text>
                  <text x="488" y="212">state</text>
                  <text x="180" y="228">(layer</text>
                  <text x="220" y="228">1)</text>
                  <text x="304" y="228">Rules</text>
                  <text x="436" y="228">(layer</text>
                  <text x="476" y="228">1)</text>
                  <text x="568" y="228">V</text>
                  <text x="568" y="244">a</text>
                  <text x="568" y="260">l</text>
                  <text x="568" y="276">u</text>
                  <text x="48" y="292">Endorsement</text>
                  <text x="164" y="292">Actual</text>
                  <text x="216" y="292">state</text>
                  <text x="424" y="292">Reference</text>
                  <text x="488" y="292">state</text>
                  <text x="568" y="292">e</text>
                  <text x="180" y="308">(layer</text>
                  <text x="220" y="308">0)</text>
                  <text x="436" y="308">(layer</text>
                  <text x="476" y="308">0)</text>
                  <text x="568" y="308">s</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
            .-- .------------.   Appraisal    .-----------------. --.
            |   |Actual state|    Policy      | Reference state |   |
            |   |  (layer N) |                |    (layer N)    |   | R
            |   '------------'       |        '-----------------'   | e
            |                        |                              | f
            |   .------------.       |        .-----------------.   | e
   Evidence |   |Actual state|       |        | Reference state |   | r
            |   |  (layer 2) |       |        |    (layer 2)    |   | e
            |   '------------'       |        '-----------------'   | n
            |                        v                              | c
            |   .------------.  <==========>  .-----------------.   | e
            |   |Actual state|   Comparison   | Reference state |   |
            |   |  (layer 1) |     Rules      |    (layer 1)    |   | V
            '-- '------------'                '-----------------'   | a
                                                                    | l
            .-- .------------.                .-----------------.   | u
Endorsement |   |Actual state|                | Reference state |   | e
            |   |  (layer 0) |                |    (layer 0)    |   | s
            '-- '------------'                '-----------------' --'
]]></artwork>
          </artset>
        </figure>
        <t>While the above example only shows one layer within Endorsements as
the typical case, there could be multiple layers (see <xref target="multiple-endorsements"/>), such as
a chip added to a hardware board potentially from a different vendor.</t>
        <t>A Trust Anchor Store is a special case of
state above, where the Reference State would be the set of trust anchors
accepted (or rejected) by the Verifier, and the Actual State would be
a trust anchor used to verify Evidence or Endorsements.</t>
        <t>In layered attestation using DICE <xref target="TCG-DICE"/> for example, the actual state of each layer
is signed by a key held by the next lower layer.  Thus in the example diagram
above, the layer 2 actual state (e.g., OS state) is signed by a layer 1 key
(e.g., a signing key used by the firmware), the layer 1 actual state (e.g.,
firmware state) is signed by a layer 0 key (e.g., a hardware key stored in ROM),
and the layer 0 actual state (hardware specs and key ID) is signed by a layer 0
key (e.g., a vendor key) which is matched against the Verifier's trust anchor
store, which is part of the layer 0 reference state depicted above.</t>
      </section>
    </section>
    <section anchor="conditionally-endorsed-values">
      <name>Conditionally Endorsed Values</name>
      <t>The example in <xref target="input"/> showed Evidence containing actual state for layers 1 through N,
and an Endorsement containing actual state for layer 0. However,
some claims in Endorsements might be conditional and so are only treated as actual
state if a condition is met.</t>
      <t>A claim is conditional if
it only applies if other actual state matches Reference Values, according to some
matching policy.
For example an Endorser for a given CPU might provide additional
information about what the CPU supports based on current firmware configuration
state, or an Endorser might provide additional information that if the
serial number is in a given range, then a specific security guarantee is present.</t>
      <t>Thus, actual state is determined by starting with a collection of unconditional claims
and adding any conditional claims whose conditions are met based on the actual
state.  This process is then repeated until no more conditional claims are added.</t>
      <t>Verifier policies around matching actual state against
reference state are normally expressed in Appraisal Policy for Evidence.
Similarly, reference state is normally expressed in the Reference Values
conceptual message.  Such policies allow a Verifier and Relying Parties to make
their decisions about trustworthiness of an Attester.</t>
      <t>The use of conditionally endorsed values, however, is different in that
a matching policy is not about trustworthiness (and hence not "appraisal" per se)
but rather about whether an Endorser's claim is applicable or not, and thus
usable as input to trustworthiness appraisal or not.</t>
      <t>As such the matching policy for conditionally endorsed values must be
up to the Endorser not the Appraisal Policy Provider.  Thus, an Endorsement
format that supports conditionally endorsed values would probably include
some minimal matching policy (e.g., exact match against a singleton reference
value).  This unfortunately complicates design as a Verifier may need
multiple parsers for matching policies.</t>
    </section>
    <section anchor="endorsing-verification-keys">
      <name>Endorsing Verification Keys</name>
      <t>Attesting Environments have cryptographic keys that allow authenticating the Evidence that they produce.</t>
      <t>Typically,
the bottom-most Attesting Environment in an Attester will sign claims about one or more Target Environments
(see also the DICE example at the end of <xref target="conceptual"/>)
with a private key that the Attesting Environment possesses, and the Verifier will verify
the resulting Evidence with a public key it possesses, called a verification key below. While this is typical,
cryptography other than public key may also be used.</t>
      <t>Endorsing the linkage between such verification keys and their associated Attesting Environments is crucial to the verification process.</t>
      <t>The Verifier must have access to a verification key for each Attester. Such a key
could be provisioned directly in the Verifier, though for scalability the Verifier
typically is provisioned with a trusted root CA certificate such that an
Endorsement from an Endorser includes the Attester's verification key material
in the form of a certificate that chains up to that trusted root.  Such a certificate
might be stored in the Verifier, or might be resolved on demand via some protocol,
or might be passed to the Verifier along with the Evidence to verify, depending on the protocol.
Details are out of scope of this document and left to specific protocol documents.</t>
      <t>Specific protocol documents are also responsible for documenting what
particular algorithm or cryptographic protocol is used for the verification
of the Attester. The verification key could be, typically, a symmetric key, a raw public key, or a certified public key.</t>
      <t>Evidence can contain an identifier for the Attester
(e.g., <xref target="I-D.ietf-rats-eat"/> <tt>ueid</tt>) in a claim, sometimes termed an "identity claim",
that can be used by the Verifier to look up its verification key for the Attester.</t>
      <t>While identity claims are just another
type of claims that may be endorsed, some implementations might treat them
differently. For example, a Verifier might perform a first step to
cryptographically verify that the Evidence
has been generated by the Attester that has the key material associated
with the identifier in the identity claim(s) before spending effort on
another step to appraise other claims for determining trustworthiness.</t>
      <t>This document treats identity claims as with any other claims but allows
Appraisal Policy for Evidence to have multiple steps if desired.</t>
    </section>
    <section anchor="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="security-considerations">
        <name>Security Considerations</name>
        <t>In many scenarios, a Verifier can also support a variety of different formats,
and while code size may not be a huge concern, simplicity and correctness of code
is essential to security.  "Complexity is the enemy of security" is a popular
security mantra and hence to increase security, any decrease in complexity
helps.  As such, using the same format for both Evidence and Endorsements
can reduce complexity and hence increase security.</t>
      </section>
      <section anchor="scalability">
        <name>Scalability Considerations</name>
        <t>We currently assume that Reference Value Providers typically
provide the same information to a potentially large number of clients
(Verifiers, or potentially to other entities for later relay to a Verifier),
and are generally on devices that are not constrained nodes, and hence additional
scalability, including code size, is not a significant concern.  We also assume
the same is true of Endorsers.</t>
        <t>The scenario where scalability in terms of code size is strongest, however, is
when a Verifier is embedded into a constrained node.  For example, when a constrained
node is a Relying Party for most purposes, but still needs a way to establish
trust in the Verifier it will use.  In such a case, the Relying Party may have
a constrained Verifier embedded in it that is only capable of appraising Evidence
provided by its desired Verifier.  Thus, the Relying Party uses its embedded Verifier
for purposes of appraising its desired Verifier which it treats as only an Attester,
and once verified, then uses it for verification of all other Attesters.
In this scenario, the embedded Verifier may have code and data size constraints,
and a very simple (by comparison) Appraisal Policy for Evidence and desired state (e.g.,
a required trust anchor that Evidence must be signed with and little else).</t>
        <t>Using the same message format for Evidence, Endorsements, and (later) Attestation Results received
from the later Verifier, can provide a code size savings due to having only a single parser
in this limited case.</t>
        <t>Similarly, an embedded constrained Verifier can choose to not support conditionally
endorsed values, in order to avoid complexity introduced by such.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any actions by IANA.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to thank Thomas Hardjono, Laurence Lundblade, Kathleen Moriarty, 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:
H4sIAAAAAAAAA9Vc63PktpH/jr8Cpf2wUmpm9hHnLlZdUtHtw95L7HWtNva3
SzAkRsMsh5wjSGknWt/ffv3rBkCAw9E6dqquIteWJRJoNPqFfoHL5VL1VV/b
S/343dX7a/2qKdvO2Z1tevdYmfW6s7eX+uiVKtuiMTuaVnZm0y8r22+Wnend
0iajlk+/UMO+NL11l/rLX//6C+WG9a5yrmqb/rCn2W9evX+tirZxtnEDDeq7
waq7G7/iD233oWpu9FddO+yV601T/sXUbWP9wGrf8W+uf/706ZdPnyvTWXOp
z65tMXRVfzhTH+5ojaa3XWP75UugqgrTX+qq2bRqX10qrfu2uNQH6+hX13Z9
Zzcu/n3YjX8qM/TbtrtUS5pNz16u9PutqW1HA4UUL82tHZ/Znalqog89XPX8
cAUq/eEGz1dFu8MCtJwldM7O6I+iLW34lZD3v3b2hqgVhwxN39GrP19fBTy+
Xun/rLoP27b+e8Tka9t8SJ+2HZH0dWeGZttubKev37ynp4G7Ry886luCslp7
KH9wVb/axJGr0ib4v9tawqXvjHNW//tv4mYe/9sXz7/8zeO4o5em2xEbyz7d
y1e225nmEPbzfqVft86Zvorbeb9td8Ylj2k/pqn+Tn+ANH+qGtO1I94yfOWH
/6Hm1yuaoxT4Tqv11a0F79+9fgGxvNQsuqYrtvTwzfLlKpFniEv4jd6+f/HV
8uWbF68wnUjoZULzD5P57D0E0pb6RbvbD32U3zMe5JXtDCD0VU+a0fMu9BUt
XvW26IfO+qGmuwFxt32/d5dPnvQCtwhgbwAV23pyt1+SDvWkck+Gfd2a0j0B
/GUCf5nCX35vO+jg8tnq2fKdva3kj9/+ZT+sV/tyw8tDbS/1f5lmMN1hoZ8/
ff6FUsvlksQGnC56pdSbRvdby1qs39ld29tsT991bWFLWtDpcyj0hTYJFgtt
NCFSbSrSF1MUdt87/eq2Km1TWE26vtCDA/mu9vvOVM7U+ru2roqDJttRFaau
D/qu6rfalGWF9UxN/CXa6E3X7jJzBWiEIMktw/7e1IN1C31jG9vBOmVYv7Nu
qMnEVY0WYXG0SdMT7pYQspuhxnMaVh+A3Xem6yvrViQa28ppMowD1tRVXQ8g
FMCDSPuh27eON6a6tra63RzjWFauGEiJHNmindWwjESPjhFzpB8Mqdi2VYH5
amdJxG+sx5PRykD6Ca5o97we/mDLmvJhJWzdVWVZW6UewWB2bTkUWFQpMqZM
ll8HaIHR70eS7Y8YnYqbvr8fgRAWy6htP/6ob0gVsXfd3trutrJ3AU/QyCkQ
hagA4RhIAPyG485E8rCjq2xHVy6SspSxRJ7AmlTwdBA8o+9sXS9Lu6kamuNs
D0QY9Mz6l1FQF/m5OC9oZLwAHf/3IgxWjXINUfDwSI6uEuxkiE0U44ROMO8j
TqOGmBsD00z7C1uaYEfs/950VTu4KO40ao7m9mPliHhVU9RDCST4RDZdyaJ7
yyf/0u1tQbgXAdhKvW2i7Hkd4BUSHkBtLCFM1g1a97q6gdR8iVH396m0rFLa
VJACMnolsatv9ZpUa01qRb8KT0eSEUyjb2mTtj9AbcI+gXawAXMmIEhZGN9Y
i8XWRNWp+uuqnyJEjgadk1Coq4IJed1jnVuXsEAe3T/CwhYukftRqZG3e/AW
0M8/w2/sZG6ImtnVBWF529a3MC+7PVGFdoFdGsGSUWEGNZ4mkEORIlVaV3W0
PVp8aMIfPMNBMOg5WStsvrQ0bUeqpLftnfhod+RdbQ+8VICrKhY6Ip6LssGG
1M6j0dk92RgxbfQP+LeObT/Yyn82/Jbm2Y/kBfIr29xWXduISTzHxDO3NXt7
hm2cJUDOLlLNYanZkqSxsaRnitwUEhba6MquYETg/azUSWxN7VpanKnMNp2N
d7tbk0PiceaJpCw4FMoDeTv0e7qrc7u6oaXIvsohbUXXSFvq9gDSt5v+zuAs
3VTdTn4DLILTtUs4YbSlcQ09rtFsoGWMh4gP21yWEAgEHRjyMkiEImQjzYXI
OBN1YbueZINElWSf9bzaWbjGg8vsLHTHQTI6W1iy+WrOwvBxHn002r9Zt3Se
p5IpyB6P8cL4JIqlCmKJ8cQWk2vVQc4E+E100jgRUyIBiSmf9KIbtiQFfmWK
7chV2qvYjFpvDROhtoYMLBHFDwL9Xo0yxwjg7Xt26FT6yvN3S0Z0ysa3wgGC
dX2ghXcLbftidQH1CCJKjwg1FVEDPjswcF+H1VJEnIwXKtNeq063d004F4ra
VDvSDzge4KFTWAMCRzqCdxjozi5GJfSGo+oyBuEAiw4ZcARVm2G3JgRJSWfQ
Eus1R7rE88qVO1Mzetu0xIZqRw4AGHZ2leBzBrtsNHvLcZ+8Fy85c7YvNVIs
5wp+SpByHAss5SwZESDJUE0y7gnpRVfHA/F454p3R+iR/IOehEFiOpm80XCS
KXWwjV+J7JF9IsAG4bHnKi+rWCQ5bNLnoynrcOB0cizRgNqsbS1iWRTGeU5N
Rxn9wRL7YESWvO8F7CX7pS3Rp9NvXl6wv0N7JDRq25My3sKnWNBhDOyN/Ekg
SJBwuotnbmZIIR5BpFVGe53QXkXaX7ODLLTeGZjrLQ7VnjayRSAeFeHWO2Fu
ICrxvuoK+kp+QFWLKxmWqNvCW2Y5+EuKjXC8roc+Ot8ItD6Kpcv8fYBXHjY9
p7PBYMe8oNCHjsyKiJjpz2g1ZLP4OxcyEufRX/jpEn36pMbOE/05NigeYCJK
OFKiA7lvey+sgbLCbawqT0atJaDtHVnlEoaXf1V3WyJ0JuOwurmcT1WQcHwT
zS5bFIINppPTt2s7q246UwrnaGkyadVuT3Jw5tcEEUYMzjSOZexTpHNX3Wx7
79Valm8FmGxxavuRzPutZRd9XIR4w3qAZdjxlwCNePVeNHqh7xjHzK5sU1mQ
tcnGe2rjtxkLQaeW+Jmkk5ANkchZSVmIAo9yQh5oI7oQeSf8UZ9bFjb8+Lgk
vnkFtf68bIkJPYn9kQn1cvBTgg/WY/vRgJTMeNZThot9e75cKvUrfdWEVTzn
SGggAiHMlTUC04/XOgEBh8cRlFFefjqgtQ81OtNQUC4SAH9iCoBVA2vtMJws
6M58RKDwSOLNF6Nn9E3wjO4fjf4ShQin4lKsf3/v01oUXW9oDwhKWjnl1i28
fmLQTduBiQbuN3bphL4JC09FuIvZXMmv9MRGXR5tGvAnMnX5uTB29vXc+shE
zWkkuVYVuwx0cA03N/AwkEgBGC/AZQsnVgIhRxDZGijipBtI9aox3Mt2g9QW
sOz0OdGQ5s5K98UChtZTj4Yyt1NqXrB3+oSwSR0ajAs0IBBrb9GjK/32rpHw
V7KPVc/5zElKYY6eKvj5afB6+EfhzcWUkKQQwosMZhmfKJAk5ff3nKQj4SQn
hHjgiBGcAPI2AOPHGF/yeSAQeS0Hi0MsBo9mkuRJFl09ny77v/SjjXG3Nz5Z
Kz+r5RL/xh8yfcmuZcTkZ6XpXwblE/6l2oMHgWR+xERBZM4xFK3PeaP62wt+
oKcjkvdxzrsjOI9ThB+n0/X0bRzySdsjOLM/J1+E15sjOEc0zuDM0TjiE9M4
81RO4Zygsu4eoPPzkc6f0hHJ+zjnmD4/j87NT6Pz7akXYV7xWTr/x+/iz+8/
Q+ecPlM6vxhN5M+R5meByu8GHPPjvsf3cc73GRyi4TyV0xGzVDZqOvLn/HzS
9ecthp6MmKXyoBLTf1qak5XnpXmGW5GOTz9jNZ4mdHb/BDrTPzat6v5SPxJr
TWcKefIflqaubprfnRUW9dczqXz97uyVt/LRxL/BpDPyaX7YVrVN/JR4HjQI
dvmUgM8r+0AOo2omBRTHjqgPe8nPcTbECkU71CVHCyEqZDBId1jUJ8LjrHz9
448XMWqk8If80T1qTT5AjkkbvW6RA49hEWHrw9yy2jD/ep8cp2PoSnN5kPzH
go5afd0j0uBwjl1rjzZCNOE4kyJEE3J057nju7CzxHflaIqOVCzhfGmNsD5v
kUH9G0fiF3BrUq9iTAJm2eoAXpkMKgphTIZbTD+MNnpSgVqxZxZObpM4DlLG
4DLo/X0oqsJjJQie84vZ1AxHbgwR2WNHMhZ8tA+WQn9bl2FrDeJ0uPCdjOfM
8hCz+kG+yspQZLdTntR45S1/vrbP1b29lr8v9GR5b8iAhvJjDQ/ARoEb08zj
FvJ8F+mCz+YWVGHog8s+5RXislE28dRByNhDevf2m4vRCwwz80XjVAik5OYA
5M3LUyurbGWRdEy5IKmtiFeVk2gOAuDjwVTwHrtMshRjuxjnBuc6xXga6EbX
k3nINRcKosYkZJDJMsQinLQPAsCuY3BKYWhoXBRo5HuMJCoyOkFOvQ15Rrh1
7XCz1d8KcXMn//Mg9NOV/pqWJWVaKJfktaYWTlIVa8Yq7I455CRpzaYyzTzx
ct6UVBuOdPxEZovt2SRJKqByGdhqo6peIBqOhBwgSOYv24Yw1x1FPwvU4dqu
9NkLSayEsF4CwJV6Paq7TmMlcfklK/fiuz/7ne8l6sor/tNKwB1SMJAWzEMU
13ZEurUB+2lQMXRskqNaZbUQ5YsMEpJFdE4tnxUiJJvLkqpoEoy5z3tXWZaR
0wMLSagkOU/nu5b0zWBoSG/5YPC5Qk4tcUklJT0XTn2hjZWSHnecV5TGiJB5
9cWmoUkZLDImAlsyl0xz0McjiKDoW4gvJH1BsjPSdLTTKtQAuBmC+wKc43wo
dtvZvcjmQCclUafVPtN2tCYnD3HWojwdXIVYDjWkbpw28dKUESXUKqdGQuoE
xCwYBPsRhPWB44NR80pdV7uqNh3So1OYtLF5kPlR7a3OccKGCHUNB2PcGbIx
WX8CNxTktWbOu32wSoovJcmPE75I9vc4l5qme8X2DexkpJTHDoKVDIndrTdK
LGjRmfH9FOQSTNRZyNGfwOMcW9kyPTDoLBbkzjgL6ewFpzpID9nEeF228teo
i4/daK/YMBVc9ieOEdTgxQxODY6fG+eTCMiBTTAaS4IyG8bQicfH2bnJ7iAV
DxIsZAHVsNc+5RYtCLbM3tVU1kImyXsni8np4ZsVxLhEa/YwGuK0kfKtiQSH
kEKVkwVJ9x0EcLI5f4CTLS56eZlmb2N9JyqA4rUugqYPsIP90JBS1AdJnVcF
9z6h9nDTSB0kSjVy96gIq+iP0zHvcJiCyDluFaeJH3mi4LGA8aWaP9oDnecn
yoec/S66w75vycfbk08BzyQUKETXBpimnsH5akQ8/Ht/lBxAzHKAMVBjsYSj
jXXb9+1uuWvh1M+WfyXrF7N7d1VdsxuVFwoR2mDrsIczNVLFgQp3FGBV9pvj
uSmSZVHPQ8dMkin+8UL5k2DfVbewWHDWwrZOILxv0a3gQu08yz0y9uL0q7xj
IBItLDisayE3emMSmLGsfJuyEeM4IbjSIRCs5OAQei9UwsaD90O42JMsBLFi
Gq3ZwnHxPkoNO5BV8wENc2vb31nUM6DrUzxc2DYq2861FJb19mSFGm5TNxS+
eMtFsBSePwK92R0VAJZCajMFH5EcUh5RhKOhtP1gJecFBzsqRrVpf0hZdXTi
S/9KHuD1W3ZSAdMRRc26quFupINU0v7iMrCeq74JVXct2bMXV9z+ISjbYDih
WU2W6pBwOHGnvEVyWZGPDPvR/nfooarYzYudWFIqTheWTo4trJUOptf0Ga7h
oM0mquhPjyFSTrK2G31uEnV0TbHDU9od97xVRsoORKm+JWdrodIZ3PZTBrEY
j/S6DR5abm1COL1AQEPqLAVi6ZzzC6zUS0vBRC0eEhuOTdrfmVakgWFtN3z0
RS8zAIrDuAZ3+q0v4zo07rg9+lFxqkKGwhB2N+EPIFKrioFcJZqAClO/3YGC
uf2NS+DUAHkAa6o26qgA/H6qWBCPoABJ2xYH3YcduaedGIUFF+TuEjMh3n0Q
BMJgfAWDESM/klgfukF48bQXBgaMYyXCH56hWZF8XIok/zrYqvzrhXj+bOsX
OjbXaHjt3M2lzwQyaSIPOltIWwiW92ZsmqsBQ+u2/QBhR0/WrNnIyBeya/lS
wty/SfDNFhX6b5NuIMbEF9qDl7GYrbR5qefgE2vvVHQY6wNa+pO0TuoISGBl
O9Zsg6iMsCGcocYqkxy2Sj7fFE+wwC1ufFnDpIeGzki1ePLyJIzD09S6JFZe
RbVM+O3NQk68c3dBC25ayZSIstoNvCDSWeXpGXYSG3n9weXJy2r0QLsPDo1U
o5m67piLvnMO8VsGH/40ezlOPRjjAMO8aQZ4c8DvW0fYA3tPklszZv8Ek4H6
awLQK3x6bJBo23oTPFNJGOaGv642rE4X8bSSiHGsBP529SyrBCYd9n1cPBH4
pPRKR8YP5BmqJNr3nZSJ8oRFp6maBYLbbCbRU3EIKk3ErKIZBr2E2QKbNsv+
J0lpSP3Rwj42gtsT2kVFK0zHASIknpuj9FuensEf26GDxSBdVpCZ6G8/HFZ4
iyTZIJD5zeQGA2JFGtV1h7HRNJKVj++B7wN4jvrgjlG4HWqoLbsk1djffysX
VYB+zNdwzkaSOITkh6a9aySL2rBH6tCwlOx8cofCiNYds9tHTdxwI2m8LLUe
RVmcJpy6Dxyp+traRAqfPc2FENDv70klYTc+6qv8LfDbDB2z2osrAWEN/Cbo
Z0b3+0fz9QulfCv9UXozKbd7y5FpHppaJTGZFkBiZph8n2Fj+KpF5zWApSeN
Z0CzMGHMbkpuzOySikyJyAf9TLxfn1LFmemVh4Q5PzwapOAlzaxO5uUmmhpR
Qvbe90xzWCIznc/bSjqBWVai6wtd0O508m9mEWmFGuE40eHOoknYsmkKvIIx
4ry1m2NHPLVYfiXukExOAn2h3l5PWr+TXmIOHE6UouQwDNtXE/57/8E3CB+H
o4ssp10epRQ9uWmF2d4yrsIwdjONoOfp/nS2P5Xu74KPcgjPpIF57FbWz84u
giXJ70qYJs0hnwbwPAEwDWjgeaWakN3cUWME4rcagx8xK8hRcRaOm0rHDk4G
vSZlSNq71NggjyzqeG0jZGimack0ez7DgZPdMLPF66SKffRyBb/iqNY8B2tF
rz5NnuhPKlIFT36vP00r5JB2gSv/pU8mDQfT1T8lbPTTE8n47PS02v2Yp+dP
Xh1NP66PZwDyn9uj6Q/+TKdXR9MfZNx0evmJLMfpBT7HOPsTGOfhJ4yLT5pf
xrjilzHO/jLGHYvNgz+fn/4PMY6mvw6O0MwCv1jjopcVGZc++f/VuOPp/1qM
+zr4TzML/GLGRecsMi598i/FuKOXj39WI9d//6xZn8brVKdxPEZ6bIKKIfTD
fVCznry0Qc0e2t4zmPpx3rng4D16bFFUFuFa6g5lI9N4pyzJvyS3ZkvxMofK
bZV0X4z5Whe76mlg9IQnQYOv2NHMmVteUzfeO+OTCvvaxqxt36oZl3vGoZfr
OUndMY08lHT89LE06eRyCBcGnZGrFROayD0Nj0dwDgOiTlKR60oyPqGQMOPI
ws/Mt6c4Jzy2s3ym+z1NJYeLF6UyeUvMGNVn2ZKQYDp130rlt17y/CaB5iaK
iD0i/5nei4wZFbrZwwWxyS1Xf7GSvMWjOAO1zRBJy3gKUeEg24/7GqlXuZgp
zSmF7Rp0fREOUmpPCoMC8bVAfJEF/T6N5nw0PqaAprkBaSsI172nn1OQKxrh
4zJHa7xpEA4ctCNNx4X6/P4rSMg5MV/DzW6kJ2rtF/cZCE7a4gYeSe3f5cqT
v61C4fhwYwNRFiLVFT6zouWbCR3KQDG7RSDU9KJhaDgh1Tx7IZedMF2aNbRt
7E7yHOFrOtKnuG/3SPGr2K5Cm+47o8fqPoEmueoQ8MbJC05OltY/rppwvYre
qa2t97jb6IvvIdcXsznJ5y04Mko/EpJ/fgFU7iwqtQn8BLUjvDxPk3JYzlbc
zR9fwjynySfj3LDz9adTN0TcWJuIBi3uLGsfapm6YxdpDa0dr86STldSCg5C
5Vjh0im4JcZ5FE4QI5EmTWZyeb42B1klAPDNgHASbuK9Ukl+VEV6jw9CB2Uh
RnOrUdOWoTwshE2j6ZFe6cciohQvoi2W7kgovnTJQZKRdfXZY6HumNTjW5WD
za2x1FWDzvlG2bS8ifDddruoBqJJMAc92UJcCcr6XOR+Yv5xCkscKCXJ28t1
oZwS07PNg0iGKQwT/cnv3nC7A3oHwucP5DSjk7iu/Z15o++Eb+idXdc4nqVh
clKtxCnH5fnBWbkw6XzFMzRCT9aGNYHjoPIdRXjJtgE7XFbmlsDC7KXtZhNK
G2kPgIpp8fWB8yThAmqAHZtdjrEanJWvO8TlY04FxMo+ITKuPLdI6CGNdRPj
kU/Sa6IAEL0xJy69ah4P5lBWYJMrhl7PAhwSRP4YEuTKy6Js7mgXkewijfxV
BtMbEcvIh3ACcE/AIfgs5+tDclft4mEHwn8pIr356zuKDdmC/xn4edbUzRyO
08OVRt/y6xOTpSatIg9W29rZC1K/P+e2eu6TRCcuEgLYOdumi9mvr/gvRZSK
vRjp/4UhG8vzmV+SaLczt4QUScQQSltSSgfvwwVcaTiSxgLimv96ACsLKuJj
zx+Ss4GJs3rCheJti+oNLQbLFs74rJ6ijtrr0g+mmNu2KtNDq/JfYfKNnaTK
7Oy8ufr2at69iVXCsrViYD2X+eg1hZxnBAsg/HdpUD2pbXnjj0+2pXILECVF
t/W9FM2H8A02xLB/axsS7j+ZQY67P5HPtK5NSfz9o+m3Ndzhb9qugjYv9LeE
/zWRdivy/IJoqn8gcphC0pQbsnFrU3yQz3qU1vhThz/MUZEtDA0UyQ79F6sw
Tf0fSDQ8y8JQAAA=

-->

</rfc>
