RE: Version Ossification: Intended Scope for QUICv1

Mike Bishop <mbishop@evequefou.be> Fri, 01 November 2019 16:13 UTC

Return-Path: <mbishop@evequefou.be>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8701E120946 for <quic@ietfa.amsl.com>; Fri, 1 Nov 2019 09:13:17 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=evequefou.onmicrosoft.com
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 gMuA_dHiG8Mh for <quic@ietfa.amsl.com>; Fri, 1 Nov 2019 09:13:13 -0700 (PDT)
Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-eopbgr760099.outbound.protection.outlook.com [40.107.76.99]) (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 9B0071208FA for <quic@ietf.org>; Fri, 1 Nov 2019 09:13:13 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AKx6XxtDBIxVS0oEdiPLDQj3jlGKEXVcJyhkzNQxcBiUX9txzRJDOGcCdu365Km5Npm2nevSyozNz7D6jT5pigAsbDMASZ4FDZ9clAc0VvPl6cjNM50ERq59QmAF8Qq7bODcbyO9JYtm7tZ849SAJynW3DN4GBtPhvoXChI3jfX+lmkr9fgz9bIHl+AywJyaDQU5BClDsFm1Cgykfegh2YB7RdrvhCaITwt9P4ooAvVE1TaYUKzPJDdBe8ZiUYZ7G/Mq9epkBkaz21BENgSQ5JnxB78IsElREzbgkUupF5D8SUnDD1OT4kYRN6x3MmaNh0lht/gQisKZeWOUnb8I7Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NiqRAGNoOKmbf7ipv2tTyOH2w/ZsqLNJzmD3aF9TKe4=; b=NjbqhXTIwb0KMy3Wp8QSxUGG+PMkYA3b3FJihWuym56gQNXC92zZ+neuZbf7k9PvX8AwqG687cM2W3FFSee/RUng3Fj6FONHec1yv8LtOPf3BOHj751BBOyGCDM+JEu5ak8j6yEoaHoV/nt4+8O6tDjbS79+ZSFRkwZ7xrwNlD6ZX3iGoN8HlochSMXgNtPLC7EuiAFmJN5WyMco4DzZUrCJitdUtnsbemPgpkhQE1kuouZ4i3af2kv/Bm8Y/fS4mfB2e2DDN4lZ+H6CT5pZLlV4X6M3mXXQexpT5VicxWsUJwO5tRLw1EHffJ9qZdl3VBc/EBCMRuoEyjQY3Nmb2w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=evequefou.be; dmarc=pass action=none header.from=evequefou.be; dkim=pass header.d=evequefou.be; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=evequefou.onmicrosoft.com; s=selector2-evequefou-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NiqRAGNoOKmbf7ipv2tTyOH2w/ZsqLNJzmD3aF9TKe4=; b=U5Sd+/Pu0hNYLzzTQ3QIVdc8VaglQUTLPEtuUtms2c0/3FT7DQOhNM9rXa8xOTuNCgJq6zeQZUceVPQOi5qNvcE/fALAsJ3lAWDDRg2Mt1XGoIsEE9pQTXIxru+IHHtim9SvXVRSw9HOaZZhlXS60TAUxtnG4rqWn2afrJOqcHg=
Received: from BN6PR2201MB1700.namprd22.prod.outlook.com (10.161.152.144) by BN6PR2201MB1265.namprd22.prod.outlook.com (10.174.82.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2387.24; Fri, 1 Nov 2019 16:13:10 +0000
Received: from BN6PR2201MB1700.namprd22.prod.outlook.com ([fe80::7cb4:5e4e:334c:a737]) by BN6PR2201MB1700.namprd22.prod.outlook.com ([fe80::7cb4:5e4e:334c:a737%7]) with mapi id 15.20.2387.028; Fri, 1 Nov 2019 16:13:10 +0000
From: Mike Bishop <mbishop@evequefou.be>
To: Kazuho Oku <kazuhooku@gmail.com>, David Schinazi <dschinazi.ietf@gmail.com>
CC: QUIC <quic@ietf.org>
Subject: RE: Version Ossification: Intended Scope for QUICv1
Thread-Topic: Version Ossification: Intended Scope for QUICv1
Thread-Index: AQHVkDACwTgP/lZwVUOZm0QUJca1i6d1RWIAgAE1I2A=
Date: Fri, 01 Nov 2019 16:13:09 +0000
Message-ID: <BN6PR2201MB1700184D81061E2CBFD77BFBDA620@BN6PR2201MB1700.namprd22.prod.outlook.com>
References: <CAPDSy+6E79OySoOLbJ8eWp0J-+3yeB5iGvj6sW19bEDn_V7-NA@mail.gmail.com> <CANatvzzaWFgrvnaV=VeZRAVvxqSBeMSZT5aMUu7-Vh9raeZJFw@mail.gmail.com>
In-Reply-To: <CANatvzzaWFgrvnaV=VeZRAVvxqSBeMSZT5aMUu7-Vh9raeZJFw@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: spf=none (sender IP is ) smtp.mailfrom=mbishop@evequefou.be;
x-originating-ip: [2600:2b00:931f:a301:44f1:b2d7:ebd1:d973]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: be233a1a-bf43-46dc-a03d-08d75ee6637b
x-ms-traffictypediagnostic: BN6PR2201MB1265:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-prvs: <BN6PR2201MB1265C4BDB7CF6BC5D86AA1F6DA620@BN6PR2201MB1265.namprd22.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 020877E0CB
x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(396003)(136003)(366004)(39830400003)(346002)(376002)(189003)(199004)(76116006)(66946007)(606006)(6246003)(86362001)(2906002)(52536014)(71200400001)(14454004)(6116002)(790700001)(476003)(11346002)(316002)(5660300002)(25786009)(508600001)(71190400001)(446003)(110136005)(8676002)(64756008)(66446008)(4326008)(229853002)(74316002)(76176011)(6306002)(7736002)(33656002)(102836004)(99286004)(8936002)(486006)(561944003)(236005)(66476007)(9686003)(54896002)(6436002)(55016002)(6506007)(53546011)(186003)(66556008)(46003)(14444005)(256004)(81166006)(7696005)(81156014); DIR:OUT; SFP:1102; SCL:1; SRVR:BN6PR2201MB1265; H:BN6PR2201MB1700.namprd22.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1;
received-spf: None (protection.outlook.com: evequefou.be does not designate permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: gi4Khg1tcRfQY+q43urWl0uanX3GBatNFAl1QboBVC7IP2k27t2wzar3whaZkvImlbS1S7jj1wGP1a4gly7U/p64y6K2A/nCjcraSPn4QcovsAktPQlZpRszeVF/L86ZJs1auk3dWm9in9hvoHKKBjjNt6bL48A2+b2YQZT5R50jjQOit1e1XFqOvWVDRJXPEfyD/Q3yMY2fQypPEEoCkTemgdmAT9cBTY3yHYRDLdQu9BkJ/rUzNWMWP9XKSK2/DWAoV0cpU/knt05gSlXyUd3Pg1HC34c5LKBfsIGJ7EIC3V3/2TRguWc602TKjeBCOJFmyWygDV4gzjFhBR9k4WYwf5/YZWZwvGJ2L/ptowtQe3ZzKFuv1GG5aZ5TndGXB45SvDzkullDCrPN5J02W9AzJtEmM/J3infnsWZuflIytqGlvCRlKl8G7S8xud2AKWU2+DkHPrJ5ULOlAFNOWMnNkHgQgbqqiA6BlyHjXX8=
x-ms-exchange-transport-forked: True
Content-Type: multipart/alternative; boundary="_000_BN6PR2201MB1700184D81061E2CBFD77BFBDA620BN6PR2201MB1700_"
MIME-Version: 1.0
X-OriginatorOrg: evequefou.be
X-MS-Exchange-CrossTenant-Network-Message-Id: be233a1a-bf43-46dc-a03d-08d75ee6637b
X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Nov 2019 16:13:09.9680 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 41eaf50b-882d-47eb-8c4c-0b5b76a9da8f
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: AkPtrlKKpAoDd3/arBnF58inxR2kgQ/iA6oJfsmrdFORMB4l/WuLxtF3XnfYo6QjLbd2py87Gc1/Sl1esPXz4A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR2201MB1265
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/delzgnbVVVRCjCcvm8e12bHQE5I>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 01 Nov 2019 16:13:17 -0000

The fundamental problem in all this is what happens when a server is no longer in possession of the mapping it sent to the client.  One option is to say that servers simply MUST persist this, and if they don’t, handshakes will fail – we tried that with HSTS, and we found that servers don’t like things that can leave the site broken.  I don’t think that’s a good path.  Either it will break things, or servers won’t use this mechanism, or more likely both in sequence.

The next obvious solution, sending a VN packet telling the client to come back to v1 and the spec-defined salt, contains a simple version downgrade attack by a middlebox.  There are possible mitigations – the client could continue presenting the token, meaning the server would be able to tell whether a downgrade “actually happened” or not.  (I.e. whether it could still have parsed the version associated with the token)  If the downgrade was illegitimate, that could be communicated.  However, that likely means figuring out QUIC’s own version negotiation story and downgrade mitigation and just using that.

We could also try to build something like ESNI’s recovery path, where the information includes what has to be demonstrated for a recovery value.  The trouble is that, while TLS can transfer a certificate and rely on PKI as that recovery path, we’re in a little bit more uncharted territory.  The only ready solution I see in this space is some kind of longer-lived keypair that the server is somehow “less likely” to lose, but if you can persist that key, you can probably also persist the original configuration.  (Plus, you don’t want to be doing asymmetric crypto before you’ve even decided whether to process the handshake.)

I remain a little uncomfortable that we entirely punted our version negotiation story from v1, and I think the cleanest solution is to bring it back in support of #3166.  However, that has both schedule and security implications – we don’t want to get this part wrong.

From: QUIC <quic-bounces@ietf.org> On Behalf Of Kazuho Oku
Sent: Thursday, October 31, 2019 5:34 PM
To: David Schinazi <dschinazi.ietf@gmail.com>
Cc: QUIC <quic@ietf.org>
Subject: Re: Version Ossification: Intended Scope for QUICv1

Hi David,

Thank you for summarizing the high-level options. I think it's very useful to have this discussion.

Please see my comments below.

2019年11月1日(金) 6:13 David Schinazi <dschinazi.ietf@gmail.com<mailto:dschinazi.ietf@gmail.com>>:
Hi folks,

The conversation around version ossification has been really interesting since Cupertino. But at least for me it's reached a level of complexity that warrants taking a step back and looking at what we're trying to solve. Here's my understanding of where we are:

1) In Cupertino there was consensus in the room to do something to mitigate ossification of QUICv1.

2) The solution that folks liked was to have a concept of alternative versions and alternative salts that act like QUICv1 but are encoded differently over the wire.

3) A concrete proposal for (2) was for servers to have their own set of (alternative_version, alternative_salt) pairs, then transmit a random pair from that set to each client (i.e. via transport parameters). The server can then reconstruct the alternative_salt just by seeing the alternative_version.

4) Kazuho proposed a solution (#3166<https://github.com/quicwg/base-drafts/pull/3166>) that was both more powerful and more complex: tie the (alternative_version, alternative_salt) pair to NEW_TOKEN frames, to allow servers to generate a unique alternative_salt per client and encode it in the token.

I dispute the argument that #3166 is more complex. My view is that #3166 is more powerful and simpler than (3) (the PR being #2573).

Reasons:
* For a server associating one initial salt with one alternative version, #3166 and #2573 are identical with the exception being how the information is carryied (i.e. TP vs. NEW_TOKEN).
* For a client, bundling the alternative seeds in a NEW_TOKEN makes things simpler, as clients are not required to have a new state that has to be retained across multiple connections.


5) After some interesting back and forth on that PR, it became clear that this is a hard problem to solve: this could cause failures if servers forget their token keys, and mitigations for that problem can become downgrade attack vectors

The proposal for 3 has this problem. It leads to a failure when a server forgets the alternative initial salts.


6) While there was clear WG appetite for (1), I'm not sure we have consensus to build a more powerful solution like (4)

I fear that solving (5) could take some time, which would delay QUICv1. Instead I'd like to propose the following plan:
a) we take the simpler solution (3) and add that to the spec
b) we take the more powerful/complex solution (5) a turn it into a QUIC extension

That would allow us to ship QUICv1 with some level of ossification mitigations without delay.

As stated, the proposed solution for (4) is simpler than (3), can be used to implement (3), and also provides a stronger protection for servers certain that they can retain the token unprotection keys.

I agree that solving (5) for all parties might be hard, and that we might want to punt that to v2. But, I think we should adopt (4) than (3) due to the aforementioned reasons.


Thoughts?

David




--
Kazuho Oku