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

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

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

<rfc ipr="trust200902" docName="draft-ietf-trans-rfc6962-bis-26" category="std" 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="Comodo">Comodo CA, Ltd.</organization>
      <address>
        <email>rob.stradling@comodo.com</email>
      </address>
    </author>

    <date year="2017" month="July" day="28"/>

    <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>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 need to be
trusted because they are publicly auditable. Anyone may verify the correctness
of each log and monitor when new certificates are added to it. The logs do not
themselves prevent misissue, 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 show that any particular instance of the log is a superset of any
particular previous instance. Likewise, Merkle Trees avoid the need to blindly
trust logs: if a log attempts to show different things to different people, this
can be efficiently detected by comparing tree roots and consistency proofs.
Similarly, other misbehaviors of any log (e.g., issuing signed timestamps for
certificates they then don't log) can be efficiently detected and proved to the
world at large.</t>

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

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in <xref target="RFC2119"></xref>.</t>

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

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

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

<t>This document revises and obsoletes the experimental 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>Other TLS extensions: <spanx style="verb">status_request_v2</spanx> may be used (in the same
manner as <spanx style="verb">status_request</spanx>); <spanx style="verb">cached_info</spanx> may be used to avoid sending the
same complete SCTs and inclusion proofs to the same TLS clients multiple
times.</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"/>).
We have established 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 || is concatenation and 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). (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. 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 will
ultimately issue the certificate. This signature indicates the CA's intent
to issue the certificate. This intent is considered binding (i.e.,
misissuance of the precertificate is considered equivalent to misissuance of
the corresponding certificate).</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>
</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"/>):
* Allocate a tree index to the entry representing the accepted submission.
* Calculate the root of the tree.
* Sign the root of the tree (see <xref target="sth"/>).
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 parameters, which are used by clients to
communicate with the log and to verify log artifacts.</t>

<t><list style="hanging">
  <t hangText='Base URL:'>
  The URL to substitute for &lt;log server&gt; in <xref target="client_messages"/>.</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 chose to
limit it.</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="accepting-submissions" title="Accepting Submissions">

<t>To avoid being overloaded by invalid submissions, the log MUST NOT accept any
submission until it has verified that the submitted certificate or
precertificate has a valid signature chain to an accepted trust anchor, using
only the chain of intermediate CA certificates provided by the submitter.</t>

<t>Logs SHOULD accept certificates and precertificates that are fully valid
according to RFC 5280 <xref target="RFC5280"></xref> verification rules and are submitted with such
a chain. (A log may decide, for example, to temporarily reject valid submissions
to protect itself against denial-of-service attacks).</t>

<t>Logs MAY accept certificates and precertificates that have expired, are not yet
valid, have been revoked, or are otherwise not fully valid according to RFC
5280 verification rules in order to accommodate quirks of CA
certificate-issuing software.
However, logs MUST reject submissions without a valid signature chain to an
accepted trust anchor. Logs MUST also reject precertificates that do not conform
to the requirements in <xref target="precertificates"/>.</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>

<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>
<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 NTP Time <xref target="RFC5905"></xref> at which the certificate or precertificate
was accepted by the log, measured in milliseconds since the epoch (January 1,
1970, 00:00 UTC), ignoring leap seconds. 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 NTP Time <xref target="RFC5905"></xref>, measured in milliseconds since
the epoch (January 1, 1970, 00:00 UTC), ignoring leap seconds.</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="RFC7159"></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 base URL for a log and 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>The &lt;log server&gt; prefix, which is one of the log's parameters, MAY include a
path as well as a server name and a port.</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 structure
containing at least the following field:</t>

<t><list style="hanging">
  <t hangText='error_message:'>
  A human-readable string describing the error which prevented the log from
processing the request.</t>
  <t>In the case of a malformed request, the string SHOULD provide sufficient
detail for the error to be rectified.</t>
  <t hangText='error_code:'>
  An error code readable by the client. Other than the generic codes detailed
here, each error code is specific to the type of request. Specific
errors are specified in the respective sections below. Error codes are fixed
text strings.</t>
</list></t>

<texttable>
      <ttcol align='left'>Error Code</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>not compliant</c>
      <c>The request is not compliant with this RFC.</c>
</texttable>

<t>e.g., In response to a request of <spanx style="verb">/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[
    {
        "error_message": "'start' cannot be greater than 'end'",
        "error_code": "not compliant",
    }
]]></artwork></figure>

<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 https://&lt;log server&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'>Error Code</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>bad submission</c>
      <c><spanx style="verb">submission</spanx> is neither a valid certificate nor a valid precertificate.</c>
      <c>bad type</c>
      <c><spanx style="verb">type</spanx> is neither 1 nor 2.</c>
      <c>bad chain</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>bad certificate</c>
      <c>One or more certificates in the <spanx style="verb">chain</spanx> are not valid (e.g., not properly encoded).</c>
      <c>unknown anchor</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 https://&lt;log server&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 https://&lt;log server&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'>Error Code</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>first unknown</c>
      <c><spanx style="verb">first</spanx> is before the latest known STH but is not from an existing STH.</c>
      <c>second unknown</c>
      <c><spanx style="verb">second</spanx> is before the latest known STH but is not from an existing STH.</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 https://&lt;log server&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'>Error Code</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>hash unknown</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>tree_size unknown</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 https://&lt;log server&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><list style='empty'>
  <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>
</list></t>

<t><list style='empty'>
  <t><list style="hanging">
    <t hangText='latest STH &lt; requested STH'>
    Return latest STH.</t>
  </list></t>
</list></t>

<t><list style='empty'>
  <t><list style="hanging">
    <t hangText='latest STH &gt; requested STH'>
    Return latest STH and a consistency proof between it and the requested STH
(see <xref target="get-sth-consistency"/>).</t>
  </list></t>
</list></t>

<t><list style='empty'>
  <t><list style="hanging">
    <t hangText='index of requested hash &lt; latest STH'>
    Return <spanx style="verb">inclusion</spanx>.</t>
  </list></t>
</list></t>

<t><list style='empty'>
  <t>Note that more than one case can be true, in which case the returned data is
their concatenation. It is also possible for none to be true, in which case
the front-end MUST return an empty response.</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 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 https://&lt;log server&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>

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

<t>GET https://&lt;log server&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>TLS servers MUST use at least one of the three mechanisms listed 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. TLS
servers SHOULD also present corresponding inclusion proofs and STHs.</t>

<t>Three mechanisms are provided because they have different tradeoffs.</t>

<t><list style="symbols">
  <t>A TLS extension (Section 7.4.1.4 of <xref target="RFC5246"></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>An Online Certificate Status Protocol (OCSP) <xref target="RFC6960"></xref> response extension (see
<xref target="ocsp_transinfo_extension"/>), where the OCSP response is provided in the
<spanx style="verb">CertificateStatus</spanx> message, provided that the TLS client included the
<spanx style="verb">status_request</spanx> extension in the (extended) <spanx style="verb">ClientHello</spanx> (Section 8 of
<xref target="RFC6066"></xref>). This mechanism, popularly known as OCSP stapling, is already
widely (but not universally) implemented. It also allows SCTs and inclusion
proofs to be updated on the fly.</t>
  <t>An X509v3 certificate extension (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 will
subsequently consider the certificate to be non-compliant and in need of
re-issuance.</t>
</list></t>

<t>Additionally, a TLS server which supports presenting SCTs using an OCSP response
MAY provide it when the TLS client included the <spanx style="verb">status_request_v2</spanx> extension
(<xref target="RFC6961"></xref>) in the (extended) <spanx style="verb">ClientHello</spanx>, but only in addition to at least
one of the three mechanisms listed above.</t>

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

<t>TLS servers SHOULD send SCTs from multiple logs in case one or more logs are not
acceptable to the TLS client (for example, if a log has been struck off for
misbehavior, has had a key compromise, or is not known to the TLS client). For
example:</t>

<t><list style="symbols">
  <t>If a CA and a log collude, it is possible to temporarily hide misissuance from
clients. Including SCTs from different logs makes it more difficult to mount
this attack.</t>
  <t>If a log misbehaves, 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), servers may wish
to reduce the probability of their certificates being rejected as a result by
including SCTs from different logs.</t>
  <t>TLS clients may have policies related to the above risks requiring 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-scts-inclusions-proofs-and-sths" 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> (except as described in <xref target="cached_info"/>).</t>

<t>Presenting inclusion proofs and STHs in the TLS handshake helps to protect the
client's privacy (see <xref target="validating_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, the TLS server SHOULD include the <spanx style="verb">transparency_info</spanx> extension
in the ServerHello with <spanx style="verb">extension_data</spanx> set to a <spanx style="verb">TransItemList</spanx>. The TLS
server SHOULD ignore any <spanx style="verb">extension_data</spanx> sent by the TLS client. Additionally,
the TLS server MUST NOT process or include this extension when a TLS session is
resumed, since session resumption uses the original session information.</t>

</section>
<section anchor="cached_info" title="cached_info TLS Extension">

<t>When a TLS server includes the <spanx style="verb">transparency_info</spanx> extension in the ServerHello,
it SHOULD NOT include any <spanx style="verb">TransItem</spanx> structures of type <spanx style="verb">x509_sct_v2</spanx> or
<spanx style="verb">precert_sct_v2</spanx> in the <spanx style="verb">TransItemList</spanx> if all of the following conditions are
met:</t>

<t><list style="symbols">
  <t>The TLS client includes the <spanx style="verb">transparency_info</spanx> extension type in the
ClientHello.</t>
  <t>The TLS client includes the <spanx style="verb">cached_info</spanx> (<xref target="RFC7924"></xref>) extension type in the
ClientHello, with a <spanx style="verb">CachedObject</spanx> of type <spanx style="verb">ct_compliant</spanx> (see
<xref target="tls_cachedinfo_extension"/>) and at least one <spanx style="verb">CachedObject</spanx> of type <spanx style="verb">cert</spanx>.</t>
  <t>The TLS server sends a modified Certificate message (as described in section
4.1 of <xref target="RFC7924"></xref>).</t>
</list></t>

<t>TLS servers SHOULD ignore the <spanx style="verb">hash_value</spanx> fields of each <spanx style="verb">CachedObject</spanx> of type
<spanx style="verb">ct_compliant</spanx> sent by TLS clients.</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>

<t>Clients should somehow exchange STHs they see, or make them available for
scrutiny, in order to ensure that they all have a consistent view. The exact
mechanisms will be in separate documents, but it is expected there will be a
variety.</t>

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

<section anchor="receiving-scts-and-inclusion-proofs" title="Receiving SCTs and inclusion proofs">

<t>TLS clients receive SCTs alongside or in certificates. TLS clients MUST
implement all of the three mechanisms by which TLS servers may present SCTs (see
<xref target="tls_servers"/>). TLS clients MAY also accept SCTs via the <spanx style="verb">status_request_v2</spanx>
extension (<xref target="RFC6961"></xref>). TLS clients that support the <spanx style="verb">transparency_info</spanx> TLS
extension SHOULD include it in ClientHello messages, with empty
<spanx style="verb">extension_data</spanx>. TLS clients may also receive inclusion proofs in addition to
SCTs, which should be checked once the SCTs are validated.</t>

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

<t>To reconstruct the TBSCertificate component of a precertificate from a
certificate, TLS clients should remove the Transparency Information extension
described in <xref target="x509v3_transinfo_extension"/>.</t>

<t>If the SCT checked is 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>), then the client SHOULD also 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>), in
the process of reconstructing the TBSCertificate. That is to allow embedded v1
and v2 SCTs to co-exist in a certificate (See <xref target="v1_coexistence"/>).</t>

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

<t>In addition to normal validation of the server certificate and its chain, TLS
clients SHOULD validate each received SCT for which they have the corresponding
log's parameters. To validate an SCT, a TLS client computes 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:</t>

<t><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>The SCT's <spanx style="verb">signature</spanx> is then verified 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>

<t>TLS clients MUST NOT consider valid any SCT whose timestamp is in the future.</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"/>). Note that this will disclose to the
log which TLS server the client has been communicating with.</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 MUST NOT evaluate compliance if it did not send both the
<spanx style="verb">transparency_info</spanx> and <spanx style="verb">status_request</spanx> TLS extensions in the ClientHello.</t>

</section>
<section anchor="tls_cachedinfo_extension" title="cached_info TLS Extension">

<t>If a TLS client uses the <spanx style="verb">cached_info</spanx> TLS extension (<xref target="RFC7924"></xref>) to indicate 1
or more cached certificates, all of which it already considers to be CT
compliant, the TLS client MAY also include a <spanx style="verb">CachedObject</spanx> of type
<spanx style="verb">ct_compliant</spanx> in the <spanx style="verb">cached_info</spanx> extension. The <spanx style="verb">hash_value</spanx> field MUST be 1
byte long with the value 0.</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 needs to, at least, inspect every new entry in each log it watches.
It may also want to keep copies of entire logs. In order to do this, it should
follow these steps 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>Confirm that the tree made from the fetched entries produces the same hash as
that in the STH.</t>
  <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>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>Go to Step 5.</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-aware 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 should 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="RFC5226"></xref>.</t>

<section anchor="tls-extension-type" title="TLS Extension Type">

<t>IANA is asked to allocate an RFC 5246 ExtensionType value for the
<spanx style="verb">transparency_info</spanx> TLS extension. IANA should update this extension type to
point at this document.</t>

</section>
<section anchor="new-entry-to-the-tls-cachedinformationtype-registry" title="New Entry to the TLS CachedInformationType registry">

<t>IANA is asked to add an entry for <spanx style="verb">ct_compliant(TBD)</spanx> to the "TLS
CachedInformationType Values" registry that was defined in <xref target="RFC7924"></xref>.</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 and Expert Review</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="expert-review-guidelines" title="Expert Review guidelines">

<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>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>ed25519(0x0807)</c>
      <c>Ed25519 (PureEdDSA with the edwards25519 curve)</c>
      <c><xref target="RFC8032"></xref></c>
      <c>private_use(0xFE00..0xFFFF)</c>
      <c>Reserved</c>
      <c>Private Use</c>
</texttable>

<section anchor="expert-review-guidelines-1" 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="I-D.ietf-tls-tls13"></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 and Expert Review</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.]</t>

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

<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 and Expert Review</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="expert-review-guidelines-3" title="Expert Review guidelines">

<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'>Value</ttcol>
      <ttcol align='left'>Log</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>1.3.101.8192 - 1.3.101.16383</c>
      <c>Unassigned</c>
      <c>Parameters Required and Expert Review</c>
      <c>1.3.101.80.0 - 1.3.101.80.127</c>
      <c>Unassigned</c>
      <c>Parameters Required and Expert Review</c>
      <c>1.3.101.80.128 - 1.3.101.80.*</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 should be accompanied by all of
the required parameters (except for the Log ID) listed in <xref target="log_parameters"/>.</t>

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

<t>Since the Log IDs with the shortest encodings are a limited resource, the
appointed Expert should review the submitted parameters and judge whether or not
the applicant is requesting a Log ID in good faith (with the intention of
actually running a CT log that will be identified by the allocated Log ID).</t>

</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 misissue and take some action,
such as asking a CA to revoke a misissued certificate, or that the log has
misbehaved, which will be discovered when the SCT is audited. A signed timestamp
is not a guarantee that the certificate is not misissued, 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. As a log is allowed to serve an STH
that's up to MMD old, 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. In order to protect
the clients' privacy, these checks need not reveal the exact certificate to the
log. Instead, clients can request the proof from a trusted auditor (since anyone
can compute the proofs from the log) or communicate with the log via proxies.</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="offering_multiple_scts" title="Multiple SCTs">

<t>By offering multiple SCTs, each from a different log, TLS servers reduce the
effectiveness of an attack where a CA and a log collude (see <xref target="multiple-scts"/>).</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, 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='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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='http://www.rfc-editor.org/info/rfc4648'>
<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'><organization /></author>
<date year='2006' month='October' />
<abstract><t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4648'/>
<seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>



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



<reference  anchor="RFC5280" target='http://www.rfc-editor.org/info/rfc5280'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author initials='D.' surname='Cooper' fullname='D. Cooper'><organization /></author>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<author initials='S.' surname='Boeyen' fullname='S. Boeyen'><organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'><organization /></author>
<date year='2008' month='May' />
<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='http://www.rfc-editor.org/info/rfc5652'>
<front>
<title>Cryptographic Message Syntax (CMS)</title>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<date year='2009' month='September' />
<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="RFC5905" target='http://www.rfc-editor.org/info/rfc5905'>
<front>
<title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
<author initials='D.' surname='Mills' fullname='D. Mills'><organization /></author>
<author initials='J.' surname='Martin' fullname='J. Martin' role='editor'><organization /></author>
<author initials='J.' surname='Burbank' fullname='J. Burbank'><organization /></author>
<author initials='W.' surname='Kasch' fullname='W. Kasch'><organization /></author>
<date year='2010' month='June' />
<abstract><t>The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet.  This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family.  NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs.  It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required.  It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5905'/>
<seriesInfo name='DOI' value='10.17487/RFC5905'/>
</reference>



<reference  anchor="RFC6066" target='http://www.rfc-editor.org/info/rfc6066'>
<front>
<title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<date year='2011' month='January' />
<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='http://www.rfc-editor.org/info/rfc6960'>
<front>
<title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='M.' surname='Myers' fullname='M. Myers'><organization /></author>
<author initials='R.' surname='Ankney' fullname='R. Ankney'><organization /></author>
<author initials='A.' surname='Malpani' fullname='A. Malpani'><organization /></author>
<author initials='S.' surname='Galperin' fullname='S. Galperin'><organization /></author>
<author initials='C.' surname='Adams' fullname='C. Adams'><organization /></author>
<date year='2013' month='June' />
<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="RFC6961" target='http://www.rfc-editor.org/info/rfc6961'>
<front>
<title>The Transport Layer Security (TLS) Multiple Certificate Status Request Extension</title>
<author initials='Y.' surname='Pettersen' fullname='Y. Pettersen'><organization /></author>
<date year='2013' month='June' />
<abstract><t>This document defines the Transport Layer Security (TLS) Certificate Status Version 2 Extension to allow clients to specify and support several certificate status methods.  (The use of the Certificate Status extension is commonly referred to as &quot;OCSP stapling&quot;.)  Also defined is a new method based on the Online Certificate Status Protocol (OCSP) that servers can use to provide status information about not only the server's own certificate but also the status of intermediate certificates in the chain.</t></abstract>
</front>
<seriesInfo name='RFC' value='6961'/>
<seriesInfo name='DOI' value='10.17487/RFC6961'/>
</reference>



<reference  anchor="RFC7159" target='http://www.rfc-editor.org/info/rfc7159'>
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
<author initials='T.' surname='Bray' fullname='T. Bray' role='editor'><organization /></author>
<date year='2014' month='March' />
<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='RFC' value='7159'/>
<seriesInfo name='DOI' value='10.17487/RFC7159'/>
</reference>



<reference  anchor="RFC7231" target='http://www.rfc-editor.org/info/rfc7231'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<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='http://www.rfc-editor.org/info/rfc7633'>
<front>
<title>X.509v3 Transport Layer Security (TLS) Feature Extension</title>
<author initials='P.' surname='Hallam-Baker' fullname='P. Hallam-Baker'><organization /></author>
<date year='2015' month='October' />
<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="RFC7924" target='http://www.rfc-editor.org/info/rfc7924'>
<front>
<title>Transport Layer Security (TLS) Cached Information Extension</title>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'><organization /></author>
<date year='2016' month='July' />
<abstract><t>Transport Layer Security (TLS) handshakes often include fairly static information, such as the server certificate and a list of trusted certification authorities (CAs).  This information can be of considerable size, particularly if the server certificate is bundled with a complete certificate chain (i.e., the certificates of intermediate CAs up to the root CA).</t><t>This document defines an extension that allows a TLS client to inform a server of cached information, thereby enabling the server to omit already available information.</t></abstract>
</front>
<seriesInfo name='RFC' value='7924'/>
<seriesInfo name='DOI' value='10.17487/RFC7924'/>
</reference>



<reference  anchor="RFC8032" target='http://www.rfc-editor.org/info/rfc8032'>
<front>
<title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'><organization /></author>
<author initials='I.' surname='Liusvaara' fullname='I. Liusvaara'><organization /></author>
<date year='2017' month='January' />
<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="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="I-D.ietf-tls-tls13">
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

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

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-tls13-21' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-tls13-21.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC6234" target='http://www.rfc-editor.org/info/rfc6234'>
<front>
<title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<author initials='T.' surname='Hansen' fullname='T. Hansen'><organization /></author>
<date year='2011' month='May' />
<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="RFC5226" target='http://www.rfc-editor.org/info/rfc5226'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author initials='T.' surname='Narten' fullname='T. Narten'><organization /></author>
<author initials='H.' surname='Alvestrand' fullname='H. Alvestrand'><organization /></author>
<date year='2008' month='May' />
<abstract><t>Many protocols make use of identifiers consisting of constants and other well-known values.  Even after a protocol has been defined and deployment has begun, new values may need to be assigned (e.g., for a new option type in DHCP, or a new encryption or authentication transform for IPsec).  To ensure that such quantities have consistent values and interpretations across all implementations, their assignment must be administered by a central authority.  For IETF protocols, that role is provided by the Internet Assigned Numbers Authority (IANA).</t><t>In order for IANA to manage a given namespace prudently, it needs guidelines describing the conditions under which new values can be assigned or when modifications to existing values can be made.  If IANA is expected to play a role in the management of a namespace, IANA must be given clear and concise instructions describing that role.  This document discusses issues that should be considered in formulating a policy for assigning values to a namespace and provides guidelines for authors on the specific text that must be included in documents that place demands on IANA.</t><t>This document obsoletes RFC 2434.  This document specifies an Internet Best  Current Practices for the Internet Community, and requests discussion and  suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='RFC' value='5226'/>
<seriesInfo name='DOI' value='10.17487/RFC5226'/>
</reference>



<reference  anchor="RFC6962" target='http://www.rfc-editor.org/info/rfc6962'>
<front>
<title>Certificate Transparency</title>
<author initials='B.' surname='Laurie' fullname='B. Laurie'><organization /></author>
<author initials='A.' surname='Langley' fullname='A. Langley'><organization /></author>
<author initials='E.' surname='Kasper' fullname='E. Kasper'><organization /></author>
<date year='2013' month='June' />
<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='http://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 initials='T.' surname='Pornin' fullname='T. Pornin'><organization /></author>
<date year='2013' month='August' />
<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='http://www.rfc-editor.org/info/rfc7320'>
<front>
<title>URI Design and Ownership</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2014' month='July' />
<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='BCP' value='190'/>
<seriesInfo name='RFC' value='7320'/>
<seriesInfo name='DOI' value='10.17487/RFC7320'/>
</reference>



<reference anchor="I-D.ietf-trans-gossip">
<front>
<title>Gossiping in CT</title>

<author initials='L' surname='Nordberg' fullname='Linus Nordberg'>
    <organization />
</author>

<author initials='D' surname='Gillmor' fullname='Daniel Gillmor'>
    <organization />
</author>

<author initials='T' surname='Ritter' fullname='Tom Ritter'>
    <organization />
</author>

<date month='January' day='10' year='2017' />

<abstract><t>The logs in Certificate Transparency are untrusted in the sense that the users of the system don'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 "split view" of their operations.  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-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-trans-gossip-04.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="http://www.certificate-transparency.org/known-logs/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 initials='S' surname='Kent' fullname='Stephen Kent'>
    <organization />
</author>

<date month='April' day='17' year='2017' />

<abstract><t>This document describes an attack model and discusses threats for the Web PKI context in which security mechanisms to detect mis-issuance of web site certificates are being developed.  The model provides an analysis of detection and remediation mechanisms for both syntactic and semantic mis-issuance.  The model introduces an outline of attacks to organize the discussion.  The model also describes the roles played by the elements of the Certificate Transparency (CT) system, to establish a context for the model.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-trans-threat-analysis-11' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-trans-threat-analysis-11.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:
H4sIAEUFe1kAA+29eXfb1pIv+j8+xV72Wi9UH5LWYDuxnORdRbaPdY6naylJ
35v4iSAJSohIgA2Aknkc38/+atwTQEl2nHT3W0/dJ5ZIYI+1a9pVvxoMBkmT
N/Ns39w5zKomn+WTtMnMSZUW9TKtsmKyNj9lVZ2Xhdkdbt9JpuWkSBfw/LRK
Z80gz5rZoMGnB9Vs8vDRw93BOK8Huw+TclyX86zJ6n2DHyfY7llZraGnupne
SZJ8WcHvTbWqm93t7Ufbu3cS6DDdN8fZZFXlzTq5Ots3J28PXh2b3pvVeJ5P
zKuySat1MLytJKmbtJiepvOygHGtszqpF2nVnP7HqqTuy9ksWeb75pemnPRN
XVZNlc1q+G29wF/eJUm6as7Laj8xg8TAD0/wh6wwL1IYSUYflhWM5u9leTbP
zI//NC+a6ZA+T8fjKrvUr+ijbJHm830zzor5/zijj4eTchG2fjBNF9B8AV+u
W+0fFZObGk/PNrf9dJHP89T8M62XWdVq/Pgqb/6VVXNYM/P3xfj5DR1lF9TM
5s5gL8zLrK6zKv/MhcqgicXGDt6WY3MMJDad58WZ6+GwXJTT0hwe9Ntd8Hd+
F1U5HtbayP+Y0PfUVVKU1SJt8ssMtt+8fXa4u7PzSH69//D+N/Lrg937D+2v
32zrrw8f7Oqvj7YfyK8Ptx/qs0D52+7XHfn1650H2sXXu3v204d7e/rro937
8us323vUxfOTly/ub9OzxsAhOMuafXPeNMv9e/eurq6GV3tDWJZ7J2/v7Tx6
9Oje26eHg/NmMYdXBvjBzu7ufX6VTzs2Z+4Pt3fM8TKb8LGHM86rqKeBfgby
rzF5AYfpydC8Tc+g98Z+ztv0JL3Mp9F30bsHQ/MiM8/Lqo7ePaiKdDWNvoxe
Phqaf6QT4CrRu0dAft4XU2Az+wanPNjZHcikkTazOi9mpc7qzs9lNZ+an/Np
Zn7OxkAxBTKGfLUwbzOgi0VWTGlF7gABdq/ls6M3xzvfPBzc79yT4nK+XI3r
YZHXzfCsvLyHv+An9/C9e6+Ojk+G+NuQmhgupzN/e/Ab8+bHHwx927ErdASw
EW/Su9s7e4PtrwfbO/Dh0eDJkJnzvMb/7QBtJbgCIbU/3N27b+l61yPbXfvr
15ZW93aJmF3TxPfPyrrOl/jFYVXW4/XP6XyeTs47VwU4dZNPhqs6K/L3RLDZ
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
yOSNGMqfAK6M8NC0borWHI0RCxEePenEdTZvM4qWm2Tmnjlwp4XDn66DgL79
TLqgo6+Zyfb77W03vuPnB4PdBw/dB7vDnYfDb+5vY4DCNoYr3B/CR/AFRSPs
7t1/1zXRaCbYyY4ZwD9PnsGrPxbMKIAyuJNNb9q69mz1vNV7TmRWT9+j3Qef
kfrDnTzdpk6ePqOVJj1uatva2Am1lJNwmZsf62zTk9LJM+7k2ad18gbT0oBh
XNe+dvKZG/9JJMzXMsEanq0QhwMOvXLzJbGxzK61sL4ogI5M8JLCLu0JOKe8
a7ZYkzrYRFEP61XeWP8b4QHhG5NqvWzKsypdgnyPeQPpNUWZsH8ERHW+wAwT
gu6fA2uh1ilB3gZFyp+kpk1TepyvEh2coEpxqXpuVZ2AwVkN6DO5XNfFfJvV
dXX+afzuj1HFJ7yER8EO9xgkyyILeCKf3vZ8rqf9W3DIbmj8v2jG2WRap6eg
uCyBR1Y7oNGl8EsPuNv97b0tZCWHT44PTO/V0fGJeYOMVNCVIrYazviXZ0dv
jne+eTjo5qW36vgJRnMsgEjATp5sHMbzlweHAxgLDUVY+KOvH21g4dTxdPfB
g51H2NM3219vtQf/lB8wvTewz0+n2K9Dy5uSecIPTFbAKLdkxtDxN9t7u9d0
vGR+eQqsATp/9nR7ezhEpvvs2ZbSScB6b/NzIxf+TySu/yx+3JfvWBm2chnv
c+0FEGG7RYf9raqmPer3Gk6ICuTR4Mkwz5rZoJnX+L+dvXdbXZIg2SAJOvgn
8+ufONNe8AtQpaXAFf2Uo0RPUS3/JH49arc76mDYHb1/Or++jjj+gFbKBE9K
Pi60DNX/7rN10S88atRAnQ56/dn+3UXBmt6/tfhRNGpuesd/PQi8jJqGlv8d
fq5rNGraa+F3Ewdw/rGm91qj5ujj+PnPaPp+16jbrX9O0w/81ztwDP5A0570
/N13hVr0hM9v+mu/6TYsg/vu05v+RsyeZx2Gj//8p5s622rsdFkiQdOfbOBs
q4lzY9OfbdZ8UR6SICtAESmshIUZXb/K0GvxsEssPqdIccmAFbB/e0NrLncT
m2bDiJPdidMgfn5FVgQKEN7x7JvlnJC1xC/0lVDKVxxyYz1cnjeozzkd6KDG
dgSfVSvbDn9990d0goof92KNQyssyoMiD2oyzZo0n9MdEN0auodC9yvZT3Tv
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

-->

</rfc>

