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

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

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

<rfc ipr="trust200902" docName="draft-ietf-trans-rfc6962-bis-35" 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="March" day="25"/>

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



    </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)).</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.
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. Whilst it is anticipated that additional mechanisms could be 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>

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

<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 n input <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. 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 (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> 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.</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">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>Various data structures <xref target="data_structures"/> are signed. A log MUST use one of
the signature algorithms defined 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.</t>
  <t><spanx style="verb">SignedData.version</spanx> MUST be v3(3).</t>
  <t><spanx style="verb">SignedData.digestAlgorithms</spanx> MUST only include 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
<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 (to reduce the ability to track clients as described in
<xref target="prevent_tracking_clients"/>). 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 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.</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 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.
The final STH should be provided in the form of a TransItem of type
<spanx style="verb">signed_tree_head_v2</spanx>.</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 present this chain for auditing upon
request (see <xref target="get-entries"/>). This prevents the CA from avoiding 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"/>). 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 DER encoding of the OID can be reproduced simply by
prepending an OBJECT IDENTIFIER tag (0x06) to the opaque vector length and
contents.</t>

<t>OIDs used to identify logs are limited such that the DER encoding of their value
is less than or equal to 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> matches 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<0..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. 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>

<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, 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.</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<1..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.</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<1..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.</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.
To avoid that, the following actions are suggested:</t>

<t><list style="symbols">
  <t>Make it known to clients and monitors that the log will be frozen.</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 <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="RFC7320"></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.
These extra fields 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.</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 base64 encoded CA certificates. 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 cannot 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 (e.g., if
<spanx style="verb">type</spanx> was 2 (for <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"/>. The <spanx style="verb">tree_size</spanx>
must designate an existing v2 STH. Because of skew, the front-end may not know
the requested STH. 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 STH
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
chosen certificate 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"/>. The <spanx style="verb">tree_size</spanx>
must designate an existing v2 STH.</t>
</list></t>

<t>Because of skew, the front-end may not know the requested STH 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 STH</c>
      <c>Return latest STH</c>
      <c>latest STH &gt; requested STH</c>
      <c>Return latest STH and a consistency proof between it and the requested STH (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
chosen certificate in the returned 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 STH 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 representing the 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>.</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 base64 encoded trust anchors that are acceptable to the log.</t>
        <t hangText="max_chain_length:">
        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>

</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. They
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, 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.</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 to a client 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>.</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.</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="new-entry-to-the-tls-extensiontype-registry" title="New Entry to the TLS ExtensionType Registry">

<t>IANA is asked to add an entry for <spanx style="verb">transparency_info(TBD)</spanx> to the "TLS
ExtensionType Values" registry defined in <xref target="RFC8446"></xref>, setting the "Recommended"
value to "Y", setting the "TLS 1.3" value to "CH, CR, CT", and citing this
document as the "Reference".</t>

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

<t>IANA is asked to establish a registry of hash algorithm values, named
"CT 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>

<section anchor="specification-required-guidance" title="Specification Required guidance">

<t>The appointed Expert 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>
<section anchor="signature_algorithms" title="Signature Algorithms">

<t>IANA is asked to establish a registry of signature algorithm values, named
"CT Signature Algorithms", that initially consists 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>

<section anchor="expert-review-guidelines" title="Expert Review guidelines">

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

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

<t>IANA is asked to establish a registry of <spanx style="verb">VersionedTransType</spanx> values, named
"CT VersionedTransTypes", that initially consists 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 0x0000 value is reserved so that v1 SCTs are distinguishable from v2
SCTs and other <spanx style="verb">TransItem</spanx> structures.</t>

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

<section anchor="specification-required-guidance-1" title="Specification Required guidance">

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

</section>
</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 "CT 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>

<section anchor="specification-required-guidance-2" title="Specification Required guidance">

<t>The appointed Expert should review the public specification to ensure that it is
detailed enough to ensure implementation interoperability. The Expert 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>
<section anchor="object-identifiers" title="Object Identifiers">

<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 anchor="log_id_registry" title="Log ID Registry">

<t>IANA is asked to establish a registry of Log IDs, named "CT 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 reserved.
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 been delegated. 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>
<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 anchor="trans-error-types" title="TRANS Error Types">

<t>IANA is requested to create a new registry for errors.
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>
<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>

<t><xref target="I-D.ietf-trans-threat-analysis"></xref> provides a more detailed threat analysis of the
Certificate Transparency architecture.</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. Such misbehavior is detectable and <xref target="I-D.ietf-trans-threat-analysis"></xref>
provides more details on how this can be done.</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 clients comparing their instances of the Signed Tree Heads. There
are various ways this could be done, for example via gossip (see
<xref target="I-D.ietf-trans-gossip"></xref>) or peer-to-peer communications or by sending STHs to
monitors (who could then directly check against their own copy of the relevant
log). 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>

</section>
<section anchor="prevent_tracking_clients" title="Preventing Tracking Clients">

<t>Clients that gossip STHs or 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='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='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='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='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='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='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='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='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='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='RFC7320' target='https://www.rfc-editor.org/info/rfc7320'>
<front>
<title>URI Design and Ownership</title>
<author fullname='M. Nottingham' initials='M.' surname='Nottingham'><organization/></author>
<date month='July' year='2014'/>
<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 URI substructure is inappropriate, because that essentially usurps ownership.  This document further describes this problematic practice and provides some acceptable alternatives for use in standards.</t></abstract>
</front>
<seriesInfo name='RFC' value='7320'/>
<seriesInfo name='DOI' value='10.17487/RFC7320'/>
</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='I-D.ietf-trans-gossip'>
   <front>
      <title>Gossiping in CT</title>
      <author fullname='Linus Nordberg'>
	 <organization>NORDUnet</organization>
      </author>
      <author fullname='Daniel Kahn Gillmor'>
	 <organization>ACLU</organization>
      </author>
      <author fullname='Tom Ritter'>
	 </author>
      <date day='14' month='January' year='2018'/>
      <abstract>
	 <t>   The logs in Certificate Transparency are untrusted in the sense that
   the users of the system don&#39;t have to trust that they behave
   correctly since the behavior of a log can be verified to be correct.

   This document tries to solve the problem with logs presenting a
   &quot;split view&quot; of their operations or failing to incorporate a
   submission within MMD.  It describes three gossiping mechanisms for
   Certificate Transparency: SCT Feedback, STH Pollination and Trusted
   Auditor Relationship.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-trans-gossip-05'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-trans-gossip-05.txt' type='TXT'/>
</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='I-D.ietf-trans-threat-analysis'>
   <front>
      <title>Attack and Threat Model for Certificate Transparency</title>
      <author fullname='Stephen Kent'>
	 <organization>Independent</organization>
      </author>
      <date day='5' month='October' year='2018'/>
      <abstract>
	 <t>   This document defines an attack model and discusses threats based on
   the system design presented in [I-D.ietf-trans-rfc6962-bis].  It
   analyzes potential vulnerabilities associated with that design, and
   considers compromises of system elements and malicious behavior by
   such elements.  It does not consider implementation vulnerabilities,
   including ones that might enable denial of service attacks against
   these elements.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-trans-threat-analysis-16'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-trans-threat-analysis-16.txt' type='TXT'/>
</reference>




    </references>


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

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


  </back>

<!-- ##markdown-source:
H4sIADkAXWAAA+y9aVsbWbYu+D1+RVz8PJ1QJWTAQ9pkVvYlMS5T5akNmXVO
Z7pRIAUQhaTQUYTAKtv3t/d617CHiBDgnE7dfppzKg1SxJ73mte7Njc3k7qo
x/luurafz+virBhmdZ4ez7NpNcvm+XS4TH/M51VRTtOd/tZaMiqH02xCz4/m
2Vm9WeT12WaNpzfnZ8PHTx/vbJ4W1eaDR0l5WpXjvM6r3RQfJ2j3vJwvd9P8
wyxJitmc+qzni6re2dp6urWzllB32W56lA8X86JeJtfnu+nxu73XR+n628Xp
uBimr8s6my+jwW0kSVVn09FJNi6nNKplXiXVJJvXJ/+1KLnz8uwsmRW76U91
OeylVTmv5/lZRb8tJ/jlfZJki/qinO8m6WaS0o9M7/t8mr7MaCQ5f1jOaTR/
LcvzcZ7+8Pf0ZT3q8+fZ6ek8v7Kv+KN8khXj3fQ0n47/5zl/3B+Wk7j1vVE2
oean9OWy1f7hdHhb49n56rYPJsW4yNK/Z9Usn7caP7ou6n/l8zGtWfrXyemL
WzrKL7mZ1Z3RXqSv8qrK58UvXKicmpis7OBdeZoe0QEbjYvpue+BTkldnJft
9vWLsIN5efo/K/mY20+m5XyS1cVVTnuevnu+v7O9/VR/ffj44RP99dHOky37
9fGjHf318dbjx/br08f2wNc7D7bt18cPHtivT7a+1l+fbD2wFp5sf/3Qft15
ZB0/efiQ231x/Orlwy1uLE3puJ/n9W56Udez3fv3r6+v+9cP+rQA94/f3d9+
+vTp/XcH+5sX9WRMr2zig+2dnYfyqtxqNJc+7G9tp0ezfCjXm+6yLJmde/7Z
1H/TtJjStXnWT99l59R77T6XDXmWXRWjxneNd/f66cs8fVHOq8a7e/Npthg1
vmy8fNhP/5YNiXo03j2kgxZ8MSJysptiypvbO5s6aZzCvCqmZ6XNau0f5Xw8
Sv9RjPL0H/lpul9OQQKKxSR9l9NhmOTTEa/IGh217rV8fvj2aPvJ482HnXsy
vRrPFqdVf1pUdf+8vLqPX/DJfbx3//Xh0XEfv/W5if5sdBZuD75J3/7wfcrf
duwKH3Y0Ekx6Z2v7webW15tb2/ThD68P/+P48NVB5+B4ZOUsn57Py8WMD045
pYuU8wCfPsYkn3799GmfmnycjwosxP3TrMpHRBnv/7h9MrzIZlsP+1iVe3V2
frL18GT7cTiB44s8fUMdpH9FD+n39G580qr0sKoWefp1enhwcEBXeZRub209
6G9vEtl/0sNkHqcH0vWq+eNN4hi0rfG9fbzz4KG/i+6G0ozsAj7Y2XK3bofv
1+Hms37AtM7Lqipm+GJ/Xlany39k43E2vOhcTWI0dTHsL6p8Wnzgxcyv8ml9
n2jL1tP7dT68uH+2GI9PZhlRzOr+kBts7vjBGa1MQa/RRaozkLbFsF7M8yql
2aXH2YTe3TygK4ZHXpbn50b2brytR30df+PSHA3LusZ9jL5tX3WdduuqT9Fy
+KWdwK2nm1tPVt25t/NymNNxmp5XxH7Tms7I9pP6Iv3h6IBOq+Pw6dFyMisr
uos9un2vyilx5myMrbiYlxP6uP+2JLa/XEkLh/Yc9uJFOcnv2yeblfZxf+il
GtlyFRzCPbH+0lUi0KqDidPvXqZZ/5O4TBXfVFzqvx29ed1/ldcZfZq1Z1Pp
dM71gBFZuj+s74/L85MxERP3y0k1vCCW1v9npVelOXw6Lql1w53S/uONXzl8
tx3U/u+5JZjo5ozb/6Ld4Xm/9e/98pk2iEN9QQey3sym2XhZFdVukmxubpKk
UdHXwzpJji+KKiWBeDHBZR3l1XBenNJNvvICs53/lWNf3z/eSGbzkqTTcsw0
YMbC7niZjuX28/v5BzoA9EKOBqUBYmMkQi7zub9Q68cvjzYSupE0gjRY5irN
KjSzTKnXtABBHtHCpMRM8eyoR4QgzdJJNp3Si/VFVqd058vrKsmmS5Kr07qk
VSUiHTSKCcpKc8/7exspLUpxhb8gXE5LOss5Dx4dZjL2pFqQPDmsW6O7zsdj
HqX1hBeDh7AaPIdJlY+v8qqPPSWeUGPpi0oGzfR4QUNfpsMxiCy1Wy6I/5Ok
T2QbjV+UJP3FvfOroxIjTrLZLM/mshzUYy/Nz84gOl7l1CbtzhAbsr8n4xyN
sEy2nnGbJcaaYND95kFxmhH4EitHfTp6WPKqTCthnliUdJpfp7SjtPk0Sz5R
PNSiSmgyI/RBrGiUXmXzolxU6f4xhkxbTMOgrUDHL7Fo2PNpXl+X80tQ6yva
Fp10MZmNcx4TVtudQpIY5sq8cSCrxemE5oi/E+zsfy2Y5Os5ocZJWiCZYoRV
q8OZ9uXCTIrRiET+5B5pNvW8HBHDA7NPVt6JrJjwCk5IKjjHtzq6Uxoszj+N
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
0++r2O53RGMc00VwHpXAiRLLhV2+lMDBwSLSidc/+StWpuSrQS98PhmIP637
BfluoCmKg630W5XAvlU33ECo3QUTQNO3Oxi7izdRK+WtCnjQRKCC31lRdnJj
h9wrSjE0BVkPiZQnmoCYNUeUdlQXmMHyPm2sq1oOYamOBur1zA51V1bOOa6c
tqsOTa/qdmqVX6DniYLHo+tQGUVvxsi0hbm1MHc+GhmqMGNTp1dP9FGghvsc
DNPIh4Pbmvg31MnPuhTbIf5zRlr5zz+bKi2+vpUPV/8bqPCdo69YiR/+CiX+
MameZzAcqbzFMkZt6kYtYUg3HosoTQLDYFrda+mEvFkWaiCRV26D5fvg5pqX
CVEOQRPVLU1ERNLaUEEP7kaaPJsH6Oiqnn/wIcO8hYnEQWXHzp79tcUuM2t0
TkX8cExZ8Pd9/OfnpPFB9NF9+8V/dt8/7z4MPvOfXqbRzzjRR38OP72vj6OF
n8OPtR1p+efwc/nm3CYl/xTyzz8T14H+a39+ShCJx78O0xH+IZrEf44eJ+kn
+j9+Sv6lf5LRVjraxtc76egB/fMwHT1KnFjQ5QCkN2i3fv7ptJdekID6vn/D
ow/k0WEvPb/t0Yfy6Fkv/Wcvvbzx0cfyaBE8J5G8rEyfLooxRNShJFIwXS+g
eizm7KRrKrW8vHRmtvy+4M/tv1wmHTvJm+P2rLHJummN3YxOnG7o0H3ndtjv
6Sf/nttkv6+0U/ITbLTfWvcT7LXbZPcT7XoS3A3MfCft+Gncqvtpc1mCmTZv
VseTrTtoH6x4sOsWtvel+Wz40YpH3cPRPS78r533+368uz93/Kp/tk+KXciV
1KBxfNzOriISDRrBVxi/rKIdDdLRmkeLpDQoivtZTWkahMb93E6A3M8qwhTr
LasFZrnSKmNzfKyoRw9gI/vp6/fQmZgyjRxxApli7aQhDHNTIq/Tw2PBVHAR
DRAbDWDnory27pJAv2OWxa307zLs7Y5hP4yGTaO1QEFOVxZpziU2K/3iZsZ3
6nKno8vHUZeFI8ykXBarlmlHlumfrBr8oiXakRTHI0sDhDbncgKRafmjAhiN
GhmXHz82szI/8yglGwH2fHgmOMsVsdkSYy7m5HbKYRXCFH386J6IosI54v5I
MTvmVZL43zWZJE7Bk6yLbDolFXqoXmtEaYTPzGhyQFVJHODGeiM7cQPLyFAJ
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
nk0Zm+WgcxaaB2aPHDnIwvwByzPXy62HAQA=

-->

</rfc>

