<?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.4.11 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-trans-rfc6962-bis-39" category="exp" obsoletes="6962">

  <front>
    <title>Certificate Transparency Version 2.0</title>

    <author initials="B." surname="Laurie" fullname="Ben Laurie">
      <organization abbrev="Google">Google UK Ltd.</organization>
      <address>
        <email>benl@google.com</email>
      </address>
    </author>
    <author initials="A." surname="Langley" fullname="Adam Langley">
      <organization abbrev="Google">Google Inc.</organization>
      <address>
        <email>agl@google.com</email>
      </address>
    </author>
    <author initials="E." surname="Kasper" fullname="Emilia Kasper">
      <organization abbrev="Google">Google Switzerland GmbH</organization>
      <address>
        <email>ekasper@google.com</email>
      </address>
    </author>
    <author initials="E." surname="Messeri" fullname="Eran Messeri">
      <organization abbrev="Google">Google UK Ltd.</organization>
      <address>
        <email>eranm@google.com</email>
      </address>
    </author>
    <author initials="R." surname="Stradling" fullname="Rob Stradling">
      <organization abbrev="Sectigo">Sectigo Ltd.</organization>
      <address>
        <email>rob@sectigo.com</email>
      </address>
    </author>

    <date year="2021" month="May" day="17"/>

    <area>Security</area>
    <workgroup>TRANS (Public Notary Transparency)</workgroup>
    

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

<t>[RFC Editor: please update 'RFCXXXX' to refer to this document,
once its RFC number is known, through the document.]</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Certificate Transparency aims to mitigate the problem of misissued certificates
by providing append-only logs of issued certificates. The logs do not themselves
prevent misissuance, but they ensure that interested parties (particularly those
named in certificates) can detect such misissuance. Note that this is a general
mechanism that could be used for transparently logging any form of binary data,
subject to some kind of inclusion criteria. In this document, we only describe
its use for public TLS server certificates (i.e., where the inclusion criteria
is a valid certificate issued by a public certification authority (CA)).
A typical definition of "public" can be found in <xref target="CABBR"></xref>.</t>

<t>Each log contains certificate chains, which can be submitted by anyone. It is
expected that public CAs will contribute all their newly issued certificates to
one or more logs; however certificate holders can also contribute their own
certificate chains, as can third parties. In order to avoid logs being rendered
useless by the submission of large numbers of spurious certificates, it is
required that each chain ends with a trust anchor that is accepted by the log.
A log may also limit the length of the chain it is willing to accept;
such chains must also end with an acceptable trust anchor.
When a chain is accepted by a log, a signed timestamp is returned, which can
later be used to provide evidence to TLS clients that the chain has been
submitted. TLS clients can thus require that all certificates they accept as
valid are accompanied by signed timestamps.</t>

<t>Those who are concerned about misissuance can monitor the logs, asking them
regularly for all new entries, and can thus check whether domains for which they
are responsible have had certificates issued that they did not expect. What
they do with this information, particularly when they find that a misissuance
has happened, is beyond the scope of this document. However, broadly speaking,
they can invoke existing business mechanisms for dealing with misissued
certificates, such as working with the CA to get the certificate revoked, or
with maintainers of trust anchor lists to get the CA removed. Of course, anyone
who wants can monitor the logs and, if they believe a certificate is incorrectly
issued, take action as they see fit.</t>

<t>Similarly, those who have seen signed timestamps from a particular log can later
demand a proof of inclusion from that log. If the log is unable to provide this
(or, indeed, if the corresponding certificate is absent from monitors' copies of
that log), that is evidence of the incorrect operation of the log. The checking
operation is asynchronous to allow clients to proceed without delay, despite
possible issues such as network connectivity and the vagaries of firewalls.</t>

<t>The append-only property of each log is achieved using Merkle Trees, which can
be used to efficiently prove that any particular instance of the log is a
superset of any particular previous instance and to efficiently detect various
misbehaviors of the log (e.g., issuing a signed timestamp for a certificate that
is not subsequently logged).</t>

<t>It is necessary to treat each log as a trusted third party, because the log
auditing mechanisms described in this document can be circumvented by a
misbehaving log that shows different, inconsistent views of itself to different
clients. While mechanisms are being developed to address these
shortcomings and thereby avoid the need to blindly trust logs,
such mechanisms are outside the scope of this document.</t>

<section anchor="requirements-language" title="Requirements Language">

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

</section>
<section anchor="data_structures" title="Data Structures">

<t>Data structures are defined and encoded according to the conventions laid out
in Section 3 of <xref target="RFC8446"></xref>.</t>

<t>This document uses object identifiers (OIDs) to identify Log IDs (see
<xref target="log_id"/>), the precertificate CMS <spanx style="verb">eContentType</spanx> (see <xref target="precertificates"/>),
and X.509v3 extensions in certificates (see <xref target="cert_transinfo_extension"/>) and
OCSP responses (see <xref target="ocsp_transinfo_extension"/>). The OIDs are defined in an
arc that was selected due to its short encoding.</t>

</section>
<section anchor="major-differences-from-ct-10" title="Major Differences from CT 1.0">

<t>This document revises and obsoletes the CT 1.0 <xref target="RFC6962"></xref> protocol, drawing on
insights gained from CT 1.0 deployments and on feedback from the community. The
major changes are:</t>

<t><list style="symbols">
  <t>Hash and signature algorithm agility: permitted algorithms are now specified
in IANA registries.</t>
  <t>Precertificate format: precertificates are now CMS objects rather than X.509
certificates, which avoids violating the certificate serial number uniqueness
requirement in Section 4.1.2.2 of <xref target="RFC5280"></xref>.</t>
  <t>Removed precertificate signing certificates and the precertificate poison
extension: the change of precertificate format means that these are no longer
needed.</t>
  <t>Logs IDs: each log is now identified by an OID rather than by the hash of its
public key. OID allocations are managed by an IANA registry.</t>
  <t><spanx style="verb">TransItem</spanx> structure: this new data structure is used to encapsulate most
types of CT data. A <spanx style="verb">TransItemList</spanx>, consisting of one or more <spanx style="verb">TransItem</spanx>
structures, can be used anywhere that <spanx style="verb">SignedCertificateTimestampList</spanx> was
used in <xref target="RFC6962"></xref>.</t>
  <t>Merkle tree leaves: the <spanx style="verb">MerkleTreeLeaf</spanx> structure has been replaced by the
<spanx style="verb">TransItem</spanx> structure, which eases extensibility and simplifies the leaf
structure by removing one layer of abstraction.</t>
  <t>Unified leaf format: the structure for both certificate and precertificate
entries now includes only the TBSCertificate (whereas certificate entries in
<xref target="RFC6962"></xref> included the entire certificate).</t>
  <t>Log Artifact Extensions: these are now typed and managed by an IANA registry,
and they can now appear not only in SCTs but also in STHs.</t>
  <t>API outputs: complete <spanx style="verb">TransItem</spanx> structures are returned, rather than the
constituent parts of each structure.</t>
  <t>get-all-by-hash: new client API for obtaining an inclusion proof and the
corresponding consistency proof at the same time.</t>
  <t>submit-entry: new client API, replacing add-chain and add-pre-chain.</t>
  <t>Presenting SCTs with proofs: TLS servers may present SCTs together with the
corresponding inclusion proofs using any of the mechanisms that <xref target="RFC6962"></xref>
defined for presenting SCTs only. (Presenting SCTs only is still supported).</t>
  <t>CT TLS extension: the <spanx style="verb">signed_certificate_timestamp</spanx> TLS extension has been
replaced by the <spanx style="verb">transparency_info</spanx> TLS extension.</t>
  <t>Verification algorithms: added detailed algorithms for verifying inclusion
proofs, for verifying consistency between two STHs, and for verifying a root
hash given a complete list of the relevant leaf input entries.</t>
  <t>Extensive clarifications and editorial work.</t>
</list></t>

</section>
</section>
<section anchor="cryptographic-components" title="Cryptographic Components">

<section anchor="mht" title="Merkle Hash Trees">

<t>A full description of Merkle Hash Tree is beyond the scope of this
document. Briefly, it is a binary tree where each non-leaf node is a
hash of its children. For CT, the number of children is at most two.
Additional information can be found in the Introduction and Reference
section of <xref target="RFC8391"/>.</t>

<section anchor="mht_definition" title="Definition of the Merkle Tree">

<t>The log uses a binary Merkle Hash Tree for efficient auditing. The hash
algorithm used is one of the log's parameters (see <xref target="log_parameters"/>).
This document establishes a registry of acceptable hash algorithms (see
<xref target="hash_algorithms"/>). Throughout this document, the hash algorithm in use is
referred to as HASH and the size of its output in bytes as HASH_SIZE. The input
to the Merkle Tree Hash is a list of data entries; these entries will be
hashed to form the leaves of the Merkle Hash Tree. The output is a single
HASH_SIZE Merkle Tree Hash. Given an ordered list of n inputs, D_n =
{d[0], d[1], …, d[n-1]}, the Merkle Tree Hash (MTH) is thus defined as
follows:</t>

<t>The hash of an empty list is the hash of an empty string:</t>

<figure><artwork><![CDATA[
MTH({}) = HASH().
]]></artwork></figure>

<t>The hash of a list with one entry (also known as a leaf hash) is:</t>

<figure><artwork><![CDATA[
MTH({d[0]}) = HASH(0x00 || d[0]).
]]></artwork></figure>

<t>For n &gt; 1, let k be the largest power of two smaller than n
(i.e., k &lt; n &lt;= 2k).
The Merkle Tree Hash of an n-element list D_n is then defined recursively as</t>

<figure><artwork><![CDATA[
MTH(D_n) = HASH(0x01 || MTH(D[0:k]) || MTH(D[k:n])),
]]></artwork></figure>

<t>where:</t>

<t><list style="symbols">
  <t>|| denotes concatenation</t>
  <t>: denotes concatenation of lists</t>
  <t>D[k1:k2] = D'_(k2-k1) denotes the list {d'[0] = d[k1], d'[1] = d[k1+1],
…, d'[k2-k1-1] = d[k2-1]} of length (k2 - k1).</t>
</list></t>

<t>Note that the hash calculations for leaves and nodes differ; this domain
separation is required to give second preimage resistance.</t>

<t>Note that we do not require the length of the input list to be a power of two.
The resulting Merkle Tree may thus not be balanced; however, its shape is
uniquely determined by the number of leaves. (Note: This Merkle Tree is
essentially the same as the history tree <xref target="CrosbyWallach"></xref> proposal, except our
definition handles non-full trees differently).</t>

</section>
<section anchor="verify_hash" title="Verifying a Tree Head Given Entries">

<t>When a client has a complete list of <spanx style="verb">entries</spanx> from <spanx style="verb">0</spanx> up to
<spanx style="verb">tree_size - 1</spanx> and wishes to verify this list against a tree head <spanx style="verb">root_hash</spanx>
returned by the log for the same <spanx style="verb">tree_size</spanx>, the following algorithm may be
used:</t>

<t><list style="numbers">
  <t>Set <spanx style="verb">stack</spanx> to an empty stack.</t>
  <t>For each <spanx style="verb">i</spanx> from <spanx style="verb">0</spanx> up to <spanx style="verb">tree_size - 1</spanx>:  <list style="numbers">
      <t>Push <spanx style="verb">HASH(0x00 || entries[i])</spanx> to <spanx style="verb">stack</spanx>.</t>
      <t>Set <spanx style="verb">merge_count</spanx> to the lowest value (<spanx style="verb">0</spanx> included) such that <spanx style="verb">LSB(i &gt;&gt;
merge_count)</spanx> is not set, where <spanx style="verb">LSB</spanx> means the least significant bit.
In other words, set <spanx style="verb">merge_count</spanx> to the number
of consecutive <spanx style="verb">1</spanx>s found starting at the least significant bit of <spanx style="verb">i</spanx>.</t>
      <t>Repeat <spanx style="verb">merge_count</spanx> times:      <list style="numbers">
          <t>Pop <spanx style="verb">right</spanx> from <spanx style="verb">stack</spanx>.</t>
          <t>Pop <spanx style="verb">left</spanx> from <spanx style="verb">stack</spanx>.</t>
          <t>Push <spanx style="verb">HASH(0x01 || left || right)</spanx> to <spanx style="verb">stack</spanx>.</t>
        </list></t>
    </list></t>
  <t>If there is more than one element in the <spanx style="verb">stack</spanx>, repeat the same merge
procedure (the sub-items of Step 2.3 above) until only a single element
remains.</t>
  <t>The remaining element in <spanx style="verb">stack</spanx> is the Merkle Tree hash for the given
<spanx style="verb">tree_size</spanx> and should be compared by equality against the supplied
<spanx style="verb">root_hash</spanx>.</t>
</list></t>

</section>
<section anchor="merkle_inclusion_proof" title="Merkle Inclusion Proofs">

<t>A Merkle inclusion proof for a leaf in a Merkle Hash Tree is the shortest list
of additional nodes in the Merkle Tree required to compute the Merkle Tree Hash
for that tree. 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="generating-an-inclusion-proof" title="Generating an Inclusion Proof">

<t>Given an ordered list of n inputs to the tree, D_n = {d[0], d[1], …,
d[n-1]}, the Merkle inclusion proof PATH(m, D_n) for the (m+1)th input d[m],
0 &lt;= m &lt; n, is defined as follows:</t>

<t>The proof for the single leaf in a tree with a one-element input list D[1] =
{d[0]} is empty:</t>

<figure><artwork><![CDATA[
PATH(0, {d[0]}) = {}
]]></artwork></figure>

<t>For n &gt; 1, let k be the largest power of two smaller than n. The proof for the
(m+1)th element d[m] in a list of n &gt; m elements is then defined recursively as</t>

<figure><artwork><![CDATA[
PATH(m, D_n) = PATH(m, D[0:k]) : MTH(D[k:n]) for m < k; and

PATH(m, D_n) = PATH(m - k, D[k:n]) : MTH(D[0:k]) for m >= k,
]]></artwork></figure>

<t>The : operator and D[k1:k2] are defined the same as in <xref target="mht_definition"/>.</t>

</section>
<section anchor="verify_inclusion" title="Verifying an Inclusion Proof">

<t>When a client has received an inclusion proof (e.g., in a <spanx style="verb">TransItem</spanx> of type
<spanx style="verb">inclusion_proof_v2</spanx>) and wishes to verify inclusion of an input <spanx style="verb">hash</spanx> for a
given <spanx style="verb">tree_size</spanx> and <spanx style="verb">root_hash</spanx>, the following algorithm may be used to prove
the <spanx style="verb">hash</spanx> was included in the <spanx style="verb">root_hash</spanx>:</t>

<t><list style="numbers">
  <t>Compare <spanx style="verb">leaf_index</spanx> from the <spanx style="verb">inclusion_proof_v2</spanx> structure
against <spanx style="verb">tree_size</spanx>. If <spanx style="verb">leaf_index</spanx> is greater than or
equal to <spanx style="verb">tree_size</spanx> then fail the proof verification.</t>
  <t>Set <spanx style="verb">fn</spanx> to <spanx style="verb">leaf_index</spanx> and <spanx style="verb">sn</spanx> to <spanx style="verb">tree_size - 1</spanx>.</t>
  <t>Set <spanx style="verb">r</spanx> to <spanx style="verb">hash</spanx>.</t>
  <t>For each value <spanx style="verb">p</spanx> in the <spanx style="verb">inclusion_path</spanx> array:  <vspace blankLines='1'/>
If <spanx style="verb">sn</spanx> is 0, stop the iteration and fail the proof verification.  <vspace blankLines='1'/>
If <spanx style="verb">LSB(fn)</spanx> is set, or if <spanx style="verb">fn</spanx> is equal to <spanx style="verb">sn</spanx>, then:  <list style="numbers">
      <t>Set <spanx style="verb">r</spanx> to <spanx style="verb">HASH(0x01 || p || r)</spanx></t>
      <t>If <spanx style="verb">LSB(fn)</spanx> is not set, then right-shift both <spanx style="verb">fn</spanx> and <spanx style="verb">sn</spanx> equally
until either <spanx style="verb">LSB(fn)</spanx> is set or <spanx style="verb">fn</spanx> is <spanx style="verb">0</spanx>.</t>
    </list>
Otherwise:  <list style="numbers">
      <t>Set <spanx style="verb">r</spanx> to <spanx style="verb">HASH(0x01 || r || p)</spanx></t>
    </list>
Finally, right-shift both <spanx style="verb">fn</spanx> and <spanx style="verb">sn</spanx> one time.</t>
  <t>Compare <spanx style="verb">sn</spanx> to 0. Compare <spanx style="verb">r</spanx> against the <spanx style="verb">root_hash</spanx>. If <spanx style="verb">sn</spanx> is equal to
0, and <spanx style="verb">r</spanx> and the <spanx style="verb">root_hash</spanx> are equal, then the log has proven the
inclusion of <spanx style="verb">hash</spanx>. Otherwise, fail the proof verification.</t>
</list></t>

</section>
</section>
<section anchor="consistency" title="Merkle Consistency Proofs">

<t>Merkle consistency proofs prove the append-only property of the tree. A Merkle
consistency proof for a Merkle Tree Hash MTH(D_n) and a previously advertised
hash MTH(D[0:m]) of the first m leaves, m &lt;= n, is the list of nodes in the
Merkle Tree required to verify that the first m inputs D[0:m] are equal in both
trees. Thus, a consistency proof must contain a set of intermediate nodes (i.e.,
commitments to inputs) sufficient to verify MTH(D_n), such that (a subset of)
the same nodes can be used to verify MTH(D[0:m]). We define an algorithm that
outputs the (unique) minimal consistency proof.</t>

<section anchor="generating-a-consistency-proof" title="Generating a Consistency Proof">

<t>Given an ordered list of n inputs to the tree, D_n = {d[0], d[1], …,
d[n-1]}, the Merkle consistency proof PROOF(m, D_n) for a previous Merkle Tree
Hash MTH(D[0:m]), 0 &lt; m &lt; n, is defined as:</t>

<figure><artwork><![CDATA[
PROOF(m, D_n) = SUBPROOF(m, D_n, true)
]]></artwork></figure>

<t>In SUBPROOF, the boolean value represents whether the subtree created from
D[0:m] is a complete subtree of the Merkle Tree created from D_n, and,
consequently, whether the subtree Merkle Tree Hash MTH(D[0:m]) is known. The
initial call to SUBPROOF sets this to be true, and SUBPROOF is then defined as
follows:</t>

<t>The subproof for m = n is empty if m is the value for which PROOF was originally
requested (meaning that the subtree created from D[0:m] is a complete subtree
of the Merkle Tree created from the original D_n for which PROOF was
requested, and the subtree Merkle Tree Hash MTH(D[0:m]) is known):</t>

<figure><artwork><![CDATA[
SUBPROOF(m, D_m, true) = {}
]]></artwork></figure>

<t>Otherwise, the subproof for m = n is the Merkle Tree Hash committing inputs
D[0:m]:</t>

<figure><artwork><![CDATA[
SUBPROOF(m, D_m, false) = {MTH(D_m)}
]]></artwork></figure>

<t>For m &lt; n, let k be the largest power of two smaller than n. The subproof is
then defined recursively, using the appropriate step below:</t>

<t>If m &lt;= k, the right subtree entries D[k:n] only exist in the current tree.
We prove that the left subtree entries D[0:k] are consistent and add a
commitment to D[k:n]:</t>

<figure><artwork><![CDATA[
SUBPROOF(m, D_n, b) = SUBPROOF(m, D[0:k], b) : MTH(D[k:n])
]]></artwork></figure>

<t>If m &gt; k, the left subtree entries D[0:k] are identical in both trees. We prove
that the right subtree entries D[k:n] are consistent and add a commitment to
D[0:k].</t>

<figure><artwork><![CDATA[
SUBPROOF(m, D_n, b) = SUBPROOF(m - k, D[k:n], false) : MTH(D[0:k])
]]></artwork></figure>

<t>The number of nodes in the resulting proof is bounded above by ceil(log2(n)) +
1.</t>

<t>The : operator and D[k1:k2] are defined the same as in <xref target="mht_definition"/>.</t>

</section>
<section anchor="verify_consistency" title="Verifying Consistency between Two Tree Heads">

<t>When a client has a tree head <spanx style="verb">first_hash</spanx> for tree size <spanx style="verb">first</spanx>, a tree head
<spanx style="verb">second_hash</spanx> for tree size <spanx style="verb">second</spanx> where <spanx style="verb">0 &lt; first &lt; second</spanx>, and has
received a consistency proof between the two (e.g., in a <spanx style="verb">TransItem</spanx> of type
<spanx style="verb">consistency_proof_v2</spanx>), the following algorithm may be used to verify the
consistency proof:</t>

<t><list style="numbers">
  <t>If <spanx style="verb">consistency_path</spanx> is an empty array, stop and fail the proof
verification.</t>
  <t>If <spanx style="verb">first</spanx> is an exact power of 2, then prepend <spanx style="verb">first_hash</spanx> to the
<spanx style="verb">consistency_path</spanx> array.</t>
  <t>Set <spanx style="verb">fn</spanx> to <spanx style="verb">first - 1</spanx> and <spanx style="verb">sn</spanx> to <spanx style="verb">second - 1</spanx>.</t>
  <t>If <spanx style="verb">LSB(fn)</spanx> is set, then right-shift both <spanx style="verb">fn</spanx> and <spanx style="verb">sn</spanx> equally until
<spanx style="verb">LSB(fn)</spanx> is not set.</t>
  <t>Set both <spanx style="verb">fr</spanx> and <spanx style="verb">sr</spanx> to the first value in the <spanx style="verb">consistency_path</spanx> array.</t>
  <t>For each subsequent value <spanx style="verb">c</spanx> in the <spanx style="verb">consistency_path</spanx> array:  <vspace blankLines='1'/>
If <spanx style="verb">sn</spanx> is 0, stop the iteration and fail the proof verification.  <vspace blankLines='1'/>
If <spanx style="verb">LSB(fn)</spanx> is set, or if <spanx style="verb">fn</spanx> is equal to <spanx style="verb">sn</spanx>, then:  <list style="numbers">
      <t>Set <spanx style="verb">fr</spanx> to <spanx style="verb">HASH(0x01 || c || fr)</spanx><vspace />
Set <spanx style="verb">sr</spanx> to <spanx style="verb">HASH(0x01 || c || sr)</spanx></t>
      <t>If <spanx style="verb">LSB(fn)</spanx> is not set, then right-shift both <spanx style="verb">fn</spanx> and <spanx style="verb">sn</spanx> equally
until either <spanx style="verb">LSB(fn)</spanx> is set or <spanx style="verb">fn</spanx> is <spanx style="verb">0</spanx>.</t>
    </list>
Otherwise:  <list style="numbers">
      <t>Set <spanx style="verb">sr</spanx> to <spanx style="verb">HASH(0x01 || sr || c)</spanx></t>
    </list>
Finally, right-shift both <spanx style="verb">fn</spanx> and <spanx style="verb">sn</spanx> one time.</t>
  <t>After completing iterating through the <spanx style="verb">consistency_path</spanx> array as described
above, verify that the <spanx style="verb">fr</spanx> calculated is equal to the <spanx style="verb">first_hash</spanx> supplied,
that the <spanx style="verb">sr</spanx> calculated is equal to the <spanx style="verb">second_hash</spanx> supplied and that <spanx style="verb">sn</spanx>
is 0.</t>
</list></t>

</section>
</section>
<section anchor="example" title="Example">

<t>The binary Merkle Tree with 7 leaves:</t>

<figure><artwork><![CDATA[
            hash
           /    \
          /      \
         /        \
        /          \
       /            \
      k              l
     / \            / \
    /   \          /   \
   /     \        /     \
  g       h      i      j
 / \     / \    / \     |
 a b     c d    e f     d6
 | |     | |    | |
d0 d1   d2 d3  d4 d5
]]></artwork></figure>

<t>The inclusion proof for d0 is [b, h, l].</t>

<t>The inclusion proof for d3 is [c, g, l].</t>

<t>The inclusion proof for d4 is [f, j, k].</t>

<t>The inclusion proof for d6 is [i, k].</t>

<t>The same tree, built incrementally in four steps:</t>

<figure><artwork><![CDATA[
    hash0          hash1=k
    / \              /  \
   /   \            /    \
  /     \          /      \
  g      c         g       h
 / \     |        / \     / \
 a b     d2       a b     c d
 | |              | |     | |
d0 d1            d0 d1   d2 d3

          hash2                    hash
          /  \                    /    \
         /    \                  /      \
        /      \                /        \
       /        \              /          \
      /          \            /            \
     k            i          k              l
    / \          / \        / \            / \
   /   \         e f       /   \          /   \
  /     \        | |      /     \        /     \
 g       h      d4 d5    g       h      i      j
/ \     / \             / \     / \    / \     |
a b     c d             a b     c d    e f     d6
| |     | |             | |     | |    | |
d0 d1   d2 d3           d0 d1   d2 d3  d4 d5
]]></artwork></figure>

<t>The consistency proof between hash0 and hash is PROOF(3, D[7]) = [c, d, g, l].
c, g are used to verify hash0, and d, l are additionally used to show hash is
consistent with hash0.</t>

<t>The consistency proof between hash1 and hash is PROOF(4, D[7]) = [l]. hash can
be verified using hash1=k and l.</t>

<t>The consistency proof between hash2 and hash is PROOF(6, D[7]) = [i, j, k].
k, i are used to verify hash2, and j is additionally used to show hash is
consistent with hash2.</t>

</section>
</section>
<section anchor="signatures" title="Signatures">

<t>When signing data structures, a log MUST use one of
the signature algorithms from the IANA CT Signature Algorithms registry,
described in <xref target="signature_algorithms"/>.</t>

</section>
</section>
<section anchor="submitters" title="Submitters">

<t>Submitters submit certificates or preannouncements of certificates prior to
issuance (precertificates) to logs for public auditing, as described below. In
order to enable attribution of each logged certificate or precertificate to its
issuer, each submission MUST be accompanied by all additional certificates
required to verify the chain up to an accepted trust anchor (<xref target="get-anchors"/>).
The trust anchor (a root or intermediate CA certificate) MAY be omitted from the
submission.</t>

<t>If a log accepts a submission, it will return a Signed Certificate Timestamp
(SCT) (see <xref target="sct"/>). The submitter SHOULD validate the returned SCT as described
in <xref target="tls_clients"/> if they understand its format and they intend to use it
directly in a TLS handshake or to construct a certificate. If the submitter does
not need the SCT (for example, the certificate is being submitted simply to make
it available in the log), it MAY validate the SCT.</t>

<section anchor="certificates" title="Certificates">

<t>Any entity can submit a certificate (<xref target="submit-entry"/>) to a log. Since it is
anticipated that TLS clients will reject certificates that are not logged, it is
expected that certificate issuers and subjects will be strongly motivated to
submit them.</t>

</section>
<section anchor="precertificates" title="Precertificates">

<t>CAs may preannounce a certificate prior to issuance by submitting a
precertificate (<xref target="submit-entry"/>) that the log can use to create an entry that
will be valid against the issued certificate. The CA MAY incorporate the
returned SCT in the issued certificate. One example of where the returned SCT is
not incorporated in the issued certificate is when a CA sends the precertificate
to multiple logs, but only incorporates the SCTs that are returned first.</t>

<t>A precertificate is a CMS <xref target="RFC5652"></xref> <spanx style="verb">signed-data</spanx> object that conforms to the
following profile:</t>

<t><list style="symbols">
  <t>It MUST be DER encoded as described in <xref target="X690"></xref>.</t>
  <t><spanx style="verb">SignedData.version</spanx> MUST be v3(3).</t>
  <t><spanx style="verb">SignedData.digestAlgorithms</spanx> MUST be the same as the
<spanx style="verb">SignerInfo.digestAlgorithm</spanx> OID value (see below).</t>
  <t><spanx style="verb">SignedData.encapContentInfo</spanx>:
  <list style="symbols">
      <t><spanx style="verb">eContentType</spanx> MUST be the OID 1.3.101.78.</t>
      <t><spanx style="verb">eContent</spanx> MUST contain a TBSCertificate <xref target="RFC5280"></xref> that will be identical to
the TBSCertificate in the issued certificate, except that the Transparency
Information (<xref target="x509v3_transinfo_extension"/>) extension MUST be omitted.</t>
    </list></t>
  <t><spanx style="verb">SignedData.certificates</spanx> MUST be omitted.</t>
  <t><spanx style="verb">SignedData.crls</spanx> MUST be omitted.</t>
  <t><spanx style="verb">SignedData.signerInfos</spanx> MUST contain one <spanx style="verb">SignerInfo</spanx>:
  <list style="symbols">
      <t><spanx style="verb">version</spanx> MUST be v3(3).</t>
      <t><spanx style="verb">sid</spanx> MUST use the <spanx style="verb">subjectKeyIdentifier</spanx> option.</t>
      <t><spanx style="verb">digestAlgorithm</spanx> MUST be one of the hash algorithm OIDs listed in
the IANA CT Hash Algorithms Registry, described in
<xref target="hash_algorithms"/>.</t>
      <t><spanx style="verb">signedAttrs</spanx> MUST be present and MUST contain two attributes:
      <list style="symbols">
          <t>A content-type attribute whose value is the same as
<spanx style="verb">SignedData.encapContentInfo.eContentType</spanx>.</t>
          <t>A message-digest attribute whose value is the message digest of
<spanx style="verb">SignedData.encapContentInfo.eContent</spanx>.</t>
        </list></t>
      <t><spanx style="verb">signatureAlgorithm</spanx> MUST be the same OID as <spanx style="verb">TBSCertificate.signature</spanx>.</t>
      <t><spanx style="verb">signature</spanx> MUST be from the same (root or intermediate) CA that intends to
issue the corresponding certificate (see <xref target="binding_intent_to_issue"/>).</t>
      <t><spanx style="verb">unsignedAttrs</spanx> MUST be omitted.</t>
    </list></t>
</list></t>

<t><spanx style="verb">SignerInfo.signedAttrs</spanx> is included in the message digest calculation process
(see Section 5.4 of <xref target="RFC5652"></xref>), which ensures that the <spanx style="verb">SignerInfo.signature</spanx>
value will not be a valid X.509v3 signature that could be used in conjunction
with the TBSCertificate (from <spanx style="verb">SignedData.encapContentInfo.eContent</spanx>) to
construct a valid certificate.</t>

<section anchor="binding_intent_to_issue" title="Binding Intent to Issue">

<t>Under normal circumstances, there will be a short delay between precertificate
submission and issuance of the corresponding certificate. Longer delays are to
be expected occasionally (e.g., due to log server downtime), and in some cases
the CA might not actually issue the corresponding certificate. Nevertheless, a
precertificate's <spanx style="verb">signature</spanx> indicates the CA's binding intent to issue the
corresponding certificate, which means that:</t>

<t><list style="symbols">
  <t>Misissuance of a precertificate is considered equivalent to misissuance of
the corresponding certificate. The CA should expect to be held to account,
even if the corresponding certificate has not actually been issued.</t>
  <t>Upon observing a precertificate, a client can reasonably presume that the
corresponding certificate has been issued. A client may wish to obtain status
information (e.g., by using the Online Certificate Status Protocol <xref target="RFC6960"></xref>
or by checking a Certificate Revocation List <xref target="RFC5280"></xref>) about a certificate
that is presumed to exist, especially if there is evidence or suspicion that
the corresponding precertificate was misissued.</t>
  <t>TLS clients may have policies that require CAs to be able to revoke, and to
provide certificate status services for, each certificate that is presumed to
exist based on the existence of a corresponding precertificate.</t>
</list></t>

</section>
</section>
</section>
<section anchor="log-format-and-operation" title="Log Format and Operation">

<t>A log is a single, append-only Merkle Tree of submitted certificate and
precertificate entries.</t>

<t>When it receives and accepts a valid submission, the log MUST return an SCT that
corresponds to the submitted certificate or precertificate. If the log has
previously seen this valid submission, it SHOULD return the same SCT as it
returned before, as discussed in <xref target="misbehaving_logs"/>.
If different SCTs are produced for the same
submission, multiple log entries will have to be created, one for each SCT (as
the timestamp is a part of the leaf structure). Note that if a certificate was
previously logged as a precertificate, then the precertificate's SCT of type
<spanx style="verb">precert_sct_v2</spanx> would not be appropriate; instead, a fresh SCT of type
<spanx style="verb">x509_sct_v2</spanx> should be generated.</t>

<t>An SCT is the log's promise to append to its Merkle Tree an entry for the
accepted submission. Upon producing an SCT, the log MUST fulfil this promise by
performing the following actions within a fixed amount of time known as the
Maximum Merge Delay (MMD), which is one of the log's parameters (see
<xref target="log_parameters"/>):</t>

<t><list style="symbols">
  <t>Allocate a tree index to the entry representing the accepted submission.</t>
  <t>Calculate the root of the tree.</t>
  <t>Sign the root of the tree (see <xref target="sth"/>).</t>
</list></t>

<t>The log may append multiple entries before signing the root of the tree.</t>

<t>Log operators SHOULD NOT impose any conditions on retrieving or sharing data
from the log.</t>

<section anchor="log_parameters" title="Log Parameters">

<t>A log is defined by a collection of immutable parameters, which are used by
clients to communicate with the log and to verify log artifacts. Except for the
Final Signed Tree Head (STH), each of these parameters MUST be established
before the log operator begins to operate the log.</t>

<t><list style="hanging">
  <t hangText="Base URL:">
  The prefix used to construct URLs (<xref target="RFC3986"></xref>) for client messages (see
<xref target="client_messages"/>). The base URL MUST be an "https" URL, MAY contain a port,
MAY contain a path with any number of path segments, but MUST NOT contain a
query string, fragment, or trailing "/".
Example: https://ct.example.org/blue</t>
  <t hangText="Hash Algorithm:">
  The hash algorithm used for the Merkle Tree (see <xref target="hash_algorithms"/>).</t>
  <t hangText="Signature Algorithm:">
  The signature algorithm used (see <xref target="signatures"/>).</t>
  <t hangText="Public Key:">
  The public key used to verify signatures generated by the log. A log MUST NOT
use the same keypair as any other log.</t>
  <t hangText="Log ID:">
  The OID that uniquely identifies the log.</t>
  <t hangText="Maximum Merge Delay:">
  The MMD the log has committed to.
This document deliberately does not specify any limits on the value, to allow
for experimentation.</t>
  <t hangText="Version:">
  The version of the protocol supported by the log (currently 1 or 2).</t>
  <t hangText="Maximum Chain Length:">
  The longest certificate chain submission the log is willing to accept, if the log imposes
any limit.</t>
  <t hangText="STH Frequency Count:">
  The maximum number of STHs the log may produce in any period equal to the
<spanx style="verb">Maximum Merge Delay</spanx> (see <xref target="sth"/>).</t>
  <t hangText="Final STH:">
  If a log has been closed down (i.e., no longer accepts new entries), existing
entries may still be valid. In this case, the client should know the final
valid STH in the log to ensure no new entries can be added without detection.
This value MUST be provided in the form of a TransItem of type
<spanx style="verb">signed_tree_head_v2</spanx>.
If a log is still accepting entries, this value should not be provided.</t>
</list></t>

<t><xref target="JSON.Metadata"></xref> is an example of a metadata format which includes the above
elements.</t>

</section>
<section anchor="evaluating-submissions" title="Evaluating Submissions">

<t>A log determines whether to accept or reject a submission by evaluating it
against the minimum acceptance criteria (see <xref target="minimum_criteria"/>) and against
the log's discretionary acceptance criteria (see <xref target="discretionary_criteria"/>).</t>

<t>If the acceptance criteria are met, the log SHOULD accept the submission. (A log
may decide, for example, to temporarily reject acceptable submissions to protect
itself against denial-of-service attacks).</t>

<t>The log SHALL allow retrieval of its list of accepted trust anchors (see
<xref target="get-anchors"/>), each of which is a root or intermediate CA certificate. This
list might usefully be the union of root certificates trusted by major browser
vendors.</t>

<section anchor="minimum_criteria" title="Minimum Acceptance Criteria">

<t>To ensure that logged certificates and precertificates are attributable to an
accepted trust anchor, and to set clear expectations for what monitors would
find in the log, and to avoid being overloaded by invalid submissions, the log
MUST reject a submission if any of the following conditions are not met:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">submission</spanx>, <spanx style="verb">type</spanx> and <spanx style="verb">chain</spanx> inputs MUST be set as described in
<xref target="submit-entry"/>. The log MUST NOT accommodate misordered CA certificates or
use any other source of intermediate CA certificates to attempt certification
path construction.</t>
  <t>Each of the zero or more intermediate CA certificates in the chain MUST have
one or both of the following features:
  <list style="symbols">
      <t>The Basic Constraints extension with the cA boolean asserted.</t>
      <t>The Key Usage extension with the keyCertSign bit asserted.</t>
    </list></t>
  <t>Each certificate in the chain MUST fall within the limits imposed by the zero
or more Basic Constraints pathLenConstraint values found higher up the chain.</t>
  <t>Precertificate submissions MUST conform to all of the requirements in
<xref target="precertificates"/>.</t>
</list></t>

</section>
<section anchor="discretionary_criteria" title="Discretionary Acceptance Criteria">

<t>If the minimum acceptance criteria are met but the submission is not fully
valid according to <xref target="RFC5280"></xref> verification rules (e.g., the certificate or
precertificate has expired, is not yet valid, has been revoked, exhibits ASN.1
DER encoding errors but the log can still parse it, etc), then the acceptability
of the submission is left to the log's discretion. It is useful for logs to
accept such submissions in order to accommodate quirks of CA certificate-issuing
software and to facilitate monitoring of CA compliance with applicable policies
and technical standards. However, it is impractical for this document to
enumerate, and for logs to consider, all of the ways that a submission might
fail to comply with <xref target="RFC5280"></xref>.</t>

<t>Logs SHOULD limit the length of chain they will accept. The maximum chain length
is one of the log's parameters (see <xref target="log_parameters"/>).</t>

</section>
</section>
<section anchor="log_entries" title="Log Entries">

<t>If a submission is accepted and an SCT issued, the accepting log MUST store the
entire chain used for verification. This chain MUST include the certificate or
precertificate itself, the zero or more intermediate CA certificates provided by
the submitter, and the trust anchor used to verify the chain (even if it was
omitted from the submission). The log MUST provide this chain for auditing upon
request (see <xref target="get-entries"/>) so that the CA cannot avoid blame by
logging a partial or empty chain.
Each log entry is a <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">x509_entry_v2</spanx> or
<spanx style="verb">precert_entry_v2</spanx>. However, a log may store its entries in any format. If a
log does not store this <spanx style="verb">TransItem</spanx> in full, it must store the <spanx style="verb">timestamp</spanx>
and <spanx style="verb">sct_extensions</spanx> of the corresponding <spanx style="verb">TimestampedCertificateEntryDataV2</spanx>
structure. The <spanx style="verb">TransItem</spanx> can be reconstructed from these fields and the entire
chain that the log used to verify the submission.</t>

</section>
<section anchor="log_id" title="Log ID">

<t>Each log is identified by an OID, which is one of the log's parameters (see
<xref target="log_parameters"/>) and which MUST NOT be used to identify any other log. A
log's operator MUST either allocate the OID themselves or request an OID from
the Log ID Registry (see <xref target="log_id_registry"/>).
The only advantage of the registry is that the DER encoding can be small.
(Recall that OID allocations do not require a central registration, although
logs will most likely want to make themselves known to potential clients
through out of band means.)
Various data structures include
the DER encoding of this OID, excluding the ASN.1 tag and length bytes, in an
opaque vector:</t>

<figure><artwork><![CDATA[
    opaque LogID<2..127>;
]]></artwork></figure>

<t>Note that the ASN.1 length and the opaque vector length are identical in size (1
byte) and value, so the full DER encoding (including the tag and length)
of the OID can be reproduced simply by
prepending an OBJECT IDENTIFIER tag (0x06) to the opaque vector length and
contents.</t>

<t>The OID used to identify a log is limited such that the DER encoding of its
value, excluding the tag and length, MUST be no longer than 127 octets.</t>

</section>
<section anchor="transitem-structure" title="TransItem Structure">

<t>Various data structures are encapsulated in the <spanx style="verb">TransItem</spanx> structure to ensure
that the type and version of each one is identified in a common fashion:</t>

<figure><artwork><![CDATA[
    enum {
        reserved(0),
        x509_entry_v2(1), precert_entry_v2(2),
        x509_sct_v2(3), precert_sct_v2(4),
        signed_tree_head_v2(5), consistency_proof_v2(6),
        inclusion_proof_v2(7),
        (65535)
    } VersionedTransType;

    struct {
        VersionedTransType versioned_type;
        select (versioned_type) {
            case x509_entry_v2: TimestampedCertificateEntryDataV2;
            case precert_entry_v2: TimestampedCertificateEntryDataV2;
            case x509_sct_v2: SignedCertificateTimestampDataV2;
            case precert_sct_v2: SignedCertificateTimestampDataV2;
            case signed_tree_head_v2: SignedTreeHeadDataV2;
            case consistency_proof_v2: ConsistencyProofDataV2;
            case inclusion_proof_v2: InclusionProofDataV2;
        } data;
    } TransItem;
]]></artwork></figure>

<t><spanx style="verb">versioned_type</spanx> is a value from the IANA registry in <xref target="versioned_trans_types"/>
that identifies the type of the encapsulated data structure and the earliest
version of this protocol to which it conforms. This document is v2.</t>

<t><spanx style="verb">data</spanx> is the encapsulated data structure. The various structures named with the
<spanx style="verb">DataV2</spanx> suffix are defined in later sections of this document.</t>

<t>Note that <spanx style="verb">VersionedTransType</spanx> combines the v1 <xref target="RFC6962"></xref> type enumerations
<spanx style="verb">Version</spanx>, <spanx style="verb">LogEntryType</spanx>, <spanx style="verb">SignatureType</spanx> and <spanx style="verb">MerkleLeafType</spanx>. Note also that
v1 did not define <spanx style="verb">TransItem</spanx>, but this document provides guidelines (see
<xref target="v1_coexistence"/>) on how v2 implementations can co-exist with v1
implementations.</t>

<t>Future versions of this protocol may reuse <spanx style="verb">VersionedTransType</spanx> values defined
in this document as long as the corresponding data structures are not modified,
and may add new <spanx style="verb">VersionedTransType</spanx> values for new or modified data structures.</t>

</section>
<section anchor="log-artifact-extensions" title="Log Artifact Extensions">

<figure><artwork><![CDATA[
    enum {
        reserved(65535)
    } ExtensionType;

    struct {
        ExtensionType extension_type;
        opaque extension_data<0..2^16-1>;
    } Extension;
]]></artwork></figure>

<t>The <spanx style="verb">Extension</spanx> structure provides a generic extensibility for log artifacts,
including Signed Certificate Timestamps (<xref target="sct"/>) and Signed Tree Heads
(<xref target="sth"/>). The interpretation of the <spanx style="verb">extension_data</spanx> field is determined solely
by the value of the <spanx style="verb">extension_type</spanx> field.</t>

<t>This document does not define any extensions, but it does establish a registry
for future <spanx style="verb">ExtensionType</spanx> values (see <xref target="log_artifact_extension_registry"/>).
Each document that registers a new <spanx style="verb">ExtensionType</spanx> must specify the context in
which it may be used (e.g., SCT, STH, or both) and describe how to interpret the
corresponding <spanx style="verb">extension_data</spanx>.</t>

</section>
<section anchor="tree_leaves" title="Merkle Tree Leaves">

<t>The leaves of a log's Merkle Tree correspond to the log's entries (see
<xref target="log_entries"/>). Each leaf is the leaf hash (<xref target="mht"/>) of a <spanx style="verb">TransItem</spanx>
structure of type <spanx style="verb">x509_entry_v2</spanx> or <spanx style="verb">precert_entry_v2</spanx>, which encapsulates a
<spanx style="verb">TimestampedCertificateEntryDataV2</spanx> structure. Note that leaf hashes are
calculated as HASH(0x00 || TransItem), where the hash algorithm is one of the
log's parameters.</t>

<figure><artwork><![CDATA[
    opaque TBSCertificate<1..2^24-1>;

    struct {
        uint64 timestamp;
        opaque issuer_key_hash<32..2^8-1>;
        TBSCertificate tbs_certificate;
        Extension sct_extensions<0..2^16-1>;
    } TimestampedCertificateEntryDataV2;
]]></artwork></figure>

<t><spanx style="verb">timestamp</spanx> is the date and time at which the certificate or precertificate was
accepted by the log, in the form of a 64-bit unsigned number of milliseconds
elapsed since the Unix Epoch (1 January 1970 00:00:00 UTC - see <xref target="UNIXTIME"></xref>),
ignoring leap seconds, in network byte order. Note that the leaves of a log's
Merkle Tree are not required to be in strict chronological order.</t>

<t><spanx style="verb">issuer_key_hash</spanx> is the HASH of the public key of the CA that issued the
certificate or precertificate, calculated over the DER encoding of the key
represented as SubjectPublicKeyInfo <xref target="RFC5280"></xref>. This is needed to bind the CA to
the certificate or precertificate, making it impossible for the corresponding
SCT to be valid for any other certificate or precertificate whose TBSCertificate
matches <spanx style="verb">tbs_certificate</spanx>. The length of the <spanx style="verb">issuer_key_hash</spanx> MUST match
HASH_SIZE.</t>

<t><spanx style="verb">tbs_certificate</spanx> is the DER encoded TBSCertificate from the submission. (Note
that a precertificate's TBSCertificate can be reconstructed from the
corresponding certificate as described in <xref target="reconstructing_tbscertificate"/>).</t>

<t><spanx style="verb">sct_extensions</spanx> is byte-for-byte identical to the SCT extensions of the
corresponding SCT.</t>

<t>The type of the <spanx style="verb">TransItem</spanx> corresponds to the value of the <spanx style="verb">type</spanx> parameter
supplied in the <xref target="submit-entry"/> call.</t>

</section>
<section anchor="sct" title="Signed Certificate Timestamp (SCT)">

<t>An SCT is a <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">x509_sct_v2</spanx> or <spanx style="verb">precert_sct_v2</spanx>,
which encapsulates a <spanx style="verb">SignedCertificateTimestampDataV2</spanx> structure:</t>

<figure><artwork><![CDATA[
    struct {
        LogID log_id;
        uint64 timestamp;
        Extension sct_extensions<0..2^16-1>;
        opaque signature<1..2^16-1>;
    } SignedCertificateTimestampDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx> is this log's unique ID, encoded in an opaque vector as described in
<xref target="log_id"/>.</t>

<t><spanx style="verb">timestamp</spanx> is equal to the timestamp from the corresponding
<spanx style="verb">TimestampedCertificateEntryDataV2</spanx> structure.</t>

<t><spanx style="verb">sct_extensions</spanx> is a vector of 0 or more SCT extensions. This vector MUST NOT
include more than one extension with the same <spanx style="verb">extension_type</spanx>. The
extensions in the vector MUST be ordered by the value of the
<spanx style="verb">extension_type</spanx> field, smallest value first.
All SCT extensions are similar to non-critical X.509v3 extensions (i.e.,
the <spanx style="verb">mustUnderstand</spanx> field is not set), and a recipient SHOULD ignore any
extension it does not understand.
Furthermore, an implementation MAY choose to ignore any extension(s) that it
does understand.</t>

<t><spanx style="verb">signature</spanx> is computed over a <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">x509_entry_v2</spanx>
or <spanx style="verb">precert_entry_v2</spanx> (see <xref target="tree_leaves"/>) using the signature algorithm
declared in the log's parameters (see <xref target="log_parameters"/>).</t>

</section>
<section anchor="tree_head" title="Merkle Tree Head">

<t>The log stores information about its Merkle Tree in a <spanx style="verb">TreeHeadDataV2</spanx>:</t>

<figure><artwork><![CDATA[
    opaque NodeHash<32..2^8-1>;

    struct {
        uint64 timestamp;
        uint64 tree_size;
        NodeHash root_hash;
        Extension sth_extensions<0..2^16-1>;
    } TreeHeadDataV2;
]]></artwork></figure>

<t>The length of NodeHash MUST match HASH_SIZE of the log.</t>

<t><spanx style="verb">timestamp</spanx> is the current date and time, using the format defined in
{tree_leaves}.</t>

<t><spanx style="verb">tree_size</spanx> is the number of entries currently in the log's Merkle Tree.</t>

<t><spanx style="verb">root_hash</spanx> is the root of the Merkle Hash Tree.</t>

<t><spanx style="verb">sth_extensions</spanx> is a vector of 0 or more STH extensions. This vector MUST NOT
include more than one extension with the same <spanx style="verb">extension_type</spanx>. The
extensions in the vector MUST be ordered by the value of the
<spanx style="verb">extension_type</spanx> field, smallest value first. If an implementation sees an
extension that it does not understand, it SHOULD ignore that extension.
Furthermore, an implementation MAY choose to ignore any extension(s) that it
does understand.</t>

</section>
<section anchor="sth" title="Signed Tree Head (STH)">

<t>Periodically each log SHOULD sign its current tree head information (see
<xref target="tree_head"/>) to produce an STH. When a client requests a log's latest STH (see
<xref target="get-sth"/>), the log MUST return an STH that is no older than the log's MMD.
However, since STHs could be used to mark individual clients (by producing a new
STH for each query), a log MUST NOT produce STHs more frequently than its
parameters declare (see <xref target="log_parameters"/>). In general, there is no need to
produce a new STH unless there are new entries in the log; however, in the event
that a log does not accept any submissions during an MMD period, the log MUST
sign the same Merkle Tree Hash with a fresh timestamp.</t>

<t>An STH is a <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">signed_tree_head_v2</spanx>, which
encapsulates a <spanx style="verb">SignedTreeHeadDataV2</spanx> structure:</t>

<figure><artwork><![CDATA[
    struct {
        LogID log_id;
        TreeHeadDataV2 tree_head;
        opaque signature<0..2^16-1>;
    } SignedTreeHeadDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx> is this log's unique ID, encoded in an opaque vector as described in
<xref target="log_id"/>.</t>

<t>The <spanx style="verb">timestamp</spanx> in <spanx style="verb">tree_head</spanx> MUST be at least as recent as the most recent SCT
timestamp in the tree. Each subsequent timestamp MUST be more recent than the
timestamp of the previous update.</t>

<t><spanx style="verb">tree_head</spanx> contains the latest tree head information (see <xref target="tree_head"/>).</t>

<t><spanx style="verb">signature</spanx> is computed over the <spanx style="verb">tree_head</spanx> field using the signature algorithm
declared in the log's parameters (see <xref target="log_parameters"/>).</t>

</section>
<section anchor="merkle-consistency-proofs" title="Merkle Consistency Proofs">

<t>To prepare a Merkle Consistency Proof for distribution to clients, the log
produces a <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">consistency_proof_v2</spanx>, which
encapsulates a <spanx style="verb">ConsistencyProofDataV2</spanx> structure:</t>

<figure><artwork><![CDATA[
    struct {
        LogID log_id;
        uint64 tree_size_1;
        uint64 tree_size_2;
        NodeHash consistency_path<0..2^16-1>;
    } ConsistencyProofDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx> is this log's unique ID, encoded in an opaque vector as described in
<xref target="log_id"/>.</t>

<t><spanx style="verb">tree_size_1</spanx> is the size of the older tree.</t>

<t><spanx style="verb">tree_size_2</spanx> is the size of the newer tree.</t>

<t><spanx style="verb">consistency_path</spanx> is a vector of Merkle Tree nodes proving the consistency of
two STHs as described in {consistency}.</t>

</section>
<section anchor="merkle-inclusion-proofs" title="Merkle Inclusion Proofs">

<t>To prepare a Merkle Inclusion Proof for distribution to clients, the log
produces a <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">inclusion_proof_v2</spanx>, which
encapsulates an <spanx style="verb">InclusionProofDataV2</spanx> structure:</t>

<figure><artwork><![CDATA[
    struct {
        LogID log_id;
        uint64 tree_size;
        uint64 leaf_index;
        NodeHash inclusion_path<0..2^16-1>;
    } InclusionProofDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx> is this log's unique ID, encoded in an opaque vector as described in
<xref target="log_id"/>.</t>

<t><spanx style="verb">tree_size</spanx> is the size of the tree on which this inclusion proof is based.</t>

<t><spanx style="verb">leaf_index</spanx> is the 0-based index of the log entry corresponding to this
inclusion proof.</t>

<t><spanx style="verb">inclusion_path</spanx> is a vector of Merkle Tree nodes proving the inclusion of the
chosen certificate or precertificate as described in {merkle_inclusion_proof}.</t>

</section>
<section anchor="log_shutdown" title="Shutting down a log">

<t>Log operators may decide to shut down a log for various reasons, such as
deprecation of the signature algorithm. If there are entries in the log for
certificates that have not yet expired, simply making TLS clients stop
recognizing that log will have the effect of invalidating SCTs from that log.
In order to avoid that, the following actions SHOULD be taken:</t>

<t><list style="symbols">
  <t>Make it known to clients and monitors that the log will be frozen.
This is not part of the API, so it will have to be done via a relevant
out-of-band mechanism.</t>
  <t>Stop accepting new submissions (the error code "shutdown" should be returned
for such requests).</t>
  <t>Once MMD from the last accepted submission has passed and all pending
submissions are incorporated, issue a final STH and publish it as one of the
log's parameters. Having an STH with a timestamp that is after the MMD has
passed from the last SCT issuance allows clients to audit this log regularly
without special handling for the final STH. At this point the log's private
key is no longer needed and can be destroyed.</t>
  <t>Keep the log running until the certificates in all of its entries have expired
or exist in other logs (this can be determined by scanning other logs or
connecting to domains mentioned in the certificates and inspecting the SCTs
served).</t>
</list></t>

</section>
</section>
<section anchor="client_messages" title="Log Client Messages">

<t>Messages are sent as HTTPS GET or POST requests. Parameters for POSTs and all
responses are encoded as JavaScript Object Notation (JSON) objects <xref target="RFC8259"></xref>.
Parameters for GETs are encoded as order-independent key/value URL parameters,
using the "application/x-www-form-urlencoded" format described in the "HTML 4.01
Specification" <xref target="HTML401"></xref>. Binary data is base64 encoded according to
section 4 of <xref target="RFC4648"></xref> as specified
in the individual messages.</t>

<t>Clients are configured with a log's base URL, which is one of the log's
parameters. Clients construct URLs for requests by appending suffixes to this
base URL. This structure places some degree of restriction on how log operators
can deploy these services, as noted in <xref target="RFC8820"></xref>. However, operational
experience with version 1 of this protocol has not indicated that these
restrictions are a problem in practice.</t>

<t>Note that JSON objects and URL parameters may contain fields not specified here,
to allow for experimentation. Any fields that are not understood SHOULD
be ignored.</t>

<t>In practice, log servers may include multiple front-end machines. Since it is
impractical to keep these machines in perfect sync, errors may occur that are
caused by skew between the machines. Where such errors are possible, the
front-end will return additional information (as specified below) making it
possible for clients to make progress, if progress is possible. Front-ends MUST
only serve data that is free of gaps (that is, for example, no front-end will
respond with an STH unless it is also able to prove consistency from all log
entries logged within that STH).</t>

<t>For example, when a consistency proof between two STHs is requested, the
front-end reached may not yet be aware of one or both STHs. In the case where it
is unaware of both, it will return the latest STH it is aware of. Where it is
aware of the first but not the second, it will return the latest STH it is aware
of and a consistency proof from the first STH to the returned STH. The case
where it knows the second but not the first should not arise (see the "no gaps"
requirement above).</t>

<t>If the log is unable to process a client's request, it MUST return an HTTP
response code of 4xx/5xx (see <xref target="RFC7231"></xref>), and, in place of the responses
outlined in the subsections below, the body SHOULD be a JSON Problem Details
Object (see <xref target="RFC7807"></xref> Section 3), containing:</t>

<t><list style="hanging">
  <t hangText="type:">
  A URN reference identifying the problem. To facilitate automated response
to errors, this document defines a set of standard tokens for use in the
<spanx style="verb">type</spanx> field, within the URN namespace of: "urn:ietf:params:trans:error:".</t>
  <t hangText="detail:">
  A human-readable string describing the error that prevented the log from
processing the request, ideally with sufficient detail to enable the error to
be rectified.</t>
</list></t>

<t>e.g., In response to a request of
<spanx style="verb">&lt;Base URL&gt;/ct/v2/get-entries?start=100&amp;end=99</spanx>, the log would return a
<spanx style="verb">400 Bad Request</spanx> response code with a body similar to the following:</t>

<figure><artwork><![CDATA[
    {
        "type": "urn:ietf:params:trans:error:endBeforeStart",
        "detail": "'start' cannot be greater than 'end'"
    }
]]></artwork></figure>

<t>Most error types are specific to the type of request and are defined in the
respective subsections below. The one exception is the "malformed" error type,
which indicates that the log server could not parse the client's request because
it did not comply with this document:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>malformed</c>
      <c>The request could not be parsed.</c>
</texttable>

<t>Clients SHOULD treat <spanx style="verb">500 Internal Server Error</spanx> and <spanx style="verb">503 Service Unavailable</spanx>
responses as transient failures and MAY retry the same request without
modification at a later date. Note that as per <xref target="RFC7231"></xref>, in the case of a 503
response the log MAY include a <spanx style="verb">Retry-After:</spanx> header in order to request a
minimum time for the client to wait before retrying the request.
In the absence of this header, this document does not specify a minimum.</t>

<t>Clients SHOULD treat any 4xx error as a problem with the request and not
attempt to resubmit without some modification to the request. The full
status code MAY provide additional details.</t>

<t>This document deliberately does not provide more specific guidance
on the use of HTTP status codes.</t>

<section anchor="submit-entry" title="Submit Entry to Log">

<t>POST &lt;Base URL&gt;/ct/v2/submit-entry</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="submission:">
        The base64 encoded certificate or precertificate.</t>
        <t hangText="type:">
        The <spanx style="verb">VersionedTransType</spanx> integer value that indicates the type of the
<spanx style="verb">submission</spanx>: 1 for <spanx style="verb">x509_entry_v2</spanx>, or 2 for <spanx style="verb">precert_entry_v2</spanx>.</t>
        <t hangText="chain:">
        An array of zero or more JSON strings,
each of which is a base64 encoded CA certificate. The first element
is the certifier of the <spanx style="verb">submission</spanx>; the second certifies the first; etc.
The last element of <spanx style="verb">chain</spanx> (or, if <spanx style="verb">chain</spanx> is an empty array, the
<spanx style="verb">submission</spanx>) is certified by an accepted trust anchor.</t>
      </list>
  </t>
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="sct:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">x509_sct_v2</spanx> or <spanx style="verb">precert_sct_v2</spanx>,
signed by this log, that corresponds to the <spanx style="verb">submission</spanx>.</t>
      </list>

If the submitted entry is immediately appended to (or already exists in) this
log's tree, then the log SHOULD also output:
      <list style="hanging">
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">signed_tree_head_v2</spanx>, signed by this
log.</t>
        <t hangText="inclusion:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">inclusion_proof_v2</spanx> whose
<spanx style="verb">inclusion_path</spanx> array of Merkle Tree nodes proves the inclusion of the
<spanx style="verb">submission</spanx> in the returned <spanx style="verb">sth</spanx>.</t>
      </list>
  </t>
</list></t>

<t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>badSubmission</c>
      <c><spanx style="verb">submission</spanx> is neither a valid certificate nor a valid precertificate.</c>
      <c>badType</c>
      <c><spanx style="verb">type</spanx> is neither 1 nor 2.</c>
      <c>badChain</c>
      <c>The first element of <spanx style="verb">chain</spanx> is not the certifier of the <spanx style="verb">submission</spanx>, or the second element does not certify the first, etc.</c>
      <c>badCertificate</c>
      <c>One or more certificates in the <spanx style="verb">chain</spanx> are not valid (e.g., not properly encoded).</c>
      <c>unknownAnchor</c>
      <c>The last element of <spanx style="verb">chain</spanx> (or, if <spanx style="verb">chain</spanx> is an empty array, the <spanx style="verb">submission</spanx>) both is not, and is not certified by, an accepted trust anchor.</c>
      <c>shutdown</c>
      <c>The log is no longer accepting submissions.</c>
</texttable>

<t>If the version of <spanx style="verb">sct</spanx> is not v2, then a v2 client may be unable to verify the
signature. It MUST NOT construe this as an error. This is to avoid forcing an
upgrade of compliant v2 clients that do not use the returned SCTs.</t>

<t>If a log detects bad encoding in a chain that otherwise verifies correctly then
the log MUST either log the certificate or return the "bad certificate" error.
If the certificate is logged, an SCT MUST be issued. Logging the certificate is
useful, because monitors (<xref target="monitor"/>) can then detect these encoding errors,
which may be accepted by some TLS clients.</t>

<t>If <spanx style="verb">submission</spanx> is an accepted trust anchor whose certifier is neither an
accepted trust anchor nor the first element of <spanx style="verb">chain</spanx>, then the log MUST return
the "unknown anchor" error. A log is not able to generate an SCT for a
submission if it
does not have access to the issuer's public key.</t>

<t>If the returned <spanx style="verb">sct</spanx> is intended to be provided to TLS clients, then <spanx style="verb">sth</spanx> and
<spanx style="verb">inclusion</spanx> (if returned) SHOULD also be provided to TLS clients. For
example, if
<spanx style="verb">type</spanx> was 2 (indicating <spanx style="verb">precert_sct_v2</spanx>) then all three <spanx style="verb">TransItem</spanx>s could be
embedded in the certificate.</t>

</section>
<section anchor="get-sth" title="Retrieve Latest Signed Tree Head">

<t>GET &lt;Base URL&gt;/ct/v2/get-sth</t>

<t>No inputs.</t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">signed_tree_head_v2</spanx>, signed by this
log, that is no older than the log's MMD.</t>
      </list>
  </t>
</list></t>

</section>
<section anchor="get-sth-consistency" title="Retrieve Merkle Consistency Proof between Two Signed Tree Heads">

<t>GET &lt;Base URL&gt;/ct/v2/get-sth-consistency</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="first:">
        The tree_size of the older tree, in decimal.</t>
        <t hangText="second:">
        The tree_size of the newer tree, in decimal (optional).</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
  <t>Both tree sizes must be from existing v2 STHs. However, because of skew, the
receiving front-end may not know one or both of the existing STHs. If both are
known, then only the <spanx style="verb">consistency</spanx> output is returned. If the first is known
but the second is not (or has been omitted), then the latest known STH is
returned, along with a consistency proof between the first STH and the latest.
If neither are known, then the latest known STH is returned without a
consistency proof.</t>
</list></t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="consistency:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">consistency_proof_v2</spanx>, whose
<spanx style="verb">tree_size_1</spanx> MUST match the <spanx style="verb">first</spanx> input. If the <spanx style="verb">sth</spanx> output is omitted,
then <spanx style="verb">tree_size_2</spanx> MUST match the <spanx style="verb">second</spanx> input.
If <spanx style="verb">first</spanx> and <spanx style="verb">second</spanx> are equal and correspond to a known STH, the
returned consistency proof MUST be empty (a <spanx style="verb">consistency_path</spanx> array with
zero elements).</t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">signed_tree_head_v2</spanx>, signed by this
log.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
  <t>Note that no signature is required for the <spanx style="verb">consistency</spanx> output as it is used
to verify the consistency between two STHs, which are signed.</t>
</list></t>

<t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>firstUnknown</c>
      <c><spanx style="verb">first</spanx> is before the latest known STH but is not from an existing STH.</c>
      <c>secondUnknown</c>
      <c><spanx style="verb">second</spanx> is before the latest known STH but is not from an existing STH.</c>
      <c>secondBeforeFirst</c>
      <c><spanx style="verb">second</spanx> is smaller than <spanx style="verb">first</spanx>.</c>
</texttable>

<t>See <xref target="verify_consistency"/> for an outline of how to use the <spanx style="verb">consistency</spanx>
output.</t>

</section>
<section anchor="get-proof-by-hash" title="Retrieve Merkle Inclusion Proof from Log by Leaf Hash">

<t>GET &lt;Base URL&gt;/ct/v2/get-proof-by-hash</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="hash:">
        A base64 encoded v2 leaf hash.</t>
        <t hangText="tree_size:">
        The tree_size of the tree on which to base the proof, in decimal.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
  <t>The <spanx style="verb">hash</spanx> must be calculated as defined in <xref target="tree_leaves"/>. A v2 STH must
exist for the <spanx style="verb">tree_size</spanx>.  Because of skew, the front-end may not know
the requested tree head. In that case, it will return the latest STH it knows, along
with an inclusion proof to that STH. If the front-end knows the requested tree head
then only <spanx style="verb">inclusion</spanx> is returned.</t>
</list></t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="inclusion:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">inclusion_proof_v2</spanx> whose
<spanx style="verb">inclusion_path</spanx> array of Merkle Tree nodes proves the inclusion of the
certificate (as specified by the <spanx style="verb">hash</spanx> parameter) in the selected STH.</t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">signed_tree_head_v2</spanx>, signed by this
log.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
  <t>Note that no signature is required for the <spanx style="verb">inclusion</spanx> output as it is used to
verify inclusion in the selected STH, which is signed.</t>
</list></t>

<t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>hashUnknown</c>
      <c><spanx style="verb">hash</spanx> is not the hash of a known leaf (may be caused by skew or by a known certificate not yet merged).</c>
      <c>treeSizeUnknown</c>
      <c><spanx style="verb">hash</spanx> is before the latest known STH but is not from an existing STH.</c>
</texttable>

<t>See <xref target="verify_inclusion"/> for an outline of how to use the <spanx style="verb">inclusion</spanx> output.</t>

</section>
<section anchor="get-all-by-hash" title="Retrieve Merkle Inclusion Proof, Signed Tree Head and Consistency Proof by Leaf Hash">

<t>GET &lt;Base URL&gt;/ct/v2/get-all-by-hash</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="hash:">
        A base64 encoded v2 leaf hash.</t>
        <t hangText="tree_size:">
        The tree_size of the tree on which to base the proofs, in decimal.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
  <t>The <spanx style="verb">hash</spanx> must be calculated as defined in <xref target="tree_leaves"/>. A v2 STH must
exist for the <spanx style="verb">tree_size</spanx>.</t>
</list></t>

<t>Because of skew, the front-end may not know the requested tree head or the requested
hash, which leads to a number of cases:</t>

<texttable>
      <ttcol align='left'>Case</ttcol>
      <ttcol align='left'>Response</ttcol>
      <c>latest STH &lt; requested tree head</c>
      <c>Return latest STH</c>
      <c>latest STH &gt; requested tree head</c>
      <c>Return latest STH and a consistency proof between it and the requested tree head (see <xref target="get-sth-consistency"/>)</c>
      <c>index of requested hash &lt; latest STH</c>
      <c>Return <spanx style="verb">inclusion</spanx></c>
</texttable>

<t>Note that more than one case can be true, in which case the returned data is
their union. It is also possible for none to be true, in which case the
front-end MUST return an empty response.</t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="inclusion:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">inclusion_proof_v2</spanx> whose
<spanx style="verb">inclusion_path</spanx> array of Merkle Tree nodes proves the inclusion of the
certificate (as specified by the <spanx style="verb">hash</spanx> parameter) in the selected STH.</t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">signed_tree_head_v2</spanx>, signed by this
log.</t>
        <t hangText="consistency:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">consistency_proof_v2</spanx> that proves the
consistency of the requested tree head and the returned STH.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
  <t>Note that no signature is required for the <spanx style="verb">inclusion</spanx> or <spanx style="verb">consistency</spanx>
outputs as they are used to verify inclusion in and consistency of STHs, which
are signed.</t>
</list></t>

<t>Errors are the same as in <xref target="get-proof-by-hash"/>.</t>

<t>See <xref target="verify_inclusion"/> for an outline of how to use the <spanx style="verb">inclusion</spanx> output,
and see <xref target="verify_consistency"/> for an outline of how to use the <spanx style="verb">consistency</spanx>
output.</t>

</section>
<section anchor="get-entries" title="Retrieve Entries and STH from Log">

<t>GET &lt;Base URL&gt;/ct/v2/get-entries</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="start:">
        0-based index of first entry to retrieve, in decimal.</t>
        <t hangText="end:">
        0-based index of last entry to retrieve, in decimal.</t>
      </list>
  </t>
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="entries:">
        An array of objects, each consisting of

            <list style="hanging">
              <t hangText="log_entry:">
              The base64 encoded <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">x509_entry_v2</spanx> or
<spanx style="verb">precert_entry_v2</spanx> (see <xref target="log_entries"/>).</t>
              <t hangText="submitted_entry:">
              JSON object equivalent to inputs that were submitted to
<spanx style="verb">submit-entry</spanx>, with the addition of the trust anchor to the <spanx style="verb">chain</spanx>
field if the submission did not include it.</t>
              <t hangText="sct:">
              The base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">x509_sct_v2</spanx> or <spanx style="verb">precert_sct_v2</spanx>
corresponding to this log entry.</t>
            </list>
        </t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> of type <spanx style="verb">signed_tree_head_v2</spanx>, signed by this
log.</t>
      </list>
  </t>
</list></t>

<t>Note that this message is not signed -- the <spanx style="verb">entries</spanx> data can be verified by
constructing the Merkle Tree Hash corresponding to a retrieved STH. All leaves
MUST be v2. However, a compliant v2 client MUST NOT construe an unrecognized
TransItem type as an error. This means it may be unable to parse some entries,
but note that each client can inspect the entries it does recognize as well as
verify the integrity of the data by treating unrecognized leaves as opaque input
to the tree.</t>

<t>The <spanx style="verb">start</spanx> and <spanx style="verb">end</spanx> parameters SHOULD be within the range 0 &lt;= x &lt; <spanx style="verb">tree_size</spanx>
as returned by <spanx style="verb">get-sth</spanx> in <xref target="get-sth"/>.</t>

<t>The <spanx style="verb">start</spanx> parameter MUST be less than or equal to the <spanx style="verb">end</spanx> parameter.</t>

<t>Each <spanx style="verb">submitted_entry</spanx> output parameter MUST include the trust anchor that the
log used to verify the <spanx style="verb">submission</spanx>, even if that trust anchor was not provided
to <spanx style="verb">submit-entry</spanx> (see <xref target="submit-entry"/>). If the <spanx style="verb">submission</spanx> does not certify
itself, then the first element of <spanx style="verb">chain</spanx> MUST be present and MUST certify the
<spanx style="verb">submission</spanx>.</t>

<t>Log servers MUST honor requests where 0 &lt;= <spanx style="verb">start</spanx> &lt; <spanx style="verb">tree_size</spanx> and <spanx style="verb">end</spanx> &gt;=
<spanx style="verb">tree_size</spanx> by returning a partial response covering only the valid entries in
the specified range. <spanx style="verb">end</spanx> &gt;= <spanx style="verb">tree_size</spanx> could be caused by skew. Note that the
following restriction may also apply:</t>

<t>Logs MAY restrict the number of entries that can be retrieved per <spanx style="verb">get-entries</spanx>
request. If a client requests more than the permitted number of entries, the log
SHALL return the maximum number of entries permissible. These entries SHALL be
sequential beginning with the entry specified by <spanx style="verb">start</spanx>.
Note that limit on the number of entries is not immutable and therefore
the restriction may be changed or lifted at any time and is not listed
with the other Log Parameters in <xref target="log_parameters"/>.</t>

<t>Because of skew, it is possible the log server will not have any entries between
<spanx style="verb">start</spanx> and <spanx style="verb">end</spanx>. In this case it MUST return an empty <spanx style="verb">entries</spanx> array.</t>

<t>In any case, the log server MUST return the latest STH it knows about.</t>

<t>See <xref target="verify_hash"/> for an outline of how to use a complete list of <spanx style="verb">log_entry</spanx>
entries to verify the <spanx style="verb">root_hash</spanx>.</t>

<t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>startUnknown</c>
      <c><spanx style="verb">start</spanx> is greater than the number of entries in the Merkle tree.</c>
      <c>endBeforeStart</c>
      <c><spanx style="verb">start</spanx> cannot be greater than <spanx style="verb">end</spanx>.</c>
</texttable>

</section>
<section anchor="get-anchors" title="Retrieve Accepted Trust Anchors">

<t>GET &lt;Base URL&gt;/ct/v2/get-anchors</t>

<t>No inputs.</t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="certificates:">
        An array of JSON strings, each of which
is a base64 encoded CA certificate that is acceptable to the log.
max_chain_length:</t>
        <t>If the server has chosen to limit the length of chains it accepts, this is
the maximum number of certificates in the chain, in decimal. If there is no
limit, this is omitted.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
  <t>This data is not signed and the protocol depends on the security guarantees
of TLS to ensure correctness.</t>
</list></t>

</section>
</section>
<section anchor="tls_servers" title="TLS Servers">

<t>CT-using TLS servers MUST use at least one of the mechanisms described below
to present one or more SCTs from one or more logs to each TLS client during full
TLS handshakes, where each SCT corresponds to the server certificate.
(Of course, a server can only send a TLS extension if the client has
specified it first.)
Servers
SHOULD also present corresponding inclusion proofs and STHs.</t>

<t>A server can provide SCTs using
a TLS 1.3 extension (Section 4.2 of <xref target="RFC8446"></xref>) with type <spanx style="verb">transparency_info</spanx>
(see <xref target="tls_transinfo_extension"/>). This mechanism allows TLS servers to
participate in CT without the cooperation of CAs, unlike the other two
mechanisms. It also allows SCTs and inclusion proofs to be updated on the fly.</t>

<t>The server may also use an Online Certificate Status Protocol (OCSP)
<xref target="RFC6960"></xref> response extension (see <xref target="ocsp_transinfo_extension"/>),
providing the OCSP response as part of the TLS handshake. Providing
a response during a TLS handshake is popularly known as "OCSP stapling."
For TLS
1.3, the information is encoded as an extension in the <spanx style="verb">status_request</spanx>
extension data; see Section 4.4.2.1 of <xref target="RFC8446"></xref>. For TLS 1.2 (<xref target="RFC5246"></xref>), the information
is encoded as an extension in the <spanx style="verb">CertificateStatus</spanx> message; see Section 8
of <xref target="RFC6066"></xref>.  Using stapling also
allows SCTs and inclusion proofs to be updated on the fly.</t>

<t>CT information can also be encoded as an extension in the X.509v3 certificate
(see <xref target="cert_transinfo_extension"/>). This
mechanism allows the use of unmodified TLS servers, but the SCTs and inclusion
proofs cannot be updated on the fly. Since the logs from which the SCTs and
inclusion proofs originated won't necessarily be accepted by TLS clients for
the full lifetime of the certificate, there is a risk that TLS clients may
subsequently consider the certificate to be non-compliant and in need of
re-issuance or the use of one of the other two methods for delivering CT
information.</t>

<section anchor="tls-client-authentication" title="TLS Client Authentication">

<t>This specification includes no description of how a TLS server can
use CT for TLS client certificates.
While this may be useful, it is not documented here for the following
reasons:</t>

<t><list style="symbols">
  <t>The greater security exposure is for clients to end up interacting with an
illegitimate server.</t>
  <t>In general, TLS client certificates are not expected to be submitted to
CT logs, particularly those intended for general public use.</t>
</list></t>

<t>A future version could include such information.</t>

</section>
<section anchor="multiple-scts" title="Multiple SCTs">

<t>CT-using TLS servers SHOULD send SCTs from multiple logs, because:</t>

<t><list style="symbols">
  <t>One or more logs may not have become acceptable to all CT-using TLS clients.
Note that client discovery, trust, and distrust of logs is expected to
be handled out-of-band and is out of scope of this document.</t>
  <t>If a CA and a log collude, it is possible to temporarily hide misissuance from
clients. When a TLS client requires SCTs from multiple logs to be provided, it
is more difficult to mount this attack.</t>
  <t>If a log misbehaves or suffers a key compromise, a consequence may be that
clients cease to trust it. Since the time an SCT may be in use can be
considerable (several years is common in current practice when embedded in a
certificate), including SCTs from multiple logs reduces the probability of the
certificate being rejected by TLS clients.</t>
  <t>TLS clients may have policies related to the above risks requiring TLS servers
to present multiple SCTs. For example, at the time of writing, Chromium
<xref target="Chromium.Log.Policy"></xref> requires multiple SCTs to be presented with EV
certificates in order for the EV indicator to be shown.</t>
</list></t>

<t>To select the logs from which to obtain SCTs, a TLS server can, for example,
examine the set of logs popular TLS clients accept and recognize.</t>

</section>
<section anchor="transitemlist-structure" title="TransItemList Structure">

<t>Multiple SCTs, inclusion proofs, and indeed <spanx style="verb">TransItem</spanx> structures of any type,
are combined into a list as follows:</t>

<figure><artwork><![CDATA[
      opaque SerializedTransItem<1..2^16-1>;

      struct {
          SerializedTransItem trans_item_list<1..2^16-1>;
      } TransItemList;
]]></artwork></figure>

<t>Here, <spanx style="verb">SerializedTransItem</spanx> is an opaque byte string that contains the
serialized <spanx style="verb">TransItem</spanx> structure. This encoding ensures that TLS clients can
decode each <spanx style="verb">TransItem</spanx> individually (so, for example, if there is a version
upgrade, out-of-date clients can still parse old <spanx style="verb">TransItem</spanx> structures while
skipping over new <spanx style="verb">TransItem</spanx> structures whose versions they don't understand).</t>

</section>
<section anchor="presenting_transitems" title="Presenting SCTs, inclusions proofs and STHs">

<t>In each <spanx style="verb">TransItemList</spanx> that is sent during a TLS handshake, the TLS
server MUST include a <spanx style="verb">TransItem</spanx> structure of type <spanx style="verb">x509_sct_v2</spanx> or
<spanx style="verb">precert_sct_v2</spanx>.</t>

<t>Presenting inclusion proofs and STHs in the TLS handshake helps to protect the
client's privacy (see <xref target="fetching_inclusion_proofs"/>) and reduces load on log
servers. Therefore, if the TLS server can obtain them, it SHOULD also include
<spanx style="verb">TransItem</spanx>s of type <spanx style="verb">inclusion_proof_v2</spanx> and <spanx style="verb">signed_tree_head_v2</spanx> in the
<spanx style="verb">TransItemList</spanx>.</t>

</section>
<section anchor="tls_transinfo_extension" title="transparency_info TLS Extension">

<t>Provided that a TLS client includes the <spanx style="verb">transparency_info</spanx> extension type in
the ClientHello and the TLS server supports the <spanx style="verb">transparency_info</spanx> extension:</t>

<t><list style="symbols">
  <t>The TLS server MUST verify that the received <spanx style="verb">extension_data</spanx> is empty.</t>
  <t>The TLS server MUST construct a <spanx style="verb">TransItemList</spanx> of relevant <spanx style="verb">TransItem</spanx>s (see
<xref target="presenting_transitems"/>), which SHOULD omit any <spanx style="verb">TransItem</spanx>s that are
already embedded in the server certificate or the stapled OCSP response (see
<xref target="x509v3_transinfo_extension"/>). If the constructed <spanx style="verb">TransItemList</spanx> is not
empty, then the TLS server MUST include the <spanx style="verb">transparency_info</spanx> extension with
the <spanx style="verb">extension_data</spanx> set to this <spanx style="verb">TransItemList</spanx>. If the list is empty
then the server SHOULD omit the <spanx style="verb">extension_data</spanx> element, but MAY send
it with an empty array.</t>
</list></t>

<t>TLS servers MUST only include this extension in the following messages:</t>

<t><list style="symbols">
  <t>the ServerHello message (for TLS 1.2 or earlier).</t>
  <t>the Certificate or CertificateRequest message (for TLS 1.3).</t>
</list></t>

<t>TLS servers MUST NOT process or include this extension when a TLS session is
resumed, since session resumption uses the original session information.</t>

</section>
</section>
<section anchor="certification-authorities" title="Certification Authorities">

<section anchor="x509v3_transinfo_extension" title="Transparency Information X.509v3 Extension">

<t>The Transparency Information X.509v3 extension, which has OID 1.3.101.75 and
SHOULD be non-critical, contains one or more <spanx style="verb">TransItem</spanx> structures in a
<spanx style="verb">TransItemList</spanx>. This extension MAY be included in OCSP responses (see
<xref target="ocsp_transinfo_extension"/>) and certificates (see
<xref target="cert_transinfo_extension"/>). Since RFC5280 requires the <spanx style="verb">extnValue</spanx> field (an
OCTET STRING) of each X.509v3 extension to include the DER encoding of an ASN.1
value, a <spanx style="verb">TransItemList</spanx> MUST NOT be included directly. Instead, it MUST be
wrapped inside an additional OCTET STRING, which is then put into the
<spanx style="verb">extnValue</spanx> field:</t>

<figure><artwork><![CDATA[
    TransparencyInformationSyntax ::= OCTET STRING
]]></artwork></figure>

<t><spanx style="verb">TransparencyInformationSyntax</spanx> contains a <spanx style="verb">TransItemList</spanx>.</t>

<section anchor="ocsp_transinfo_extension" title="OCSP Response Extension">

<t>A certification authority MAY include a Transparency Information X.509v3
extension in the <spanx style="verb">singleExtensions</spanx> of a <spanx style="verb">SingleResponse</spanx> in an OCSP response.
All included SCTs and inclusion proofs MUST be for the certificate identified by
the <spanx style="verb">certID</spanx> of that <spanx style="verb">SingleResponse</spanx>, or for a precertificate that corresponds
to that certificate.</t>

</section>
<section anchor="cert_transinfo_extension" title="Certificate Extension">

<t>A certification authority MAY include a Transparency Information X.509v3
extension in a certificate. All included SCTs and inclusion proofs MUST be for a
precertificate that corresponds to this certificate.</t>

</section>
</section>
<section anchor="tls-feature-x509v3-extension" title="TLS Feature X.509v3 Extension">

<t>A certification authority SHOULD NOT issue any certificate that identifies the
<spanx style="verb">transparency_info</spanx> TLS extension in a TLS feature extension <xref target="RFC7633"></xref>, because
TLS servers are not required to support the <spanx style="verb">transparency_info</spanx> TLS extension in
order to participate in CT (see <xref target="tls_servers"/>).</t>

</section>
</section>
<section anchor="clients" title="Clients">

<t>There are various different functions clients of logs might perform. We describe
here some typical clients and how they should function. Any inconsistency may be
used as evidence that a log has not behaved correctly, and the signatures on the
data structures prevent the log from denying that misbehavior.</t>

<t>All clients need various parameters in order to communicate with logs and verify
their responses. These parameters are described in <xref target="log_parameters"/>, but note
that this document does not describe how the parameters are obtained, which is
implementation-dependent (see, for example, <xref target="Chromium.Policy"></xref>).</t>

<section anchor="tls_clients" title="TLS Client">

<section anchor="receiving_transitems" title="Receiving SCTs and inclusion proofs">

<t>TLS clients receive SCTs and inclusion proofs alongside or in certificates.
CT-using TLS clients MUST implement all of the three mechanisms by which TLS
servers may present SCTs (see <xref target="tls_servers"/>).</t>

<t>TLS clients that support the <spanx style="verb">transparency_info</spanx> TLS extension
(see <xref target="tls_transinfo_extension"/>) SHOULD include it in ClientHello messages,
with empty <spanx style="verb">extension_data</spanx>. If a TLS server includes the <spanx style="verb">transparency_info</spanx>
TLS extension when resuming a TLS session, the TLS client MUST abort the
handshake.</t>

</section>
<section anchor="reconstructing_tbscertificate" title="Reconstructing the TBSCertificate">

<t>Validation of an SCT for a certificate (where the <spanx style="verb">type</spanx> of the <spanx style="verb">TransItem</spanx> is
<spanx style="verb">x509_sct_v2</spanx>) uses the unmodified TBSCertificate component of the certificate.</t>

<t>Before an SCT for a precertificate (where the <spanx style="verb">type</spanx> of the <spanx style="verb">TransItem</spanx> is
<spanx style="verb">precert_sct_v2</spanx>) can be validated, the TBSCertificate component of the
precertificate needs to be reconstructed from the TBSCertificate component of
the certificate as follows:</t>

<t><list style="symbols">
  <t>Remove the Transparency Information extension
(see <xref target="x509v3_transinfo_extension"/>).</t>
  <t>Remove embedded v1 SCTs, identified by OID 1.3.6.1.4.1.11129.2.4.2 (see
section 3.3 of <xref target="RFC6962"></xref>). This allows embedded v1 and v2 SCTs to co-exist in
a certificate (see <xref target="v1_coexistence"/>).</t>
</list></t>

</section>
<section anchor="validating-scts" title="Validating SCTs">

<t>In order to make use of a received SCT, the TLS client MUST first validate it as
follows:</t>

<t><list style="symbols">
  <t>Compute the signature input by constructing a <spanx style="verb">TransItem</spanx> of type
<spanx style="verb">x509_entry_v2</spanx> or <spanx style="verb">precert_entry_v2</spanx>, depending on the SCT's <spanx style="verb">TransItem</spanx>
type. The <spanx style="verb">TimestampedCertificateEntryDataV2</spanx> structure is constructed in the
following manner:
  <list style="symbols">
      <t><spanx style="verb">timestamp</spanx> is copied from the SCT.</t>
      <t><spanx style="verb">tbs_certificate</spanx> is the reconstructed TBSCertificate portion of the server
 certificate, as described in <xref target="reconstructing_tbscertificate"/>.</t>
      <t><spanx style="verb">issuer_key_hash</spanx> is computed as described in <xref target="tree_leaves"/>.</t>
      <t><spanx style="verb">sct_extensions</spanx> is copied from the SCT.</t>
    </list></t>
  <t>Verify the SCT's <spanx style="verb">signature</spanx> against the computed signature input using the
public key of the corresponding log, which is identified by the <spanx style="verb">log_id</spanx>. The
required signature algorithm is one of the log's parameters.</t>
</list></t>

<t>If the TLS client does not have the corresponding log's parameters, it cannot
attempt to validate the SCT. When evaluating compliance (see
<xref target="evaluating_compliance"/>), the TLS client will consider only those SCTs that it
was able to validate.</t>

<t>Note that SCT validation is not a substitute for the normal validation of the
server certificate and its chain.</t>

</section>
<section anchor="fetching_inclusion_proofs" title="Fetching inclusion proofs">

<t>When a TLS client has validated a received SCT but does not yet possess
a corresponding inclusion proof, the TLS client MAY request the inclusion
proof directly from a log using <spanx style="verb">get-proof-by-hash</spanx> (<xref target="get-proof-by-hash"/>) or
<spanx style="verb">get-all-by-hash</spanx> (<xref target="get-all-by-hash"/>).</t>

<t>Note that fetching inclusion proofs directly from a log will disclose to the
log which TLS server the client has been communicating with. This may be
regarded as a significant privacy concern, and so it is preferable for the TLS
server to send the inclusion proofs (see <xref target="presenting_transitems"/>).</t>

</section>
<section anchor="validating_inclusion_proofs" title="Validating inclusion proofs">

<t>When a TLS client has received, or fetched, an inclusion proof (and an STH),
it SHOULD proceed to verifying the inclusion proof to the provided STH.
The TLS client SHOULD also verify consistency between the provided STH
and an STH it knows about.</t>

<t>If the TLS client holds an STH that predates the SCT, it MAY, in the process of
auditing, request a new STH from the log (<xref target="get-sth"/>), then verify it by
requesting a consistency proof (<xref target="get-sth-consistency"/>). Note that if the TLS
client uses <spanx style="verb">get-all-by-hash</spanx>, then it will already have the new STH.</t>

</section>
<section anchor="evaluating_compliance" title="Evaluating compliance">

<t>It is up to a client's local policy to specify the quantity and form of
evidence (SCTs, inclusion proofs or a combination) needed to achieve
compliance and how to handle non-compliance.</t>

<t>A TLS client can only evaluate compliance if it has given the TLS server the
opportunity to send SCTs and inclusion proofs by any of the three mechanisms
that are mandatory to implement for CT-using TLS clients (see
<xref target="receiving_transitems"/>). Therefore, a TLS client MUST NOT evaluate compliance
if it did not include both the <spanx style="verb">transparency_info</spanx> and <spanx style="verb">status_request</spanx> TLS
extensions in the ClientHello.</t>

</section>
</section>
<section anchor="monitor" title="Monitor">

<t>Monitors watch logs to check that they behave correctly, for certificates of
interest, or both. For example, a monitor may be configured to report on all
certificates that apply to a specific domain name when fetching new entries for
consistency validation.</t>

<t>A monitor MUST at least inspect every new entry in every log it watches, and it
MAY also choose to keep copies of entire logs.</t>

<t>To inspect all of the existing entries, the monitor SHOULD follow these steps
once for each log:</t>

<t><list style="numbers">
  <t>Fetch the current STH (<xref target="get-sth"/>).</t>
  <t>Verify the STH signature.</t>
  <t>Fetch all the entries in the tree corresponding to the STH (<xref target="get-entries"/>).</t>
  <t>If applicable, check each entry to see if it's a certificate of interest.</t>
  <t>Confirm that the tree made from the fetched entries produces the same hash as
that in the STH.</t>
</list></t>

<t>To inspect new entries, the monitor SHOULD follow these steps repeatedly for
each log:</t>

<t><list style="numbers">
  <t>Fetch the current STH (<xref target="get-sth"/>). Repeat until the STH changes.
This document does not specify the polling frequency, to allow for
experimentation.</t>
  <t>Verify the STH signature.</t>
  <t>Fetch all the new entries in the tree corresponding to the STH
(<xref target="get-entries"/>). If they remain unavailable for an extended period, then
this should be viewed as misbehavior on the part of the log.</t>
  <t>If applicable, check each entry to see if it's a certificate of interest.</t>
  <t>Either:  <list style="numbers">
      <t>Verify that the updated list of all entries generates a tree with the
same hash as the new STH.</t>
    </list>
Or, if it is not keeping all log entries:  <list style="numbers">
      <t>Fetch a consistency proof for the new STH with the previous STH
(<xref target="get-sth-consistency"/>).</t>
      <t>Verify the consistency proof.</t>
      <t>Verify that the new entries generate the corresponding elements in the
consistency proof.</t>
    </list></t>
  <t>Repeat from step 1.</t>
</list></t>

</section>
<section anchor="auditing" title="Auditing">

<t>Auditing ensures that the current published state of a log is reachable from
previously published states that are known to be good, and that the promises
made by the log in the form of SCTs have been kept. Audits are performed by
monitors or TLS clients.</t>

<t>In particular, there are four log behavior properties that should be checked:</t>

<t><list style="symbols">
  <t>The Maximum Merge Delay (MMD).</t>
  <t>The STH Frequency Count.</t>
  <t>The append-only property.</t>
  <t>The consistency of the log view presented to all query sources.</t>
</list></t>

<t>A benign, conformant log publishes a series of STHs over time, each derived from
the previous STH and the submitted entries incorporated into the log since
publication of the previous STH. This can be proven through auditing of STHs.
SCTs returned to TLS clients can be audited by verifying against the
accompanying certificate, and using Merkle Inclusion Proofs, against the log's
Merkle tree.</t>

<t>The action taken by the auditor if an audit fails is not specified, but note
that in general if audit fails, the auditor is in possession of signed proof of
the log's misbehavior.</t>

<t>A monitor (<xref target="monitor"/>) can audit by verifying the consistency of STHs it
receives, ensure that each entry can be fetched and that the STH is indeed the
result of making a tree from all fetched entries.</t>

<t>A TLS client (<xref target="tls_clients"/>) can audit by verifying an SCT against any STH
dated after the SCT timestamp + the Maximum Merge Delay by requesting a Merkle
inclusion proof (<xref target="get-proof-by-hash"/>). It can also verify that the SCT
corresponds to the server certificate it arrived with (i.e., the log entry is
that certificate, or is a precertificate corresponding to that certificate).</t>

<t>Checking of the consistency of the log view presented to all entities is more
difficult to perform because it requires a way to share log responses among a
set of CT-using entities, and is discussed in <xref target="misbehaving_logs"/>.</t>

</section>
</section>
<section anchor="algorithm-agility" title="Algorithm Agility">

<t>It is not possible for a log to change any of its algorithms part way through
its lifetime:</t>

<t><list style="hanging">
  <t hangText="Signature algorithm:">
  SCT signatures must remain valid so signature algorithms can only be added,
not removed.</t>
  <t hangText="Hash algorithm:">
  A log would have to support the old and new hash algorithms to allow
backwards-compatibility with clients that are not aware of a hash algorithm
change.</t>
</list></t>

<t>Allowing multiple signature or hash algorithms for a log would require that all
data structures support it and would significantly complicate client
implementation, which is why it is not supported by this document.</t>

<t>If it should become necessary to deprecate an algorithm used by a live log, then
the log MUST be frozen as specified in <xref target="log_shutdown"/> and a new log SHOULD be
started. Certificates in the frozen log that have not yet expired and require
new SCTs SHOULD be submitted to the new log and the SCTs from that log used
instead.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>The assignment policy criteria mentioned in this section refer to the policies
outlined in <xref target="RFC8126"></xref>.</t>

<section anchor="additions-to-existing-registries" title="Additions to existing registries">

<t>This sub-section defines additions to existing registries.</t>

<section anchor="new-entry-to-the-tls-extensiontype-registry" title="New Entry to the TLS ExtensionType Registry">

<t>IANA is asked to add the following entry 
to the "TLS ExtensionType Values" registry defined in <xref target="RFC8446"></xref>,
with an assigned Value:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Extension Name</ttcol>
      <ttcol align='left'>TLS 1.3</ttcol>
      <ttcol align='left'>Recommended</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>transparency_info</c>
      <c>CH, CR, CT</c>
      <c>Y</c>
      <c>RFCXXXX</c>
</texttable>

</section>
<section anchor="urn-sub-namespace-for-trans-errors-urnietfparamstranserror" title="URN Sub-namespace for TRANS errors (urn:ietf:params:trans:error)">

<t>IANA is requested to add a new entry in the
"IETF URN Sub-namespace for Registered Protocol Parameter Identifiers"
registry, following the template in <xref target="RFC3553"/>:</t>

<t>Registry name: trans:error</t>

<t>Specification: RFCXXXX</t>

<t>Repository: https://www.iana.org/assignments/trans</t>

<t>Index value: No transformation needed.</t>

</section>
</section>
<section anchor="new-ct-related-registries" title="New CT-Related registries">

<t>IANA is requested to add a new protocol registry, "Public Notary
Transparency", to the list that appears at
https://www.iana.org/assignments/</t>

<t>The rest of this section defines sub-registries to be
created within the new Public Notary Transparency registry.</t>

<section anchor="hash_algorithms" title="Hash Algorithms">

<t>IANA is asked to establish a registry of hash algorithm values, named
"Hash Algorithms", that initially consists of:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Hash Algorithm</ttcol>
      <ttcol align='left'>OID</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x00</c>
      <c>SHA-256</c>
      <c>2.16.840.1.101.3.4.2.1</c>
      <c><xref target="RFC6234"></xref></c>
      <c>0x01 - 0xDF</c>
      <c>Unassigned</c>
      <c>&#160;</c>
      <c>Specification Required</c>
      <c>0xE0 - 0xEF</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>Experimental Use</c>
      <c>0xF0 - 0xFF</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>Private Use</c>
</texttable>

<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 log.</t>

</section>
<section anchor="signature_algorithms" title="Signature Algorithms">

<t>IANA is asked to establish a registry of signature algorithm values, named
"Signature Algorithms".</t>

<t>The following notes should be added:</t>

<t><list style="symbols">
  <t>This is a subset of the TLS SignatureScheme Registry, limited to those
algorithms that are appropriate for CT. A major advantage of this is
leveraging the expertise of the TLS working group and its Designated
Expert(s).</t>
  <t>The value <spanx style="verb">0x0403</spanx> appears twice. While this may be confusing,
it is okay because the verification
process is the same for both algorithms, and the choice of which to use
when generating a signature is purely internal to the log server.</t>
</list></t>

<t>The registry should initially consist of:</t>

<texttable>
      <ttcol align='left'>SignatureScheme Value</ttcol>
      <ttcol align='left'>Signature Algorithm</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x0000 - 0x0402</c>
      <c>Unassigned</c>
      <c>Expert Review</c>
      <c>ecdsa_secp256r1_sha256(0x0403)</c>
      <c>ECDSA (NIST P-256) with SHA-256</c>
      <c><xref target="FIPS186-4"></xref></c>
      <c>ecdsa_secp256r1_sha256(0x0403)</c>
      <c>Deterministic ECDSA (NIST P-256) with HMAC-SHA256</c>
      <c><xref target="RFC6979"></xref></c>
      <c>0x0404 - 0x0806</c>
      <c>Unassigned</c>
      <c>Expert Review</c>
      <c>ed25519(0x0807)</c>
      <c>Ed25519 (PureEdDSA with the edwards25519 curve)</c>
      <c><xref target="RFC8032"></xref></c>
      <c>0x0808 - 0xFDFF</c>
      <c>Unassigned</c>
      <c>Expert Review</c>
      <c>0xFE00 - 0xFEFF</c>
      <c>Reserved</c>
      <c>Experimental Use</c>
      <c>0xFF00 - 0xFFFF</c>
      <c>Reserved</c>
      <c>Private Use</c>
</texttable>

<t>The Designated Expert(s) should ensure that the proposed algorithm has a public
specification, has a value assigned to it in the TLS SignatureScheme Registry
(that IANA was asked to establish in <xref target="RFC8446"></xref>) and is suitable for use as a
cryptographic signature algorithm.</t>

</section>
<section anchor="versioned_trans_types" title="VersionedTransTypes">

<t>IANA is asked to establish a registry of <spanx style="verb">VersionedTransType</spanx> values, named
"VersionedTransTypes".</t>

<t>The following note should be added:</t>

<t><list style="symbols">
  <t>The 0x0000 value is reserved so that v1 SCTs are distinguishable from v2
SCTs and other <spanx style="verb">TransItem</spanx> structures.</t>
</list></t>

<t>The registry should initially consist of:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Type and Version</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x0000</c>
      <c>Reserved</c>
      <c><xref target="RFC6962"></xref></c>
      <c>0x0001</c>
      <c>x509_entry_v2</c>
      <c>RFCXXXX</c>
      <c>0x0002</c>
      <c>precert_entry_v2</c>
      <c>RFCXXXX</c>
      <c>0x0003</c>
      <c>x509_sct_v2</c>
      <c>RFCXXXX</c>
      <c>0x0004</c>
      <c>precert_sct_v2</c>
      <c>RFCXXXX</c>
      <c>0x0005</c>
      <c>signed_tree_head_v2</c>
      <c>RFCXXXX</c>
      <c>0x0006</c>
      <c>consistency_proof_v2</c>
      <c>RFCXXXX</c>
      <c>0x0007</c>
      <c>inclusion_proof_v2</c>
      <c>RFCXXXX</c>
      <c>0x0008 - 0xDFFF</c>
      <c>Unassigned</c>
      <c>Specification Required</c>
      <c>0xE000 - 0xEFFF</c>
      <c>Reserved</c>
      <c>Experimental Use</c>
      <c>0xF000 - 0xFFFF</c>
      <c>Reserved</c>
      <c>Private Use</c>
</texttable>

<t>The Designated Expert(s) should review the public specification to ensure that it is
detailed enough to ensure implementation interoperability.</t>

</section>
<section anchor="log_artifact_extension_registry" title="Log Artifact Extension Registry">

<t>IANA is asked to establish a registry of <spanx style="verb">ExtensionType</spanx> values, named "Log
Artifact Extensions", that initially consists of:</t>

<texttable>
      <ttcol align='left'>ExtensionType</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Use</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x0000 - 0xDFFF</c>
      <c>Unassigned</c>
      <c>n/a</c>
      <c>Specification Required</c>
      <c>0xE000 - 0xEFFF</c>
      <c>Reserved</c>
      <c>n/a</c>
      <c>Experimental Use</c>
      <c>0xF000 - 0xFFFF</c>
      <c>Reserved</c>
      <c>n/a</c>
      <c>Private Use</c>
</texttable>

<t>The "Use" column should contain one or both of the following values:</t>

<t><list style="symbols">
  <t>"SCT", for extensions specified for use in Signed Certificate Timestamps.</t>
  <t>"STH", for extensions specified for use in Signed Tree Heads.</t>
</list></t>

<t>The Designated Expert(s) should review the public specification to ensure that it is
detailed enough to ensure implementation interoperability. They should
also verify that the extension is appropriate to the contexts in which it is
specified to be used (SCT, STH, or both).</t>

</section>
<section anchor="log_id_registry" title="Log ID Registry">

<t>IANA is asked to establish a registry of Log IDs, named "Log ID Registry",
that initially consists of:</t>

<texttable>
      <ttcol align='left'>Log ID</ttcol>
      <ttcol align='left'>Log Base URL</ttcol>
      <ttcol align='left'>Log Operator</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>1.3.101.8192 - 1.3.101.16383</c>
      <c>Unassigned</c>
      <c>Unassigned</c>
      <c>First Come First Served</c>
      <c>1.3.101.80.0 - 1.3.101.80.*</c>
      <c>Unassigned</c>
      <c>Unassigned</c>
      <c>First Come First Served</c>
</texttable>

<t>All OIDs in the range from 1.3.101.8192 to 1.3.101.16383 have been set aside
for Log IDs.
This is a limited resource of 8,192 OIDs, each of which has an encoded length of
4 octets.</t>

<t>The 1.3.101.80 arc has also been set assigned for LogIDs.
This is an unlimited resource, but only
the 128 OIDs from 1.3.101.80.0 to 1.3.101.80.127 have an encoded length of only
4 octets.</t>

<t>Each application for the allocation of a Log ID MUST be accompanied by:</t>

<t><list style="symbols">
  <t>the Log's Base URL (see <xref target="log_parameters"/>).</t>
  <t>the Log Operator's contact details.</t>
</list></t>

<t>IANA is asked to reject any request to update a Log ID or Log Base URL in this
registry, because these fields are immutable (see <xref target="log_parameters"/>).</t>

<t>IANA is asked to accept requests from log operators to update their contact
details in this registry.</t>

<t>Since log operators can choose to not use this registry (see <xref target="log_id"/>), it is
not expected to be a global directory of all logs.</t>

</section>
<section anchor="error-types-registry" title="Error Types Registry">

<t>IANA is requested to create a new registry for errors,
the "Error Types" registry.</t>

<t>Requirements for this registry are Specification Required.</t>

<t>This registry should have the following three fields:</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>identifier</c>
      <c>string</c>
      <c>RFCXXXX</c>
      <c>meaning</c>
      <c>string</c>
      <c>RFCXXXX</c>
      <c>reference</c>
      <c>string</c>
      <c>RFCXXXX</c>
</texttable>

<t>The initial values are as follows, taken from the text above:</t>

<texttable>
      <ttcol align='left'>Identifier</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>malformed</c>
      <c>The request could not be parsed.</c>
      <c>RFCXXXX</c>
      <c>badSubmission</c>
      <c><spanx style="verb">submission</spanx> is neither a valid certificate nor a valid precertificate</c>
      <c>RFCXXXX</c>
      <c>badType</c>
      <c><spanx style="verb">type</spanx> is neither 1 nor 2</c>
      <c>RFCXXXX</c>
      <c>badChain</c>
      <c>The first element of <spanx style="verb">chain</spanx> is not the certifier of the <spanx style="verb">submission</spanx>, or the second element does not certify the first, etc.</c>
      <c>RFCXXXX</c>
      <c>badCertificate</c>
      <c>One or more certificates in the <spanx style="verb">chain</spanx> are not valid (e.g., not properly encoded)</c>
      <c>RFCXXXX</c>
      <c>unknownAnchor</c>
      <c>The last element of <spanx style="verb">chain</spanx> (or, if <spanx style="verb">chain</spanx> is an empty array, the <spanx style="verb">submission</spanx>) both is not, and is not certified by, an accepted trust anchor</c>
      <c>RFCXXXX</c>
      <c>shutdown</c>
      <c>The log is no longer accepting submissions</c>
      <c>RFCXXXX</c>
      <c>firstUnknown</c>
      <c><spanx style="verb">first</spanx> is before the latest known STH but is not from an existing STH.</c>
      <c>RFCXXXX</c>
      <c>secondUnknown</c>
      <c><spanx style="verb">second</spanx> is before the latest known STH but is not from an existing STH.</c>
      <c>RFCXXXX</c>
      <c>secondBeforeFirst</c>
      <c><spanx style="verb">second</spanx> is smaller than <spanx style="verb">first</spanx>.</c>
      <c>RFCXXXX</c>
      <c>hashUnknown</c>
      <c><spanx style="verb">hash</spanx> is not the hash of a known leaf (may be caused by skew or by a known certificate not yet merged).</c>
      <c>RFCXXXX</c>
      <c>treeSizeUnknown</c>
      <c><spanx style="verb">hash</spanx> is before the latest known STH but is not from an existing STH.</c>
      <c>RFCXXXX</c>
      <c>startUnknown</c>
      <c><spanx style="verb">start</spanx> is greater than the number of entries in the Merkle tree.</c>
      <c>RFCXXXX</c>
      <c>endBeforeStart</c>
      <c><spanx style="verb">start</spanx> cannot be greater than <spanx style="verb">end</spanx>.</c>
      <c>RFCXXXX</c>
</texttable>

</section>
</section>
<section anchor="oid-assignment" title="OID Assignment">

<t>IANA is asked to assign one object identifier from the "SMI
Security for PKIX Module Identifier" registry to identify the
ASN.1 module in <xref target="asn1_module"/> of this document with an assigned
Decimal value.</t>

<texttable>
      <ttcol align='left'>Decimal</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>References</ttcol>
      <c>TBD</c>
      <c>id-mod-public-notary-v2</c>
      <c>RFCXXXX</c>
</texttable>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>With CAs, logs, and servers performing the actions described here, TLS clients
can use logs and signed timestamps to reduce the likelihood that they will
accept misissued certificates. If a server presents a valid signed timestamp for
a certificate, then the client knows that a log has committed to publishing the
certificate. From this, the client knows that monitors acting for the subject of
the certificate have had some time to notice the misissuance and take some
action, such as asking a CA to revoke a misissued certificate. A signed
timestamp does not guarantee this though, since appropriate monitors might not
have checked the logs or the CA might have refused to revoke the certificate.</t>

<t>In addition, if TLS clients will not accept unlogged certificates, then site
owners will have a greater incentive to submit certificates to logs, possibly
with the assistance of their CA, increasing the overall transparency of the
system.</t>

<section anchor="misissued-certificates" title="Misissued Certificates">

<t>Misissued certificates that have not been publicly logged, and thus do not have
a valid SCT, are not considered compliant. Misissued certificates that do have
an SCT from a log will appear in that public log within the Maximum Merge Delay,
assuming the log is operating correctly. Since a log is allowed to serve an STH
of any age up to the MMD, the maximum period of time during which a misissued
certificate can be used without being available for audit is twice the MMD.</t>

</section>
<section anchor="detection-of-misissue" title="Detection of Misissue">

<t>The logs do not themselves detect misissued certificates; they rely instead on
interested parties, such as domain owners, to monitor them and take corrective
action when a misissue is detected.</t>

</section>
<section anchor="misbehaving_logs" title="Misbehaving Logs">

<t>A log can misbehave in several ways. Examples include: failing to incorporate a
certificate with an SCT in the Merkle Tree within the MMD; presenting different,
conflicting views of the Merkle Tree at different times and/or to different
parties; issuing STHs too frequently; mutating the signature of a logged
certificate; and failing to present a chain containing the certifier of a logged
certificate.</t>

<t>Violation of the MMD contract is detected by log clients requesting a Merkle
inclusion proof (<xref target="get-proof-by-hash"/>) for each observed SCT. These checks can
be asynchronous and need only be done once per certificate. However, note that
there may be privacy concerns (see <xref target="fetching_inclusion_proofs"/>).</t>

<t>Violation of the append-only property or the STH issuance rate limit can be
detected by multiple clients comparing their instances of the Signed Tree Heads.
This technique, known as "gossip," is an active area of research and not
defined here.
Proof of misbehavior in such cases would be: a series of STHs that were
issued too closely together, proving violation of the STH issuance rate limit;
or an STH with a root hash that does not match the one calculated from a copy of
the log, proving violation of the append-only property.</t>

<t>Clients that report back SCTs can be tracked or traced if a log
produces multiple STHs or SCTs with the same timestamp and data but different
signatures. Logs SHOULD mitigate this risk by either:</t>

<t><list style="symbols">
  <t>Using deterministic signature schemes, or</t>
  <t>Producing no more than one SCT for each distinct submission and no more than one
STH for each distinct tree_size. Each of these SCTs and STHs can be stored by
the log and served to other clients that submit the same certificate or request
the same STH.</t>
</list></t>

</section>
<section anchor="requiring_multiple_scts" title="Multiple SCTs">

<t>By requiring TLS servers to offer multiple SCTs, each from a different log, TLS
clients reduce the effectiveness of an attack where a CA and a log collude
(see <xref target="multiple-scts"/>).</t>

</section>
<section anchor="leakage-of-dns-information" title="Leakage of DNS Information">

<t>Malicious monitors can use logs to learn about the existence of domain names
that might not otherwise be easy to discover. Some subdomain labels may reveal
information about the service and software for which the subdomain is used,
which in turn might facilitate targeted attacks.</t>

</section>
</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>The authors would like to thank Erwann Abelea, Robin Alden, Andrew Ayer, Richard
Barnes, Al Cutter, David Drysdale, Francis Dupont, Adam Eijdenberg, Stephen
Farrell, Daniel Kahn Gillmor, Paul Hadfield, Brad Hill, Jeff Hodges, Paul
Hoffman, Jeffrey Hutzelman, Kat Joyce, Stephen Kent, SM, Alexey Melnikov, Linus
Nordberg, Chris Palmer, Trevor Perrin, Pierre Phaneuf, Eric Rescorla, Rich Salz,
Melinda Shore, Ryan Sleevi, Martin Smith, Carl Wallace and Paul Wouters for
their valuable contributions.</t>

<t>A big thank you to Symantec for kindly donating the OIDs from the 1.3.101 arc
that are used in this document.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<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>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC3986' target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author fullname='T. Berners-Lee' initials='T.' surname='Berners-Lee'><organization/></author>
<author fullname='R. Fielding' initials='R.' surname='Fielding'><organization/></author>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<date month='January' year='2005'/>
<abstract><t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='66'/>
<seriesInfo name='RFC' value='3986'/>
<seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>



<reference anchor='RFC4648' target='https://www.rfc-editor.org/info/rfc4648'>
<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author fullname='S. Josefsson' initials='S.' surname='Josefsson'><organization/></author>
<date month='October' year='2006'/>
<abstract><t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4648'/>
<seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>



<reference anchor='RFC5246' target='https://www.rfc-editor.org/info/rfc5246'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author fullname='T. Dierks' initials='T.' surname='Dierks'><organization/></author>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<date month='August' year='2008'/>
<abstract><t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5246'/>
<seriesInfo name='DOI' value='10.17487/RFC5246'/>
</reference>



<reference anchor='RFC5280' target='https://www.rfc-editor.org/info/rfc5280'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author fullname='D. Cooper' initials='D.' surname='Cooper'><organization/></author>
<author fullname='S. Santesson' initials='S.' surname='Santesson'><organization/></author>
<author fullname='S. Farrell' initials='S.' surname='Farrell'><organization/></author>
<author fullname='S. Boeyen' initials='S.' surname='Boeyen'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<author fullname='W. Polk' initials='W.' surname='Polk'><organization/></author>
<date month='May' year='2008'/>
<abstract><t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5280'/>
<seriesInfo name='DOI' value='10.17487/RFC5280'/>
</reference>



<reference anchor='RFC5652' target='https://www.rfc-editor.org/info/rfc5652'>
<front>
<title>Cryptographic Message Syntax (CMS)</title>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<date month='September' year='2009'/>
<abstract><t>This document describes the Cryptographic Message Syntax (CMS).  This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='70'/>
<seriesInfo name='RFC' value='5652'/>
<seriesInfo name='DOI' value='10.17487/RFC5652'/>
</reference>



<reference anchor='RFC6066' target='https://www.rfc-editor.org/info/rfc6066'>
<front>
<title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
<author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'><organization/></author>
<date month='January' year='2011'/>
<abstract><t>This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, &quot;The Transport Layer Security (TLS) Protocol Version 1.2&quot;.  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6066'/>
<seriesInfo name='DOI' value='10.17487/RFC6066'/>
</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>
<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>
<seriesInfo name='RFC' value='6234'/>
<seriesInfo name='DOI' value='10.17487/RFC6234'/>
</reference>



<reference anchor='RFC6960' target='https://www.rfc-editor.org/info/rfc6960'>
<front>
<title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
<author fullname='S. Santesson' initials='S.' surname='Santesson'><organization/></author>
<author fullname='M. Myers' initials='M.' surname='Myers'><organization/></author>
<author fullname='R. Ankney' initials='R.' surname='Ankney'><organization/></author>
<author fullname='A. Malpani' initials='A.' surname='Malpani'><organization/></author>
<author fullname='S. Galperin' initials='S.' surname='Galperin'><organization/></author>
<author fullname='C. Adams' initials='C.' surname='Adams'><organization/></author>
<date month='June' year='2013'/>
<abstract><t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents.  This document obsoletes RFCs 2560 and 6277.  It also updates RFC 5912.</t></abstract>
</front>
<seriesInfo name='RFC' value='6960'/>
<seriesInfo name='DOI' value='10.17487/RFC6960'/>
</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>
<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>
<seriesInfo name='RFC' value='6979'/>
<seriesInfo name='DOI' value='10.17487/RFC6979'/>
</reference>



<reference anchor='RFC7231' target='https://www.rfc-editor.org/info/rfc7231'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
<author fullname='R. Fielding' initials='R.' role='editor' surname='Fielding'><organization/></author>
<author fullname='J. Reschke' initials='J.' role='editor' surname='Reschke'><organization/></author>
<date month='June' year='2014'/>
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t></abstract>
</front>
<seriesInfo name='RFC' value='7231'/>
<seriesInfo name='DOI' value='10.17487/RFC7231'/>
</reference>



<reference anchor='RFC7633' target='https://www.rfc-editor.org/info/rfc7633'>
<front>
<title>X.509v3 Transport Layer Security (TLS) Feature Extension</title>
<author fullname='P. Hallam-Baker' initials='P.' surname='Hallam-Baker'><organization/></author>
<date month='October' year='2015'/>
<abstract><t>The purpose of the TLS feature extension is to prevent downgrade attacks that are not otherwise prevented by the TLS protocol.  In particular, the TLS feature extension may be used to mandate support for revocation checking features in the TLS protocol such as Online Certificate Status Protocol (OCSP) stapling.  Informing clients that an OCSP status response will always be stapled permits an immediate failure in the case that the response is not stapled.  This in turn prevents a denial-of-service attack that might otherwise be possible.</t></abstract>
</front>
<seriesInfo name='RFC' value='7633'/>
<seriesInfo name='DOI' value='10.17487/RFC7633'/>
</reference>



<reference anchor='RFC7807' target='https://www.rfc-editor.org/info/rfc7807'>
<front>
<title>Problem Details for HTTP APIs</title>
<author fullname='M. Nottingham' initials='M.' surname='Nottingham'><organization/></author>
<author fullname='E. Wilde' initials='E.' surname='Wilde'><organization/></author>
<date month='March' year='2016'/>
<abstract><t>This document defines a &quot;problem detail&quot; as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t></abstract>
</front>
<seriesInfo name='RFC' value='7807'/>
<seriesInfo name='DOI' value='10.17487/RFC7807'/>
</reference>



<reference anchor='RFC8032' target='https://www.rfc-editor.org/info/rfc8032'>
<front>
<title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
<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>
<seriesInfo name='RFC' value='8032'/>
<seriesInfo name='DOI' value='10.17487/RFC8032'/>
</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>
<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>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference anchor='RFC8259' target='https://www.rfc-editor.org/info/rfc8259'>
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
<author fullname='T. Bray' initials='T.' role='editor' surname='Bray'><organization/></author>
<date month='December' year='2017'/>
<abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t><t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t></abstract>
</front>
<seriesInfo name='STD' value='90'/>
<seriesInfo name='RFC' value='8259'/>
<seriesInfo name='DOI' value='10.17487/RFC8259'/>
</reference>



<reference anchor='RFC8391' target='https://www.rfc-editor.org/info/rfc8391'>
<front>
<title>XMSS: eXtended Merkle Signature Scheme</title>
<author fullname='A. Huelsing' initials='A.' surname='Huelsing'><organization/></author>
<author fullname='D. Butin' initials='D.' surname='Butin'><organization/></author>
<author fullname='S. Gazdag' initials='S.' surname='Gazdag'><organization/></author>
<author fullname='J. Rijneveld' initials='J.' surname='Rijneveld'><organization/></author>
<author fullname='A. Mohaisen' initials='A.' surname='Mohaisen'><organization/></author>
<date month='May' year='2018'/>
<abstract><t>This note describes the eXtended Merkle Signature Scheme (XMSS), a hash-based digital signature system that is based on existing descriptions in scientific literature.  This note specifies Winternitz One-Time Signature Plus (WOTS+), a one-time signature scheme; XMSS, a single-tree scheme; and XMSS^MT, a multi-tree variant of XMSS.  Both XMSS and XMSS^MT use WOTS+ as a main building block. XMSS provides cryptographic digital signatures without relying on the conjectured hardness of mathematical problems.  Instead, it is proven that it only relies on the properties of cryptographic hash functions.  XMSS provides strong security guarantees and is even secure when the collision resistance of the underlying hash function is broken.  It is suitable for compact implementations, is relatively simple to implement, and naturally resists side-channel attacks. Unlike most other signature systems, hash-based signatures can so far withstand known attacks using quantum computers.</t></abstract>
</front>
<seriesInfo name='RFC' value='8391'/>
<seriesInfo name='DOI' value='10.17487/RFC8391'/>
</reference>



<reference anchor='RFC8446' target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<date month='August' year='2018'/>
<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t><t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8446'/>
<seriesInfo name='DOI' value='10.17487/RFC8446'/>
</reference>


<reference anchor="HTML401" target="http://www.w3.org/TR/1999/REC-html401-19991224">
  <front>
    <title>HTML 4.01 Specification</title>
    <author initials="D." surname="Raggett" fullname="David Raggett">
      <organization></organization>
    </author>
    <author initials="A." surname="Le Hors" fullname="Arnaud Le Hors">
      <organization></organization>
    </author>
    <author initials="I." surname="Jacobs" fullname="Ian Jacobs">
      <organization></organization>
    </author>
    <date year="1999" month="December" day="24"/>
  </front>
  <seriesInfo name="World Wide Web Consortium Recommendation" value="REC-html401-19991224"/>
</reference>
<reference anchor="FIPS186-4" target="http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf">
  <front>
    <title>FIPS PUB 186-4</title>
    <author >
      <organization>NIST</organization>
    </author>
    <date year="2013" month="July" day="01"/>
  </front>
</reference>
<reference anchor="UNIXTIME" target="http://pubs.opengroup.org/onlinepubs/9699919799.2016edition/basedefs/V1_chap04.html#tag_04_16">
  <front>
    <title>The Open Group Base Specifications Issue 7 IEEE Std 1003.1-2008, 2016 Edition</title>
    <author >
      <organization>IEEE</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="X690" >
  <front>
    <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author >
      <organization>ITU-T</organization>
    </author>
    <date year="2015" month="November"/>
  </front>
  <seriesInfo name="ISO/IEC" value="8825-1:2002"/>
</reference>




<reference anchor='RFC3553' target='https://www.rfc-editor.org/info/rfc3553'>
<front>
<title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
<author fullname='M. Mealling' initials='M.' surname='Mealling'><organization/></author>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<author fullname='T. Hardie' initials='T.' surname='Hardie'><organization/></author>
<author fullname='G. Klyne' initials='G.' surname='Klyne'><organization/></author>
<date month='June' year='2003'/>
<abstract><t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items.  The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources.  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='73'/>
<seriesInfo name='RFC' value='3553'/>
<seriesInfo name='DOI' value='10.17487/RFC3553'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC6962' target='https://www.rfc-editor.org/info/rfc6962'>
<front>
<title>Certificate Transparency</title>
<author fullname='B. Laurie' initials='B.' surname='Laurie'><organization/></author>
<author fullname='A. Langley' initials='A.' surname='Langley'><organization/></author>
<author fullname='E. Kasper' initials='E.' surname='Kasper'><organization/></author>
<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='RFC8126' target='https://www.rfc-editor.org/info/rfc8126'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author fullname='M. Cotton' initials='M.' surname='Cotton'><organization/></author>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<author fullname='T. Narten' initials='T.' surname='Narten'><organization/></author>
<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='RFC8820' target='https://www.rfc-editor.org/info/rfc8820'>
<front>
<title>URI Design and Ownership</title>
<author fullname='M. Nottingham' initials='M.' surname='Nottingham'><organization/></author>
<date month='June' year='2020'/>
<abstract><t>Section 1.1.1 of RFC 3986 defines URI syntax as &quot;a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme.&quot;  In other words, the structure of a URI is defined by its scheme. While it is common for schemes to further delegate their substructure to the URI's owner, publishing independent standards that mandate particular forms of substructure in URIs is often problematic.</t><t>This document provides guidance on the specification of URI substructure in standards.</t><t>This document obsoletes RFC 7320 and updates RFC 3986.</t></abstract>
</front>
<seriesInfo name='BCP' value='190'/>
<seriesInfo name='RFC' value='8820'/>
<seriesInfo name='DOI' value='10.17487/RFC8820'/>
</reference>


<reference anchor="CrosbyWallach" target="http://static.usenix.org/event/sec09/tech/full_papers/crosby.pdf">
  <front>
    <title>Efficient Data Structures for Tamper-Evident Logging</title>
    <author initials="S." surname="Crosby" fullname="Scott A. Crosby">
      <organization></organization>
    </author>
    <author initials="D." surname="Wallach" fullname="Dan S. Wallach">
      <organization></organization>
    </author>
    <date year="2009" month="August"/>
  </front>
  <seriesInfo name="Proceedings of the 18th USENIX Security Symposium," value="Montreal"/>
</reference>
<reference anchor="Chromium.Policy" target="http://www.chromium.org/Home/chromium-security/certificate-transparency">
  <front>
    <title>Chromium Certificate Transparency</title>
    <author >
      <organization>The Chromium Projects</organization>
    </author>
    <date year="2014"/>
  </front>
</reference>
<reference anchor="JSON.Metadata" target="https://www.gstatic.com/ct/log_list/log_list_schema.json">
  <front>
    <title>Chromium Log Metadata JSON Schema</title>
    <author >
      <organization>The Chromium Projects</organization>
    </author>
    <date year="2014"/>
  </front>
</reference>
<reference anchor="Chromium.Log.Policy" target="http://www.chromium.org/Home/chromium-security/certificate-transparency/log-policy">
  <front>
    <title>Chromium Certificate Transparency Log Policy</title>
    <author >
      <organization>The Chromium Projects</organization>
    </author>
    <date year="2014"/>
  </front>
</reference>
<reference anchor="CABBR" target="https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.7.3.pdf">
  <front>
    <title>Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates</title>
    <author >
      <organization>CA/Browser Forum</organization>
    </author>
    <date year="2020"/>
  </front>
  <format type="PDF" target="https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.7.3.pdf"/>
</reference>


    </references>


<section anchor="v1_coexistence" title="Supporting v1 and v2 simultaneously (Informative)">

<t>Certificate Transparency logs have to be either v1 (conforming to <xref target="RFC6962"></xref>) or
v2 (conforming to this document), as the data structures are incompatible and so
a v2 log could not issue a valid v1 SCT.</t>

<t>CT clients, however, can support v1 and v2 SCTs, for the same certificate,
simultaneously, as v1 SCTs are delivered in different TLS, X.509 and OCSP
extensions than v2 SCTs.</t>

<t>v1 and v2 SCTs for X.509 certificates can be validated independently. For
precertificates, v2 SCTs should be embedded in the TBSCertificate before
submission of the TBSCertificate (inside a v1 precertificate, as described in
Section 3.1. of <xref target="RFC6962"></xref>) to a v1 log so that TLS clients conforming to
<xref target="RFC6962"></xref> but not this document are oblivious to the embedded v2 SCTs. An issuer
can follow these steps to produce an X.509 certificate with embedded v1 and v2
SCTs:</t>

<t><list style="symbols">
  <t>Create a CMS precertificate as described in <xref target="precertificates"/> and submit it
to v2 logs.</t>
  <t>Embed the obtained v2 SCTs in the TBSCertificate, as described in
<xref target="cert_transinfo_extension"/>.</t>
  <t>Use that TBSCertificate to create a v1 precertificate, as described in
Section 3.1. of <xref target="RFC6962"></xref> and submit it to v1 logs.</t>
  <t>Embed the v1 SCTs in the TBSCertificate, as described in Section 3.3 of
<xref target="RFC6962"></xref>.</t>
  <t>Sign that TBSCertificate (which now contains v1 and v2 SCTs) to issue the
final X.509 certificate.</t>
</list></t>

</section>
<section anchor="asn1_module" title="An ASN.1 Module (Informative)">

<t>The following ASN.1 module may be useful to implementors.</t>

<figure><artwork><![CDATA[
CertificateTransparencyV2Module-2021
 -- { OID Needed, but no point in using a short one }
DEFINITIONS IMPLICIT TAGS ::= BEGIN

-- EXPORTS ALL --

IMPORTS
  EXTENSION
  FROM PKIX-CommonTypes-2009 -- RFC 5912
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkixCommon-02(57) }

  CONTENT-TYPE
  FROM CryptographicMessageSyntax-2010  -- RFC 6268
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
      pkcs-9(9) smime(16) modules(0) id-mod-cms-2009(58) }

  TBSCertificate
  FROM PKIX1Explicit-2009 -- RFC 5912
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-explicit-02(51) }
;

--
-- Section 3.2.  Precertificates
--

ct-tbsCertificate CONTENT-TYPE ::= {
  TYPE TBSCertificate
  IDENTIFIED BY id-ct-tbsCertificate }

id-ct-tbsCertificate OBJECT IDENTIFIER ::= { 1 3 101 78 }

--
-- Section 7.1.  Transparency Information X.509v3 Extension
--

ext-transparencyInfo EXTENSION ::= {
   SYNTAX TransparencyInformationSyntax
   IDENTIFIED BY id-ce-transparencyInfo
   CRITICALITY { FALSE } }

id-ce-transparencyInfo OBJECT IDENTIFIER ::= { 1 3 101 75 }

TransparencyInformationSyntax ::= OCTET STRING

--
-- Section 7.1.1.  OCSP Response Extension
--

ext-ocsp-transparencyInfo EXTENSION ::= {
   SYNTAX TransparencyInformationSyntax
   IDENTIFIED BY id-pkix-ocsp-transparencyInfo
   CRITICALITY { FALSE } }

id-pkix-ocsp-transparencyInfo OBJECT IDENTIFIER ::=
   id-ce-transparencyInfo

--
-- Section 8.1.2.  Reconstructing the TBSCertificate
--

ext-embeddedSCT-CTv1 EXTENSION ::= {
   SYNTAX SignedCertificateTimestampList
   IDENTIFIED BY id-ce-embeddedSCT-CTv1
   CRITICALITY { FALSE } }

id-ce-embeddedSCT-CTv1 OBJECT IDENTIFIER ::= {
   1 3 6 1 4 1 11129 2 4 2 }

SignedCertificateTimestampList ::= OCTET STRING

END

]]></artwork></figure>

</section>


  </back>

<!-- ##markdown-source:
H4sIAISGomAAA+y9a1sbWbIu+D1/RR7qeaagW5IBX8qmqmsOhXGb3b6NwdW9
p8qDEimBbCSltjIFpm2f3z7xxmVdMlOA67b7zDPs3WWQMtc1VtxWxBv9fj+p
i3qS76Rre/miLk6LUVbn6dEim1XzbJHPRtfpj/miKspZuj3YXEvG5WiWTen5
8SI7rftFXp/2azzdX5yOHj15tN0/Kar+/SdJeVKVk7zOq50UHydo96xcXO+k
+Yd5khTzBfVZL5ZVvb25+WRzey2h7rKd9DAfLRdFfZ1cne2kR293Xx2m62+W
J5NilL4q62xxHQ1uI0mqOpuNj7NJOaNRXedVUk2zRX38X8uSOy9PT5N5sZP+
VJejXlqVi3qRn1b02/UUv7xPkmxZn5eLnSTtJyn9yPR+yGfpi4xGkvOH5YJG
89eyPJvk6bu/pS/q8YA/z05OFvmlfcUf5dOsmOykJ/ls8j/P+OPBqJzGre+O
syk1P6Mvr1vtH8xGtzWena1ue39aTIos/VtWzfNFq/HDq6L+V76Y0Jqlf52e
PL+lo/yCm1ndGe1F+jKvqnxR/MKFyqmJ6coO3pYn6SER2HhSzM58D0QldXFW
ttvXL8IOFuXJ/6zkY24/mZWLaVYXlzntefr22d721tYT/fX+k8eP9NcHjx48
1l8fbj945H59vGm/Pnq4rb8+2nxkDzzavv/Afn3yaNP9+o118c32/S379dH9
+/br481v9NfHm/et3cdb31hjj7cfWguP7z+xFh4/kJE9P3r54sEmf5qmdErO
8nonPa/r+c69e1dXV4Or+wNat3tHb+9tPXny5N7b/b3+eT2d0Ct9fLC1vf1A
XhVmgObSB4PNrfRwno+EKxALkJW248I/ff03TYsZnbang/Rtdka91+5z2cen
2WUxbnzXeHd3kL7I0+flomq8u7uYZctx48vGyweD9D+yETGdxrsHRJ/BF2Pi
Qjspptzf2u7rpEG8eVXMTkub1drfy8VknP69GOfp3/OTdK+cgXMUy2n6Nica
muazMa/IGlFo91o+O3hzuPX4Uf9B557MLifz5Uk1mBVVPTgrL+/hF3xyD+/d
e3VweDTAbwNuYjAfn4bbg2/SN+9+SPnbjl3hM4JGgklvb27d729+09/cog/f
vTr4x9HBy/3OwfHIynk+O1uUyzkTTjmj85fzAJ88wiSJnp8MqMlH+bjAQtw7
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
j/njTI/+7qGwH7e3RdNG02Hdz/4XoAAB0eWgAQA=

-->

</rfc>

