<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-deeglaze-amd-sev-snp-corim-profile-01" category="std" consensus="true" submissionType="IETF" tocDepth="6" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="CoRIM-SEV">CoRIM profile for AMD SEV-SNP attestation report</title>
    <seriesInfo name="Internet-Draft" value="draft-deeglaze-amd-sev-snp-corim-profile-01"/>
    <author initials="D." surname="Glaze" fullname="Dionna Glaze">
      <organization>Google LLC</organization>
      <address>
        <email>dionnaglaze@google.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="07"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>RIM, RATS, attestation, verifier, supply chain</keyword>
    <abstract>
      <?line 85?>

<t>AMD Secure Encrypted Virtualization with Secure Nested Pages (SEV-SNP) attestation reports comprise of reference values and cryptographic key material that a Verifier needs in order to appraise Attestation Evidence produced by an AMD SEV-SNP virtual machine.
This document specifies the information elements for representing SEV-SNP Reference Values in CoRIM format.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/deeglaze/draft-deeglaze-amd-sev-snp-corim-profile"/>.</t>
    </note>
  </front>
  <middle>
    <?line 90?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t>This profile describes the extensions and restrictions placed on Reference Values, Endorsements, and Evidence that support the attestation capabilities of AMD products that provide Securet Encrypted Virtualization with Secure Nested Pages (SEV-SNP).</t>
      <t>CoRIM (<xref target="I-D.ietf-rats-corim"/>) defines a baseline CDDL for Reference Values and Endorsements that this profile extends.
Some measurement types of the baseline CDDL are not used in this profile.
The AMD SEV-SNP attestation report byte format is specified by AMD.
The profile defines a transformation from the AMD byte format into a CoMID representation for use in appraisal.</t>
      <t>This profile is meant for expressing reference values and endorsements of specific environments. It is not meant to encode complex policy decisions about the acceptability of measurements. The accepted claim set construction (ACS) this profile enables does lay a foundation for policy engines that enable further evaluation over complete ACS constructions.</t>
      <t>This profile extends the <tt>flags-map</tt> to represent the guest policy and host platform info that are unique to AMD SEV-SNP.
The profile extends the <tt>$crypto-key-type-choice</tt> to represent the SHA-384 digest of a key in AMD format from Appendix: Digital Signatures of <xref target="SEV-SNP.API"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC8174">RFC2119</xref> when, and only when, they appear in all capitals, as shown here.</t>
      <t>The reader is assumed to be familiar with the terms defined in <xref target="I-D.ietf-rats-corim"/> and Section 4 of <xref target="RFC9334"/>.
The syntax of data descriptions is CDDL as specified in <xref target="RFC8610"/>.
Fields of the AMD SEV-SNP <tt>ATTESTATION_REPORT</tt> are referred to by their assigned names in <xref target="SEV-SNP.API"/>.</t>
    </section>
    <section anchor="amd-sev-snp-attestation-reports">
      <name>AMD SEV-SNP Attestation Reports</name>
      <t>The AMD SEV-SNP attestation scheme in <xref target="SEV-SNP.API"/> contains measurements of security-relevant configuration of the host environment and the launch configuration of a SEV-SNP VM.
This draft documents the normative representation of attestation report Evidence as a CoRIM profile.</t>
      <t>AMD-SP:
  AMD Secure Processor.
  A separate core that provides the confidentiality and integrity properties of AMD SEV-SNP.
  The function that is relevant to this document is its construction of signed virtual machine attestation reports.</t>
      <t><xref target="VCEK"/>:
  Versioned Chip Endorsement Key.
  A key for signing the SEV-SNP Attestation Report.
  The key is derived from a unique device secret as well as the security patch levels of relevant host components.</t>
      <t><xref target="VLEK"/>:
  Version Loaded Endorsement Key.
  An alternative SEV-SNP Attestation Report signing key that is derived from a secret shared between AMD and a Cloud Service Provider.
  The key is encrypted with a per-device per-version wrapping key that is then decrypted and stored by the AMD-SP.</t>
      <t>VEK:
  Either a VCEK or VLEK.</t>
      <section anchor="amd-sev-snp-corim-profile">
        <name>AMD SEV-SNP CoRIM Profile</name>
        <t>AMD SEV-SNP launch endorsements are carried in one or more CoMIDs inside a CoRIM.</t>
        <t>The profile attribute in the CoRIM MUST be present and MUST have a single entry set to the URI http://amd.com/please-permalink-me as shown in <xref target="_figure-profile"/>.</t>
        <figure anchor="_figure-profile">
          <name>SEV-SNP attestation profile version 1, CoRIM profile</name>
          <sourcecode type="cbor-diag"><![CDATA[
/ corim-map / {
  / corim.profile / 3: [
    32("http://amd.com/please-permalink-me")
  ]
  / ... /
}
]]></sourcecode>
        </figure>
        <section anchor="amd-sev-snp-target-environment">
          <name>AMD SEV-SNP Target Environment</name>
          <t>The <tt>ATTESTATION_REPORT</tt> structure as understood in the RATS Architecture <xref target="RFC9334"/> is a signed collection of Claims that constitute Evidence about the Target Environment.
The Attester for the <tt>ATTESTATION_REPORT</tt> is specialized hardware that will only run AMD-signed firmware.</t>
          <t>The instance identifier can be argued as any of <tt>REPORT_ID</tt>, <tt>REPORT_ID_MA</tt> when non-zero, <tt>CHIP_ID</tt> (for VCEK), or <tt>CSP_ID</tt> (for VLEK).
Given that <tt>REPORT_ID</tt> and <tt>REPORT_ID_MA</tt> are more ephemeral measured values and not the instance of the AMD-SP as the attesting environment, they are relegated to measurements.
Any endorsement of VM instances specific to either the <tt>REPORT_ID</tt> or <tt>REPORT_ID_MA</tt> values SHOULD use a conditional endorsement triple.</t>
          <t>The different notions of identity induce different classes of attestation to identify target environments.
The different classes of attestation are</t>
          <ul spacing="normal">
            <li>
              <t>By chip: The <tt>environment-map / instance</tt> is <tt>560(CHIP_ID)</tt>.</t>
            </li>
            <li>
              <t>By CSP: The <tt>environment-map / instance</tt> is <tt>560(CSP_ID)</tt>.</t>
            </li>
          </ul>
          <t>The <tt>class-id</tt> for the Target Environment measured by the AMD-SP is a tagged UUID that corresponds to the attestation class:</t>
          <ul spacing="normal">
            <li>
              <t>By chip: d05e6d1b-9f46-4ae2-a610-ce3e6ee7e153</t>
            </li>
            <li>
              <t>By CSP: 89a7a1f0-e704-4faa-acbd-81c86df8a961</t>
            </li>
          </ul>
          <t>TODO: AMD to assign OIDs for the above classes, e.g., <tt>#6.111(1.3.6.1.4.1.3704.2.1)</tt> and <tt>#6.111(1.3.6.1.4.1.3704.2.2)</tt>.
The rest of the <tt>class-map</tt> MUST remain empty, since <tt>class</tt> is compared for deterministic CBOR binary encoding equality.</t>
          <t>The <tt>group</tt> is free for a CoRIM issuer to assign.</t>
          <t>If the <tt>SIGNING_KEY</tt> bit of the attestation report is 1 indicating VLEK use, then the <tt>class-id</tt> MUST NOT be by chip.</t>
          <sourcecode type="cbor-diag"><![CDATA[
/ environment-map / {
  / class-map / {
    / class-id: / 0 => #6.111(1.3.6.1.4.1.3704.2.1)
  }
  / instance: / 1 => #6.560(REPORT_ID)
}
]]></sourcecode>
        </section>
        <section anchor="amd-sev-snp-attestation-report-measurements">
          <name>AMD SEV-SNP Attestation Report measurements</name>
          <t>The fields of an attestation report are named by <tt>mkey</tt> numbers that map to appropriate <tt>measurement-values-map</tt> values.
This profile defines no new <tt>measurement-values-map</tt> extensions for the <tt>$$measurement-values-map-extensions</tt> socket.
The only extensions are to <tt>$$flags-map-extensions</tt>.</t>
          <t>The VMPL field is a raw <tt>0..3</tt> value, so this profile extends the raw value type choice of the CoRIM base CDDL:</t>
          <sourcecode type="cddl"><![CDATA[
$raw-value-type-choice /= uint
]]></sourcecode>
          <section anchor="sec-flags-ext">
            <name>AMD SEV-SNP <tt>flags-map</tt> extensions</name>
            <t>The <tt>POLICY</tt> field and the <tt>PLATFORM_INFO</tt> field of the attestation report contain flags distinguished from the base CoRIM CDDL.</t>
            <t>The <tt>POLICY</tt> boolean flags are added as extensions to <tt>$$flags-map-extension</tt>, starting from codepoint -1.</t>
            <sourcecode type="cddl"><![CDATA[
$$flags-map-extension //= &(
  sevsnpvm-policy-smt-allowed: -1,
  sevsnpvm-policy-migration-agent-allowed: -2,
  sevsnpvm-policy-debug-allowed: -3,
  sevsnpvm-policy-single-socket-only: -4,
  sevsnpvm-policy-cxl-allowed: -5,
  sevsnpvm-policy-mem-aes-256-xts-required: -6,
  sevsnpvm-policy-rapl-must-be-disabled: -7,
  sevsnpvm-policy-ciphertext-hiding-must-be-enabled: -8,
  sevsnpvm-policy-reserved: -47..-9,
)
]]></sourcecode>
            <t>The <tt>sevsnpvm-policy-</tt> flag extensions correspond to the ATTESTATION_REPORT <tt>POLICY</tt> bit positions with the following correspondence:</t>
            <ul spacing="normal">
              <li>
                <t><tt>sevsnpvm-policy-smt-allowed</tt> refers to bit 16 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnpvm-policy-migration-agent-allowed</tt> refers to bit 18 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnpvm-policy-debug-allowed</tt> refers to bit 19 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnpvm-policy-single-socket-only</tt> refers to bit 20 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnpvm-policy-cxl-allowed</tt> refers to bit 21 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnpvm-policy-mem-aes-256-xts-required</tt> refers to bit 22 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnpvm-policy-rapl-must-be-disabled</tt> refers to bit 23 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnpvm-policy-ciphertext-hiding-must-be-enabled</tt> refers to bit 24 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t>Bit position <tt>b</tt> greater than <tt>24</tt> of <tt>POLICY</tt> corresponds to extension <tt>16-b</tt>.</t>
              </li>
            </ul>
            <t>There are 47 available bits for selection when the mandatory 1 in position 17 and the ABI Major.Minor values are excluded from the 64-bit <tt>POLICY</tt>.
The <tt>PLATFORM_INFO</tt> bits are host configuration that are added as extensions to <tt>$$flags-map-extension</tt> starting at <tt>-49</tt>.</t>
            <sourcecode type="cddl"><![CDATA[
$$flags-map-extension //= &(
  sevsnphost-smt-enabled: -49,
  sevsnphost-tsme-enabled: -50,
  sevsnphost-ecc-mem-reported-enabled:-51,
  sevsnphost-rapl-disabled: -52,
  sevsnphost-ciphertext-hiding-enabled: -53
  sevsnphost-reserved: -112..-49
)
]]></sourcecode>
            <t>The <tt>sevsnphost-</tt> flag extensions correspond to ATTESTATION_REPORT <tt>PLATFORM_INFO</tt> bit positions with the following correspondence:</t>
            <ul spacing="normal">
              <li>
                <t><tt>sevsnphost-smt-enabled</tt> refers to bit 0 of <tt>PLATFORM_INFO</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnphost-tsme-enabled</tt> refers to bit 1 of <tt>PLATFORM_INFO</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnphost-ecc-mem-reported-enabled</tt> refers to bit 2 of <tt>PLATFORM_INFO</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnphost-rapl-disabled</tt> refers to bit 3 of <tt>PLATFORM_INFO</tt>.</t>
              </li>
              <li>
                <t><tt>sevsnphost-ciphertext-hiding-enabled</tt> refers to bit 4 of <tt>PLATFORM_INFO</tt>.</t>
              </li>
              <li>
                <t>Bit position <tt>b</tt> greater than <tt>4</tt> of <tt>PLATFORM_INFO</tt> corresponds to extension <tt>-49-b</tt>.</t>
              </li>
            </ul>
            <t>The <tt>sevsnpvm-policy-debug-allowed</tt> flag is redundant with <tt>flags-map / is-debug</tt>, so either representation is valid.
The entirety of the value space is reserved for AMD revisions to the SEV-SNP firmware and corresponding ATTESTATION_REPORT API.</t>
          </section>
          <section anchor="amd-sev-snp-measurements">
            <name>AMD SEV-SNP measurements</name>
            <t>The measurements in an ATTESTATION_REPORT are grouped into 10 <tt>mkey</tt>s that can refer to one or more measured values.</t>
            <t>The <tt>REPORT_DATA</tt> is meant for protocol use and not reference measurements.</t>
            <t><strong>mkey 0</strong>: primary guest measurements</t>
            <t>The <tt>mval</tt> <tt>measurement-values-map</tt> may contain values for <tt>GUEST_SVN</tt>, <tt>MEASUREMENT</tt>, <tt>POLICY</tt> flags, <tt>FAMILY_ID</tt> and/or <tt>IMAGE_ID</tt>.</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>GUEST_SVN</tt> 32-bit unsigned integer may be given a reference value as an <tt>svn-type</tt> with a <tt>tagged-svn</tt> or <tt>tagged-min-svn</tt> encoding around a <tt>uint32</tt> in an <tt>&amp;(svn: 1): svn-type</tt> entry.</t>
              </li>
              <li>
                <t>The <tt>MEASUREMENT</tt> 384-bit digest may be referenced with a <tt>&amp;(digest: 2): [[7, MEASUREMENT]]</tt> entry.</t>
              </li>
              <li>
                <t>The <tt>POLICY</tt> flags may be referenced with a <tt>&amp;(flags: 3): flags-map</tt> entry following the correspondence defined in <xref target="sec-flags-ext"/></t>
              </li>
              <li>
                <t>The <tt>IMAGE_ID</tt> may be referenced with a  </t>
                <sourcecode type="cbor-diag"><![CDATA[
&(version: 0): / version-map / {
  &(version: 0): hex(IMAGE_ID)
}
]]></sourcecode>
                <t>
where <tt>hex(IMAGE_ID)</tt> is the 128-bit identifier translated to a hexadecimal string.</t>
              </li>
              <li>
                <t>The <tt>FAMILY_ID</tt> may be referenced as <tt>&amp;(raw-value: 4): 560(FAMILY_ID)</tt>.</t>
              </li>
            </ul>
            <t><strong>mkey 1</strong>: The minimum ABI guest policy</t>
            <t>The ATTESTATION_REPORT <tt>POLICY</tt>'s lower 16 bits <tt>MAJOR_ABI</tt> and <tt>MINOR_ABI</tt> is expressed as version with semantic versioning scheme that has patch version <tt>0</tt>.</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ measurement-values-map / {
  / version: / 0: / version-map / {
    / version: / 0: "1.55.0"
    / version-scheme: / 1: 16384
  }
}
]]></sourcecode>
            <t>The <tt>MAJOR_ABI</tt>, <tt>MINOR_ABI</tt> of the <tt>POLICY</tt> are not entirely redundant with Verifier policy evaluation against host's (mkey 8) <tt>&amp;(version: 0)</tt> since the policy may relevant to key derivations.</t>
            <t><strong>mkey 2</strong> The VMPL of the report.</t>
            <t>The <tt>VMPL</tt> is expressed as a raw value that makes use of the extended <tt>$raw-value-type-choice</tt> to use a <tt>uint</tt>.
To refer to <tt>VMPL</tt> 2, say</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ measurement-values-map / {
  / raw-value: / 4: 2
}
]]></sourcecode>
            <t><strong>mkey 3</strong>: The REPORT_ID.</t>
            <t>The <tt>REPORT_ID</tt> is expressed as a <tt>&amp;(raw-value: 4): tagged-bytes</tt>.</t>
            <t><strong>mkey 4</strong>: The REPORT_ID_MA.</t>
            <t>The <tt>REPORT_ID_MA</tt> is expressed as a <tt>&amp;(raw-value: 4): tagged-bytes</tt>.</t>
            <t><strong>mkey 5</strong>: The ID_KEY_DIGEST.</t>
            <t>The <tt>ID_KEY_DIGEST</tt> is expressed as a <tt>&amp;(raw-value: 4): tagged-bytes</tt>.</t>
            <t><strong>mkey 6</strong>: The AUTHOR_KEY_DIGEST.</t>
            <t>The <tt>AUTHOR_KEY_DIGEST</tt> is expressed as a <tt>&amp;(raw-value: 4): tagged-bytes</tt>.</t>
            <t><strong>mkey 7</strong>: The REPORTED_TCB host measurement.</t>
            <t>The <tt>REPORTED_TCB</tt> is interpreted as a little-endian 64-bit unsigned integer and expressed as an <tt>&amp;(svn: 1): svn-type .and svn64-type</tt>, where</t>
            <sourcecode type="cddl"><![CDATA[
svn64-type = tagged-svn64 / tagged-min-svn64
tagged-svn64 = #6.552(uint64)
tagged-min-svn64 = #6.553(uint64)
]]></sourcecode>
            <t><strong>mkey 8</strong>: The current host measurements</t>
            <t>The <tt>CURRENT_MAJOR</tt>, <tt>CURRENT_MINOR</tt>, and <tt>CURRENT_BUILD</tt> fields are expressed as a version with semantic version scheme.
The version text is the three numbers in decimal form, separated by <tt>'.'</tt> (U+002E), in major, minor, build order.</t>
            <t>The <tt>HOSTDATA</tt> field is expressed as a raw value. The <tt>PLATFORM_INFO</tt> are expressed with a <tt>flags</tt> measurement with the specified flag extensions. For example,</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ measurement-values-map / {
  / version: / 0: / version-map / {
    / version: / 0: "1.55.20"
    / version-scheme / 1: 16384
  }
  / flags: / 3: / flags-map / {
    -49: true
    -52: true
  }
  / raw-value: / 4: 560(
    h'00112233445566778899aabbccddeeff'
    h'ffeeddccbbaa99887766554433221100'
  )
}
]]></sourcecode>
            <ul spacing="normal">
              <li>
                <t><tt>0x9</tt>: The COMMITTED host measurements for <tt>COMMITTED_BUILD</tt>, <tt>CURRENT_MAJOR</tt>, <tt>CURRENT_MINOR</tt>, and <tt>COMMITTED_TCB</tt>.</t>
              </li>
            </ul>
            <t>The <tt>COMMITTED_MAJOR</tt>, <tt>COMMITTED_MINOR</tt>, and <tt>COMMITTED_BUILD</tt> fields are expressed as a version with semantic version scheme.
The version text is the three numbers in decimal form, separated by <tt>'.'</tt> (U+002E), in major, minor, build order.</t>
            <t>The <tt>COMMITTED_TCB</tt> is interpreted as a little-endian 64-bit unsigned integer and expressed as an <tt>&amp;(svn: 1): svn-type .and svn64-type</tt>.
For example, suppose the committed TCB has microcode SVN 209, SNP firmware version 22, TEE version 0, and bootloader version 3</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ measurement-values-map / {
  / version: / 0: / version-map / {
    / version: / 0: "1.55.20"
    / version-scheme: / 16384
  }
  / svn: / 1: 552(0xd116000000000003)
}
]]></sourcecode>
            <ul spacing="normal">
              <li>
                <t><tt>0xa</tt>: The LAUNCH_TCB host measurement.</t>
              </li>
            </ul>
            <t>The <tt>LAUNCH_TCB</tt> is interpreted as a little-endian 64-bit unsigned integer and expressed as an <tt>&amp;(svn: 1): svn-type .and svn64-type</tt>.</t>
          </section>
        </section>
        <section anchor="amd-sev-snp-evidence-translation">
          <name>AMD SEV-SNP Evidence Translation</name>
          <t>The <tt>ATTESTATION_REPORT</tt> Evidence is converted into a CoRIM internal representation ECT for the <tt>ae</tt> relation using the rules in this section.</t>
          <section anchor="environment">
            <name><tt>environment</tt></name>
            <t>If <tt>SIGNING_KEY</tt> is 0</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>environment-map / class / class-id</tt> field SHALL be set to <tt>37(h'd05e6d1b9f464ae2a610ce3e6ee7e153')</tt>.</t>
              </li>
              <li>
                <t>The <tt>environment-map / instance </tt> field
                </t>
                <ul spacing="normal">
                  <li>
                    <t>MAY be <tt>560(CHIP_ID)</tt> only if <tt>MASK_CHIP_KEY</tt> is 0, or</t>
                  </li>
                  <li>
                    <t>MAY be <tt>560(hwid)</tt> where <tt>hwid</tt> is from the VCEK certificate extension value of <tt>1.3.6.1.4.1.3704.1.4</tt>.</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>If <tt>SIGNING_KEY</tt> is 1</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>environment-map / class / class-id</tt> field SHALL be set to <tt>37(h'89a7a1f0e7044faaacbd81c86df8a961')</tt>.</t>
              </li>
              <li>
                <t>The <tt>environment-map / instance </tt> field SHALL be <tt>560(CSP_ID)</tt>.</t>
              </li>
            </ul>
          </section>
          <section anchor="element-list">
            <name><tt>element-list</tt></name>
            <t>Different fields of the attestation report correspond to different <tt>element-id</tt>s that correspond to their <tt>mkey</tt> value of a CoMID.</t>
            <t>The translation makes use of the following metafunctions:</t>
            <ul spacing="normal">
              <li>
                <t>The function <tt>hex(bstr)</tt> represents the hexadecimal string encoding of a byte string.</t>
              </li>
              <li>
                <t>The function <tt>dec(b)</tt> represents a byte in its decimal string rendering.</t>
              </li>
            </ul>
            <t>Juxtaposition of expressions with string literals is interpreted with string concatenation.</t>
            <t>Note: A value of <tt>0</tt> is not treated the same as unset given the semantics for matching <tt>flags-map</tt>.</t>
            <t><strong>element-id: 0</strong>, the guest data <tt>element-claims</tt></t>
            <t>The <tt>&amp;(version: 0)</tt> codepoint MAY be unset if the report does not contain ID block data, otherwise the <tt>&amp;(version: 0)</tt> codepoint SHALL be set to</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ version-map / {
  / version: / 0: hex(IMAGE_ID)
}
]]></sourcecode>
            <t>The <tt>&amp;(svn: 1)</tt> codepoint MAY be unset if the report does not contain ID block data, otherwise the <tt>&amp;(svn: 1)</tt> codepoint SHALL be set to <tt>552(leuint(GUEST_SVN))</tt>.</t>
            <t>The <tt>&amp;(digests: 2)</tt> codepoint SHALL be set to <tt>[[7, MEASUREMENT]]</tt>.
The algorithm assignment is from <xref target="IANA.named-information"/> for SHA384.</t>
            <t>The <tt>&amp;(flags: 3)</tt> codepoint SHALL be set to a <tt>flags-map</tt> with the following construction:</t>
            <ul spacing="normal">
              <li>
                <t><tt>is-confidentiality-protected</tt> MAY be set to true.</t>
              </li>
              <li>
                <t><tt>is-integrity-protected</tt> MAY be set to true.</t>
              </li>
              <li>
                <t><tt>is-replay-protected</tt> MAY be set to true.</t>
              </li>
              <li>
                <t><tt>is-debug</tt> SHALL be set to the truth value of bit 19 of <tt>POLICY</tt>.</t>
              </li>
              <li>
                <t>The extensions for <tt>POLICY</tt> are assigned their truth values following the correspondence in <xref target="sec-flags-ext"/>.</t>
              </li>
            </ul>
            <t>The <tt>$(raw-value: 4)</tt> codepoint MAY be unset if the report does not contain ID block data, otherwise the <tt>&amp;(raw-value: 4)</tt> codepoint SHALL be set to <tt>560(FAMILY_ID)</tt>.</t>
            <t><strong>element-id: 1</strong>, guest policy minimum firmware <tt>element-claims</tt></t>
            <t>The <tt>&amp;(version: 0)</tt> SHALL be set to</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ version-map / {
  / version: /: dec(POLICY[15:8]) '.' dec(POLICY[7:0]) '.0'
  / version-scheme: / 16384
}
]]></sourcecode>
            <t><strong>element-id: 2</strong>, the report privilege level <tt>element-claims</tt></t>
            <t>The <tt>&amp;(raw-value: 5)</tt> codepoint SHALL be set to <tt>VMPL</tt> as a <tt>uint</tt>.</t>
            <t><strong>element-id: 3</strong>, the per-launch <tt>REPORT_ID</tt> <tt>element-claims</tt></t>
            <t>The <tt>&amp;(raw-value: 5)</tt> codepoint SHALL be set to <tt>560(REPORT_ID)</tt>.</t>
            <t><strong>element-id: 4</strong>, the migration agent–assigned <tt>REPORT_ID_MA</tt> <tt>element-claims</tt></t>
            <t>The <tt>&amp;(raw-value: 5)</tt> codepoint SHALL be set to <tt>560(REPORT_ID_MA)</tt> if nonzero.</t>
            <t><strong>element-id: 5</strong>, the ID block–signing key digest <tt>ID_KEY_DIGEST</tt> <tt>element-claims</tt></t>
            <t>The <tt>&amp;(raw-value: 5)</tt> codepoint SHALL be set to <tt>560(ID_KEY_DIGEST)</tt> if nonzero.</t>
            <t><strong>element-id: 6</strong>, the ID block–signing key's certifying key digest <tt>AUTHOR_KEY_DIGEST</tt> <tt>element-claims</tt></t>
            <t>The <tt>&amp;(raw-value: 5)</tt> codepoint SHALL be set to <tt>560(AUTHOR_KEY_DIGEST)</tt> if nonzero.</t>
            <t><strong>element-id: 7</strong>, the REPORTED_TCB <tt>element-claims</tt></t>
            <t>The <tt>&amp;(svn: 1)</tt> codepoint SHALL be set to <tt>552(reported_tcb)</tt> where <tt>reported_tcb</tt> is <tt>REPORTED_TCB</tt> translated to <tt>uint</tt> from its little-endian representation.</t>
            <t><strong>element-id: 8</strong>, the current host info <tt>element-claims</tt></t>
            <t>The <tt>&amp;(version: 0)</tt> codepoint SHALL be set to</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ version-map / {
  / version: 0 / vstr
  / version-scheme: / 1: 16384
}
]]></sourcecode>
            <t>The version string <tt>vstr</tt> is constructed as <tt>dec(CURRENT_MAJOR) '.' dec(CURRENT_MINOR) '.' dec(CURRENT_BUILD)</tt>.</t>
            <t>The <tt>&amp;(flags: 3) / flags-map</tt> extensions for <tt>PLATFORM_INFO</tt> SHALL be assign their truth values following the correspondence is <xref target="sec-flags-ext"/>.</t>
            <t>The <tt>&amp;(raw-value: 5)</tt> codepoint SHALL be set to <tt>560(HOSTDATA)</tt> and MAY be omitted if all zeros.</t>
            <t><strong>element-id: 9</strong>, the committed host info <tt>element-claims</tt></t>
            <t>The <tt>&amp;(version: 0)</tt> codepoint SHALL be set to</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ version-map / {
  / version: 0 / vstr
  / version-scheme: / 1: 16384
}
]]></sourcecode>
            <t>The version string <tt>vstr</tt> is constructed as <tt>dec(COMMITTED_MAJOR) '.' dec(COMMITTED_MINOR) '.' dec(COMMITTED_BUILD)</tt>.</t>
            <t>The <tt>&amp;(svn: 1)</tt> codepoint SHALL be set to <tt>552(commited_tcb)</tt> where <tt>committed_tcb</tt> is <tt>COMMITTED_TCB</tt> translated to a <tt>uint</tt> from its little-endian representation.</t>
            <t><strong>element-id: 10</strong>, the TCB at launch <tt>element-claims</tt></t>
            <t>The <tt>&amp;(svn: 1)</tt> codepoint SHALL be set to <tt>552(launch_tcb)</tt> where <tt>launch_tcb</tt> is <tt>LAUNCH_TCB</tt> translated to a <tt>uint</tt> from its little-endian representation.</t>
          </section>
          <section anchor="authority">
            <name><tt>authority</tt></name>
            <t>The <tt>authority</tt> SHALL be set to an array of the <tt>tagged-pkix-asn1der-cert-type</tt> forms of the VEK certificate for the <tt>ATTESTATION_REPORT</tt> signing key, the intermediate key, and the AMD root key for the product line.</t>
            <t>The Verifier MAY add additional encodings of these keys.</t>
          </section>
          <section anchor="cmtype">
            <name><tt>cmtype</tt></name>
            <t>The <tt>cmtype</tt> SHALL be <tt>evidence: 2</tt>.</t>
          </section>
          <section anchor="profile">
            <name><tt>profile</tt></name>
            <t>The <tt>profile</tt> SHALL be set to this profile's identifier, <tt>32("http://amd.com/please-permalink-me")</tt></t>
          </section>
          <section anchor="optional-id-block-as-reference-value">
            <name>Optional: ID block as reference value</name>
            <t>If an ID block is provided at VM launch, it is authenticated by an ID key.
The ID block authentication is checked by the AMD-SP firmware.
The firmware will only launch the VM if the authenticated policy matches.
The firmware indicates that the authentication passed by populating fields of the attestation report to bind the evidence to the authentication key(s) <tt>ID_KEY_DIGEST</tt> and/or <tt>AUTHOR_KEY_DIGEST</tt>.
The ID block authentication as reference value SHALL NOT be retained by the Verifier to apply to another appraisal session.
The reference value qualification is meant to be considered valid only for the duration of the appraisal session.</t>
            <t>The Verifier MAY allocate an <tt>rv</tt> for an addition ECT to represent the authentication at <tt>SNP_LAUNCH_FINISH</tt>.</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>environment</tt> SHALL be equal to the <tt>environment</tt> of the evidence ECT.</t>
              </li>
              <li>
                <t>The <tt>element-list</tt> SHALL contain two <tt>element-map</tt> entries
                </t>
                <ul spacing="normal">
                  <li>
                    <t>The first <tt>element-map</tt> SHALL set <tt>element-id</tt> to 0 and the <tt>element-claims</tt> to a copy of the evidence claims for <tt>element-id: 0</tt>.</t>
                  </li>
                  <li>
                    <t>The second <tt>element-map</tt> SHALL set <tt>element-id</tt> to 1 and the <tt>element-claims</tt> to a copy of the evidence claims for <tt>element-id: 1</tt>.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The <tt>authority</tt> SHALL be an array containing <tt>32780(ID_KEY_DIGEST)</tt> and <tt>32780(AUTHOR_KEY_DIGEST)</tt> if nonzero. The Verifier MAY add more encodings of the same keys.</t>
              </li>
              <li>
                <t>The <tt>cmtype</tt> SHALL be set to <tt>reference-values: 0</tt></t>
              </li>
              <li>
                <t>The <tt>profile</tt> SHALL be set to this profile's identifier, <tt>32("http://amd.com/please-permalink-me")</tt>.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
    </section>
    <section anchor="tcg-considerations">
      <name>TCG considerations</name>
      <t>The Trusted Computing Group has standardized the PCClient Platform Firmware Profile to specify expected TPM event log processing.
Since AMD SEV-SNP launch measurements are of virtual firmware, they can supplement the <tt>EV_POST_CODE2</tt> event measured into PCR0 for the <tt>EV_EFI_PLATFORM_FIRMWARE_BLOB2</tt> since the bits of the firmware are more specific than embedded firmware version strings.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-cbor-tags">
        <name>New CBOR Tags</name>
        <t>IANA is requested to allocate the following tags in the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>.</t>
        <table anchor="cbor-tags">
          <name>Added CBOR tags</name>
          <thead>
            <tr>
              <th align="left">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">32780</td>
              <td align="left">
                <tt>bytes</tt></td>
              <td align="left">A digest of an AMD public key format.</td>
              <td align="left">RFCthis</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="new-media-types">
        <name>New media types</name>
        <section anchor="applicationvndamdsevsnpattestation-report">
          <name><tt>application/vnd.amd.sev.snp.attestation-report</tt></name>
          <t>An octet-stream that is expected to be interpreted as an AMD SEV-SNP ATTESTATION_REPORT.</t>
        </section>
        <section anchor="applicationvndamdghcbguid-table">
          <name><tt>application/vnd.amd.ghcb.guid-table</tt></name>
          <t>An octet-stream that follows the <xref target="GHCB"/>'s GUID table ABI, which is the same as the <xref target="SVSM"/> service manifest ABI, recounted here.
A GUID table is a header followed by an octet-stream body.
The header is a sequence of entries described in <xref target="guid_table_entry"/> terminated by an all zero entry.
After the all zero entry are the bytes that the header entries index into.</t>
          <table anchor="guid_table_entry">
            <name>guid_table_entry type description</name>
            <thead>
              <tr>
                <th align="left">Type</th>
                <th align="left">Name</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>UUID</tt></td>
                <td align="left">GUID</td>
                <td align="left">An <xref target="RFC4122"/> byte format UUID</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>LE_UINT32</tt></td>
                <td align="left">Offset</td>
                <td align="left">An offset into the the GUID table</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>LE_UINT32</tt></td>
                <td align="left">Length</td>
                <td align="left">A byte length of the span</td>
              </tr>
            </tbody>
          </table>
          <t>An <tt>LE_UINT32</tt> is a 4 byte octet-stream that represents a nonnegative integer in little-endian order.</t>
          <t>Note that an offset is from the start of the octet-stream, and not from the start of the octets following the zero entry of the header.
A header entry is valid if its Offset+Length is less than or equal to the size of the entire GUID table.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <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-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>Intel</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether to engage in secure interactions with it - or not.  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-05"/>
        </reference>
        <reference anchor="IANA.named-information" target="https://www.iana.org/assignments/named-information">
          <front>
            <title>Named Information</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SEV-SNP.API" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/56860.pdf">
          <front>
            <title>SEV Secure Nested Paging Firmware ABI Specification</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="September"/>
          </front>
          <seriesInfo name="Revision 1.55" value=""/>
        </reference>
        <reference anchor="GHCB" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/56421.pdf">
          <front>
            <title>SEV-ES Guest-Hypervisor Communication Block Standardization</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="July"/>
          </front>
          <seriesInfo name="Revision 2.03" value=""/>
        </reference>
        <reference anchor="SVSM" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/58019.pdf">
          <front>
            <title>Secure VM Services Module</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="July"/>
          </front>
          <seriesInfo name="Revision 1.00" value=""/>
        </reference>
        <reference anchor="VCEK" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/57230.pdf">
          <front>
            <title>Versioned Chip Endorsement Key (VCEK) Certificate and KDS Interface Specification</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="January"/>
          </front>
          <seriesInfo name="Revision 0.51" value=""/>
        </reference>
        <reference anchor="VLEK" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/user-guides/58369-010-versioned-loaded-endorsement-key-certificate-definition.pdf">
          <front>
            <title>Versioned Loaded Endorsement Key (VLEK) Certificate Definition</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="October"/>
          </front>
          <seriesInfo name="Revision 0.10" value=""/>
        </reference>
      </references>
    </references>
    <?line 580?>

<section anchor="sec-corim-cddl">
      <name>CoRIM Extensions CDDL</name>
      <sourcecode type="cddl"><![CDATA[
$crypto-key-type-choice /= #6.32780(bytes .size 48)

digest = [
  alg: (int / text),
  val: bytes
]

non-empty<M> = (M) .and ({ + any => any })

$$flags-map-extension //= &(
  sevsnpvm-policy-smt-allowed: -1,
  sevsnpvm-policy-migration-agent-allowed: -2,
  sevsnpvm-policy-debug-allowed: -3,
  sevsnpvm-policy-single-socket-only: -4,
  sevsnpvm-policy-cxl-allowed: -5,
  sevsnpvm-policy-mem-aes-256-xts-required: -6,
  sevsnpvm-policy-rapl-must-be-disabled: -7,
  sevsnpvm-policy-ciphertext-hiding-must-be-enabled: -8,
  sevsnpvm-policy-reserved: -47..-9,
)

$version-scheme /= &(sevsnpvm-familyimageid-hex: -1)

$raw-value-type-choice /= uint

$$flags-map-extension //= &(
  sevsnphost-smt-enabled: -49,
  sevsnphost-tsme-enabled: -50,
  sevsnphost-ecc-mem-reported-enabled:-51,
  sevsnphost-rapl-disabled: -52,
  sevsnphost-ciphertext-hiding-enabled: -53
  sevsnphost-reserved: -112..-49
)

svn-type = uint
svn = svn-type
min-svn = svn-type
tagged-svn = #6.552(svn)
tagged-min-svn = #6.553(min-svn)
svn-type-choice = tagged-svn / tagged-min-svn

svn64-type = tagged-svn64 / tagged-min-svn64
tagged-svn64 = #6.552(uint64)
tagged-min-svn64 = #6.553(uint64)

uint16 = 0..65535

uint32 = 0..4294967295

uint64 = 0..18446744073709551615

]]></sourcecode>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="Y." surname="Deshpande" fullname="Yogesh Deshpande">
        <organization>arm</organization>
        <address>
          <email>yogesh.deshpande@arm.com</email>
        </address>
      </contact>
      <t>Yogesh Deshpande contributed to the data model by providing advice about CoRIM founding principles.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
AfthVhpFZgAA

-->

</rfc>
