Re: [websec] New draft of HTTP header-based public key pinning

Tom Ritter <tom@ritter.vg> Wed, 09 November 2011 00:32 UTC

Return-Path: <tom@ritter.vg>
X-Original-To: websec@ietfa.amsl.com
Delivered-To: websec@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3736E11E8086 for <websec@ietfa.amsl.com>; Tue, 8 Nov 2011 16:32:00 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.977
X-Spam-Level:
X-Spam-Status: No, score=-2.977 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, RCVD_IN_DNSWL_LOW=-1]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KIYICjrynxOB for <websec@ietfa.amsl.com>; Tue, 8 Nov 2011 16:31:59 -0800 (PST)
Received: from mail-iy0-f172.google.com (mail-iy0-f172.google.com [209.85.210.172]) by ietfa.amsl.com (Postfix) with ESMTP id 9C0B611E8081 for <websec@ietf.org>; Tue, 8 Nov 2011 16:31:59 -0800 (PST)
Received: by iaeo4 with SMTP id o4so1478853iae.31 for <websec@ietf.org>; Tue, 08 Nov 2011 16:31:58 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ritter.vg; s=vg; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=ZLurUIKWQYBIp+k6DpqsYOedLGIfWKYePfzrOx5wrOQ=; b=L36UMaZyfaEb4THJT+HWT2x5uDOz6pimIY3Kuz9gwACVJ0zyC9Tfv6jwe5Q+uPSi/Z x5Ka+binJYOOXWJ6uuWkhKBR3adSCvM9vv6yOsxQjOoJ7QXkovfE6UnQG+reMgvBvl4U uxILdxJY7s1P+JtND8XjFVliWUpKcvKdmbVjE=
Received: by 10.42.108.136 with SMTP id h8mr51274icp.43.1320798718048; Tue, 08 Nov 2011 16:31:58 -0800 (PST)
MIME-Version: 1.0
Received: by 10.43.44.5 with HTTP; Tue, 8 Nov 2011 16:31:37 -0800 (PST)
In-Reply-To: <CAOuvq21Ne0CWT3Dzn0sutGDBg0K+efZhxmqBZiLuxbO2OwxnFg@mail.gmail.com>
References: <CAOuvq21Ne0CWT3Dzn0sutGDBg0K+efZhxmqBZiLuxbO2OwxnFg@mail.gmail.com>
From: Tom Ritter <tom@ritter.vg>
Date: Tue, 08 Nov 2011 19:31:37 -0500
Message-ID: <CA+cU71kFFpuooyiBTarvLT3VJigZhW0BgpQi1gMTn7zB=sFh+w@mail.gmail.com>
To: Chris Palmer <palmer@google.com>
Content-Type: text/plain; charset="ISO-8859-1"
Cc: Ian Fette <ifette@google.com>, Chris Evans <cevans@google.com>, IETF WebSec WG <websec@ietf.org>, Wan-Teh Chang <wtc@google.com>
Subject: Re: [websec] New draft of HTTP header-based public key pinning
X-BeenThere: websec@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Web Application Security Minus Authentication and Transport <websec.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/websec>, <mailto:websec-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/websec>
List-Post: <mailto:websec@ietf.org>
List-Help: <mailto:websec-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/websec>, <mailto:websec-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 09 Nov 2011 00:32:00 -0000

My notes:

I believe the BNF (pseudo-BNF?) is incorrect:

Public-Key-Pins = "Public-Key-Pins" ":" LWS directives

   directives      = max-age LWS ";" LWS fingerprints
                     / fingerprints LWS ";" LWS max-age

   max-age         = "max-age" LWS "=" LWS delta-seconds

   pins            = "pins" LWS "=" LWS fingerprints

   fingerprints    = fingerprint
                     / fingerprint "," fingerprints

   fingerprint     = fp-type "-" base64-digits

   fp-type         = "sha1"
                     / "sha256"
					
I believe 'directives' should replace "fingerprints" with "pins":

   directives      = max-age LWS ";" LWS pins
                     / pins LWS ";" LWS max-age
					
================

I think this paragraph is misworded:

UAs MUST have a way for users to clear current pins that were set by
   HSTS.  UAs SHOULD have a way for users to query the current state of
   Pinned Hosts.

Instead of HSTS, should that be "Public Key Pinning"?  If not, pins
set during HSTS must be flagged and treated differently - why?

================

Miscellany:

 - There is no directive or suggestion to User Agents about saving or
not saving pins received in a private browsing mode.  Maybe there
shouldn't be, but if a User-Agent does save them, the same 304/ETag
trick malicious sites use to track users can be created using certs
and subdomains.
 - The "Pinning Self-Signed End Entities" section was a bit confusing,
I had to read it a couple times to be sure you were talking about a
server's self-signed cert, and not a client cert.
 - The Pin-Break mechanism gets more complicated which each revision.
I know it's being shopped around for both this and the approach to put
pinning in the TLS layer (TACK), but does its removal implies pin
break codes are not intended to go into the final version of this
document, or will it be added later after the first bit is worked out?


Thanks Chris(es)!

-tom