Re: Version negotiation: the bare minimum?

Christian Huitema <> Tue, 16 March 2021 04:12 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 8CBC93A195A for <>; Mon, 15 Mar 2021 21:12:02 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.89
X-Spam-Status: No, score=-1.89 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, NICE_REPLY_A=-0.001, SPF_HELO_NONE=0.001, T_SPF_PERMERROR=0.01] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id Ai6LU6IRUAms for <>; Mon, 15 Mar 2021 21:12:01 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 1778F3A1958 for <>; Mon, 15 Mar 2021 21:12:00 -0700 (PDT)
Received: from ([] by with esmtp (Exim 4.92) (envelope-from <>) id 1lM13l-000jki-BE for; Tue, 16 Mar 2021 05:11:58 +0100
Received: from (unknown []) by (Postfix) with ESMTPS id 4F00Gz4ht3zBTK for <>; Mon, 15 Mar 2021 21:11:55 -0700 (PDT)
Received: from [] ( by with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from <>) id 1lM13j-0000En-HF for; Mon, 15 Mar 2021 21:11:55 -0700
Received: (qmail 22423 invoked from network); 16 Mar 2021 04:11:53 -0000
Received: from unknown (HELO []) ([]) (envelope-sender <>) by (qmail-ldap-1.03) with ESMTPA for <>; 16 Mar 2021 04:11:52 -0000
To: David Schinazi <>, Watson Ladd <>
References: <> <>
From: Christian Huitema <>
Subject: Re: Version negotiation: the bare minimum?
Message-ID: <>
Date: Mon, 15 Mar 2021 21:11:53 -0700
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: quoted-printable
Content-Language: en-US
Authentication-Results:; auth=pass smtp.auth=
X-Spampanel-Outgoing-Class: unsure
X-Spampanel-Outgoing-Evidence: Combined (0.15)
X-Recommended-Action: accept
X-Filter-ID: Pt3MvcO5N4iKaDQ5O6lkdGlMVN6RH8bjRMzItlySaT9WLQux0N3HQm8ltz8rnu+BPUtbdvnXkggZ 3YnVId/Y5jcf0yeVQAvfjHznO7+bT5x6h2yQpzTslcOqazQkKtAFKj/EwzSHE5FGYwwjsNRPCOY9 9BPjO/baLGifW46qJujmD6wdmZPcItWbGe10hXJtXL4FsauCVkDjmcYJdU3yWp7KuHNaaKdg7iBE ZefdsNUFWKwa/wzJUjmazeC7Imca+xnn3Ohf8XY5WZ+f/Kk3UxQ6V51u76v35b1wNe/MvdLom48E g3of4Y9DlgiJ0nAJ2+J9PgaoF8SQHto3le4zsHTaeQtlKubP6iUTjj6yPARK6buALVaA782LKxg6 vRmng8N1aLhXqdc+jC1RcnVud53D5caUhbVtvqItBqoizkEt9O20UjkwI0v+LOlw05G4BS+iyyNq bT8dUMXMJ4tUCMj6G37ZfAMLceP5aNHPt26RBupu5v1nytoNnc138GfEJRQ2qC7jjynPIHPNqSn4 QTXUjLjYWQt1/5xnQymMoPsgr/U0flMcy2Vi/IcBgY4arPaiJ1W6hAyiRC61jekdwIcXNugoOEbH RyFULpSjm7jZ1h/HfDRQ5Ig8VhPsPE8NQ/T3Op6Um662jkOH4Bxha6vH0PZUsqM6/e5MEyOxH5FU 2brG5IQTBu9ggerGcWrGDRojSVizNl0ce/s7u0P9b9Tml6eOMCV9kYYwkPx6ZsXvIUzTXkDAiiJi mGhLUFuS2lhaIetXfCg1JdAVrOwKfDnsQvS3LzFXpoY+Q/s/aUNUoFIvD3sIcP1fhJPM6B/8kJPH OaKNsK6YcQ45ubpDm7xZ1H6mbk6k6aQAB9HEpyiJ+dym1L8cD17Js0v4cp1Mp0PGVMzdj/HuGqk6 o+wTLTcKVNeVJ9BXyu9+ceCqThTYg2px1fSoqxQCCHnLMo/m9VKh99btUAanjnMCAH2co+fBoeG+ Hs0afhsY/5zhNYWRVYKU9W9tbmVXJBqdHHDmZEKhyNAv1N35kYWaEdgLurFV5oTvAcwA4rM3FkfW 8/1kE/e7sUnsVpINvARNxpFO
Archived-At: <>
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 16 Mar 2021 04:12:03 -0000

I have been considering pretty much the same design as Watson. In the 
slide deck that you presented, this would be the "compatible" option. 
The client would select  version X in the QUIC header of the Initial 
packet, and format one or several TP stating:

1) Version in the QUIC header: X

2) Supported compatible versions: Y, Z, T, and maybe Grease. These must 
be "compatible" versions.

The server will:

1) verify that the version in the QUIC header is indeed X. If it is not, 
close the connection with an error.

2) pick one of X, Y, Z or T as the selected version, say Y. 
(Questionable whether the version in the QUIC header should be set to X 
or Y.)

3) Set the TP stating something like "you proposed X and I selected Y"

4) Very optionally, mention in a TP that "this server also supports 
versions V, W." These might be "incompatible" versions.

If none of X, Y, Z, T are supported, the server replies with a VN.

On receiving the server TP, the client verifies that the server saw the 
intended version X, and chose one of the supported version. The client 
might remember additional version V and W for next time, but that's 
extra complexity.

-- Christian Huitema

On 3/15/2021 5:18 PM, David Schinazi wrote:
> Hi Watson,
> Could you elaborate on your proposal? In particular:
> How does the client transmit its supported versions?
> What does "compatible" mean?
> What does "the server selects" mean?
> What does "the server proceeds" mean?
> Thanks,
> David
> On Wed, Mar 10, 2021 at 1:55 PM Watson Ladd <> wrote:
>> Dear WG,
>> I'd like to proffer the world's simplest version negotiation scheme,
>> based on comments heard during the meeting today from a number of
>> people.
>> The following weak assumptions are made: the client has a set of
>> versions. The server has a partial ordering on versions: this means
>> that versions are not necessarily preferred over each other (consider
>> experiments where we will do what the client offers first), but the
>> relation is transitive. Then the server selection is a function of the
>> client offered version and supported set.
>> The client transmits its supported versions and a proffered hello
>> version in the first packet. The server selects. If that selection is
>> incompatible they try again with the new selected version transmitted
>> in VN. If it is compatible, the server selects and proceeds.
>> The constraint on the handshake is that the supported versions and
>> offered version and server selection are incorporated on the handshake
>> in such a way that a mismatch triggers failure, and no two different
>> versions can derive the same keys. If we assume that e.g. SHA256 is
>> unbroken this is easy to get.
>> This only permits a downgrade to a version the server was willing to
>> prefer.
>> Sincerely,
>> Watson Ladd