Certificate Transparency

The information below is for an old version of the document
Document Type Active Internet-Draft (individual)
Last updated 2012-09-12
Stream (None)
Intended RFC status (None)
Formats pdf htmlized (tools) htmlized 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 16, 2013                                        E. Kasper
                                                      September 12, 2012

                        Certificate Transparency


   The aim of Certificate Transparency is to have every public end-
   entity 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 will be able to monitor logs for
   certificates issued on their own domain.

   In order 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].

   In order 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.

   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 will be 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
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference

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

   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on March 16, 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 16, 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[0: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[0:n] is then defined
   recursively as

   MTH(D[0: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 current definition omits dummy leaves._

1.1.1.  Merkle audit paths

   A Merkle audit path for a leaf in a Merkle hash tree is the list of
   all additional nodes in the Merkle tree required to compute the
   Merkle Tree Hash for that tree.  If the root computed from the audit
   path matches the true root, then the audit path is proof that the
Show full document text