Skip to main content

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

Document Type Active Internet-Draft (tls WG)
Author Yoav Nir
Last updated 2024-03-16
Replaces draft-nir-tls-tlsflags
RFC stream Internet Engineering Task Force (IETF)
Intended RFC status Proposed Standard
Formats
Additional resources GitHub Repository
Mailing list discussion
Stream WG state Waiting for Implementation
Associated WG milestone
Nov 2020
Submit "A Flags Extension for TLS 1.3" to the IESG
Document shepherd Sean Turner
IESG IESG state I-D Exists
Consensus boilerplate Yes
Telechat date (None)
Responsible AD (None)
Send notices to Christopher Wood <caw@heapingbits.net>, sean@sn3rd.com
draft-ietf-tls-tlsflags-13
TLS                                                               Y. Nir
Internet-Draft                                         Dell Technologies
Intended status: Standards Track                           16 March 2024
Expires: 17 September 2024

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

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 17 September 2024.

Copyright Notice

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

Nir                     Expires 17 September 2024               [Page 1]
Internet-Draft                  TLS Flags                     March 2024

   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 Revised BSD License text as
   described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Revised BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Requirements and Other Notation . . . . . . . . . . . . .   3
   2.  The tls_flags Extension . . . . . . . . . . . . . . . . . . .   3
   3.  Rules for The Flags Extension . . . . . . . . . . . . . . . .   4
     3.1.  Interaction with the 0-RTT Handshake  . . . . . . . . . .   5
   4.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   5
   5.  Security Considerations . . . . . . . . . . . . . . . . . . .   6
   6.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .   7
   7.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   7
     7.1.  Normative References  . . . . . . . . . . . . . . . . . .   7
     7.2.  Informative References  . . . . . . . . . . . . . . . . .   8
   Appendix A.  Change Log . . . . . . . . . . . . . . . . . . . . .   8
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   9

1.  Introduction

   Since the publication of TLS 1.3 ([I-D.ietf-tls-rfc8446bis]) 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:

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

   *  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].

   *  The post_handshake_auth extension from the TLS 1.3 base document
      indicates that the client is willing to perform post-handshake
      authentication.

   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.

Nir                     Expires 17 September 2024               [Page 2]
Internet-Draft                  TLS Flags                     March 2024

   None of the current proposed extensions allow for indication of
   support in ServerHello (SH), EncryptedExtensions (EE), Certificate
   (CT), or HelloRetryRequest (HRR) without first being indicated in
   ClientHello (CH).  Similarly, none of the current proposed extensions
   allow for an indication of support in the client-side Certificate
   (CT) message without first being indicated in the server's
   CertificateRequest (CR) message.  This restriction is enforced by the
   rules in Section 3.

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 optional 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<1..255>;
      } FlagExtensions;

   The FlagExtensions field contains 8 flags in each octet.  The length
   of the extension 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 least significant bit and the eighth bit is

Nir                     Expires 17 September 2024               [Page 3]
Internet-Draft                  TLS Flags                     March 2024

   the most significant.  Using zero-based indexing, 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:

      00100010

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

      00101000 00000000 10000000

   An implementation that receives an all-zero value for this extension
   or a value that contains trailing zero bytes MUST generate a fatal
   illegal_parameter alert.

   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.

3.  Rules for The Flags Extension

   Any TLS implementation that intends to propose or indicate support
   for a flag extension SHALL send this extension with the relevant bits
   set.  It MUST NOT send this extension empty -- with a length of zero.

   This specification does not require every flag extension to be
   acknowledged.  Acknowledging a flag extension is typically needed to
   inform the peer proposing the extension that the other side
   understands and supports the extension, but some extensions do not
   require this acknowledgement.

   For a flag that does require a response, the only proper response is
   the same flag in a flags extension.  This extension MUST NOT be used
   to specify extensions where the response is a proper extension with
   content.

Nir                     Expires 17 September 2024               [Page 4]
Internet-Draft                  TLS Flags                     March 2024

   A flag proposed by the client in ClientHello (CH) that requires
   acknowledgement SHOULD be acknowledged in either ServerHello (SH), in
   EncryptedExtensions (EE), in Certificate (CT), or in
   HelloRetryRequest (HRR) as the corresponding flag document specifies.
   Similarly, a flag proposed by the server in the CertificateRequest
   (CR) message that requires acknowledgement SHOULD be acknowledged in
   the client's Certificate (CT) message.  A flag proposed by the server
   in the NewSessionTicket (NST) message is never acknowledged as there
   is not client-side response message.

   Multiple flags can be proposed or acknowledged in the same extension.

   In all of the above cases, a flag MUST NOT be acknowledged in SH, EE,
   CT, or HRR without first having been proposed in CH or CR.
   Unsolicited flags may appear only in CH, CR, and NST.  An endpoint
   that receives an unsolicited flag in another message (HRR, SH, EE, or
   CT) MUST generate a fatal illegal_parameter alert.

   A client that supports this extension and at least one flag extension
   SHALL send this extension with the flags field having bits set only
   for those extensions that it intends to set.  It MUST NOT send this
   extension with a length of zero.

   An implementation that receives an invalid tls_flags extension MUST
   terminate the TLS handshake with a fatal illegal_parameter alert.

3.1.  Interaction with the 0-RTT Handshake

   The 0-RTT handshake, defined in section 2.3 of
   [I-D.ietf-tls-rfc8446bis], has a ClientHello message, a ServerHello
   message, and an EncryptedExtensions message.  Those can include the
   tls_flags extension just as they can in a regular handshake.

   Future flag extensions MUST define their interaction with 0-RTT, just
   as other extensions are required to.

4.  IANA Considerations

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

   *  The Extension Name should be tls_flags

   *  The TLS 1.3 value should be CH,SH,HRR,EE,CR,CT,NST

   *  The DTLS-Only value should be N

   *  The Recommended value should be Y

Nir                     Expires 17 September 2024               [Page 5]
Internet-Draft                  TLS Flags                     March 2024

   *  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:

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

   *  Flag Name, which is a string

   *  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.

   *  Recommended, which is a Y/N/D value; see Section 3 of
      [I-D.ietf-tls-rfc8447bis].

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

   The policy for this shall be "Specification Required" as described in
   Section 4.6 of [RFC8126] with the exception of flags numbered from
   0-15, which follow the "Standards Action" policy (Section 4.9 of
   [RFC8126]).  Designated expert(s) are advised to follow the advice in
   Section 17 of [RFC8447] when reviewing registration requests.

   The initial contents of the registry shall be one entry, as follows:

   *  Value shall be 8

   *  Flag Name shall be resumption_across_names

   *  Message shall be NST

   *  Recommended shall be set to no (N)

   *  The reference shall the the RFC-to-be
      [I-D.ietf-tls-cross-sni-resumption].

5.  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.

Nir                     Expires 17 September 2024               [Page 6]
Internet-Draft                  TLS Flags                     March 2024

   Extension authors should be aware that acknowledging flags in a
   tls_flags extension of the ServerHello and HelloRetryRequest messages
   expose this response to passive observers.  Unless there is a special
   reason to place the response in the ServerHello, most flags should go
   in other (encrypted) messages.

6.  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, including the
   suggestion to eliminate the option to have the server send
   unsolicited flag types and the rules for where unsolicited flags can
   appear.

7.  References

7.1.  Normative References

   [I-D.ietf-tls-rfc8446bis]
              Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", Work in Progress, Internet-Draft, draft-
              ietf-tls-rfc8446bis-10, 3 March 2024,
              <https://datatracker.ietf.org/doc/html/draft-ietf-tls-
              rfc8446bis-10>.

   [I-D.ietf-tls-rfc8447bis]
              Salowey, J. A. and S. Turner, "IANA Registry Updates for
              TLS and DTLS", Work in Progress, Internet-Draft, draft-
              ietf-tls-rfc8447bis-08, 23 January 2024,
              <https://datatracker.ietf.org/doc/html/draft-ietf-tls-
              rfc8447bis-08>.

   [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>.

Nir                     Expires 17 September 2024               [Page 7]
Internet-Draft                  TLS Flags                     March 2024

   [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>.

   [RFC8447]  Salowey, J. and S. Turner, "IANA Registry Updates for TLS
              and DTLS", RFC 8447, DOI 10.17487/RFC8447, August 2018,
              <https://www.rfc-editor.org/info/rfc8447>.

7.2.  Informative References

   [I-D.ietf-tls-cross-sni-resumption]
              Vasiliev, V., "Transport Layer Security (TLS) Resumption
              across Server Names", Work in Progress, Internet-Draft,
              draft-ietf-tls-cross-sni-resumption-02, 5 December 2021,
              <https://datatracker.ietf.org/doc/html/draft-ietf-tls-
              cross-sni-resumption-02>.

   [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", Work in
              Progress, Internet-Draft, draft-ietf-tls-tls13-cert-with-
              extern-psk-07, 23 December 2019,
              <https://datatracker.ietf.org/doc/html/draft-ietf-tls-
              tls13-cert-with-extern-psk-07>.

   [I-D.sy-tls-resumption-group]
              Sy, E., "TLS Resumption across Server Name Indications for
              TLS 1.3", Work in Progress, Internet-Draft, draft-sy-tls-
              resumption-group-00, 1 March 2019,
              <https://datatracker.ietf.org/doc/html/draft-sy-tls-
              resumption-group-00>.

   [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-13 align with 8446bis and 8447bis

Nir                     Expires 17 September 2024               [Page 8]
Internet-Draft                  TLS Flags                     March 2024

   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.

Author's Address

   Yoav Nir
   Dell Technologies
   9 Andrei Sakharov St
   Haifa 3190500
   Israel
   Email: ynir.ietf@gmail.com

Nir                     Expires 17 September 2024               [Page 9]