Re: [TLS] Version negotiation, take two

Hubert Kario <hkario@redhat.com> Wed, 14 September 2016 09:56 UTC

Return-Path: <hkario@redhat.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 D0CB212B221 for <tls@ietfa.amsl.com>; Wed, 14 Sep 2016 02:56:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.41
X-Spam-Level:
X-Spam-Status: No, score=-8.41 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-1.508, SPF_HELO_PASS=-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 kmLaswfIjp7M for <tls@ietfa.amsl.com>; Wed, 14 Sep 2016 02:56:37 -0700 (PDT)
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id C5B2112B059 for <tls@ietf.org>; Wed, 14 Sep 2016 02:56:37 -0700 (PDT)
Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4B05E1B3EB6; Wed, 14 Sep 2016 09:56:37 +0000 (UTC)
Received: from pintsize.usersys.redhat.com (dhcp-0-191.brq.redhat.com [10.34.0.191]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u8E9uZUs025669 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 14 Sep 2016 05:56:36 -0400
From: Hubert Kario <hkario@redhat.com>
To: tls@ietf.org
Date: Wed, 14 Sep 2016 11:56:34 +0200
Message-ID: <4167932.6uUpuY5lVa@pintsize.usersys.redhat.com>
User-Agent: KMail/5.2.3 (Linux/4.7.2-201.fc24.x86_64; KDE/5.26.0; x86_64; ; )
In-Reply-To: <ECE5AD9B-A390-445B-A918-FA905C0EB2BC@sn3rd.com>
References: <CAF8qwaA86yytg29QOD_N7ARimh9QcNGU_nnr_OrxqCrvrk2MBg@mail.gmail.com> <ECE5AD9B-A390-445B-A918-FA905C0EB2BC@sn3rd.com>
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="nextPart2655326.xQ2IJAuOC6"; micalg="pgp-sha512"; protocol="application/pgp-signature"
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26
X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 14 Sep 2016 09:56:37 +0000 (UTC)
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/dkGog5c_TsI_zc78xgcGsNd0jUc>
Subject: Re: [TLS] Version negotiation, take two
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.17
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: Wed, 14 Sep 2016 09:56:41 -0000

First, I don't think that the argument that the current version scheme doesn't 
lend itself to future-proofing is correct. Just as with GREASE, browsers can 
send much higher version than they really support if they do that on a time 
limited basis.

Second, while the "joint" which handles new extensions IDs doesn't seem to be 
rusting, it's not the case with lists in particular extensions. SNI being the 
prime example where sending anything but a single host name value will most 
likely lead to your client hello being either misinterpreted or rejected.

On Tuesday, 13 September 2016 13:18:34 CEST Sean Turner wrote:
> All,
> 
> There appears to be an emerging consensus here to adopt the change proposed
> by this PR.  Please indicate whether you are unwilling (and why) to accept
> this change by September 16th.
> 
> J&S
> 
> > On Sep 08, 2016, at 12:04, David Benjamin <davidben@chromium.org>; wrote:
> > 
> > Hi folks,
> > 
> > I’d like to revisit the question of version negotiation.
> > 
> > EKR wrote up some text for moving version negotiation to an extension:
> > https://github.com/tlswg/tls13-spec/pull/632
> > 
> > I would like us to adopt this proposal.
> > 
> > In Berlin, this really got framed as a pragmatic question: the current
> > version negotiation has a lot of intolerance and so let’s work around
> > that. So, understandably, this seemed like a “let’s adopt a hack forever”
> > proposal. I think that framing is wrong. The intolerance situation is
> > serious, but I think there’s also a strong argument that the current
> > scheme isn’t very good.
> > 
> > The current scheme is very simple. The client advertises a maximum version
> > and the server selects based on that. This is the only piece of TLS
> > negotiation which works this way. Elsewhere (extensions, cipher suites,
> > signature algorithms), one side offers a list and the other side picks
> > out of it. I think it’s clear now that strategy is more robust: every
> > time we’ve bumped version numbers, we’ve had intolerance problems and
> > this time is no exception (see below). By contrast, we regularly
> > introduce new cipher suites, extensions, etc., and while we do see the
> > occasional failure, they are much rarer and typically within the level of
> > breakage that clients can tolerate and deal with by reaching out to
> > affected servers. Moreover, lists lend themselves to future-proofing via
> > draft-davidben-tls-grease-00 in a way the current scheme does not.
> > 
> > An additional benefit is lists make it much easier to roll out
> > prototype/draft versions. Currently, we are using a hack where the client
> > offers {3, 4} but also includes a draft version number in an extension.
> > This does work, but requires servers process that extension in perpetuity
> > or at least until all draft version clients go away.  With a list, it’s
> > trivial to offer a draft version by just including it. This is the
> > strategy HTTP/2 used (via ALPN) and it worked well.
> > 
> > Despite all of the above, it probably wouldn’t be worth fixing version
> > negotiation in 1.3 except for intolerance. Unfortunately, this fourth
> > time, it’s the same story as before. A probe of Alexa top million sites
> > with BoringSSL’s TLS 1.3 code (the Go version), shows 1.63% of
> > TLS-capable hosts reject a TLS 1.3 ClientHello. Note these are top sites
> > and traffic is top-heavy, so we can expect much higher usage-weighted
> > numbers. Qualys SSL Pulse reports 3.6%:
> > https://blog.qualys.com/ssllabs/2016/08/02/tls-version-intolerance-in-ssl
> > -pulse
> > 
> > (Ignore the drop in the graph. We’ve long fixed the ClientHello
> > record-layer at {3, 1}. TLS 1.3 only codified existing practice here.) If
> > instead we use a TLS 1.3 ClientHello with version TLS 1.2, the breakage
> > drops to 0.017%. (Some of this is an NSS signature algorithms bug, fixed
> > last year, which we hope to clear by deploying RSA-PSS in browsers early.
> > The rest appears to be noise from transient errors which crop up in large
> > tests.)
> > 
> > These numbers are *far* too high for clients to accept as damage, which
> > means that they (at least browsers) will be forced to do fallback. This
> > represents a security risk (cf. POODLE) as well as hides serious interop
> > problems. The situation is even worse for non-browser clients, which may
> > be unable to deploy at all (Ubuntu 12.04, despite shipping an OpenSSL
> > release with TLS 1.2, had to disable it on the client.
> > https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/1256576/comments/4
> > )
> > 
> > The major arguments against this change seem to be:
> > 
> > 1. It’s inelegant to have two mechanisms.
> > 2. We should fix broken servers
> > 
> > The first is true, but as with other changes, EKR’s PR replaces the 1.2
> > mechanism with one for 1.3, so we’ll just have one going forward. The
> > second would be nice, but as a practical matter, I spend a lot of time
> > trying to get those servers fixed and it doesn’t work very well here.
> > Better is simply to move to a situation where once those servers upgrade
> > they will be correctly behaving forever (instead of just handling 1.3
> > correctly and breaking with 1.4). This change does that.
> > 
> > Thanks,
> > 
> > David
> > _______________________________________________
> > TLS mailing list
> > TLS@ietf.org
> > https://www.ietf.org/mailman/listinfo/tls
> 
> _______________________________________________
> TLS mailing list
> TLS@ietf.org
> https://www.ietf.org/mailman/listinfo/tls


-- 
Regards,
Hubert Kario
Senior Quality Engineer, QE BaseOS Security team
Web: www.cz.redhat.com
Red Hat Czech s.r.o., Purkyňova 99/71, 612 45, Brno, Czech Republic