<?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.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-scitt-receipts-ccf-profile-06" 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-06"/>
    <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="October" day="22"/>
    <area>Security</area>
    <workgroup>SCITT</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 80?>

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

<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> is the hash of the bytes of the Signed Statement as registered: the <tt>COSE_Sign1</tt> encoding with CBOR tag 18 retained (<xref section="6.1" sectionFormat="of" target="RFC9943"/>) and an empty unprotected header map (<xref section="6.3" sectionFormat="of" target="RFC9943"/>), other elements as submitted. 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>
        <t><tt>data-hash</tt> captures the Signed Statement, not the Transparent Statement of <xref section="7" sectionFormat="of" target="RFC9943"/>, which adds Receipts to that unprotected header. A Verifier holding a Transparent Statement recovers the preimage as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Take the <tt>COSE_Sign1</tt> of the Transparent Statement.</t>
          </li>
          <li>
            <t>Replace its unprotected header with an empty map (<xref section="6.3" sectionFormat="of" target="RFC9943"/>).</t>
          </li>
          <li>
            <t>Keep tag 18, and keep the encoded values of the protected header, payload and signature as received.</t>
          </li>
          <li>
            <t>Hash the resulting byte string with <tt>H</tt> (<tt>SHA256</tt> for <tt>CCF_LEDGER_SHA256</tt>).</t>
          </li>
        </ol>
      </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. The <tt>path</tt> is empty for a tree of size 1, whose root is the leaf hash.</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>After decoding each <tt>ccf-inclusion-proof</tt> byte string, the Verifier <bcp14>MUST</bcp14> validate that the decoded value is well constructed with regard to the schema defined in <xref target="ccf-inclusion-proof-cddl"/>, including <xref target="ccf-leaf-cddl"/> for the leaf, and <bcp14>MUST</bcp14> reject the proof before <tt>compute_root</tt> is called if any check fails. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>the byte string is valid CBOR (<xref section="5.3.1" sectionFormat="of" target="RFC8949"/>), in particular the map has no duplicate keys;</t>
          </li>
          <li>
            <t>the map has the keys <tt>leaf</tt> (1) and <tt>path</tt> (2);</t>
          </li>
          <li>
            <t><tt>internal-transaction-hash</tt> is a byte string of exactly HASH_SIZE (32) bytes;</t>
          </li>
          <li>
            <t><tt>internal-evidence</tt> is a text string of 1 to 1024 bytes of valid UTF-8;</t>
          </li>
          <li>
            <t><tt>data-hash</tt> is a byte string of exactly HASH_SIZE (32) bytes;</t>
          </li>
          <li>
            <t><tt>path</tt> is an array, each element of which is an array of exactly two items: a boolean and a byte string of exactly HASH_SIZE (32) bytes.</t>
          </li>
        </ul>
        <t>Without these checks, since leaf and interior node hashes are not domain separated, an oversized path element lets an existing leaf be recomputed as if it were an interior node, so that a proof for a leaf and <tt>data-hash</tt> of the attacker's choosing still recomputes a validly signed root (a second-preimage-style forgery).</t>
        <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, statement_digest):
  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:
      assert(validate_ccf_inclusion_proof(proof))
      assert(proof.leaf.data-hash == statement_digest)
      # 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 and validated against the schema defined in <xref target="ccf-inclusion-proof-cddl"/> before <tt>compute_root</tt> is applied.</t>
        <t><tt>statement_digest</tt> is the <tt>data-hash</tt> of the candidate Signed Statement, computed by the Verifier from the bytes of that Signed Statement as described in <xref target="transaction-components"/>; it <bcp14>MUST NOT</bcp14> be taken from the receipt. Every proof in the receipt <bcp14>MUST</bcp14> have a <tt>data-hash</tt> equal to <tt>statement_digest</tt>. This defines how the inclusion proofs of this profile are consumed (<xref section="4.4.1" sectionFormat="of" target="RFC9942"/>), by applying them to the bytes of a candidate entry (<xref section="5.2.1" sectionFormat="of" target="RFC9942"/>). If the receipt also carries consistency proofs, they <bcp14>MUST</bcp14> recompute the same root (<xref target="receipt-usage"/>).</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>. Apart from the tags, <tt>path</tt> holds the digests of the same subtrees, 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. The digests themselves are those of the Merkle Tree Hash of <xref target="merkle-tree-shape"/>, not of <xref target="RFC9162"/>, which prefixes leaves and nodes differently.</t>
      <t>The first element of <tt>path</tt> <bcp14>MUST</bcp14> be a right sibling (<tt>left</tt> is <tt>false</tt>): the anchor is the root of the last complete subtree of the older tree, so its first sibling can only hold transactions appended after <tt>T[m - 1]</tt>. A proof whose first element is a left sibling <bcp14>MUST</bcp14> be rejected. In particular, there is no consistency proof for <tt>m == n</tt>, for which every sibling would be a left one.</t>
      <t>Neither tree size is carried by the proof, and verification does not establish <tt>m</tt>, <tt>n</tt>, or that the anchor is the node required above. What verification establishes is that every transaction of the tree with root <tt>R_m</tt> is at the same position in the tree with root <tt>R_n</tt> (<xref target="consistency-receipts-security"/>); the anchor requirement fixes a canonical encoding of that fact.</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, and a Verifier <bcp14>MUST</bcp14> reject the receipt if any proof computes to a different one. 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 at least one proof recomputes it. Other proofs in the same array may start from other older roots.</t>
      </section>
      <section anchor="consistency-proof-verification-algorithm">
        <name>Consistency Proof Verification Algorithm</name>
        <t>Before applying this algorithm, the Verifier <bcp14>MUST</bcp14> have validated the <tt>vdp</tt> map as required in <xref target="receipt-usage"/>. After decoding each <tt>ccf-consistency-proof</tt> byte string, the Verifier <bcp14>MUST</bcp14> validate that the decoded value is well constructed with regard to the schema defined in <xref target="ccf-consistency-proof-cddl"/>, and <bcp14>MUST</bcp14> reject the proof before <tt>compute_roots</tt> is called if any check fails. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>the byte string is valid CBOR (<xref section="5.3.1" sectionFormat="of" target="RFC8949"/>), in particular the map has no duplicate keys;</t>
          </li>
          <li>
            <t>the map has the keys <tt>anchor</tt> (1) and <tt>path</tt> (2);</t>
          </li>
          <li>
            <t><tt>anchor</tt> is a byte string of exactly HASH_SIZE (32) bytes;</t>
          </li>
          <li>
            <t><tt>path</tt> is a non-empty array, each element of which is an array of exactly two items: a boolean and a byte string of exactly HASH_SIZE (32) bytes.</t>
          </li>
        </ul>
        <t>These checks ensure that <tt>compute_roots</tt> is only applied to well-formed proofs.</t>
        <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 payload = nil
  let older_root_found = false
  for proof in proofs:
      assert(validate_ccf_consistency_proof(proof))
      # The first sibling of the anchor is in the newer tree only
      assert(proof.path[0].left == false)
      let older, newer = compute_roots(proof)
      # Every proof must compute to the same newer root
      assert(payload == nil or newer == payload)
      payload := newer
      if older == older_root:
          older_root_found := true
  # At least one proof must start from older_root
  assert(older_root_found)

  # Use the common 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 and validated against the schema defined in <xref target="ccf-consistency-proof-cddl"/> before <tt>compute_roots</tt> is applied. All proofs are folded before the signature is checked, so that a receipt in which any proof computes to a different newer root is rejected, whichever proof the Verifier is interested in. If the receipt also carries inclusion proofs, they <bcp14>MUST</bcp14> recompute the same root (<xref target="receipt-usage"/>). 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 is not needed for the guarantee the receipt provides (<xref target="consistency-receipts-security"/>).</t>
        <t>The signature attests that <tt>payload</tt> is the root of a state of the ledger; verification establishes that the state with root <tt>older_root</tt> is a prefix of it, not that the signed value is itself a Merkle Tree Hash of <xref target="merkle-tree-shape"/> (<xref target="consistency-receipts-security"/>).</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, of either type, <bcp14>MUST</bcp14> recompute the same root (the newer root, for consistency proofs), which is the detached payload. A Verifier <bcp14>MUST</bcp14> reject a receipt in which any proof present in the <tt>vdp</tt> map recomputes a different root, including proofs of a type it does not otherwise use: the <tt>vdp</tt> map is in the unprotected header, so proofs can be added to a receipt without invalidating its signature. 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. A Verifier <bcp14>MUST</bcp14> reject a receipt whose <tt>vdp</tt> map is not valid CBOR (<xref section="5.3.1" sectionFormat="of" target="RFC8949"/>) or does not match <tt>verifiable-proofs</tt> in <xref target="unprotected-header-map-cddl"/>, before applying either verification algorithm.</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-security">
        <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; which signing key they accept, including that of a successor network (<xref target="operators"/>), is their trust policy as for any Receipt of <xref target="RFC9942"/>. 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>
        <t>The receipt carries no tree sizes and the signature covers only the newer root, so sizes cannot be authenticated; none is needed. Because the older root is trusted and the newer root is signed, every node a passing proof folds is, barring a second preimage of <tt>H</tt>, a node of one of the two states, and every transaction of the older state is at the same position in the signed one. This holds whether or not the anchor is the canonical node of <xref target="ccf-consistency-proofs"/>.</t>
        <t>Verification does not establish that the signed value is itself a Merkle Tree Hash of <xref target="merkle-tree-shape"/>; that is attested by the Transparency Service, and a Transparency Service signing values that are not roots of its ledger is the misbehaviour addressed in <xref target="trusted-execution-environments"/> and <xref target="operators"/>. A Verifier that needs <tt>m</tt> or <tt>n</tt> <bcp14>MUST</bcp14> obtain them from a source it trusts independently of the receipt; this document does not define one.</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="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <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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
dYYlwdWQcA3pRbSH2TAprJMJpxTXA1pF+qidurPHRzXF4saO0zHlbvcFkVtd
ZMQF8CUhu8VygAuLJSpRqp4kLGhvW6iMQvcL8myAAfCJ94F1jZ3kOl3BAgil
NDkmujqdtzYNaTNwHD5Do8DZcxLIJNvUN/vD1DC1lQehx8iCYwQjzUptW90b
kjySQnIx8Z+wbWV0X29Horo3ak8Cv01336JHm31AoWPlsKdB3MU8uVywAxbO
C39NXipMMdGTeZYmeI9ArfwUgJkB2GVesKmJXGbwrsRfkwrYMfEze06O8PLr
aZtKFk/nbXXUXhKx3dsoM5VcWt1a2OHnfm7N9rSmZxoKHRM0w1+QoGkZiFM0
EnXMTMxF1tST5AIRRsMuqSVYLFm771ZvtqVQ7ptGaOzvPRMJJRQ9iYRWo/1e
DN36ARIll8pfGwmkI17lVRAuLe4hxnEZyoCazLBhPS9bB910jEn3tehaPKQN
zrncuKE9ye0FQvlYXkvEsEmS7RXO24wIDupK0BRjsKgVENO8bi8GGoH7eExC
sZqpIvzypmHqGMSTtSU4OVdiJhcWb7D3pmTOK/bWPb+PyuDke1vWhvzXMlJQ
RlEwuaDzUr62p8Q3Zo9amOSfmz9qt+dtXfL980L5v2RiyDojG1JD9vPfmH0B
iJKAq1z+qWmYMy/9orDQOROqatlJsskkmIU0hDQW4AFuLkBGzwRjAr4cdQLP
nqT2Qmyab6OBN2PiYwmYVSof6wmK3MtQMPOPXkr8nzcG3rM8rr+/d+5A0gQj
L0/gZqqkFOitn8BwE1ea0VvbDBMMo41d+MlmI8rgMM3U48YuJ+Gh2WUlWt71
VIncjRmJln535iTu16c1K7F3/Pb08PTs4O3eH++bl9jQ5V6ZiTZIW3IT1Rg/
vJV3Jf7OOZj2UpEb9PB0hg9IW0JjS5X+mRc8qNrzjZAU8WVbSgSp+sPOpz75
Hi8FajuXW5nQVS2tkVfzGluV6O5iJe7dZlOoBk8F22gjypwvXS5EOtiWwBJM
7o4pmQmhR7kfDR71dwlGoKQKAr/btD5oDb5B4fqXhFMfk8ikTB/JkQxeyv1y
SS35oVaevU+GqMVp2pgj8u2ijVmiDTxW5ihaLJWWfM9w+++Q6WlO9c/J9Wyy
hW4xeGy6B6zN2L/DDINsiBPu2CgQIx2MVQxlnYHTnok9gHCn0+C5RHQHCEc3
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
dNTDsYE/sDbR08vO/wOsvvJt7HUAAA==

-->

</rfc>
