Re: [TLS] Simpler backward compatibility rules for 0-RTT

David Benjamin <davidben@chromium.org> Tue, 21 June 2016 18:45 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 0013E12DC6F for <tls@ietfa.amsl.com>; Tue, 21 Jun 2016 11:45:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.125
X-Spam-Level:
X-Spam-Status: No, score=-4.125 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RP_MATCHES_RCVD=-1.426, SPF_PASS=-0.001] autolearn=ham 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 Ed8hFsXBIxUl for <tls@ietfa.amsl.com>; Tue, 21 Jun 2016 11:45:24 -0700 (PDT)
Received: from mail-io0-x22c.google.com (mail-io0-x22c.google.com [IPv6:2607:f8b0:4001:c06::22c]) (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 7454112D8E6 for <tls@ietf.org>; Tue, 21 Jun 2016 11:45:23 -0700 (PDT)
Received: by mail-io0-x22c.google.com with SMTP id g13so17905202ioj.1 for <tls@ietf.org>; Tue, 21 Jun 2016 11:45:23 -0700 (PDT)
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=IeqyJuSr1Cs5W3egxGBnSF8NrFjJHdSxvDjfV/72tz8=; b=WUOyXPuZmyWBf+mH3hcb/4nC2/TCRp59EeMUPUDI0qpZvqlzgpvDVeUzL2TWtXnqzH x82EzNyPmD9tPw7fcjf2+b6k3F1ZJ1BAK66IfgPp2qmRgNAcMZRbYziaoWiOX9dRwhvZ 5zsCHn7WB0JwkG852dJ3BuWgKbNnmJJ9pKT5w=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=IeqyJuSr1Cs5W3egxGBnSF8NrFjJHdSxvDjfV/72tz8=; b=ZvmtaQwqB0R5XJDT3YhzQGnD2pouv8WD8NXUqFtsPcyL0YauNvXDsZ4gecRZOI0y4B 5+oZxeHo9NGfLTsqwzSqoYPg5ALJ41LIwcn3+USA3mxuOg9pHT1muVR7Koc9yZgE+jam 8v6QsKKbNReB20VJsh+H2/hHkHQ38qU0yVcxaDlmviHq2edREX31HZ/n/VR4dShgg3X6 Sn5P7Buv68sQ/7F0nZY2PcrjAURDq9eHIGxIGtgIVsRfs1O0z88SuUxdyioJGLq9hNkM p/x3WfFoj2g5NoHe1gsJDe+BR8YifW0N0Tn9Wh7QLOMlX64x/5HLU6Go/n6v/uHDQxEy pvrw==
X-Gm-Message-State: ALyK8tJHTaKQRT0m680gnn+JQ1lXCAazok42E6AwZ6hYt+ixgm34FsSmv+gAMLL49XkEpXmSC5+oApzJDx7EPQUB
X-Received: by 10.107.29.80 with SMTP id d77mr36714592iod.97.1466534722625; Tue, 21 Jun 2016 11:45:22 -0700 (PDT)
MIME-Version: 1.0
References: <CABkgnnVgD2rTgdWkTEhd1b6CUpj_i7wD4-_E2Dd2=nJf1eW5RQ@mail.gmail.com> <CAJ_4DfQ1ttyF0z9vwmuq-yEvbHrh+93k3rkJ7gzgDQZoQnuUpQ@mail.gmail.com> <20160621175413.GB2989@LK-Perkele-V2.elisa-laajakaista.fi>
In-Reply-To: <20160621175413.GB2989@LK-Perkele-V2.elisa-laajakaista.fi>
From: David Benjamin <davidben@chromium.org>
Date: Tue, 21 Jun 2016 18:45:12 +0000
Message-ID: <CAF8qwaCQSERcYNr42=DB-ZcBQde5qkrk8R_AD2qnnEsdwi7NoA@mail.gmail.com>
To: Ilari Liusvaara <ilariliusvaara@welho.com>, Ryan Hamilton <rch@google.com>
Content-Type: multipart/alternative; boundary="001a11408bf231d2d80535ce3977"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/pm2HYhYCIPxeJ8Wf1T52atpXInM>
Cc: "tls@ietf.org" <tls@ietf.org>
Subject: Re: [TLS] Simpler backward compatibility rules for 0-RTT
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: Tue, 21 Jun 2016 18:45:27 -0000

On Tue, Jun 21, 2016 at 1:54 PM Ilari Liusvaara <ilariliusvaara@welho.com>
wrote:

> On Tue, Jun 21, 2016 at 10:07:17AM -0700, Ryan Hamilton wrote:
> > On Mon, Jun 20, 2016 at 6:15 PM, Martin Thomson <
> martin.thomson@gmail.com>
> > wrote:
> >
> > > David Benjamin wrote our section on 0-RTT backward compatibility to be
> > > a little bit lenient about server deployment.  On consideration, I
> > > think that a simpler set of rules are better:
> > >
> > > 1. If the server advertises support for 0-RTT, then it implies a
> > > commitment to support TLS 1.3 for the duration of that advertisement.
> > > 2. Therefore, if the client attempts 0-RTT, then it should reject a
> > > ServerHello with TLS 1.2 or older.
> > >
> >
> > ​How does this affect the situation where a server might attempt to
> deploy
> > TLS 1.3, discover a bug, and need to rollback? Does it just magically
> work?​
>
> AFAIU, if one has 0-RTT-capable dynamic PSKs out there, one can only roll
> back 0-RTT support, but has to wait for all the PSKs to expire beefore
> being able to roll back TLS 1.3.
>
> Of course, the period between deploying TLS 1.3 and deploying 0-RTT
> should test how things work without 0-RTT (but it does not test 0-RTT
> failing, which is _critical_ to work correctly).
>

Right, this is the deployment complexity I was hoping to avoid with the
section. I expect that large companies with TLS experts on staff will be
able to navigate this difficulty. We can deploy TLS 1.3, wait for
everything to stick, and then turn on 0-RTT.

But smaller and medium-size deployments may simply have a handful of stock
installs of their favorite operating system and server software. People
like things being fast, so either 0-RTT will be on by default on web
servers or people will copy-and-paste config options. It's those
deployments which I don't expect to get this right.

This isn't a theoretical concern. OpenSSL and very early revisions of
BoringSSL had a bug around session handling with similar effects. If one
established a TLS 1.2 session and then later did a full TLS 1.0 handshake,
even though the TLS 1.2 session was *not* resumed, merely offering it
caused OpenSSL to lock the version. Very early on in switching Chrome from
NSS to BoringSSL, we hit interoperability issues due to this.
https://www.debian.org, at the time, had a heterogeneous deployment of TLS
1.0 and 1.2. This was rather messy to diagnose. Flaky failures are the
worst.

I can also imagine this sort of thing happening if users turn antivirus
products with TLS MITMs on and off, or if they have a work machine with a
TLS MITM certificate and enter/leave their networks. (I'm sure no one on
this list, myself included, has any love for this sort of configuration,
but it is reality.)

David