Certificate Transparency

The information below is for an old version of the document
Document Type Active Internet-Draft (individual)
Last updated 2012-09-19
Stream (None)
Intended RFC status (None)
Formats plain text pdf html bibtex
Stream Stream state (No stream defined)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                          B. Laurie
Internet-Draft                                                A. Langley
Expires: March 23, 2013                                        E. Kasper
                                                      September 19, 2012

                        Certificate Transparency


   The aim of Certificate Transparency is to have every public end-
   entity and intermediate TLS certificate issued by a known Certificate
   Authority recorded in one or more certificate logs.  In order to
   detect mis-issuance of certificates, all logs are publicly auditable.
   In particular, domain owners or their agents will be able to monitor
   logs for certificates issued on their own domain.

   To protect clients from unlogged mis-issued certificates, logs sign
   all recorded certificates, and clients can choose not to trust
   certificates that are not accompanied by an appropriate log
   signature.  For privacy and performance reasons log signatures are
   embedded in the TLS handshake via the TLS authorization extension
   [RFC5878], or in the certificate itself via an X.509v3 certificate
   extension [RFC5280].

   To ensure a globally consistent view of the log, logs also provide a
   global signature over the entire log.  Any inconsistency of logs can
   be detected through cross-checks on the global signature.
   Consistency between any pair of global signatures, corresponding to
   snapshots of the log at different times, can be efficiently shown.

   Logs are only expected to certify that they have seen a certificate,
   and thus we do not specify any revocation mechanism for log
   signatures in this document.  Logs are append-only, and log
   signatures will be valid indefinitely.

Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months

Laurie, et al.           Expires March 23, 2013                 [Page 1]
Internet-Draft          Certificate Transparency          September 2012

   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on March 23, 2013.

Copyright Notice

   Copyright (c) 2012 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Laurie, et al.           Expires March 23, 2013                 [Page 2]
Internet-Draft          Certificate Transparency          September 2012

1.  Cryptographic components

1.1.  Merkle Hash Trees

   Logs use a binary Merkle hash tree for efficient auditing.  The
   hashing algorithm is SHA-256.  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 32-byte root 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:

   The hash of an empty list is the hash of an empty string:

   MTH({}) = SHA-256().

   The hash of a list with one entry is:

   MTH({d(0)}) = SHA-256(0 || d(0)).

   For n > 1, let k be the largest power of two smaller than n.  The
   Merkle Tree Hash of an n-element list D[n] is then defined
   recursively as

   MTH(D[n]) = SHA-256(1 || MTH(D[0:k]) || MTH(D[k:n])),

   where || is concatenation and D[k1:k2] denotes the length (k2 - k1)
   list {d(k1), d(k1+1),..., d(k2-1)}.

   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.
   [This Merkle tree is essentially the same as the history tree [1]
   proposal, except our definition omits dummy leaves.]

1.1.1.  Merkle audit paths

   A Merkle audit path for a leaf in a Merkle hash tree is the shortest
   list of additional nodes in the Merkle tree required to compute the
Show full document text