[TLS] Remove deprecated fields in TLS 1.3

Arnaud Venturi <arnaud.venturi@rez-gif.supelec.fr> Sun, 02 April 2017 08:33 UTC

Return-Path: <arnaud.venturi@rez-gif.supelec.fr>
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 9F03F127B73 for <tls@ietfa.amsl.com>; Sun, 2 Apr 2017 01:33:09 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.201
X-Spam-Level:
X-Spam-Status: No, score=-4.201 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-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 vEAfBeeBJH0r for <tls@ietfa.amsl.com>; Sun, 2 Apr 2017 01:33:07 -0700 (PDT)
Received: from vader.rez-gif.supelec.fr (mail.rez-gif.supelec.fr [160.228.154.117]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 60C57127B52 for <tls@ietf.org>; Sun, 2 Apr 2017 01:33:07 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by vader.rez-gif.supelec.fr (Postfix) with ESMTP id ED65041AFD for <tls@ietf.org>; Sun, 2 Apr 2017 10:33:05 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at vader.rez-gif.supelec.fr
Received: from vader.rez-gif.supelec.fr ([127.0.0.1]) by localhost (mail.rez-gif.supelec.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5kKm253ROdHj for <tls@ietf.org>; Sun, 2 Apr 2017 10:33:05 +0200 (CEST)
Received: from [192.168.1.121] (124-169-128-254.dyn.iinet.net.au [124.169.128.254]) (Authenticated sender: arnaud.venturi) by vader.rez-gif.supelec.fr (Postfix) with ESMTPSA id BD70241AFB for <tls@ietf.org>; Sun, 2 Apr 2017 10:33:04 +0200 (CEST)
From: Arnaud Venturi <arnaud.venturi@rez-gif.supelec.fr>
To: tls@ietf.org
Message-ID: <1e493a03-6843-9afa-fbcb-e8659f0f4184@rez-gif.supelec.fr>
Date: Sun, 02 Apr 2017 18:33:02 +1000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0
MIME-Version: 1.0
Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="597pnafRwX0iuD1qQEHbEIWwUrOn3iJIB"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/9rfv7uL9p3PXa5NbButAmWS1SPk>
Subject: [TLS] Remove deprecated fields in TLS 1.3
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.22
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: Sun, 02 Apr 2017 08:39:58 -0000

Hello everybody,

Here is a proposal for change aiming at removing the deprecated fields
in ClientHello in a future TLS version.

This proposal would consist in changing the ClientHello structure from :

  struct {
      ProtocolVersion legacy_version = 0x0303;    /* TLS v1.2 */
      Random random;
      opaque legacy_session_id<0..32>;
      CipherSuite cipher_suites<2..2^16-2>;
      opaque legacy_compression_methods<1..2^8-1>;
      Extension extensions<8..2^16-1>;
  } ClientHello;

to :

  struct {
      ProtocolVersion legacy_version;
      Random random;
      select (ClientHello.legacy_version) {
        case 0x0303:    /* TLS v1.2 */
          opaque legacy_session_id<0..32>;
          CipherSuite cipher_suites<2..2^16-2>;
          opaque legacy_compression_methods<1..2^8-1>;
        case 0x0304:    /* TLS v1.3 */
          CipherSuite cipher_suites<2..2^16-2>;
      }
      Extension extensions<8..2^16-1>;
  } ClientHello;

With the following constraints :
- TLS 1.3 Servers MUST correctly parse ClientHello with
ClientHello.legacy_version either set to 0x0303 (TLS1.2) or 0x0304
(TLS1.3), and MUST NOT use this field's value for any other purpose than
parsing the ClientHello (notably, il MUST NOT be used to negociate the
protocol version, this is the role of the SupportedVersions Extension)
- TLS 1.3 Clients MUST set ClientHello.legacy_version either to 0x0303
(TLS1.2) or 0x0304 (TLS1.3)
- TLS 1.3 Clients SHOULD set ClientHello.legacy_version to 0x0303 (TLS1.2)
- TLS 1.3 Clients MAY set ClientHello.legacy_version to 0x0304 (TLS1.3)
present knowledge that the server supports TLS 1.3.


The idea is to use the legacy_version field to indicate the ClientHello
structure, rather than just being a deprecated field.

This way, a future release may only allow the 0x0304 value for
ClientHello.legacy_version without breaking compatibility with TLS 1.3
implementations.
This would be a reasonable change once TLS 1.2 is completely phased out,
or deemed too insecure to be used anymore.
It would then allow switching the ClientHello structure to :

  struct {
      ProtocolVersion legacy_version = 0x0304;    /* TLS v1.3 */
      Random random;
      CipherSuite cipher_suites<2..2^16-2>;
      Extension extensions<8..2^16-1>;
  } ClientHello;


I kept the name legacy_version in this email for the sake of clarity,
but if it is decided to make such a change, it would probably be
pertinent to rename it.
client_hello_version, for example, might be a viable candidate.


A few other notes about the implications of such a change :
- The client side of the implementation is completely unchanged by this
modification
- The modifications to do to server implementations are minor, and not
likely to present any difficulty
- The current deprecated fields are not likely to be ever used again in
the future. If we need to add anything to the ClientHello, we would
likely use Extensions regardless of the presence or not of these
deprecated fields.



I could not think of any security or interoperability issue with this
proposal, the only drawback I can see being the slight complexity added
in ClientHello parsing.


I'll be really happy to formalize this proposal in a pull request, or to
clarify any unclear point, but I wanted to gather some opinions on the
topic before going further.


-- 
Arnaud