<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.5 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-birkholz-scitt-receipts-00" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.46.0 -->
  <front>
    <title abbrev="SCITT Receipts">Countersigning COSE Envelopes in Transparency Services</title>
    <seriesInfo name="Internet-Draft" value="draft-birkholz-scitt-receipts-00"/>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="M." surname="Riechert" fullname="Maik Riechert">
      <organization>Microsoft</organization>
      <address>
        <postal>
          <country>UK</country>
        </postal>
        <email>Maik.Riechert@microsoft.com</email>
      </address>
    </author>
    <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavaud">
      <organization>Microsoft</organization>
      <address>
        <postal>
          <country>UK</country>
        </postal>
        <email>antdl@microsoft.com</email>
      </address>
    </author>
    <author initials="C." surname="Fournet" fullname="Cedric Fournet">
      <organization>Microsoft</organization>
      <address>
        <postal>
          <country>UK</country>
        </postal>
        <email>fournet@microsoft.com</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <area>Security</area>
    <workgroup>TBD</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>A transparent and authentic ledger service in support of a supply chain's integrity, transparency, and trust requires all peers that contribute to the ledgers operations to be trustworthy and authentic. In this document, a countersigning variant is specified that enables trust assertions on merkle-tree based operations for global supply chain ledgers. A generic procedure how to produce payloads for signing and validation is defined and leverages solutions and principles from the Concise Signing and Encryption (COSE) space.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>This document defines a method for issuing and verifying countersignatures on COSE_Sign1 messages included in an authenticated data structure such as a Merkle Tree.</t>
      <t>We adopt the terminology of <eref target="pointer">architecture</eref> for Claim, Envelope, Transparency Service, Ledger, Receipt, and Verifier.</t>
      <ul empty="true">
        <li>
          <t>[TODO] Do we need to explain or introduce them here? We may also define Tree (our shorthand for authenticated data structure), Root (a succinct commitment to the Tree, e.g., a hand) and use Issuer instead of TS.</t>
        </li>
      </ul>
      <t>From the Verifier's viewpoint, a Receipt is similar to a countersignature V2 on a single signed message: it is a universally-verifiable cryptographic proof of endorsement of the signed envelope by the countersigner.</t>
      <t>Compared with countersignatures on single COSE envelopes,
- Receipts countersign the envelope in context, providing authentication both of the envelope and of its logical position in the authenticated data structure.
- Receipts are proof of commitment to the whole contents of the data structure, even if the Verifier knows only some of its contents.
- Receipts can be issued in bulk, using a single public-key signature for issuing a large number of Receipts.</t>
      <section anchor="requirements-notation" numbered="true" toc="default">
        <name>Requirements Notation</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL</bcp14>
NOT", "<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&nbsp;14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="mybody" numbered="true" toc="default">
      <name>Common Parameters</name>
      <t>Verifiers are configured by a collection of parameters
to identify a Transparency Service and verify its Receipts.
These parameters <bcp14>MUST</bcp14> be fixed for the lifetime of the Transparency Service
and securely communicated to all Verifiers.</t>
      <t>At minimum, these parameters include:</t>
      <ul spacing="normal">
        <li>a Service identifier: An opaque identifier (e.g. UUID) that uniquely identifies the service and can be used to securely retrive all other Serivce parameters.</li>
        <li>
          <t>The Tree algorithm used for issuing receipts, and its additional global parameters, if any. This document creates a registry (see <xref target="tree-alg-registry" format="default"/>) and describes an initial set of tree algorithms.  </t>
          <ul empty="true">
            <li>
              <t>[TODO] The architecture also has fixed TS registration policies.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="generic-receipt-structure" numbered="true" toc="default">
      <name>Generic Receipt Structure</name>
      <t>A Receipt represents a countersignature issued by a Transparency Service.</t>
      <t>The Receipt structure is a CBOR array with two items, in order:</t>
      <ul spacing="normal">
        <li>
          <tt>service_id</tt>: The service identifier as tstr.</li>
        <li>
          <tt>contents</tt>: The proof as a CBOR structure determined by the tree algorithm.</li>
      </ul>
      <sourcecode type="cddl">
Receipt = [
  service_id: tstr,
  contents: any
]
</sourcecode>
      <t>Each tree algorithm <bcp14>MUST</bcp14> define its contents type and procedures for issuing and verifying a receipt.</t>
    </section>
    <section anchor="cose_sign1_countersign" numbered="true" toc="default">
      <name>COSE_Sign1 Countersigning</name>
      <t>While the tree algorithms may differ in the way they aggregate multiple envelopes to compute a digest to be signed by the TS,
they all share the same representation of the individual envelopes to be countersigned (intuitively, their leaves).</t>
      <t>This document uses the principals and structure definitions
of COSE_Sign1 countersigning V2 (<xref target="I-D.ietf-cose-countersign" format="default"/>).
Each envelope is authenticated using a <tt>Countersign_structure</tt> array, recalled below.</t>
      <sourcecode type="cddl">
Countersign_structure = [
    context: "CounterSignatureV2",
    body_protected: empty_or_serialized_map,
    sign_protected: empty_or_serialized_map,
    external_aad: bstr,
    payload: bstr,
    other_fields: [
        signature: bstr
    ]
]
</sourcecode>
      <t>The <tt>body_protected</tt>, <tt>payload</tt>, and <tt>signature</tt> fields are copied from the COSE_Sign1 message being countersigned.</t>
      <t>The <tt>sign_protected</tt> field is provided by the TS, see <xref target="countersign_headers" format="default"/> below. This field
is included in the Receipt contents to enable the Verifier to re-construct <tt>Countersign_structure</tt>, as specified by the tree algorithm.</t>
      <t>By convention, the TS always provides an empty <tt>external_aad</tt>: a zero-length bytestring.</t>
      <t>Procedure for reconstruction of Countersign_structure:</t>
      <ol spacing="normal" type="1">
        <li>Let Target be the COSE_Sign1 message that corresponds to the countersignature. Different environments will have different mechanisms to achieve this. One obvious mechanism is to embed the Receipt in the unprotected header of Target. Another mechanism may be to store both artifacts separately and use a naming convention, database, or other method to link both together.</li>
        <li>Extract body_protected, payload, and signature from Target.</li>
        <li>Create a Countersign_structure using the extracted fields from Target, and sign_protected from the Receipt contents.</li>
      </ol>
      <section anchor="countersign_headers" numbered="true" toc="default">
        <name>Countersigner Header Parameters</name>
        <t>The following parameters <bcp14>MUST</bcp14> be included in the protected header of the countersigner (sign_protected in <xref target="cose_sign1_countersign" format="default"/>):</t>
        <ul spacing="normal">
          <li>Issued At (label: TBD): The time at which the countersignature was issued as the number of seconds from 1970-01-01T00:00:00Z UTC, ignoring leap seconds.</li>
        </ul>
      </section>
    </section>
    <section anchor="ccf-2-tree-algorithm" numbered="true" toc="default">
      <name>CCF 2 Tree Algorithm</name>
      <t>The CCF 2 tree algorithm specifies an algorithm based on a binary Merkle tree over the sequence of all ledger entries, as implemented in the CCF version 2 framework (see <xref target="CCF_Merkle_Tree" format="default"/>).</t>
      <section anchor="parameters" numbered="true" toc="default">
        <name>Additional Parameters</name>
        <t>The algorithm requires that the TS define
additional parameters:</t>
        <ul spacing="normal">
          <li>Hash Algorithm: The hash algorithm used in its Merkle Tree (see <xref target="hash-alg-registry" format="default"/>).</li>
          <li>Signature Algorithm: The signature algorithm used (see <xref target="sig-alg-registry" format="default"/>).</li>
          <li>Service Certificate: The self-signed X.509 certificate used as trust anchor to verify signatures generated by the transparency service using the Signature Algorithm.</li>
        </ul>
        <t>All definitions in this section use the hash algorithm set in the TS parameters (see Section <xref target="parameters" format="default"/>). We write HASH to refer to this algorithm, and HASH_SIZE for the fixed length of its output in bytes.</t>
      </section>
      <section anchor="cryptographic-components" numbered="true" toc="default">
        <name>Cryptographic Components</name>
        <t>Note: This section is adapted from <xref section="2.1" sectionFormat="of" target="RFC9162" format="default"/>, which provides additional discussion of Merkle trees.</t>
        <section anchor="merkle-tree-def" numbered="true" toc="default">
          <name>Binary Merkle Trees</name>
          <t>The input of the Merkle Tree Hash (MTH) function is a list of n bytestrings, written D_n = {d[0], d[1], ..., d[n-1]}. The output is a single HASH_SIZE bytestring, also called the tree root hash.</t>
          <t>This function is defined as follows:</t>
          <t>The hash of an empty list is the hash of an empty string:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MTH({}) = HASH().
]]></artwork>
          <t>The hash of a list with one entry (also known as a leaf hash) is:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MTH({d[0]}) = HASH(d[0]).
]]></artwork>
          <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>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MTH(D_n) = HASH(MTH(D[0:k]) || MTH(D[k:n])),
]]></artwork>
          <t>where:</t>
          <ul spacing="normal">
            <li>|| denotes concatenation</li>
            <li>: denotes concatenation of lists</li>
            <li>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).</li>
          </ul>
        </section>
        <section anchor="merkle-inclusion-proofs" numbered="true" toc="default">
          <name>Merkle Inclusion Proofs</name>
          <t>A Merkle inclusion proof for a leaf in a Merkle Tree is the shortest list of intermediate hash values required to re-compute the tree root hash
form the digest of the leaf bytestring. Each node in the tree is either a leaf node or is computed from the two nodes immediately below it (i.e., towards the leaves). At each step up the tree (towards the root), a node from the inclusion proof is combined with the node computed so far. In other words, the inclusion proof consists of the list of missing nodes required to compute the nodes leading from a leaf to the root of the tree. If the root computed from the inclusion proof matches the true root, then the inclusion proof proves that the leaf exists in the tree.</t>
          <section anchor="verifying-an-inclusion-proof" numbered="true" toc="default">
            <name>Verifying an Inclusion Proof</name>
            <t>When a client has received an inclusion proof and wishes to verify inclusion of a leaf_hash for a given root_hash, the following algorithm may be used to prove the hash was included in the root_hash:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
recompute_root(leaf_hash, proof):
  h := leaf_hash
  for [left, hash] in proof:
    if left
      h := HASH(hash || h)
    else
      h := HASH(h || hash)
  return h
]]></artwork>
          </section>
          <section anchor="generating-an-inclusion-proof" numbered="true" toc="default">
            <name>Generating an Inclusion Proof</name>
            <t>Given the MTH input D_n = {d[0], d[1], ..., d[n-1]} and an index i &lt; n in this list,
run the MTH algorithm and record the position and value of every intermediate hash
concatenated and hashed first with the digest of the leaf, then with the resulting intermediate hash value. (Most implementations instead record all intermediate hash computations, so that they can produce all inclusion proofs for a given tree by table lookups.)</t>
          </section>
        </section>
      </section>
      <section anchor="encoding-signed-envelopes-into-tree-leaves" numbered="true" toc="default">
        <name>Encoding Signed Envelopes into Tree Leaves</name>
        <t>This section describes the encoding of signed envelopes and auxiliary ledger entries
into the leaf bytestrings passed as input to the Merkle Tree function.</t>
        <t>Each bytestring is computed from three inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>internal_hash</tt>: a string of HASH_SIZE bytes;</li>
          <li>
            <tt>internal_data</tt>: a string of at most 1024 bytes; and</li>
          <li>
            <tt>data_hash</tt>: either the HASH of the CBOR-encoded Countersign_structure of the signed envelope, using the CBOR encoding described in <xref target="deterministic-cbor" format="default"/>, or a bytestring of size HASH_SIZE filled with zeroes for auxiliary ledger entries.</li>
        </ul>
        <t>as the concatenation of three hashes:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
LeafBytes = internal_hash || HASH(internal_data) || data_hash
]]></artwork>
        <t>This ensures that leaf bytestrings are always distinct from the inputs of the intermediate computations in MTH, which always consist of two hashes, and also that leaf bytestrings for signed envelopes and for auxiliary ledger entries are always distinct.</t>
        <t>The <tt>internal_hash</tt> and <tt>internal_data</tt> bytestrings are internal to the CCF implementation Similarly, the auxiliary ledger entries are internal to CCF. They are opaque to receipt Verifiers, but they commit the TS to the whole ledger contents and may be used for additional, CCF-specific auditing.</t>
      </section>
      <section anchor="ReceiptContents" numbered="true" toc="default">
        <name>Receipt Contents Structure</name>
        <t>The Receipt contents structure is a CBOR array. The items of the array in order are:</t>
        <ul spacing="normal">
          <li>
            <tt>signature</tt>: the signature over the Merkle tree root as bstr.</li>
          <li>
            <tt>node_certificate</tt>: a DER-encoded X.509 certificate for the public key for signature verification.
This certificate <bcp14>MUST</bcp14> be a valid CCF node certificate
for the service; in particular, it <bcp14>MUST</bcp14> form a valid X.509 certificate chain with the service certificate.</li>
          <li>
            <t><tt>inclusion_proof</tt>: the intermediate hashes to recompute the signed root of the Merkle tree from the leaf digest of the envelope.
            </t>
            <ul spacing="normal">
              <li>The array <bcp14>MUST</bcp14> have at most 64 items.</li>
              <li>The inclusion proof structure is an array of [left, hash] pairs where <tt>left</tt> indicates the ordering of digests for the intermediate hash compution. The hash <bcp14>MUST</bcp14> be a bytestring of length <tt>HASH_SIZE</tt>.</li>
            </ul>
          </li>
          <li>
            <t><tt>leaf_info</tt>: auxiliary inputs to recompute the leaf digest included in the Merkle tree: the internal hash, the internal data, and the protected header of the
countersigner.
            </t>
            <ul spacing="normal">
              <li>
                <tt>internal_hash</tt> <bcp14>MUST</bcp14> be a bytestring of length <tt>HASH_SIZE</tt>;</li>
              <li>
                <tt>internal_data</tt> <bcp14>MUST</bcp14> be a bytestring of length less than 1024.</li>
            </ul>
          </li>
        </ul>
        <t>The inclusion of an additional, short-lived certificate endorsed by the TS enables flexibility in its distributed implementation, and may support additional CCF-specific auditing.</t>
        <t>The CDDL fragment that represents the above text follows.</t>
        <sourcecode type="cddl">
ReceiptContents = [
    signature: bstr,
    node_certificate: bstr,
    inclusion_proof: [+ ProofElement],
    leaf_info: LeafInfo
]

ProofElement = [
    left: bool
    hash: bstr
]

LeafInfo = [
    internal_hash: bstr,
    internal_data: bstr,
    sign_protected: empty_or_serialized_map
]
</sourcecode>
      </section>
      <section anchor="receipt-verification" numbered="true" toc="default">
        <name>Receipt Verification</name>
        <t>Given the TS parameters, a signed envelope, and a Receipt for it,
the following steps must be followed to verify this Receipt.</t>
        <ol spacing="normal" type="1">
          <li>Verify that the Receipt Content structure is well-formed, as described in <xref target="ReceiptContents" format="default"/></li>
          <li>Construct a <tt>Countersign_structure</tt> as described in <xref target="cose_sign1_countersign" format="default"/>, using <tt>sign_protected</tt> from the <tt>leaf_info</tt> field of the receipt contents.</li>
          <li>
            <t>Compute <tt>LeafBytes</tt> as the bytestring concatenation of the internal hash, the hash of internal data, and the hash of the CBOR-encoding of <tt>Countersign_structure</tt>, using the CBOR encoding described in <xref target="deterministic-cbor" format="default"/>.  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
 LeafBytes := internal_hash || HASH(internal_data) || HASH(cbor(Countersign_structure))
]]></artwork>
          </li>
          <li>
            <t>Compute the leaf digest.  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
 LeafHash := HASH(LeafBytes)
]]></artwork>
          </li>
          <li>
            <t>Compute the root hash from the leaf hash and the Merkle proof using the Merkle Tree Hash Algorithm found in the service's parameters (see <xref target="parameters" format="default"/>):  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
 root := recompute_root(LeafHash, inclusion_proof)
]]></artwork>
          </li>
          <li>Verify the certificate chain established by the node certificate embedded in the receipt and the fixed service certificate in the TS parameters (see <xref target="parameters" format="default"/>) using the Issued At time from <tt>sign_protected</tt> to verify the validity periods of the certificates. The chain <bcp14>MUST</bcp14> enable the use of the public key in the receipt certificate for signature verification with the Signature Algorithm of the TS parameters.</li>
          <li>Verify that <tt>signature</tt> is a valid signature value of the root hash, using the public key of the receipt certificate and the Signature Algorithm of the TS parameters.</li>
        </ol>
        <t>The Verifier <bcp14>SHOULD</bcp14> apply additional checks before accepting the countersigned envelope as valid, based on its protected headers and payload.</t>
      </section>
      <section anchor="receipt-generation" numbered="true" toc="default">
        <name>Receipt Generation</name>
        <t>This document provides a reference algorithm for producing valid receipts,
but it omits any discussion of TS registration policy and any CCF-specific implementation details.</t>
        <t>The algorithm takes as input a list of entries to be jointly countersigned, each entry consisting of <tt>internal_hash</tt>, <tt>internal_data</tt>, and an optional signed envelope.
(This optional item reflects that a CCF ledger records both signed envelopes and auxiliary entries.)</t>
        <ol spacing="normal" type="1">
          <li>For each signed envelope, compute the <tt>Countersign_structure</tt> as described in <xref target="cose_sign1_countersign" format="default"/>.</li>
          <li>For each item in the list, compute <tt>LeafBytes</tt> as the bytestring concatenation of the internal hash, the hash of internal data and, if the envelope is present, the hash of the CBOR-encoding of <tt>Countersign_structure</tt>, using the CBOR encoding described in <xref target="deterministic-cbor" format="default"/>, otherwise a HASH_SIZE bytestring of zeroes.</li>
          <li>Compute the tree root hash by applying MTH to the resulting list of leaf bytestrings,
  keeping the results for all intermediate HASH values.</li>
          <li>Select a valid <tt>node_certificate</tt> and compute a <tt>signature</tt> of the root of the tree with the corresponding signing key.</li>
          <li>
            <t>For each signed envelope provided in the input,  </t>
            <ul spacing="normal">
              <li>Collect an <tt>inclusion_proof</tt> by selecting intermediate hash values, as described above.</li>
              <li>Produce the receipt contents using this <tt>inclusion_proof</tt>, the fixed <tt>node_certificate</tt> and <tt>signature</tt>, and the bytestrings <tt>internal_hash</tt> and <tt>internal_data</tt> provided with the envelope.</li>
              <li>Produce the receipt using the Service Identifier and this receipt contents.</li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="deterministic-cbor" numbered="true" toc="default">
      <name>CBOR Encoding Restrictions</name>
      <t>In order to always regenerate the same byte string for the "to be signed" and "to be hashed" values, the core deterministic encoding rules defined in <xref section="4.2.1" sectionFormat="of" target="RFC8949" format="default"/> <bcp14>MUST</bcp14> be used for all their CBOR structures.</t>
    </section>
    <section anchor="privacy-considerations" numbered="true" toc="default">
      <name>Privacy Considerations</name>
      <t>TBD</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>TBD</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="additions-to-existing-registries" numbered="true" toc="default">
        <name>Additions to Existing Registries</name>
        <section anchor="new-entries-to-the-cose-header-parameters-registry" numbered="true" toc="default">
          <name>New Entries to the COSE Header Parameters Registry</name>
          <t>IANA is requested to register the new COSE Header parameters defined below in the "COSE Header Parameters" registry.</t>
          <section anchor="cosesign1-countersign-receipt" numbered="true" toc="default">
            <name>COSE_Sign1 Countersign receipt</name>
            <t>Name: COSE_Sign1 Countersign receipt</t>
            <t>Label: TBD</t>
            <t>Value Type: Receipt / [+ Receipt]</t>
            <t>Description: A COSE_Sign1 Countersign Receipt to be embedded in the unprotected header of the countersigned COSE_Sign1 message.</t>
          </section>
          <section anchor="issued-at" numbered="true" toc="default">
            <name>Issued At</name>
            <t>Name: Issued At</t>
            <t>Label: TBD</t>
            <t>Value Type: uint</t>
            <t>Description: The time at which the signature was issued as the number of seconds from 1970-01-01T00:00:00Z UTC, ignoring leap seconds.</t>
          </section>
        </section>
      </section>
      <section anchor="new-scitt-related-registries" numbered="true" toc="default">
        <name>New SCITT-Related Registries</name>
        <t>IANA is asked to add a new registry "TBD" to the list that appears at https://www.iana.org/assignments/.</t>
        <t>The rest of this section defines the subregistries that are to be created within the new "TBD" registry.</t>
        <section anchor="tree-alg-registry" numbered="true" toc="default">
          <name>Tree Algorithms</name>
          <t>IANA is asked to establish a registry of tree algorithm identifiers, named "Tree Algorithms", with the following registration procedures: TBD</t>
          <t>The "Tree Algorithms" registry initially consists of:</t>
          <table align="center">
            <name>Initial content of Tree Algorithms registry</name>
            <thead>
              <tr>
                <th align="left">Identifier</th>
                <th align="left">Tree Algorithm</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">CCF-2</td>
                <td align="left">CCF 2 tree algorithm</td>
                <td align="left">This document</td>
              </tr>
            </tbody>
          </table>
          <t>The designated expert(s) should ensure that the proposed algorithm has a public specification and is suitable for use as [TBD].</t>
        </section>
        <section anchor="hash-alg-registry" numbered="true" toc="default">
          <name>Hash Algorithms</name>
          <t>IANA is asked to establish a registry of hash algorithm identifiers, named "Hash Algorithms", with the following registration procedures: TBD</t>
          <t>The "Hash Algorithms" registry initially consists of:</t>
          <table align="center">
            <name>Initial content of Hash Algorithms registry</name>
            <thead>
              <tr>
                <th align="left">Identifier</th>
                <th align="left">Hash Algorithm</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">SHA-256</td>
                <td align="left">SHA-256</td>
                <td align="left">
                  <xref target="RFC6234" format="default"/></td>
              </tr>
            </tbody>
          </table>
          <t>The designated expert(s) should ensure that the proposed algorithm has a public specification and is suitable for use as a cryptographic hash algorithm with no known preimage or collision attacks. These attacks can damage the integrity of the ledger.</t>
        </section>
        <section anchor="sig-alg-registry" numbered="true" toc="default">
          <name>Signature Algorithms</name>
          <t>IANA is asked to establish a registry of signature algorithm identifiers, named "Signature Algorithms", with the following registration procedures: TBD</t>
          <t>The "Signature Algorithms" registry initially consists of:</t>
          <table align="center">
            <name>Initial content of Signature Algorithms registry</name>
            <thead>
              <tr>
                <th align="left">Identifier</th>
                <th align="left">Signature Algorithm</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">ES256</td>
                <td align="left">Deterministic ECDSA (NIST P-256) with HMAC-SHA256</td>
                <td align="left">
                  <xref target="RFC6979" format="default"/></td>
              </tr>
              <tr>
                <td align="left">ED25519</td>
                <td align="left">Ed25519 (PureEdDSA with the edwards25519 curve)</td>
                <td align="left">
                  <xref target="RFC8032" format="default"/></td>
              </tr>
            </tbody>
          </table>
          <t>The designated expert(s) should ensure that the proposed algorithm has a public specification and is suitable for use as a cryptographic signature algorithm.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="STD" value="94"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <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>
        </reference>
        <reference anchor="RFC9162" target="https://www.rfc-editor.org/info/rfc9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <seriesInfo name="DOI" value="10.17487/RFC9162"/>
            <seriesInfo name="RFC" value="9162"/>
            <author fullname="B. Laurie" initials="B." surname="Laurie">
              <organization/>
            </author>
            <author fullname="E. Messeri" initials="E." surname="Messeri">
              <organization/>
            </author>
            <author fullname="R. Stradling" initials="R." surname="Stradling">
              <organization/>
            </author>
            <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>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <seriesInfo name="DOI" value="10.17487/RFC6234"/>
            <seriesInfo name="RFC" value="6234"/>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <seriesInfo name="DOI" value="10.17487/RFC8032"/>
            <seriesInfo name="RFC" value="8032"/>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA).  The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves.  An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6979" target="https://www.rfc-editor.org/info/rfc6979">
          <front>
            <title>Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <seriesInfo name="DOI" value="10.17487/RFC6979"/>
            <seriesInfo name="RFC" value="6979"/>
            <author fullname="T. Pornin" initials="T." surname="Pornin">
              <organization/>
            </author>
            <date month="August" year="2013"/>
            <abstract>
              <t>This document defines a deterministic digital signature generation procedure.  Such signatures are compatible with standard Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) digital signatures and can be processed with unmodified verifiers, which need not be aware of the procedure described therein.  Deterministic signatures retain the cryptographic security features associated with digital signatures but can be more easily implemented in various environments, since they do not need access to a source of high-quality randomness.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-cose-countersign" target="https://www.ietf.org/archive/id/draft-ietf-cose-countersign-05.txt">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Countersignatures</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-cose-countersign-05"/>
            <author fullname="Jim Schaad">
              <organization>August Cellars</organization>
            </author>
            <author fullname="Russ Housley">
              <organization>Vigil Security</organization>
            </author>
            <date day="23" month="June" year="2021"/>
            <abstract>
              <t>   Concise Binary Object Representation (CBOR) is a data format designed
   for small code size and small message size.  CBOR Object Signing and
   Encryption (COSE) defines a set of security services for CBOR.  This
   document defines a countersignature algorithm along with the needed
   header parameters and CBOR tags for COSE.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="CCF_Merkle_Tree" target="https://microsoft.github.io/CCF/main/architecture/merkle_tree.html">
          <front>
            <title>CCF - Merkle Tree</title>
            <author initials="." surname="Microsoft Research">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
