Re: [TLS] Adoption call for draft-davidben-tls13-pkcs1

David Benjamin <davidben@chromium.org> Thu, 12 December 2019 15:51 UTC

Return-Path: <davidben@google.com>
X-Original-To: tls@ietfa.amsl.com
Delivered-To: tls@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0636B120809 for <tls@ietfa.amsl.com>; Thu, 12 Dec 2019 07:51:06 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -9.249
X-Spam-Level:
X-Spam-Status: No, score=-9.249 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, USER_IN_DEF_SPF_WL=-7.5] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=chromium.org
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 edFNNdqaC_2a for <tls@ietfa.amsl.com>; Thu, 12 Dec 2019 07:51:04 -0800 (PST)
Received: from mail-pf1-x444.google.com (mail-pf1-x444.google.com [IPv6:2607:f8b0:4864:20::444]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 786881200E9 for <tls@ietf.org>; Thu, 12 Dec 2019 07:51:04 -0800 (PST)
Received: by mail-pf1-x444.google.com with SMTP id 2so959872pfx.6 for <tls@ietf.org>; Thu, 12 Dec 2019 07:51:04 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=L+cL++88UfKjiyQLkx1g/r2oQBpmWoFwrfyNpFBD3YQ=; b=KzdosTYaiBaR+ptw+80no6sZtIOaEQ8obcR30iY8gQ/avD44kfSYEcTFumHe6BgM5r btYUJ1BfH/NunoPQ5mKCzRFluBcEIEb+P9Hs/K5LmuZ37wo+PtSvuIRwSYtTyz85p5U4 AElF6uzV3BE/ZLCYM34CGTXKaH7D20SARXtrs=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=L+cL++88UfKjiyQLkx1g/r2oQBpmWoFwrfyNpFBD3YQ=; b=MaNmQj9DAZjRRA6qKRddiZwN1sOgEXf3j1BHtOeSEY7H6uL1KQVYw1rn0qyUBZuxvI Q01RmsWg8cV4vJ/4GCfzuHOISdCP8CBJ8FpV21XzS7brpQFAbBtX5wfDRCQ6jLfHIkv8 iRQMjx567G4MF51riF+bRWWFzqL9i1ayD9dIq8CZJT8MAZbSx07eJRLL3pEIB1GFVrUz PHrlOTdikuxTqzvgEpOZESwDBU3Ap+APw3IStn0eCNYtkF0Ic1Q3tzPiuYO/F9/Pkjlz v9XA9HGxfSbQL4i023d2mW9qEU3s6UgX7LMzZUaRRjWfehUnTw4l95mLULT23ELsRofi uOSw==
X-Gm-Message-State: APjAAAUVz0YXHRUoBAO3yAB4dLKJr5cmVbnQFVpeVoyuQV9IBb91E0re 8GhSWJMI6XCdfp6Mbhq9m1j/Hb5FsYPd2TZawAPb
X-Google-Smtp-Source: APXvYqzmiJLa1v+Aj8GLzGY8fy+MMm/BhzwvMwxPMaTKt+PDz0dLZBPRDlJSNTY3U2u2nHQdSQvsaQS/CT+T2h/cQ6c=
X-Received: by 2002:a62:5547:: with SMTP id j68mr10799875pfb.6.1576165863801; Thu, 12 Dec 2019 07:51:03 -0800 (PST)
MIME-Version: 1.0
References: <843cc437-4c6d-43ce-b634-527a287c4e27@www.fastmail.com> <c4bab542-f1fd-4c80-89b8-1b7a3ef883a7@www.fastmail.com> <CAMfhd9W_+1i=Q48GKAxT=TtHm+fKxUKUepqCtfJ7xQ6LgM4h_w@mail.gmail.com> <CAEMoRCshwo1vsb+bYbJLpOCMWGcJ15sz8COXeXbxmX-KDbY8Mw@mail.gmail.com> <20191207102017.GA1754124@LK-Perkele-VII> <8f54acb3-61df-4617-b2c6-53b8c9021575@redhat.com> <20191211142155.GA1879660@LK-Perkele-VII> <CAF8qwaAHXGWwAswv8XfhjhN3fi7XtVSngLJY8sekYgX+u=wXVA@mail.gmail.com> <054bd0ed-6afe-4500-9339-16f414aa8840@redhat.com>
In-Reply-To: <054bd0ed-6afe-4500-9339-16f414aa8840@redhat.com>
From: David Benjamin <davidben@chromium.org>
Date: Thu, 12 Dec 2019 10:50:45 -0500
Message-ID: <CAF8qwaChxmQw8K6YbEUkkxTQ6UnXfuowzoZZUOoje9Cw5p1dEQ@mail.gmail.com>
To: Hubert Kario <hkario@redhat.com>
Cc: "<tls@ietf.org>" <tls@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000006bb34f059983b635"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/l6OMD6y-R_DOOsZOTKc34zrM7i4>
Subject: Re: [TLS] Adoption call for draft-davidben-tls13-pkcs1
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <tls.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tls>, <mailto:tls-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tls/>
List-Post: <mailto:tls@ietf.org>
List-Help: <mailto:tls-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tls>, <mailto:tls-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 12 Dec 2019 15:51:06 -0000

On Thu, Dec 12, 2019 at 6:51 AM Hubert Kario <hkario@redhat.com> wrote:

> On Wednesday, 11 December 2019 18:06:19 CET, David Benjamin wrote:
> > On Wed, Dec 11, 2019 at 9:22 AM Ilari Liusvaara <
> ilariliusvaara@welho.com>
> > wrote:
> >
> >> On Wed, Dec 11, 2019 at 02:21:48PM +0100, Hubert Kario wrote:
> >>> On Saturday, 7 December 2019 11:20:17 CET, Ilari Liusvaara wrote:
> >>>>
> >>>> One test I just tried:
> >>>>
> >>>> - Smartcard capable of raw RSA.
> >>>> - OpenSC PKCS#11 drivers.
> >>>> - Firefox ESR 68
> >>>> - Server supports TLS 1.3 (Accept RSA PKCS#1v1.5 client signatures is
> >>>>   enabled[2]).
> >>>>
> >>>> Result: Failed. Client hits internal error code
> >>>> SEC_ERROR_LIBRARY_FAILURE
> >>>> [3].
> >>>
> >>> That doesn't match my understanding of how NSS works – AFAIK, NSS (and
> as
> >>> such, Firefox), will try both raw RSA and rsa-pss signatures with the
> >>> token,
> >>> depending on what kind of algorithms the token advertises.
> >>>
> >>> I think the issue was the old version of OpenSC, new versions can do
> >>> rsa-pss
> >>> with rsa-raw:
> >>> https://bugzilla.redhat.com/show_bug.cgi?id=1595626
> >>> https://github.com/OpenSC/OpenSC/pull/1435
> >>
> >> Ok, upgrading the OpenSC to git master (0.20.0-rc34-2-gee78b0b8) makes
> >> client certificates in TLS 1.3 in Firefox work with that card (works
> even
> >> if accept RSA PKCS#1v1.5 client signatures is disabled on server side).
> >>
> >> There is apparently no release with the fix. One needs 0.20-rcX or
> recent
> >> git master.
> >>
> >
> > Chrome likewise tries to polyfill PSS support out of raw RSA when the
> > underlying keys support it, but PSS support is still a problem. In
> > particular, I believe TPM 1.2 can neither do RSA-PSS nor polyfill it with
> > raw padding. (Oddly, the spec does reference OAEP, but signing is only
> > PKCS#1 v1.5.) TPM 2.0 can do PSS, but hardware lifecycles are long.
> Between
> > the negotiation ordering and the client certificate privacy flaw fixed in
> > TLS 1.3, simply saying "no TLS 1.3 for those keys" is problematic. Thus,
> > the draft. It's true that it adds some transitionary codepoints to TLS
> 1.3,
> > but the point of TLS 1.3 was not switching to PSS. That's a minor bonus
> on
> > top of *much* more important changes.
> >
> > Most properties negotiated by TLS can be unilaterally updated by the
> > TLS-related components of a system. This is great because it means we can
> > deploy TLS 1.3's improvements. The long-term credentials are one of the
> big
> > exceptions here and, indeed, we didn't just make TLS 1.3 mandate Ed25519.
> > We wanted to maintain continuity with existing RSA keys, but since it was
> > possible to switch them to RSA-PSS we went ahead and did that. Sadly, it
> > appears that last point can be more true for server keys than client
> keys.
> > :-(
>
> If TLS 1.2 was looking insecure, I would be with you on this one. But given
> that TLS 1.2 can be configured to be as secure as TLS 1.3, I think
> introducing
> weak points to TLS 1.3, weak points we will have to live with for the next
> decade, if not two, is counter-productive and will only delay deployemnt
> of
> RSA-PSS capable HSMs. Not allowing PKCS#1 v1.5 in TLS 1.3 puts actual
> pressure
> to replace that obsolete hardware, without exposing users to unnecessary
> risk.
>

For client certificates, TLS 1.2 cannot be configured to be as secure as
TLS 1.3. The client certificates are sent in the clear.
https://tma.ifip.org/wordpress/wp-content/uploads/2017/06/tma2017_paper2.pdf

You mentioned elsewhere you can renegotiate, but renegotiation doesn't
work. It introduces a host of other problems from DoS risks to problems
with changing the security state of a connection after the fact to general
layering issues with the public API being odd. Some HTTP servers block
renegotiation altogether (I believe NGINX does) and some TLS stacks don't
support renegotiation as a server at all (BoringSSL and Go).

More importantly, renegotiation is not supported with HTTP/2, which is an
important improvement for performance and server load (fewer connections).
Now, the HTTP/2 spec does say the following:

> An endpoint MAY use renegotiation to provide confidentiality protection
for client credentials offered in the handshake, but any renegotiation MUST
occur prior to sending the connection preface. A server SHOULD request a
client certificate if it sees a renegotiation request immediately after
establishing a connection.

However, I'm not aware of anyone implementing this, and I do not think this
suggestion actually works. Chrome does not accept it as a client at all and
will fail the connection, nor can I see any way to accept it. An HTTP/2
client speaks as soon as the handshake completes and does not know whether
the server is going to do this. By the time the client receives a
HelloRequest, it may have sent zero, one, or many HTTP requests. This means
the fundamental ambiguities with a multiplexing protocol, as well as the
handshake/app-data interleave problems, are immediately present.
Conversely, as a server, the client may have sent arbitrarily many HTTP
requests before it processed the HelloRequest, so the server must buffer
them all up (DoS risk) or process them anonymously (changing security state
mid-connection and not the same semantics as initial handshake
authentication).

David