<?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.4 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cose-merkle-tree-proofs-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="CoMETRE">Concise Encoding of Signed Merkle Tree Proofs</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cose-merkle-tree-proofs-03"/>
    <author initials="O." surname="Steele" fullname="Orie Steele">
      <organization>Transmute</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="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="2023" month="December" day="11"/>
    <area>Security</area>
    <workgroup>COSE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 66?>

<t>This specification describes verifiable data structures and associated proof types for use with COSE.
The extensibility of the approach is demonstrated by providing CBOR encodings for RFC9162.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    CBOR Object Signing and Encryption Working Group mailing list (cose@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cose/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/cose-wg/draft-ietf-cose-merkle-tree-proofs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 71?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Merkle trees are one of many verifiable data structures that enable tamper evident secure information storage,
through their ability to protect the integrity of batches of documents or collections of statements.</t>
      <t>Merkle trees can be constructed from simple operations such as concatenation and digest via a cryptographic hash function,
however, more advanced constructions enable proofs of different properties of the underlying verifiable data structure.</t>
      <t>Verifiable data structure proofs can be used to prove a document is in a database (proof of inclusion),
that a database is append only (proof of consistency), that a smaller set of statements are contained
in a large set of statements (proof of disclosure, a special case of proof of inclusion),
or proof that certain data is not yet present in a database (proofs of non inclusion).</t>
      <t>Differences in the representation of verifiable data structures, and verifiable data structure proof types,
can increase the burden for implementers, and create interoperability challenges for transparency services.</t>
      <t>This document describes how to convey verifiable data structures, and associated proof types in COSE envelopes.</t>
      <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="cbor-tags">
      <name>CBOR Tags</name>
      <t>This section will be removed before the document is completed,
its purpose is to track the TBD code points references throughout the draft.</t>
      <dl>
        <dt>-111 is TBD_1:</dt>
        <dd>
          <t>A requested cose header parameter representing the verifiable data structure used.</t>
        </dd>
        <dt>-222 is TBD_2:</dt>
        <dd>
          <t>A requested cose header parameter representing the verifiable data structure parameters map (proofs map)</t>
        </dd>
      </dl>
      <t>The other codepoints are assigned from the registries established in this draft, they are therefore not marked TBD.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <dl>
        <dt>Verifiable Data Structure:</dt>
        <dd>
          <t>A data structure which supports one or more Proof Types.</t>
        </dd>
        <dt>Verifiable Data Structure Parameters:</dt>
        <dd>
          <t>Parameters to a verifiable data structure that are used to prove properties,
such as authentication, inclusion, consistency, and freshness.
Parameters can include multiple proofs of a given type, or multiple types of proof (inclusion and consistency).</t>
        </dd>
        <dt>Proof Type:</dt>
        <dd>
          <t>A verifiable process, that proves properties of a Verifiable Data Structure.</t>
        </dd>
        <dt>Proof Value:</dt>
        <dd>
          <t>An encoding of a Proof Type in CBOR.</t>
        </dd>
      </dl>
    </section>
    <section anchor="sec-generic-verifiable-data-structures">
      <name>Verifiable Data Structures in CBOR</name>
      <t>This section describes representations of verifiable data structure proofs in CBOR.</t>
      <t>For example, construction of a merkle tree leaf, or an inclusion proof from a leaf to a merkle root,
might have several different representations, depending on the verifiable data structure used.</t>
      <t>Differences in representations are necessary to support efficient
verification, unique security or privacy properties, and for compatibility with specific implementations.</t>
      <t>In order to improve interoperability we define two extension points for
enabling verifiable data structures with COSE, and we provide concrete examples for
the structures and proofs defined in <xref target="RFC9162"/>.</t>
      <section anchor="sec-cose-verifiable-data-structures">
        <name>Structures</name>
        <t>Similar to <eref target="https://www.iana.org/assignments/cose/cose.xhtml#key-type">COSE Key Types</eref>,
different verifiable data structures support different algorithms.
As EC2 keys (1: 2) support both digital signature and key agreement algorithms,
RFC9162_SHA256 (TBD_1 : 1) supports both inclusion and consistency proofs.</t>
        <t>This document establishes a registry of verifiable data structure algorithms,
with the following initial contents:</t>
        <ul spacing="normal">
          <li>
            <t>Name: The name of the verifiable data structure</t>
          </li>
          <li>
            <t>Value: The identifier for the verifiable data structure</t>
          </li>
          <li>
            <t>Description: The identifier for the verifiable data structure</t>
          </li>
          <li>
            <t>Reference: Where the verifiable data structure is defined</t>
          </li>
        </ul>
        <table align="left" anchor="cose-verifiable-data-structures">
          <name>COSE Verifiable Data Structures</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">N/A</td>
              <td align="left">0</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">RFC9162_SHA256</td>
              <td align="left">1</td>
              <td align="left">SHA256 Binary Merkle Tree</td>
              <td align="left">
                <xref target="RFC9162"/></td>
            </tr>
          </tbody>
        </table>
        <t>When desigining new verifiable data structures,
please request the next available positive integer as your requested assignment,
for example:</t>
        <table align="left" anchor="cose-verifiable-data-structures-registration-guidance">
          <name>How to register new structures</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">N/A</td>
              <td align="left">0</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">RFC9162_SHA256</td>
              <td align="left">1</td>
              <td align="left">SHA256 Binary Merkle Tree</td>
              <td align="left">
                <xref target="RFC9162"/></td>
            </tr>
            <tr>
              <td align="left">Your name</td>
              <td align="left">TBD (requested assignment 2)</td>
              <td align="left">tbd</td>
              <td align="left">Your specification</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sec-cose-verifiable-data-structure-parameters">
        <name>Parameters</name>
        <t>Similar to <eref target="https://www.iana.org/assignments/cose/cose.xhtml#key-type-parameters">COSE Key Type Parameters</eref>,
As EC2 keys (1: 2) keys require and give meaning to specific parameters, such as -1 (crv), -2 (x), -3 (y), -4 (d),
RFC9162_SHA256 (TBD_1 : 1) supports both (-1) inclusion and (-2) consistency proofs.</t>
        <t>This document establishes a registry of verifiable data structure algorithms,
with the following initial contents:</t>
        <table align="left" anchor="cose-verifiable-data-structures-parameters">
          <name>COSE Verifiable Data Structure Parameters</name>
          <thead>
            <tr>
              <th align="left">Verifiable Data Structure</th>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">CBOR Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">inclusion proofs</td>
              <td align="left">-1</td>
              <td align="left">array (of bstr)</td>
              <td align="left">Proof of inclusion</td>
              <td align="left">
                <xref target="sec-rfc9162-sha256-inclusion-proof"/></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">consistency proofs</td>
              <td align="left">-2</td>
              <td align="left">array (of bstr)</td>
              <td align="left">Proof of append only property</td>
              <td align="left">
                <xref target="sec-rfc9162-sha256-consistency-proof"/></td>
            </tr>
          </tbody>
        </table>
        <t>Proof types are specific to their associated "verifiable data structure",
for example, different Merkle trees might support different representations of "inclusion proof" or "consistency proof".</t>
        <t>Implementers should not expect interoperability accross "verifiable data structures",
but they should expect conceptually similar properties across the different registered proof types.</t>
        <t>For example, 2 different merkle tree based verifiable data structures might both support proofs of inclusion.</t>
        <t>Protocols requiring proof of inclusion ought to be able to preserve their functionality,
while switching from one verifiable data structure to another, so long as both structures support the same proof types.</t>
        <t>Security analysis <bcp14>SHOULD</bcp14> be conducted prior to migrating to new structures to ensure
the new security and privacy assumptions are acceptable for the use case.</t>
        <t>When designing new verifiable data structure parameters (or proof types),
please start with -1, and count down for each proof type supported by your verifiable data structure:</t>
        <table align="left" anchor="cose-verifiable-data-structures-parameters-registration-guidance">
          <name>How to register new parameters</name>
          <thead>
            <tr>
              <th align="left">Verifiable Data Structure</th>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">CBOR Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">inclusion proofs</td>
              <td align="left">-1</td>
              <td align="left">array (of bstr)</td>
              <td align="left">Proof of inclusion</td>
              <td align="left">
                <xref target="sec-rfc9162-sha256-inclusion-proof"/></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">consistency proofs</td>
              <td align="left">-2</td>
              <td align="left">array (of bstr)</td>
              <td align="left">Proof of append only property</td>
              <td align="left">
                <xref target="sec-rfc9162-sha256-consistency-proof"/></td>
            </tr>
            <tr>
              <td align="left">TBD (requested assignment 2)</td>
              <td align="left">new proof type</td>
              <td align="left">-1</td>
              <td align="left">tbd</td>
              <td align="left">tbd</td>
              <td align="left">Your_Specification</td>
            </tr>
            <tr>
              <td align="left">TBD (requested assignment 2)</td>
              <td align="left">new proof type</td>
              <td align="left">-2</td>
              <td align="left">tbd</td>
              <td align="left">tbd</td>
              <td align="left">Your_Specification</td>
            </tr>
            <tr>
              <td align="left">TBD (requested assignment 2)</td>
              <td align="left">new proof type</td>
              <td align="left">-3</td>
              <td align="left">tbd</td>
              <td align="left">tbd</td>
              <td align="left">Your_Specification</td>
            </tr>
          </tbody>
        </table>
        <section anchor="registration-requirements">
          <name>Registration Requirements</name>
          <t>Each specification <bcp14>MUST</bcp14> define how to encode the verifiable data structure and its parameters (also called proof types) in CBOR.</t>
          <t>Each specification <bcp14>MUST</bcp14> define how to produce and consume the supported proof types.</t>
          <t>See <xref target="sec-rfc-9162-verifiable-data-structure-definition"/> as an example.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-rfc-9162-verifiable-data-structure-definition">
      <name>RFC9162_SHA256</name>
      <t>This section defines how the data structures described in <xref target="RFC9162"/>
are mapped to the terminology defined in this document, using cbor and cose.</t>
      <section anchor="verifiable-data-structure">
        <name>Verifiable Data Structure</name>
        <t>The integer identifier for this Verifiable Data Structure is 1.
The string identifier for this Verifiable Data Structure is "RFC9162_SHA256".</t>
        <t>See <xref target="cose-verifiable-data-structures"/>.</t>
        <t>See <xref target="RFC9162"/>, 2.1.1. Definition of the Merkle Tree,
for a complete description of this verifiable data structure.</t>
      </section>
      <section anchor="sec-rfc9162-sha256-inclusion-proof">
        <name>Inclusion Proof</name>
        <t>See <xref target="RFC9162"/>, 2.1.3.1. Generating an Inclusion Proof,
for a complete description of this verifiable data structure proof type.</t>
        <t>The cbor representation of an inclusion proof for RFC9162_SHA256 is:</t>
        <sourcecode type="cddl"><![CDATA[
inclusion-proof = [
    tree-size: int
    leaf-index: int
    inclusion-path: [ + bstr ]
]
]]></sourcecode>
        <section anchor="inclusion-receipt">
          <name>Inclusion Receipt</name>
          <t>This specification sometimes refers to profiles of signed inclusion proofs as "receipts".</t>
          <t>In a signed inclusion proof, the previous merkle tree root, maps to tree-size-1, and is a detached payload.</t>
          <t>Profiles of proof signatures are encouraged to make additional protected header parameters mandatory,
to ensure that claims are processed with their intended semantics.</t>
          <t>One way to include this information in the COSE structure is use of the typ (type) Header Parameter,
see <xref target="I-D.ietf-cose-typ-header-parameter"/> and the similar guidance provided in <xref target="I-D.ietf-cose-cwt-claims-in-headers"/>.</t>
          <t>The <xref target="I-D.ietf-scitt-architecture"/> describes one way in which signed inclusion proofs can be leveraged to support supply chain transparency.</t>
          <t>The protected header for an RFC9162_SHA256 inclusion proof signature is:</t>
          <sourcecode type="cddl"><![CDATA[
protected-header-map = {
  &(alg: 1) => int
  &(verifiable-data-structure: -111) => int
  * cose-label => cose-value
}
]]></sourcecode>
          <ul spacing="normal">
            <li>
              <t>alg (label: 1): <bcp14>REQUIRED</bcp14>. Signature algorithm identifier. Value type: int / tstr.</t>
            </li>
            <li>
              <t>verifiable-data-structure (label: -111): <bcp14>REQUIRED</bcp14>. verifiable data structure algorithm identifier. Value type: int / tstr.</t>
            </li>
          </ul>
          <t>The unprotected header for an RFC9162_SHA256 inclusion proof signature is:</t>
          <sourcecode type="cddl"><![CDATA[
inclusion-proofs = [ + bstr .cbor inclusion-proof ]

verifiable-proofs = {
  &(inclusion-proof: -1) => inclusion-proofs
}

unprotected-header-map = {
  &(verifiable-data-proof: -222) => verifiable-proofs
  * cose-label => cose-value
}
]]></sourcecode>
          <ul spacing="normal">
            <li>
              <t>verifiable-data-proof (label: -222): <bcp14>REQUIRED</bcp14>.</t>
            </li>
            <li>
              <t>inclusion-proof (label: -1): <bcp14>REQUIRED</bcp14>.</t>
            </li>
          </ul>
          <t>The payload of an RFC9162_SHA256 inclusion proof signature is the previous Merkle tree hash as defined in <xref target="RFC9162"/>.</t>
          <t>The payload <bcp14>MUST</bcp14> be detached.</t>
          <t>Detaching the payload forces verifiers to recompute the root from the inclusion proof signature,
this protects against implementation errors where the signature is verified but the root does not match the inclusion proof.</t>
          <figure anchor="rfc9162_sha256_inclusion_receipt">
            <name>Example inclusion receipt</name>
            <sourcecode type="cbor-diag"><![CDATA[
18(                                 / COSE Sign 1                   /
    [
      h'a4012604...6d706c65',       / Protected                     /
      {                             / Unprotected                   /
        -222: {                     / Proofs                        /
          -1: [                     / Inclusion proofs (1)          /
            h'83080783...32568964', / Inclusion proof 1             /
          ]
        },
      },
      h'',                          / Detached payload              /
      h'2e34df43...8d74d55e'        / Signature                     /
    ]
)
]]></sourcecode>
          </figure>
          <figure anchor="rfc9162_sha256_inclusion_receipt_header">
            <name>Example inclusion receipt decoded protected header</name>
            <sourcecode type="cbor-diag"><![CDATA[
{                                   / Protected                     /
  1: -7,                            / Algorithm                     /
  4: h'4930714e...7163316b',        / Key identifier                /
  -111: 1,                          / Verifiable Data Structure     /
}
]]></sourcecode>
          </figure>
          <figure anchor="rfc9162_sha256_inclusion_receipt_inclusion_proof">
            <name>Example inclusion receipt decoded inclusion proof</name>
            <sourcecode type="cbor-diag"><![CDATA[
[                                   / Inclusion proof 1             /
  8,                                / Tree size                     /
  7,                                / Leaf index                    /
  [                                 / Inclusion hashes (3)          /
     h'2a8d7dfc...15d10b22'         / Intermediate hash 1           /
     h'75f177fd...2e73a8ab'         / Intermediate hash 2           /
     h'0bdaaed3...32568964'         / Intermediate hash 3           /
  ]
]
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="sec-rfc9162-sha256-consistency-proof">
        <name>Consistency Proof</name>
        <t>See <xref target="RFC9162"/>, 2.1.4.1. Generating a Consistency Proof,
for a complete description of this verifiable data structure proof type.</t>
        <t>The cbor representation of a consistency proof for RFC9162_SHA256 is:</t>
        <sourcecode type="cddl"><![CDATA[
consistency-proof = [
    tree-size-1: int ; size of tree, at previous root
    tree-size-2: int ; size of tree, at latest root
    consistency-path: [ + bstr ] ; path from previous to latest root.
]
]]></sourcecode>
        <t>Editors note: tree-size-1, could be ommited, if an inclusion-proof is always present, since the inclusion proof contains, tree-size-1.</t>
        <section anchor="consistency-receipt">
          <name>Consistency Receipt</name>
          <t>In a signed consistency proof, the latest merkle tree root, maps to tree-size-2, and is an attached payload.</t>
          <t>The protected header for an RFC9162_SHA256 consistency proof signature is:</t>
          <sourcecode type="cddl"><![CDATA[
protected-header-map = {
  &(alg: 1) => int
  &(verifiable-data-structure: -111) => int
  * cose-label => cose-value
}
]]></sourcecode>
          <ul spacing="normal">
            <li>
              <t>alg (label: 1): <bcp14>REQUIRED</bcp14>. Signature algorithm identifier. Value type: int / tstr.</t>
            </li>
            <li>
              <t>verifiable-data-structure (label: TBD_1): <bcp14>REQUIRED</bcp14>. verifiable data structure algorithm identifier. Value type: int / tstr.</t>
            </li>
          </ul>
          <t>The unprotected header for an RFC9162_SHA256 consistency proof signature is:</t>
          <sourcecode type="cddl"><![CDATA[
consistency-proofs = [ + bstr ]

verifiable-proofs = {
  &(consistency-proof: -2) => consistency-proofs
}

unprotected-header-map = {
  &(verifiable-data-proof: -222) => verifiable-proofs
  * cose-label => cose-value
}
]]></sourcecode>
          <ul spacing="normal">
            <li>
              <t>verifiable-data-proof (label: -222): <bcp14>REQUIRED</bcp14>.</t>
            </li>
            <li>
              <t>consistency-proof (label: -2): <bcp14>REQUIRED</bcp14>.</t>
            </li>
          </ul>
          <t>The payload of an RFC9162_SHA256 consistency proof signature is:</t>
          <t>The latest Merkle tree hash as defined in <xref target="RFC9162"/>.</t>
          <t>The payload <bcp14>MUST</bcp14> be attached.</t>
          <figure anchor="rfc9162_sha256_consistency_receipt">
            <name>Example consistency receipt</name>
            <sourcecode type="cbor-diag"><![CDATA[
18(                                 / COSE Sign 1                   /
    [
      h'a3012604...392b6601',       / Protected                     /
      {                             / Unprotected                   /
        -222: {                     / Proofs                        /
          -2: [                     / Consistency proofs (1)        /
            h'83040682...2e73a8ab', / Consistency proof 1           /
          ]
        },
      },
      h'430b6fd7...f74c7fc4',       / Payload                       /
      h'd97befea...f30631cb'        / Signature                     /
    ]
)
]]></sourcecode>
          </figure>
          <figure anchor="rfc9162_sha256_consistency_receipt_header">
            <name>Example consistency receipt decoded protected header</name>
            <sourcecode type="cbor-diag"><![CDATA[
{                                   / Protected                     /
  1: -7,                            / Algorithm                     /
  4: h'68747470...6d706c65',        / Key identifier                /
  -111: 1,                          / Verifiable Data Structure     /
}
]]></sourcecode>
          </figure>
          <figure anchor="rfc9162_sha256_consistency_receipt_consistency_proof">
            <name>Example consistency receipt decoded consistency proof</name>
            <sourcecode type="cbor-diag"><![CDATA[
[                                   / Consistency proof 1           /
  4,                                / Tree size 1                   /
  6,                                / Tree size 2                   /
  [                                 / Consistency hashes (2)        /
     h'0bdaaed3...32568964'         / Intermediate hash 1           /
     h'75f177fd...2e73a8ab'         / Intermediate hash 2           /
  ]
]
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>See the privacy considerations section of:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="RFC9162"/></t>
        </li>
        <li>
          <t><xref target="RFC9053"/></t>
        </li>
      </ul>
      <section anchor="log-length">
        <name>Log Length</name>
        <t>Some structures and proofs leak the size of the log at the time of inclusion.
In the case that a log only stores certain kinds of information, this can reveal details that could impact reputation.
For example, if a transparency log only stored breach notices,
a receipt for a breach notice would reveal the number of previous breaches at the time the notice was made transparent.</t>
      </section>
      <section anchor="header-parameters">
        <name>Header Parameters</name>
        <t>Additional header parameters can reveal information about the transparency service or its log entries.
A privacy analysis <bcp14>SHOULD</bcp14> be performed for all mandatory fields in profiles based on this specification.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>See the security considerations section of:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="RFC9162"/></t>
        </li>
        <li>
          <t><xref target="RFC9053"/></t>
        </li>
      </ul>
      <section anchor="choice-of-signature-algorithms">
        <name>Choice of Signature Algorithms</name>
        <t>A security analysis <bcp14>SHOULD</bcp14> be performed to ensure that the
digitial signature algorithm <tt>alg</tt> is the appropriate strength to secure receipts.</t>
      </section>
      <section anchor="validity-period">
        <name>Validity Period</name>
        <t>In some cases, receipts <bcp14>SHOULD</bcp14> have strict validity periods, for example,
activation not too far in the future, or expiration, not too far in the past.
See the <tt>iat</tt>, <tt>nbf</tt>, and <tt>exp</tt> claims in <xref target="RFC8392"/>, for one way to accomplish this.
The details of expressing validity periods are out of scope for this document.</t>
      </section>
      <section anchor="status-updates">
        <name>Status Updates</name>
        <t>In some cases, receipts should be "revocable" or "suspendible",
after being issued, regardless of their validity period.
The details of expressing statuses are out of scope for this document.</t>
      </section>
    </section>
    <section anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>We would like to thank
Maik Riechert,
Jon Geater,
Mike Jones,
Mike Prorock,
Ilari Liusvaara,
for their contributions (some of which substantial) to this draft and to the initial set of implementations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="additions-to-existing-registries">
        <name>Additions to Existing Registries</name>
        <section anchor="new-entries-to-the-cose-header-parameters-registry">
          <name>New Entries to the COSE Header Parameters Registry</name>
          <t>This document requests IANA to add new values to the 'COSE
Algorithms' and to the 'COSE Header Algorithm Parameters' registries
in the 'Standards Action With Expert Review category.</t>
          <section anchor="cose-header-algorithm-parameters">
            <name>COSE Header Algorithm Parameters</name>
            <ul spacing="normal">
              <li>
                <t>Name: verifiable-data-structure</t>
              </li>
              <li>
                <t>Label: TBD_1</t>
              </li>
              <li>
                <t>Value type: int / tstr</t>
              </li>
              <li>
                <t>Value registry: https://www.iana.org/assignments/cose/cose.xhtml#header-parameters</t>
              </li>
              <li>
                <t>Description: Algorithm name for verifiable data structure, used to produce verifiable data structure proofs.</t>
              </li>
              <li>
                <t>Name: verifiable-data-structure-parameters</t>
              </li>
              <li>
                <t>Label: TBD_2</t>
              </li>
              <li>
                <t>Value type: int / tstr</t>
              </li>
              <li>
                <t>Value registry: https://www.iana.org/assignments/cose/cose.xhtml#header-parameters</t>
              </li>
              <li>
                <t>Description: Location for verifiable data structure proofs in COSE Header Parameters.</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="verifiable-data-structure-registry">
          <name>COSE Verifiable Data Structures</name>
          <t>IANA will be asked to establish a registry of verifiable data structure identifiers,
named "COSE Verifiable Data Structures" to be administered under a Specification Required policy <xref target="RFC8126"/>.</t>
          <t>Template:</t>
          <ul spacing="normal">
            <li>
              <t>Name: The name of the verifiable data structure</t>
            </li>
            <li>
              <t>Value: The identifier for the verifiable data structure</t>
            </li>
            <li>
              <t>Description: The identifier for the verifiable data structure</t>
            </li>
            <li>
              <t>Reference: Where the verifiable data structure is defined</t>
            </li>
          </ul>
          <t>Initial contents: Provided in <xref target="cose-verifiable-data-structures"/></t>
        </section>
        <section anchor="verifiable-data-structure-parameters-registry">
          <name>COSE Verifiable Data Structure Parameters</name>
          <t>IANA will be asked to establish a registry of verifiable data structure parameters,
named "COSE Verifiable Data Structure Parameters" to be administered under a Specification Required policy <xref target="RFC8126"/>.</t>
          <t>Template:</t>
          <ul spacing="normal">
            <li>
              <t>Verifiable Data Structure: The identifier for the verifiable data structure</t>
            </li>
            <li>
              <t>Name: The name of the proof type</t>
            </li>
            <li>
              <t>Label: The integer of the proof type</t>
            </li>
            <li>
              <t>CBOR Type: The cbor data type of the proof</t>
            </li>
            <li>
              <t>Description: The description of the proof type</t>
            </li>
            <li>
              <t>Reference: Where the proof type is defined</t>
            </li>
          </ul>
          <t>Initial contents: Provided in <xref target="cose-verifiable-data-structures-parameters"/></t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <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="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate 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>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="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </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="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <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>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC6979">
          <front>
            <title>Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author fullname="T. Pornin" initials="T." surname="Pornin"/>
            <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>
          <seriesInfo name="RFC" value="6979"/>
          <seriesInfo name="DOI" value="10.17487/RFC6979"/>
        </reference>
        <reference anchor="RFC7049">
          <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="October" year="2013"/>
            <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>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="BCP205">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </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="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="I-D.ietf-cose-countersign">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Countersignatures</title>
            <author fullname="Jim Schaad" initials="J." surname="Schaad">
              <organization>August Cellars</organization>
            </author>
            <date day="20" month="September" year="2022"/>
            <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.  This document updates RFC 9052.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-countersign-10"/>
        </reference>
        <reference anchor="I-D.ietf-scitt-architecture">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Antoine Delignat-Lavaud" initials="A." surname="Delignat-Lavaud">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Cedric Fournet" initials="C." surname="Fournet">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>ARM</organization>
            </author>
            <author fullname="Steve Lasker" initials="S." surname="Lasker">
              <organization>RKVST</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   Traceability of physical and digital Artifacts in supply chains is a
   long-standing, but increasingly serious security concern.  The rise
   in popularity of verifiable data structures as a mechanism to make
   actors more accountable for breaching their compliance promises has
   found some successful applications to specific use cases (such as the
   supply chain for digital certificates), but lacks a generic and
   scalable architecture that can address a wider range of use cases.

   This document defines a generic, interoperable and scalable
   architecture to enable transparency across any supply chain with
   minimum adoption barriers.  It provides flexibility, enabling
   interoperability across different implementations of Transparency
   Services with various auditing and compliance requirements.  Issuers
   can register their Signed Statements on any Transparency Service,
   with the guarantee that all Consumers will be able to verify them.

   Within the SCITT Architecture, a producer is known as an Issuer, and
   a consumer is known as a Verifier.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-architecture-04"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cwt-claims-in-headers">
          <front>
            <title>CBOR Web Token (CWT) Claims in COSE Headers</title>
            <author fullname="Tobias Looker" initials="T." surname="Looker">
              <organization>Mattr</organization>
            </author>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <date day="29" month="November" year="2023"/>
            <abstract>
              <t>   This document describes how to include CBOR Web Token (CWT) claims in
   the header parameters of any COSE structure.  This functionality
   helps to facilitate applications that wish to make use of CBOR Web
   Token (CWT) claims in encrypted COSE structures and/or COSE
   structures featuring detached signatures, while having some of those
   claims be available before decryption and/or without inspecting the
   detached payload.  Another use case is using CWT claims with payloads
   that are not CWT Claims Sets, including payloads that are not CBOR at
   all.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cwt-claims-in-headers-10"/>
        </reference>
        <reference anchor="I-D.ietf-cose-typ-header-parameter">
          <front>
            <title>COSE "typ" (type) Header Parameter</title>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <date day="8" month="December" year="2023"/>
            <abstract>
              <t>   This specification adds the equivalent of the JOSE typ (type) header
   parameter to COSE so that the benefits of explicit typing, as defined
   in the JSON Web Token Best Current Practices BCP, can be brought to
   COSE objects.  The syntax of the COSE type header parameter value is
   the same as the existing COSE content type header parameter.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-typ-header-parameter-02"/>
        </reference>
      </references>
    </references>
    <?line 574?>

<section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: Please remove this section as well as references to <xref target="BCP205"/> before AUTH48.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="BCP205"/>.
The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.</t>
      <t>According to <xref target="BCP205"/>,
"this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.
It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="implementer">
        <name>Implementer</name>
        <t>An open-source implementation was initiated and is maintained by the Transmute Industries Inc. - Transmute.</t>
      </section>
      <section anchor="implementation-name">
        <name>Implementation Name</name>
        <t>An application demonstrating the concepts is available at <eref target="https://scitt.xyz">https://scitt.xyz</eref>.</t>
      </section>
      <section anchor="implementation-url">
        <name>Implementation URL</name>
        <t>An open-source implementation is available at:</t>
        <ul spacing="normal">
          <li>
            <t>https://github.com/transmute-industries/cose</t>
          </li>
        </ul>
      </section>
      <section anchor="maturity">
        <name>Maturity</name>
        <t>The code's level of maturity is considered to be "prototype".</t>
      </section>
      <section anchor="coverage-and-version-compatibility">
        <name>Coverage and Version Compatibility</name>
        <t>The current version ('main') implements the verifiable data structure algorithm, inclusion proof and consistency proof concepts of this draft.</t>
      </section>
      <section anchor="license">
        <name>License</name>
        <t>The project and all corresponding code and data maintained on GitHub are provided under the Apache License, version 2.</t>
      </section>
      <section anchor="implementation-dependencies">
        <name>Implementation Dependencies</name>
        <t>The implementation builds on concepts described in SCITT <xref target="I-D.ietf-scitt-architecture"/> (https://scitt.io/).</t>
        <t>The implementation uses the Concise Binary Object Representation <xref target="RFC7049"/> (https://cbor.io/).</t>
        <t>The implementation uses the CBOR Object Signing and Encryption <xref target="RFC9053"/>, maintained at:
- https://github.com/erdtman/cose-js</t>
        <t>The implementation uses an implementation of <xref target="RFC9162"/>,
maintained at:</t>
        <ul spacing="normal">
          <li>
            <t>https://github.com/transmute-industries/rfc9162/tree/main/src/CoMETRE</t>
          </li>
        </ul>
      </section>
      <section anchor="contact">
        <name>Contact</name>
        <t>Orie Steele (orie@transmute.industries)</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
