Skip to main content

A Flags Extension for TLS 1.3
draft-ietf-tls-tlsflags-02

The information below is for an old version of the document.
Document Type
This is an older version of an Internet-Draft whose latest revision state is "Active".
Author Yoav Nir
Last updated 2020-04-21 (Latest revision 2020-03-02)
Replaces draft-nir-tls-tlsflags
RFC stream Internet Engineering Task Force (IETF)
Formats
Additional resources Mailing list discussion
Stream WG state WG Document
Revised I-D Needed - Issue raised by WG
Associated WG milestone
Nov 2020
Submit "A Flags Extension for TLS 1.3" to the IESG
Document shepherd Christopher A. Wood
IESG IESG state I-D Exists
Consensus boilerplate Yes
Telechat date (None)
Responsible AD (None)
Send notices to Christopher Wood <caw@heapingbits.net>
draft-ietf-tls-tlsflags-02
TLS                                                               Y. Nir
Internet-Draft                                         Dell Technologies
Intended status: Standards Track                           March 2, 2020
Expires: September 3, 2020

                     A Flags Extension for TLS 1.3
                       draft-ietf-tls-tlsflags-02

Abstract

   A number of extensions are proposed in the TLS working group that
   carry no interesting information except the 1-bit indication that a
   certain optional feature is supported.  Such extensions take 4 octets
   each.  This document defines a flags extension that can provide such
   indications at an average marginal cost of 1 bit each.  More
   precisely, it provides as many flag extensions as needed at 4 + the
   order of the last set bit divided by 8.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on September 3, 2020.

Copyright Notice

   Copyright (c) 2020 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of

Nir                     Expires September 3, 2020               [Page 1]
Internet-Draft                  TLS Flags                     March 2020

   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Requirements and Other Notation . . . . . . . . . . . . .   3
   2.  The tls_flags Extension . . . . . . . . . . . . . . . . . . .   3
   3.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   4
     3.1.  Guidance for IANA Experts . . . . . . . . . . . . . . . .   5
   4.  Security Considerations . . . . . . . . . . . . . . . . . . .   6
   5.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .   6
   6.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   6
     6.1.  Normative References  . . . . . . . . . . . . . . . . . .   6
     6.2.  Informative References  . . . . . . . . . . . . . . . . .   7
   Appendix A.  Change Log . . . . . . . . . . . . . . . . . . . . .   7
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   8

1.  Introduction

   Since the publication of TLS 1.3 ([RFC8446]) there have been several
   proposals for extensions to this protocol, where the presence of the
   content-free extension in both the ClientHello and either the
   ServerHello or EncryptedExtensions indicates nothing except either
   support for the optional feature or an intent to use the optional
   feature.  Examples:

   o  An extension that allows the server to tell the client that cross-
      SNI resumption is allowed: [I-D.sy-tls-resumption-group].

   o  An extension that is used to negotiate support for authentication
      using both certificates and external PSKs:
      [I-D.ietf-tls-tls13-cert-with-extern-psk].

   This document proposes a single extension called tls_flags that can
   enumerate such flag extensions and allowing both client and server to
   indicate support for optional features in a concise way.

   None of the current proposed extensions are such that the server
   indicates support without the client first indicating support.  So as
   not to preclude future extensions that are so defined, this
   specification allows the client to send an empty extension,
   indicating support for TLS flags in general (and presumably some
   unspecified features in particular).  A possible use case for such
   extensions is to hide them from passive observers, because the server
   can send flags in the EncryptedExtensions message, while the client
   can only send the flags in the clear.

Nir                     Expires September 3, 2020               [Page 2]
Internet-Draft                  TLS Flags                     March 2020

1.1.  Requirements and Other Notation

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in BCP 14 [RFC2119]
   [RFC8174] when, and only when, they appear in all capitals, as shown
   here.

   The term "flag extension" is used to denote an extension where the
   extension_data field is always zero-length in a particular context,
   and the presence of the extension denotes either support for some
   feature or the intent to use that feature.

   The term "flag-type feature" denotes an options TLS 1.3 feature the
   support for which is negotiated using a flag extension, whether that
   flag extension is its own extension or a value in the extension
   defined in this document.

2.  The tls_flags Extension

   This document defines the following extension code point:

      enum {
         ...
         tls_flags(TBD),
         (65535)
      } ExtensionType;

   This document also defines the data for this extension as a variable-
   length bit string, allowing for the encoding of up to 2040 features.

      struct {
         opaque flags<0..255>;
      } FlagExtensions;

   The FlagExtensions field 8 flags with each octet, and its length is
   the minimal length that allows it to encode all of the present flags.
   Within each octet, the bits are packed such that the first bit is the
   LSB and the seventh bit is the MSB.  The first octet holds flags 0-7,
   the second octet holds bits 8-15 and so on.  For example, if we want
   to encode only flag number zero, the FlagExtension field will be 1
   octet long, that is encoded as follows:

      00000001

   If we want to encode flags 1 and 5, the field will still be 1 octet
   long:

Nir                     Expires September 3, 2020               [Page 3]
Internet-Draft                  TLS Flags                     March 2020

      00100010

   If we want to encode flags 3, 5, and 23, the field will have to be 3
   octets long:

      00101000 00000000 10000000

   Note that this document does not define any particular bits for this
   string.  That is left to the protocol documents such as the ones in
   the examples from the previous section.  Such documents will have to
   define which bit to set to show support, and the order of the bits
   within the bit string shall be enumerated in network order: bit zero
   is the high-order bit of the first octet as the flags field is
   transmitted.

   A client that supports this extension SHALL send this extension with
   the flags field having bits set only for those extensions that it
   intends to set.  If it does not wish to set any such flags in the
   ClientHello message, it MAY send the extension empty (with length of
   zero), or it may omit the extension altogether.

   A server that supports this extension and also supports at least one
   of the flag-type features that use this extension and that were
   declared by the ClientHello extension SHALL send this extension with
   the intersection of the flags it supports with the flags declared by
   the client.  The intersection operation MAY be implemented as a
   bitwise AND.  The server may need to send two tls_flags extensions,
   one in the ServerHello and the other in the EncryptedExtensions
   message.  It is up to the document for the specific feature to
   determine whether support should be acknowledged in the ServerHello
   or the EncryptedExtensions message.

3.  IANA Considerations

   IANA is requested to assign a new value from the TLS ExtensionType
   Values registry:

   o  The Extension Name should be tls_flags

   o  The TLS 1.3 value should be CH,SH,EE

   o  The Recommended value should be Y

   o  The Reference should be this document

   IANA is also requested to create a new registry under the TLS
   namespace with name "TLS Flags" and the following fields:

Nir                     Expires September 3, 2020               [Page 4]
Internet-Draft                  TLS Flags                     March 2020

   o  Value, which is a number between 0 and 2039.  All potential values
      are available for assignment.

   o  Flag Name, which is a string

   o  Message, which like the "TLS 1.3" field in the ExtensionType
      registry contains the abbreviations of the messages that may
      contain the flag: CH, SH, EE, etc.

   o  Recommended, which is a Y/N value determined in the document
      defining the optional feature.

   o  Reference, which is a link to the document defining this flag.

   The policy for this shall be "Specification Required" as described in
   [RFC8126].

3.1.  Guidance for IANA Experts

   This extension allows up to 2040 flags.  However, they are not all
   the same, because the length of the extension is determined by the
   highest set bit.

   We would like to allocate the flags in such a way that the typical
   extension is as short as possible.  The scenario we want to guard
   against is that in a few years some extension is defined that all
   implementations need to support and that is assigned a high number
   because all of the lower numbers have already been allocated.  An
   example of such an extension is the Renegotiation Indication
   Extension defined in [RFC5746].

   For this reason, the IANA experts should allocate the flags as
   follows:

   o  Flags 0-7 are reserved for documents coming out of the TLS working
      group with a specific request to assign a low number.

   o  Flags 8-31 are for standards-track documents that the experts
      believe will see wide adoption among either all users of TLS or a
      significant group of TLS users.  For example, an extension that
      will be used by all web clients or all smart objects.

   o  Flags 32-63 are for other documents, including experimental, that
      are likely to see significant adoption.

   o  Flags 64-79 are not to be allocated.  They are for reserved for
      private use.

Nir                     Expires September 3, 2020               [Page 5]
Internet-Draft                  TLS Flags                     March 2020

   o  Flags 80-2039 can be used for temporary allocation in experiments,
      for flags that are likely to see use only in very specific
      environments, for national and corporate extensions, and as
      overflow, in case one of the previous categories has been
      exhausted.

4.  Security Considerations

   The extension described in this document provides a more concise way
   to express data that could otherwise be expressed in individual
   extensions.  It does not send in the clear any information that would
   otherwise be sent encrypted, nor vice versa.  For this reason this
   extension is neutral as far as security is concerned.

5.  Acknowledgements

   The idea for writing this was expressed at the mic during the TLS
   session at IETF 104 by Eric Rescorla.

   The current bitwise formatting was suggested on the mailing list by
   Nikos Mavrogiannopoulos.

   Improvement to the encoding were suggested by Ilari Liusvaara, who
   also asked for a better explanation of the semantics of missing
   extensions.

   Useful comments received from Martin Thomson.

6.  References

6.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8446]  Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
              <https://www.rfc-editor.org/info/rfc8446>.

Nir                     Expires September 3, 2020               [Page 6]
Internet-Draft                  TLS Flags                     March 2020

6.2.  Informative References

   [I-D.ietf-tls-tls13-cert-with-extern-psk]
              Housley, R., "TLS 1.3 Extension for Certificate-based
              Authentication with an External Pre-Shared Key", draft-
              ietf-tls-tls13-cert-with-extern-psk-07 (work in progress),
              December 2019.

   [I-D.sy-tls-resumption-group]
              Sy, E., "TLS Resumption across Server Name Indications for
              TLS 1.3", draft-sy-tls-resumption-group-00 (work in
              progress), March 2019.

   [RFC5746]  Rescorla, E., Ray, M., Dispensa, S., and N. Oskov,
              "Transport Layer Security (TLS) Renegotiation Indication
              Extension", RFC 5746, DOI 10.17487/RFC5746, February 2010,
              <https://www.rfc-editor.org/info/rfc5746>.

   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, "Guidelines for
              Writing an IANA Considerations Section in RFCs", BCP 26,
              RFC 8126, DOI 10.17487/RFC8126, June 2017,
              <https://www.rfc-editor.org/info/rfc8126>.

Appendix A.  Change Log

   RFC EDITOR: PLEASE REMOVE THIS SECTION AS IT IS ONLY MEANT TO AID THE
   WORKING GROUP IN TRACKING CHANGES TO THIS DOCUMENT.

   draft-ietf-tls-tlsflags-02 set the maximum number of flags to 2048,
   and added guidance for the IANA experts.

   draft-ietf-tls-tlsflags-01 allows server-only flags and allows the
   client to send an empty extension.  Also modified the packing order
   of the bits.

   draft-ietf-tls-tlsflags-00 had the same text as draft-nir-tls-
   tlsflags-02, and was re-submitted as a working group document
   following the adoption call.

   Version -02 replaced the fixed 64-bit string with an unlimited
   bitstring, where only the necessary octets are encoded.

   Version -01 replaced the enumeration of 8-bit values with a 64-bit
   bitstring.

   Version -00 was a quickly-thrown-together draft with the list of
   supported features encoded as an array of 8-bit values.

Nir                     Expires September 3, 2020               [Page 7]
Internet-Draft                  TLS Flags                     March 2020

Author's Address

   Yoav Nir
   Dell Technologies
   9 Andrei Sakharov St
   Haifa  3190500
   Israel

   Email: ynir.ietf@gmail.com

Nir                     Expires September 3, 2020               [Page 8]