<?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.43 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-scitt-receipts-ccf-profile-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="CCF Profile for COSE Receipts">CCF Profile for COSE Receipts</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-receipts-ccf-profile-05"/>
    <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@ietf.contact</email>
      </address>
    </author>
    <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavaud">
      <organization>Microsoft Research</organization>
      <address>
        <postal>
          <street>21 Station Road</street>
          <city>Cambridge</city>
          <code>CB1 2FB</code>
          <country>UK</country>
        </postal>
        <email>antdl@microsoft.com</email>
      </address>
    </author>
    <author initials="C." surname="Fournet" fullname="Cedric Fournet">
      <organization>Microsoft Research</organization>
      <address>
        <postal>
          <street>21 Station Road</street>
          <city>Cambridge</city>
          <code>CB1 2FB</code>
          <country>UK</country>
        </postal>
        <email>fournet@microsoft.com</email>
      </address>
    </author>
    <author initials="A." surname="Chamayou" fullname="Amaury Chamayou">
      <organization>Microsoft Research</organization>
      <address>
        <postal>
          <street>21 Station Road</street>
          <city>Cambridge</city>
          <code>CB1 2FB</code>
          <country>UK</country>
        </postal>
        <email>amaury.chamayou@microsoft.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="23"/>
    <area>Security</area>
    <workgroup>SCITT</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 79?>

<t>This document defines a new verifiable data structure (VDS) type for COSE Receipts and the associated inclusion and consistency proofs, specifically designed for append-only logs produced by the Confidential Consortium Framework (CCF) to provide stronger tamper-evidence guarantees.</t>
    </abstract>
  </front>
  <middle>
    <?line 83?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The COSE Receipts document <xref target="RFC9942"/> defines a common framework for expressing different types of proofs about verifiable data structures (VDS), providing a standardized way to convey trust-relevant evidence. For instance, inclusion proofs guarantee to a verifier that a given serializable element is recorded at a given state of the VDS, while consistency proofs are used to establish that an inclusion proof is still consistent with the new state of the VDS at a later time.</t>
      <t>In this document, we define a new type of VDS and the associated inclusion and consistency proofs for an application of the Confidential Consortium Framework (CCF) ledger that implements the SCITT Architecture defined in <xref target="RFC9943"/>. This VDS carries indexed transaction information in a binary Merkle Tree, where new transactions are appended to the right, so that the binary decomposition of the index of a transaction can be interpreted as the position in the tree if 0 represents the left branch and 1 the right branch.
Compared to <xref target="RFC9162"/>, the leaves of CCF trees carry additional internal information for the following purposes:</t>
      <ol spacing="normal" type="1"><li>
          <t>To bind the full details of the transaction executed, which is a superset of what is exposed in the proof and captures internal details useful for detailed system audit, but not for application purposes.</t>
        </li>
        <li>
          <t>To allow the distributed system executing the application logic in Trusted Execution Environments (TEEs) to persist signatures to storage early. Receipt production is only enabled once transactions are fully committed by the consensus protocol.</t>
        </li>
      </ol>
      <section anchor="requirements-notation">
        <name>Requirements Notation</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="description-of-the-confidential-consortium-framework-ledger-verifiable-data-structure">
      <name>Description of the Confidential Consortium Framework Ledger Verifiable Data Structure</name>
      <t>This document defines <tt>CCF_LEDGER_SHA256</tt> for append-only CCF transaction ledgers containing a mix of public and confidential information. These ledgers are integrity-protected by a Merkle Tree and signatures produced via Trusted Execution Environments. The registration request for this verifiable data structure is specified in <xref target="tree-alg-registry"/>.</t>
      <t>The placeholder <tt>TBD_1</tt> denotes the algorithm identifier, with requested assignment <tt>2</tt>. The CDDL and examples use this requested value pending IANA allocation; it is not an assigned value.</t>
      <section anchor="merkle-tree-shape">
        <name>Merkle Tree Shape</name>
        <t>A CCF ledger is a binary Merkle Tree constructed from a hash function H, which is defined from the log type. For instance, the hash function for <tt>CCF_LEDGER_SHA256</tt> is <tt>SHA256</tt>, whose <tt>HASH_SIZE</tt> is 32 bytes.</t>
        <t>The Merkle Tree encodes an ordered list of <tt>n</tt> transactions T_n = {T[0], T[1], ..., T[n-1]}. Each transaction T[i] is serialized to a byte string d[i] as defined in <xref target="transaction-components"/>, giving the list D_n = {d[0], d[1], ..., d[n-1]}. We define the Merkle Tree Hash (MTH) function, which takes as input such a list of serialized transactions, and outputs a single HASH_SIZE byte string called the Merkle root hash, by induction on the list.</t>
        <t>This function is defined as follows:</t>
        <t>The hash of an empty list is the hash of an empty string:</t>
        <figure anchor="empty-list-merkle-tree-hash">
          <name>Merkle Tree Hash of Empty List</name>
          <artwork><![CDATA[
MTH({}) = HASH().
]]></artwork>
        </figure>
        <t>The hash of a list with one entry (also known as a leaf hash) is:</t>
        <figure anchor="single-entry-merkle-tree-hash">
          <name>Merkle Tree Hash of a Single Entry</name>
          <artwork><![CDATA[
MTH({d[0]}) = HASH(d[0]).
]]></artwork>
        </figure>
        <t>For n &gt; 1, let k be the largest power of two smaller than n (i.e., k &lt; n &lt;= 2k). The Merkle Tree Hash of an n-element list D_n is then defined recursively as:</t>
        <figure anchor="recursive-merkle-tree-hash">
          <name>Recursive Merkle Tree Hash</name>
          <artwork><![CDATA[
MTH(D_n) = HASH(MTH(D[0:k]) || MTH(D[k:n])),
]]></artwork>
        </figure>
        <t>where:</t>
        <ul spacing="normal">
          <li>
            <t>|| denotes concatenation</t>
          </li>
          <li>
            <t>: denotes concatenation of lists</t>
          </li>
          <li>
            <t>D[k1:k2] = D'_(k2-k1) denotes the list {d'[0] = d[k1], d'[1] = d[k1+1], ..., d'[k2-k1-1] = d[k2-1]} of length (k2 - k1).</t>
          </li>
        </ul>
      </section>
      <section anchor="transaction-components">
        <name>Transaction Components</name>
        <t>Each leaf in a CCF ledger carries the following components:</t>
        <figure anchor="ccf-leaf-cddl">
          <name>CCF Leaf CDDL</name>
          <sourcecode type="cddl"><![CDATA[
ccf-leaf = [
  ; Byte string of size HASH_SIZE(32)
  internal-transaction-hash: bstr .size 32

  ; Text string of at most 1024 bytes
  internal-evidence: tstr .size (1..1024)

  ; Byte string of size HASH_SIZE(32)
  data-hash: bstr .size 32
]
]]></sourcecode>
        </figure>
        <t>The <tt>ccf-leaf</tt> array is the representation of these components in an inclusion proof (<xref target="ccf-inclusion-proofs"/>). It is not what is hashed into the tree. The serialized transaction d[i] that is input to MTH in <xref target="merkle-tree-shape"/> is the byte string of length 3 * HASH_SIZE obtained by concatenating the internal transaction hash, the hash of the internal evidence, and the data hash:</t>
        <figure anchor="transaction-serialization">
          <name>Transaction Serialization</name>
          <artwork><![CDATA[
d[i] = internal-transaction-hash
       || HASH(internal-evidence)
       || data-hash
]]></artwork>
        </figure>
        <t>where HASH(internal-evidence) is the digest of the UTF-8 encoding of the <tt>internal-evidence</tt> text string. The leaf hash MTH({d[i]}) = HASH(d[i]) is therefore HASH(internal-transaction-hash || HASH(internal-evidence) || data-hash), which is the value computed by the first step of <tt>compute_root</tt> in <xref target="ccf-inclusion-receipt-verification"/>. Note that the proof carries <tt>internal-evidence</tt> itself rather than its digest: revealing the evidence is what demonstrates that the transaction was committed (see below).</t>
        <t>The <tt>internal-transaction-hash</tt> and <tt>internal-evidence</tt> values are internal to the CCF implementation. They can be safely ignored by receipt Verifiers, but they commit the transparency service (TS) to the whole tree contents and may be used for additional, CCF-specific auditing.</t>
        <t><tt>internal-transaction-hash</tt> is a hash over the complete entry in the <xref target="CCF-Ledger-Format"/>, and <tt>internal-evidence</tt> is a revealable <xref target="CCF-Commit-Evidence"/> value that allows early persistence of ledger entries before distributed consensus can be established. This mechanism is useful to implement high-throughput transparency applications in Trusted Execution Environments (TEEs) that only provide a limited amount of memory, while maintaining high availability afforded by distributed consensus. Using a secure one-way function <tt>f</tt> to publish an <tt>f(x)</tt> commitment to an <tt>x</tt> value that can be revealed at a later time is a common feature of distributed protocols (<xref target="COIN-FLIPPING"/>). The hash function used for <tt>internal-transaction-hash</tt> is the same hash function <tt>H</tt> as in the Merkle Tree construction for the selected verifiable data structure algorithm. For <tt>CCF_LEDGER_SHA256</tt>, this function is <tt>SHA256</tt>.</t>
        <t><tt>data-hash</tt> summarizes the application data included in the ledger at this transaction, which is a Signed Statement as defined by <xref target="RFC9943"/>. The hash function used for <tt>data-hash</tt> is also the same hash function <tt>H</tt> as in the Merkle Tree construction for the selected verifiable data structure algorithm. For <tt>CCF_LEDGER_SHA256</tt>, this function is <tt>SHA256</tt>.</t>
      </section>
    </section>
    <section anchor="ccf-inclusion-proofs">
      <name>CCF Inclusion Proofs</name>
      <t>CCF inclusion proofs consist of a list of digests tagged with a single left-or-right bit.</t>
      <figure anchor="ccf-inclusion-proof-cddl">
        <name>CCF Inclusion Proof CDDL</name>
        <sourcecode type="cddl"><![CDATA[
ccf-proof-element = [
  ; Position of the element
  left: bool

  ; Hash of the proof element: byte string of size HASH_SIZE(32)
  hash: bstr .size 32
]

ccf-inclusion-proof = bstr .cbor {
  &(leaf: 1) => ccf-leaf
  &(path: 2) => [+ ccf-proof-element]
}
]]></sourcecode>
      </figure>
      <t>Unlike some other tree algorithms, neither the index of the element nor the size of the tree is explicit in the inclusion proof. Read from the leaf up, the left-or-right bits are the binary decomposition of the index for the first <tt>k</tt> elements, where <tt>k</tt> is the largest power of two not greater than the tree size; for later elements the proof may have fewer elements than the depth of the index, and the index cannot be read from the proof alone.</t>
      <section anchor="ccf-inclusion-proof-signature">
        <name>CCF Inclusion Proof Signature</name>
        <t>The proof signature for a CCF inclusion proof is a COSE signature (encoded with the <tt>COSE_Sign1</tt> CBOR type) which includes the following additional requirements for protected and unprotected headers. These follow the conventions of <xref section="5.2.1" sectionFormat="of" target="RFC9942"/>; the corresponding CDDL is given in <xref target="receipt-usage"/>. Please note that there may be additional header parameters defined by the application.</t>
        <t>The protected header parameters for the CCF inclusion proof signature <bcp14>MUST</bcp14> include the following:</t>
        <ul spacing="normal">
          <li>
            <t><tt>vds</tt> (label 395): <tt>int</tt>. This header <bcp14>MUST</bcp14> be set to the verifiable data structure algorithm identifier for <tt>CCF_LEDGER_SHA256</tt> (<tt>TBD_1</tt>).</t>
          </li>
        </ul>
        <t>The unprotected header for a CCF inclusion proof signature <bcp14>MUST</bcp14> include the following:</t>
        <ul spacing="normal">
          <li>
            <t><tt>vdp</tt> (label 396): map. This header conveys the verifiable data structure proofs, keyed by proof type. It <bcp14>MUST</bcp14> contain the <tt>inclusion-proof</tt> (-1) key, whose value is an array of one or more <tt>ccf-inclusion-proof</tt> values as defined above. The proof type is identified solely by this key; no other header parameter is used to convey it.</t>
          </li>
        </ul>
        <t>The payload of the signature is the CCF ledger Merkle root digest, and <bcp14>MUST</bcp14> be detached in order to force verifiers to recompute the root from the inclusion proofs in the unprotected header. This provides a safeguard against implementation errors that use the payload of the signature but do not recompute the root from the inclusion proof. When the array contains more than one inclusion proof, every proof <bcp14>MUST</bcp14> compute to the same root.</t>
      </section>
      <section anchor="inclusion-proof-verification-algorithm">
        <name>Inclusion Proof Verification Algorithm</name>
        <t>CCF uses the following algorithm to verify an inclusion receipt:</t>
        <figure anchor="ccf-inclusion-receipt-verification">
          <name>CCF Inclusion Receipt Verification</name>
          <artwork><![CDATA[
compute_root(proof):
  h := HASH(
       proof.leaf.internal-transaction-hash
           || HASH(proof.leaf.internal-evidence)
           || proof.leaf.data-hash
       )

  for [left, hash] in proof.path:
      h := HASH(hash || h) if left
           HASH(h || hash) else
  return h

verify_inclusion_receipt(inclusion_receipt):
  assert(VDP_LABEL in inclusion_receipt.unprotected_header)
  let vdp = inclusion_receipt.unprotected_header[VDP_LABEL]
  assert(INCLUSION_PROOF_LABEL in vdp)
  let proofs = vdp[INCLUSION_PROOF_LABEL]
  assert(len(proofs) > 0)
  assert(inclusion_receipt.payload == nil)

  for proof in proofs:
      # Use the Merkle Root as the detached payload
      let payload = compute_root(proof)
      assert(verify_cose(inclusion_receipt, payload))
  return true
]]></artwork>
        </figure>
        <t><tt>VDP_LABEL</tt> is the <tt>vdp</tt> header parameter label (396) and <tt>INCLUSION_PROOF_LABEL</tt> is the <tt>inclusion-proof</tt> proof type label (-1), both defined by <xref target="RFC9942"/>. Each element of <tt>proofs</tt> is a <tt>ccf-inclusion-proof</tt>, i.e., a byte string wrapping a CBOR-encoded map, which is decoded before <tt>compute_root</tt> is applied.</t>
        <t>A description can also be found at <xref target="CCF-Receipt-Verification"/>.</t>
      </section>
    </section>
    <section anchor="ccf-consistency-proofs">
      <name>CCF Consistency Proofs</name>
      <t>A CCF consistency proof establishes that the tree of <tt>m</tt> transactions with root <tt>R_m</tt> is a prefix of the tree of <tt>n</tt> transactions with root <tt>R_n</tt>, where <tt>0 &lt; m &lt; n</tt>: every transaction of the older tree is at the same position in the newer tree.</t>
      <figure anchor="ccf-consistency-proof-cddl">
        <name>CCF Consistency Proof CDDL</name>
        <sourcecode type="cddl"><![CDATA[
ccf-consistency-proof = bstr .cbor {
  ; Root of the largest complete subtree containing
  ; the last transaction of the older tree
  &(anchor: 1) => bstr .size 32

  ; Siblings from the anchor to the newer root
  &(path: 2) => [+ ccf-proof-element]
}
]]></sourcecode>
      </figure>
      <t>The <tt>anchor</tt> <bcp14>MUST</bcp14> be the root of the subtree covering transactions <tt>T[m - 2^t], ..., T[m - 1]</tt>, where <tt>2^t</tt> is the largest power of two dividing <tt>m</tt>; when <tt>m</tt> is a power of two, the anchor is <tt>R_m</tt>. The <tt>path</tt> lists the sibling of each node on the path from the anchor to <tt>R_n</tt>, tagged as in inclusion proofs. Left siblings belong to both trees and right siblings only to the newer one, so folding the anchor with the left siblings alone yields <tt>R_m</tt>, and with all siblings <tt>R_n</tt>. Neither tree size is needed for verification. Apart from the tags, <tt>path</tt> holds the same digests in the same order as the consistency proof of <xref section="2.1.4.1" sectionFormat="of" target="RFC9162"/> for the same sizes, with the anchor as the first element of that proof when <tt>m</tt> is not a power of two.</t>
      <section anchor="ccf-consistency-proof-signature">
        <name>CCF Consistency Proof Signature</name>
        <t>The proof signature for a CCF consistency proof is a <tt>COSE_Sign1</tt> with the same protected header requirements as an inclusion proof signature (<xref target="ccf-inclusion-proof-signature"/>). Its unprotected header <bcp14>MUST</bcp14> include:</t>
        <ul spacing="normal">
          <li>
            <t><tt>vdp</tt> (label 396): map. It <bcp14>MUST</bcp14> contain the <tt>consistency-proof</tt> (-2) key, whose value is an array of one or more <tt>ccf-consistency-proof</tt> values, each relating one older root to the newer root.</t>
          </li>
        </ul>
        <t>The payload is the newer root <tt>R_n</tt>, and <bcp14>MUST</bcp14> be detached. When the array contains more than one consistency proof, every proof <bcp14>MUST</bcp14> compute to the same newer root. The older root <tt>R_m</tt> is not carried by the receipt: the verifier already holds it, typically as the root recomputed from an inclusion receipt (<xref target="ccf-inclusion-receipt-verification"/>), and checks that the proof recomputes it.</t>
      </section>
      <section anchor="consistency-proof-verification-algorithm">
        <name>Consistency Proof Verification Algorithm</name>
        <t>A consistency receipt is verified against a trusted <tt>older_root</tt> as follows:</t>
        <figure anchor="ccf-consistency-receipt-verification">
          <name>CCF Consistency Receipt Verification</name>
          <artwork><![CDATA[
compute_roots(proof):
  older := proof.anchor
  newer := proof.anchor

  for [left, hash] in proof.path:
      if left:
          older := HASH(hash || older)
          newer := HASH(hash || newer)
      else:
          newer := HASH(newer || hash)
  return older, newer

verify_consistency_receipt(consistency_receipt, older_root):
  assert(VDP_LABEL in consistency_receipt.unprotected_header)
  let vdp = consistency_receipt.unprotected_header[VDP_LABEL]
  assert(CONSISTENCY_PROOF_LABEL in vdp)
  let proofs = vdp[CONSISTENCY_PROOF_LABEL]
  assert(len(proofs) > 0)
  assert(consistency_receipt.payload == nil)

  let payloads = []
  for proof in proofs:
      let older, newer = compute_roots(proof)
      if older == older_root:
          payloads.append(newer)
  # At least one proof must start from older_root
  assert(len(payloads) > 0)

  for payload in payloads:
      # Use the newer Merkle Root as the detached payload
      assert(verify_cose(consistency_receipt, payload))
  return true
]]></artwork>
        </figure>
        <t><tt>CONSISTENCY_PROOF_LABEL</tt> is the <tt>consistency-proof</tt> proof type label (-2) defined by <xref target="RFC9942"/>. Each element of <tt>proofs</tt> is a <tt>ccf-consistency-proof</tt>, i.e., a byte string wrapping a CBOR-encoded map, which is decoded before <tt>compute_roots</tt> is applied. The comparison with <tt>older_root</tt> binds the receipt to a state the verifier already trusts: a receipt in which no proof recomputes <tt>older_root</tt> proves nothing about that state. It also confirms that the anchor is a node of that state, but not that it is the anchor required in <xref target="ccf-consistency-proofs"/>, which cannot be checked without knowing <tt>m</tt>.</t>
      </section>
    </section>
    <section anchor="receipt-usage">
      <name>Usage in COSE Receipts</name>
      <t>A COSE Receipt with CCF inclusion or consistency proofs is described by the following CDDL definition, which follows <xref section="5.2.1" sectionFormat="of" target="RFC9942"/> and <xref section="5.3.1" sectionFormat="of" target="RFC9942"/>:</t>
      <figure anchor="protected-header-map-cddl">
        <name>Protected Header Map CDDL</name>
        <sourcecode type="cddl"><![CDATA[
protected-header-map = {
  &(alg: 1) => int
  &(vds: 395) => TBD_1
  * cose-label => cose-value
}

TBD_1 = 2 ; Requested assignment for CCF_LEDGER_SHA256
]]></sourcecode>
      </figure>
      <ul spacing="normal">
        <li>
          <t>alg (label: 1): <bcp14>REQUIRED</bcp14>. Signature algorithm identifier. Value type: int.</t>
        </li>
        <li>
          <t>vds (label: 395): <bcp14>REQUIRED</bcp14>. Verifiable data structure algorithm identifier. Value type: int.</t>
        </li>
      </ul>
      <t>The unprotected header is described by the following CDDL definition:</t>
      <figure anchor="unprotected-header-map-cddl">
        <name>Unprotected Header Map CDDL</name>
        <sourcecode type="cddl"><![CDATA[
inclusion-proof = ccf-inclusion-proof
inclusion-proofs = [ + inclusion-proof ]

consistency-proof = ccf-consistency-proof
consistency-proofs = [ + consistency-proof ]

verifiable-proofs = {
  &(inclusion-proof: -1) => inclusion-proofs
  ? &(consistency-proof: -2) => consistency-proofs
  //
  &(consistency-proof: -2) => consistency-proofs
}

unprotected-header-map = {
  &(vdp: 396) => verifiable-proofs
  * cose-label => cose-value
}
]]></sourcecode>
      </figure>
      <ul spacing="normal">
        <li>
          <t>vdp (label: 396): <bcp14>REQUIRED</bcp14>. Verifiable data structure proofs. Value type: map.</t>
        </li>
        <li>
          <t>inclusion-proof (label: -1): Inclusion proofs. Value type: array of <tt>ccf-inclusion-proof</tt>.</t>
        </li>
        <li>
          <t>consistency-proof (label: -2): Consistency proofs. Value type: array of <tt>ccf-consistency-proof</tt>.</t>
        </li>
      </ul>
      <t>At least one of <tt>inclusion-proof</tt> and <tt>consistency-proof</tt> <bcp14>MUST</bcp14> be present. All proofs in a receipt recompute the same root (the newer root, for consistency proofs), which is the detached payload. The proof type is conveyed by the key of the <tt>vdp</tt> map, as specified by <xref target="RFC9942"/>; it is not carried in a separate header parameter.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>See the privacy considerations section of:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="RFC9942"/></t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="RFC9942"/> apply.</t>
      <section anchor="trusted-execution-environments">
        <name>Trusted Execution Environments</name>
        <t>CCF networks of nodes rely on executing in TEEs to secure their function, in particular:</t>
        <ol spacing="normal" type="1"><li>
            <t>The evaluation of registration policies</t>
          </li>
          <li>
            <t>The creation and usage of receipt signing keys</t>
          </li>
        </ol>
        <t>A compromise in the TEE platform used to execute the network may allow an attacker to produce invalid and divergent ledger branches.
Clients can mitigate this risk in two ways: by regularly auditing the consistency of the CCF ledger, for instance by verifying consistency receipts (<xref target="ccf-consistency-receipt-verification"/>) from roots they hold to the current root; and by regularly fetching attestation information about the TEE instances, available in the ledger and from the network itself, and confirming that the nodes composing the network are running up-to-date, trusted platform components.</t>
      </section>
      <section anchor="operators">
        <name>Operators</name>
        <t>An operator has the ability to start successor networks with a distinct identity. The operator of a CCF network can recover the service by starting a successor network, for example a new CCF network with its own service identity, that endorses the ledger state of the previous instance. This provides service continuity after a catastrophic failure of a majority of the nodes. However, a malicious operator could exploit this mechanism and truncate the ledger’s history by initializing the successor network from an earlier ledger prefix, thereby omitting some later entries. Clients can mitigate this risk by auditing the successor ledger and verifying that their latest known receipts from the prior service are included in the successor’s ledger.</t>
      </section>
      <section anchor="consistency-receipts">
        <name>Consistency Receipts</name>
        <t>A consistency receipt relates two roots and establishes nothing about ledger contents on its own. Verifiers <bcp14>MUST</bcp14> compare the recomputed older root with a root they have already verified, not with one supplied alongside the receipt. Consistency receipts also cannot provide guarantees about the correct application of Registration Policies, which requires additional material as outlined in <xref section="5.1.1.2" sectionFormat="of" target="RFC9943"/>.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="additions-to-existing-registries">
        <name>Additions to Existing Registries</name>
        <t>The registries in this section are defined by <xref target="RFC9942"/>.</t>
        <section anchor="tree-alg-registry">
          <name>COSE Verifiable Data Structure Algorithms</name>
          <t>This document requests IANA to add the following new value to the "COSE Verifiable Data Structure Algorithms" registry:</t>
          <ul spacing="normal">
            <li>
              <t>Name: CCF_LEDGER_SHA256</t>
            </li>
            <li>
              <t>Value: TBD_1 (requested assignment 2)</t>
            </li>
            <li>
              <t>Description: Append-only CCF transaction ledgers protected by SHA-256 Merkle Trees and signatures produced via Trusted Execution Environments.</t>
            </li>
            <li>
              <t>Reference: RFCthis</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
          </ul>
        </section>
        <section anchor="tree-proof-registry">
          <name>COSE Verifiable Data Structure Proofs</name>
          <t>This document requests IANA to add the following new entries to the "COSE Verifiable Data Structure Proofs" registry:</t>
          <ul spacing="normal">
            <li>
              <t>Verifiable Data Structure: TBD_1 (requested assignment 2)</t>
            </li>
            <li>
              <t>Name: inclusion proofs</t>
            </li>
            <li>
              <t>Label: -1</t>
            </li>
            <li>
              <t>CBOR Type: array (of bstr)</t>
            </li>
            <li>
              <t>Description: Proof of inclusion</t>
            </li>
            <li>
              <t>Reference: RFCthis, <xref target="ccf-inclusion-proofs"/> and <xref target="receipt-usage"/></t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
          </ul>
          <t>and:</t>
          <ul spacing="normal">
            <li>
              <t>Verifiable Data Structure: TBD_1 (requested assignment 2)</t>
            </li>
            <li>
              <t>Name: consistency proofs</t>
            </li>
            <li>
              <t>Label: -2</t>
            </li>
            <li>
              <t>CBOR Type: array (of bstr)</t>
            </li>
            <li>
              <t>Description: Proof of consistency</t>
            </li>
            <li>
              <t>Reference: RFCthis, <xref target="ccf-consistency-proofs"/> and <xref target="receipt-usage"/></t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </reference>
        <reference anchor="RFC9942">
          <front>
            <title>CBOR Object Signing and Encryption (COSE) Receipts</title>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="A. Delignat-Lavaud" initials="A." surname="Delignat-Lavaud"/>
            <author fullname="C. Fournet" initials="C." surname="Fournet"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>CBOR Object Signing and Encryption (COSE) Receipts prove properties of a Verifiable Data Structure (VDS) to a verifier. VDSs and associated Proof Types enable security properties, such as minimal disclosure, transparency, and non-equivocation. Transparency helps maintain trust over time and has been applied to certificates, end-to-end encrypted messaging systems, and supply chain security. This specification enables concise transparency-oriented systems by building on Concise Binary Object Representation (CBOR) and COSE. The extensibility of the approach is demonstrated by providing CBOR encodings for Merkle inclusion and consistency proofs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9942"/>
          <seriesInfo name="DOI" value="10.17487/RFC9942"/>
        </reference>
        <reference anchor="RFC9943">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="A. Delignat-Lavaud" initials="A." surname="Delignat-Lavaud"/>
            <author fullname="C. Fournet" initials="C." surname="Fournet"/>
            <author fullname="Y. Deshpande" initials="Y." surname="Deshpande"/>
            <author fullname="S. Lasker" initials="S." surname="Lasker"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>Traceability in supply chains is a growing security concern. While Verifiable Data Structures (VDSs) have addressed specific issues, such as equivocation over digital certificates, they lack a universal architecture for all supply chains. This document defines such an architecture for single-issuer signed statement transparency. It ensures extensibility and interoperability between different transparency services as well as compliance with various auditing procedures and regulatory requirements.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9943"/>
          <seriesInfo name="DOI" value="10.17487/RFC9943"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CCF" target="https://github.com/microsoft/ccf">
          <front>
            <title>Confidential Consortium Framework</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CCF-Ledger-Format" target="https://microsoft.github.io/CCF/main/architecture/ledger.html">
          <front>
            <title>CCF Ledger Format</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CCF-Commit-Evidence" target="https://microsoft.github.io/CCF/main/use_apps/verify_tx.html#commit-evidence">
          <front>
            <title>CCF Commit Evidence</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CCF-Receipt-Verification" target="https://microsoft.github.io/CCF/main/use_apps/verify_tx.html#receipt-verification">
          <front>
            <title>CCF Receipt Verification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="COIN-FLIPPING" target="https://dl.acm.org/doi/epdf/10.1145/1008908.1008911">
          <front>
            <title>Coin Flipping By Telephone - A Protocol For Solving Impossible Problems</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="DOI" value="10.1145/1323293.1294280"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
76K/nFkAAA==

-->

</rfc>
