Re: [saag] On PKI vs. Pinning (SAAG 108 preview)

Viktor Dukhovni <ietf-dane@dukhovni.org> Sat, 22 August 2020 01:43 UTC

Return-Path: <ietf-dane@dukhovni.org>
X-Original-To: saag@ietfa.amsl.com
Delivered-To: saag@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B65A63A081F for <saag@ietfa.amsl.com>; Fri, 21 Aug 2020 18:43:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id O3c1d67wUqDB for <saag@ietfa.amsl.com>; Fri, 21 Aug 2020 18:43:29 -0700 (PDT)
Received: from straasha.imrryr.org (straasha.imrryr.org [100.2.39.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 914FB3A0807 for <saag@ietf.org>; Fri, 21 Aug 2020 18:43:29 -0700 (PDT)
Received: by straasha.imrryr.org (Postfix, from userid 1001) id 8656C2C46CC; Fri, 21 Aug 2020 21:43:28 -0400 (EDT)
Date: Fri, 21 Aug 2020 21:43:28 -0400
From: Viktor Dukhovni <ietf-dane@dukhovni.org>
To: saag@ietf.org
Message-ID: <20200822014328.GI37427@straasha.imrryr.org>
Reply-To: saag@ietf.org
References: <20200728191331.GV41010@kduck.mit.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20200728191331.GV41010@kduck.mit.edu>
Archived-At: <https://mailarchive.ietf.org/arch/msg/saag/4r9EL5EcIumQf-MMi5JfELemGq8>
Subject: Re: [saag] On PKI vs. Pinning (SAAG 108 preview)
X-BeenThere: saag@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Security Area Advisory Group <saag.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/saag>, <mailto:saag-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/saag/>
List-Post: <mailto:saag@ietf.org>
List-Help: <mailto:saag-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/saag>, <mailto:saag-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 22 Aug 2020 01:43:31 -0000

On Tue, Jul 28, 2020 at 12:13:31PM -0700, Benjamin Kaduk wrote:

> Is there benefit in arranging for a description of the system where
> the ability to pin is just a degenerate case of a PKI, with a single
> trust anchor and no real hierarchy?

FWIW, I should mention that the DANE support in OpenSSL (since 1.1.0) is
really just support for verifying a certificate chain against a list of
EE and/or TA pins.  The pins need not come from DNS, and DNSSEC is not
required to use the "DANE" in OpenSSL.  How the application obtains the
pin values is not OpenSSL's concern.

The PKIX-TA and PKIX-EE pins are second factors, while the DANE-TA
and DANE-EE pins are bypass verification via the usual root CA
store, and use only the pins to validate the chain.

Thus, for example, in Postfix the following all use the same underlying
"DANE" (really general-purpose pinning) API.

    - The "fingerprint" security level that verifies the peer
      against a static locally configured list of acceptable
      certificate or public key fingerprints.

    - The "secure" level with a local per-destination "tafile",
      which pins acceptable (possibly intermediate) issuer
      certificates or public keys.  The chain must be signed
      by an issuer that matches one of the pins.

    - The "dane" level, where the "pins" take the form of
      dynamically obtained DNSSEC-validated TLSA records,
      which can be a mixture of EE and TA pins.

So if an OpenSSL application wants to implement pinning that
either replaces or augments WebPKI validation, the code is
already there in OpenSSL, in the form of support for "DANE",
but perhaps it is not correctly "marketed".  It is a really
a fairly general framework for validating certificate chains
against a list of "pins" ("OR" rather than "AND" semantics,
success when any *one* of the pins works out).

-- 
    Viktor.