<?xml version="1.0" encoding="UTF-8"?>

<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.4.15 -->

<!DOCTYPE rfc [
 <!ENTITY nbsp    "&#160;">
 <!ENTITY zwsp   "&#8203;">
 <!ENTITY nbhy   "&#8209;">
 <!ENTITY wj     "&#8288;">
]>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="pre5378Trust200902" docName="draft-ietf-tls-dtls-connection-id-13" number="9146" updates="6347" obsoletes="" submissionType="IETF" category="std" consensus="true" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">

  <!-- xml2rfc v2v3 conversion 3.8.0 -->
  <front>
    <title abbrev="DTLS 1.2 Connection ID">Connection Identifier for DTLS 1.2</title>
    <seriesInfo name="RFC" value="9146"/>
    <author initials="E." surname="Rescorla" fullname="Eric Rescorla" role="editor">
      <organization>Mozilla</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig" role="editor">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Arm Limited</organization>
      <address>
        <email>thomas.fossati@arm.com</email>
      </address>
    </author>
    <author initials="A." surname="Kraus" fullname="Achim Kraus">
      <organization>Bosch.IO GmbH</organization>
      <address>
        <email>achim.kraus@bosch.io</email>
      </address>
    </author>
    <date year="2022" month="March"/>
    <area>Security</area>
    <workgroup>TLS</workgroup>

<keyword>NAT rebinding</keyword>

    <abstract>
      <t>This document specifies the Connection ID (CID) construct for the Datagram Transport
Layer Security (DTLS) protocol version 1.2.</t>
      <t>A CID is an identifier carried in the record layer header that gives the
recipient additional information for selecting the appropriate security association.
In "classical" DTLS, selecting a security association of an incoming DTLS record
is accomplished with the help of the 5-tuple. If the source IP address and/or
source port changes during the lifetime of an ongoing DTLS session, then the
receiver will be unable to locate the correct security context.</t>
      <t>The new ciphertext record format with the CID also provides content type encryption
and record layer padding.</t>
<t>This document updates RFC 6347.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The Datagram Transport Layer Security (DTLS) protocol <xref target="RFC6347" format="default"/> was designed for
securing data sent over datagram transports (e.g., UDP). DTLS, like TLS, starts
with a handshake, which can be computationally demanding (particularly
when public key cryptography is used). After a successful handshake,
symmetric key cryptography is used to apply data origin
authentication, integrity, and confidentiality protection. This
two-step approach allows endpoints to amortize the cost of the initial
handshake across subsequent application data protection. Ideally, the
second phase where application data is protected lasts over a long
period of time, since the established keys will only need to be updated
once the key lifetime expires.</t>
      <t>In DTLS as specified in RFC 6347, the IP address and port of the peer are used to
identify the DTLS association. Unfortunately, in some cases, such as NAT rebinding,
these values are insufficient. This is a particular issue in the Internet of Things
when devices enter extended sleep periods to increase their battery lifetime. The
NAT rebinding leads to connection failure, with the resulting cost of a new handshake.</t>
      <t>This document defines an extension to DTLS 1.2 to add a Connection ID (CID) to the
DTLS record layer. The presence of the CID is negotiated via a DTLS
extension.</t>
      <t>Adding a CID to the ciphertext record format presents an opportunity to make
other changes to the record format.  In keeping with the best practices
established by TLS 1.3, the type of the record is encrypted, and
a mechanism is provided for adding padding to obfuscate the plaintext length.</t>
    </section>
    <section anchor="conventions-and-terminology" numbered="true" toc="default">
      <name>Conventions and Terminology</name>
       <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
       "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
       "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
       "<bcp14>SHOULD NOT</bcp14>",
       "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
       "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
       are to be interpreted as described in BCP&nbsp;14
       <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
       when, they appear in all capitals, as shown here.</t>
      <t>This document assumes familiarity with DTLS 1.2 <xref target="RFC6347" format="default"/>. The presentation language
used in this document is described in <xref target="RFC8446" sectionFormat="of" section="3"/>.</t>
    </section>
    <section anchor="the-connectionid-extension" numbered="true" toc="default">
      <name>The "connection_id" Extension</name>
      <t>This document defines the "connection_id" extension, which
is used in ClientHello and ServerHello messages.</t>
      <t>The extension type is specified as follows.</t>

<sourcecode name="" type="tls-presentation"><![CDATA[
  enum {
     connection_id(54), (65535)
  } ExtensionType;
]]></sourcecode>
      <t>The extension_data field of this extension, when included in the
ClientHello, <bcp14>MUST</bcp14> contain the ConnectionId structure. This structure
contains the CID value the client wishes the server to use when sending
messages to the client. A zero-length CID value indicates that the client
is prepared to send using a CID but does not wish the server to use one when
sending.</t>
<sourcecode name="" type="tls-presentation"><![CDATA[
  struct {
      opaque cid<0..2^8-1>;
  } ConnectionId;
]]></sourcecode>
      <t>A server willing to use CIDs will respond with a "connection_id"
extension in the ServerHello, containing the CID it wishes the
client to use when sending messages towards it. A zero-length value
indicates that the server will send using the client's CID but does not
wish the client to include a CID when sending.</t>
      <t>Because each party sends the value in the "connection_id" extension it wants to
receive as a CID in encrypted records, it is possible
for an endpoint to use a deployment-specific constant length for such connection
identifiers.  This can in turn ease parsing and connection lookup --
for example, by having the length in question be a compile-time constant.
Such implementations <bcp14>MUST</bcp14> still be able to send
CIDs of different lengths to other parties.
Since the CID length information is not included in the record itself,
implementations that want to use variable-length CIDs are responsible
for constructing the CID in such a way that its length can be determined
on reception.</t>
      <t>In DTLS 1.2, CIDs are exchanged at the beginning of the DTLS
session only. There is no dedicated "CID update" message
that allows new CIDs to be established mid-session, because
DTLS 1.2 in general does not allow TLS 1.3-style post-handshake messages
that do not themselves begin other handshakes. When a DTLS session is
resumed or renegotiated, the "connection_id" extension is negotiated afresh.</t>
      <t>If DTLS peers have not negotiated the use of CIDs, or a zero-length
CID has been advertised for a given direction, then the record format and content type defined in RFC 6347 <bcp14>MUST</bcp14> be used to send in
the indicated direction(s).</t>
      <t>If DTLS peers have negotiated the use of a non-zero-length CID for a
given direction, then once encryption is enabled, they <bcp14>MUST</bcp14> send with
the record format defined in <xref target="dtls-ciphertext" format="default"/> (see <xref target="record-layer-extensions"/>) with the
new Message Authentication Code (MAC) computation defined in <xref target="mac" format="default"/> and the content type tls12_cid.
Plaintext payloads never use the new record format or the CID content
type.</t>
      <t>When receiving, if the tls12_cid content type is set, then the CID is
used to look up the connection and the security association. If the
tls12_cid content type is not set, then the connection and the security
association are looked up by the 5-tuple and a check <bcp14>MUST</bcp14> be made to
determine whether a non-zero-length CID is expected.
If a non-zero-length CID is expected for the retrieved association,
then the datagram <bcp14>MUST</bcp14> be treated as invalid, as described
in <xref target="RFC6347" sectionFormat="of" section="4.1.2.1"/>.</t>
      <t>When receiving a datagram with the tls12_cid content type,
the new MAC computation defined in <xref target="mac" format="default"/> <bcp14>MUST</bcp14> be used. When receiving a datagram
with the record format defined in RFC 6347, the MAC calculation defined in <xref target="RFC6347" sectionFormat="of" section="4.1.2"/> <bcp14>MUST</bcp14> be used.</t>
    </section>
    <section anchor="record-layer-extensions" numbered="true" toc="default">
      <name>Record Layer Extensions</name>
      <t>This specification defines the CID-enhanced record layer format for DTLS 1.2, and
<xref target="I-D.ietf-tls-dtls13" format="default"/> specifies how to carry the CID in DTLS 1.3.</t>
      <t>To allow a receiver to determine whether a record has a CID or not,
connections that have negotiated this extension use a distinguished
record type tls12_cid(25). The use of this content type has the following
three implications:</t>
      <ul spacing="normal">
        <li>The CID field is present and contains one or more bytes.</li>
        <li>The MAC calculation follows the process described in <xref target="mac" format="default"/>.</li>
        <li>The real content type is inside the encryption envelope, as described
below.</li>
      </ul>
      <t>Plaintext records are not impacted by this extension. Hence, the format
of the DTLSPlaintext structure is left unchanged, as shown in <xref target="dtls-plaintext" format="default"/>.</t>
      <figure anchor="dtls-plaintext">
        <name>DTLS 1.2 Plaintext Record Payload</name>
<sourcecode name="" type="tls-presentation"><![CDATA[
     struct {
         ContentType type;
         ProtocolVersion version;
         uint16 epoch;
         uint48 sequence_number;
         uint16 length;
         opaque fragment[DTLSPlaintext.length];
     } DTLSPlaintext;
]]></sourcecode>
      </figure>
      <t>When CIDs are being used, the content to be sent
is first wrapped along with its content type and optional padding into a
DTLSInnerPlaintext structure. This newly introduced structure is shown in
<xref target="dtls-innerplaintext" format="default"/>.</t>
      <figure anchor="dtls-innerplaintext">
        <name>New DTLSInnerPlaintext Payload Structure</name>
<sourcecode name="" type="tls-presentation"><![CDATA[
     struct {
         opaque content[length];
         ContentType real_type;
         uint8 zeros[length_of_padding];
     } DTLSInnerPlaintext;
]]></sourcecode>
      </figure>
      <dl>
        <dt>
content:</dt>
        <dd>
          <t>Corresponds to the fragment of a given length.</t>
        </dd>
        <dt>
real_type:</dt>
        <dd>
          <t>The content type describing the cleartext payload.</t>
        </dd>
        <dt>
zeros:</dt>
        <dd>
          <t>An arbitrary-length run of zero-valued bytes may appear in
the cleartext after the type field.  This provides an opportunity
for senders to pad any DTLS record by a chosen amount as long as
the total stays within record size limits.  See <xref target="RFC8446" sectionFormat="of" section="5.4"/> for more details. (Note that the term TLSInnerPlaintext in
RFC 8446 refers to DTLSInnerPlaintext in this specification.)</t>
        </dd>
      </dl>
      <t>The DTLSInnerPlaintext byte sequence is then encrypted. To create the
DTLSCiphertext structure shown in <xref target="dtls-ciphertext" format="default"/>, the CID is added.</t>
      <figure anchor="dtls-ciphertext">
        <name>DTLS 1.2 CID-Enhanced Ciphertext Record</name>
<sourcecode name="" type="tls-presentation"><![CDATA[
     struct {
         ContentType outer_type = tls12_cid;
         ProtocolVersion version;
         uint16 epoch;
         uint48 sequence_number;
         opaque cid[cid_length];               // New field
         uint16 length;
         opaque enc_content[DTLSCiphertext.length];
     } DTLSCiphertext;
]]></sourcecode>
      </figure>
      <dl>
        <dt>
outer_type:</dt>
        <dd>
          <t>The outer content type of a DTLSCiphertext record carrying a CID
is always set to tls12_cid(25). The real content
type of the record is found in DTLSInnerPlaintext.real_type after
decryption.</t>
        </dd>
        <dt>
cid:</dt>
        <dd>
          <t>The CID value, cid_length bytes long, as agreed at the time the extension
has been negotiated.  Recall that each peer chooses
the CID value it will receive and use to identify the connection, so an
implementation can choose to always receive CIDs of a fixed length.  If,
however, an implementation chooses to receive CIDs of different lengths,
the assigned CID values must be self-delineating, since there is no other
mechanism available to determine what connection (and thus, what CID length)
is in use.</t>
        </dd>
        <dt>
enc_content:</dt>
        <dd>
          <t>The encrypted form of the serialized DTLSInnerPlaintext structure.</t>
        </dd>
      </dl>
      <t>All other fields are as defined in RFC 6347.</t>
    </section>
    <section anchor="mac" numbered="true" toc="default">
      <name>Record Payload Protection</name>
      <t>Several types of ciphers have been defined for use with TLS and DTLS, and the
MAC calculations for those ciphers differ slightly.</t>
      <t>This specification modifies the MAC calculation as defined in <xref target="RFC6347" format="default"/> and
<xref target="RFC7366" format="default"/>, as well as the definition of the additional data used with Authenticated Encryption with Associated Data (AEAD)
ciphers provided in <xref target="RFC6347" format="default"/>, for records with content type tls12_cid.  The
modified algorithm <bcp14>MUST NOT</bcp14> be applied to records that do not carry a CID, i.e.,
records with content type other than tls12_cid.</t>
      <t>The following fields are defined in this document; all other fields are as
defined in the cited documents.</t>
      <dl>
        <dt>
cid:</dt>
        <dd>
          <t>Value of the negotiated CID (variable length).</t>
        </dd>
        <dt>
cid_length:</dt>
        <dd>
          <t>The length (in bytes) of the negotiated CID (one-byte integer).</t>
        </dd>
        <dt>
length_of_DTLSInnerPlaintext:</dt>
        <dd>
          <t>The length (in bytes) of the serialized DTLSInnerPlaintext (two-byte integer).
The length <bcp14>MUST NOT</bcp14> exceed 2^14.</t>
        </dd>
        <dt>
seq_num_placeholder:</dt>
        <dd>
          <t>8 bytes of 0xff.</t>
        </dd>
      </dl>
      <t>Note that "+" denotes concatenation.</t>
      <section anchor="block-ciphers" numbered="true" toc="default">
        <name>Block Ciphers</name>
        <t>The following MAC algorithm applies to block ciphers
that do not use the Encrypt-then-MAC processing
described in <xref target="RFC7366" format="default"/>.</t>
<sourcecode name="" type="tls-presentation"><![CDATA[
    MAC(MAC_write_key,
        seq_num_placeholder +
        tls12_cid +
        cid_length +
        tls12_cid +
        DTLSCiphertext.version +
        epoch +
        sequence_number +
        cid +
        length_of_DTLSInnerPlaintext +
        DTLSInnerPlaintext.content +
        DTLSInnerPlaintext.real_type +
        DTLSInnerPlaintext.zeros
    );
]]></sourcecode>
        <t>The rationale behind this construction is to separate the MAC input
for DTLS without the connection ID from the MAC input with the
connection ID. The former always consists of a sequence number
followed by some content type other than tls12_cid; the latter
always consists of the seq_num_placeholder followed by tls12_cid.
Although 2^64-1 is potentially a valid sequence number, tls12_cid
will never be a valid content type when the connection ID is not in use.
In addition, the epoch and sequence_number are now fed into
the MAC in the same order as they appear on the wire.</t>
      </section>
      <section anchor="block-ciphers-with-encrypt-then-mac-processing" numbered="true" toc="default">
        <name>Block Ciphers with Encrypt-then-MAC Processing</name>
        <t>The following MAC algorithm applies to block ciphers
that use the Encrypt-then-MAC processing
described in <xref target="RFC7366" format="default"/>.</t>
<sourcecode name="" type="tls-presentation"><![CDATA[
    MAC(MAC_write_key,
        seq_num_placeholder +
        tls12_cid +
        cid_length +
        tls12_cid +
        DTLSCiphertext.version +
        epoch +
        sequence_number +
        cid +
        DTLSCiphertext.length +
        IV +
        ENC(content + padding + padding_length)
    );
]]></sourcecode>
      </section>
      <section anchor="aead-ciphers" numbered="true" toc="default">
        <name>AEAD Ciphers</name>
        <t>For ciphers utilizing AEAD,
the following modification is made to the additional data calculation.</t>
<sourcecode name="" type="tls-presentation"><![CDATA[
    additional_data = seq_num_placeholder +
                      tls12_cid +
                      cid_length +
                      tls12_cid +
                      DTLSCiphertext.version +
                      epoch +
                      sequence_number +
                      cid +
                      length_of_DTLSInnerPlaintext;
]]></sourcecode>
      </section>
    </section>
    <section anchor="peer-address-update" numbered="true" toc="default">
      <name>Peer Address Update</name>
      <t>When a record with a CID is received that has a source address
different from the one currently associated with the DTLS connection,
the receiver <bcp14>MUST NOT</bcp14> replace the address it uses for sending records
to its peer with the source address specified in the received datagram,
unless the following three conditions are met:</t>
      <ul spacing="normal">
        <li>The received datagram has been cryptographically verified using
the DTLS record layer processing procedures.</li>
        <li>The received datagram is "newer" (in terms of both epoch and sequence
number) than the newest datagram received. Reordered datagrams that are
sent prior to a change in a peer address might otherwise cause a valid
address change to be reverted. This also limits the ability of an attacker
to use replayed datagrams to force a spurious address change, which
could result in denial of service. An attacker might be able to succeed
in changing a peer address if they are able to rewrite source addresses
and if replayed packets are able to arrive before any original.</li>
        <li>There is a strategy for ensuring that the new peer address is able to
receive and process DTLS records. No strategy is mandated by this specification,
but see note (*) below.</li>
      </ul>
      <t>The conditions above are necessary to protect against attacks that use datagrams with
spoofed addresses or replayed datagrams to trigger attacks. Note that there
is no requirement for the use of the anti-replay window mechanism defined in
<xref target="RFC6347" sectionFormat="of" section="4.1.2.6"/>. Both solutions, the "anti-replay window" or
"newer" algorithm, will prevent address updates from replay attacks while the
latter will only apply to peer address updates and the former applies to any
application layer traffic.</t>
      <t>Note that datagrams that pass the DTLS cryptographic verification procedures
but do not trigger a change of peer address are still valid DTLS records and
are still to be passed to the application.</t>
      <t indent="3">(*) Note: Application protocols that implement protection against spoofed addresses
depend on being aware of changes in peer addresses so that they can engage the necessary
mechanisms. When delivered such an event, an address validation mechanism specific to the application layer can be triggered -- for example, one that is based on
successful exchange of a minimal amount of ping-pong traffic with the peer.
Alternatively, a DTLS-specific mechanism may be used, as described in
<xref target="DTLS-RRC" format="default"/>.</t>
      <t>DTLS implementations <bcp14>MUST</bcp14> silently discard records with bad MACs or that are
otherwise invalid.</t>
    </section>
    <section anchor="examples" numbered="true" toc="default">
      <name>Example</name>
      <t><xref target="dtls-example2" format="default"/> shows an example exchange where a CID is
used unidirectionally from the client to the server. To indicate that
a zero-length CID is present in the "connection_id" extension,
we use the notation 'connection_id=empty'.</t>
      <figure anchor="dtls-example2">
        <name>Example DTLS 1.2 Exchange with CID</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client                                             Server
------                                             ------

ClientHello                 -------->
(connection_id=empty)


                            <--------      HelloVerifyRequest
                                                     (cookie)

ClientHello                 -------->
(connection_id=empty)
(cookie)

                                                  ServerHello
                                          (connection_id=100)
                                                  Certificate
                                            ServerKeyExchange
                                           CertificateRequest
                            <--------         ServerHelloDone

Certificate
ClientKeyExchange
CertificateVerify
[ChangeCipherSpec]
Finished                    -------->
<CID=100>

                                           [ChangeCipherSpec]
                            <--------                Finished


Application Data            ========>
<CID=100>

                            <========        Application Data

Legend:

<...> indicates that a connection ID is used in the record layer
(...) indicates an extension
[...] indicates a payload other than a handshake message
]]></artwork>
      </figure>
      <t indent="3">Note: In the example exchange, the CID is included in the record layer
once encryption is enabled. In DTLS 1.2, only one handshake message is
encrypted, namely the Finished message. Since the example shows how to
use the CID for payloads sent from the client to the server, only the
record layer payloads containing the Finished message or application data
include a CID.</t>
    </section>
    <section anchor="priv-cons" numbered="true" toc="default">
      <name>Privacy Considerations</name>
      <t>The CID replaces the previously used 5-tuple and, as such, introduces
an identifier that remains persistent during the lifetime of a DTLS connection.
Every identifier introduces the risk of linkability, as explained in <xref target="RFC6973" format="default"/>.</t>
      <t>An on-path adversary observing the DTLS protocol exchanges between the
DTLS client and the DTLS server is able to link the observed payloads to all
subsequent payloads carrying the same ID pair (for bidirectional
communication).  Without multihoming or mobility, the use of the CID
exposes the same information as the 5-tuple.</t>
      <t>With multihoming, a passive attacker is able to correlate the communication
interaction over the two paths. The lack of a CID update mechanism
in DTLS 1.2 makes this extension unsuitable for mobility scenarios where
correlation must be considered. Deployments that use DTLS in multihoming
environments and are concerned about these aspects <bcp14>SHOULD</bcp14> refuse to use CIDs in
DTLS 1.2 and switch to DTLS 1.3 where a CID update mechanism is provided and
sequence number encryption is available.</t>
      <t>This specification introduces record padding for the CID-enhanced record layer,
which is a privacy feature not available with the original DTLS 1.2 specification.
Padding allows the size of the ciphertext to be inflated, making traffic analysis
more difficult. More details about record padding can be found in
Section&nbsp;<xref target="RFC8446" section="5.4"
 sectionFormat="bare"/> and Appendix&nbsp;<xref target="RFC8446" section="E.3"
 sectionFormat="bare"/> of <xref target="RFC8446"/>.</t>
      <t>Finally, endpoints can use the CID to attach arbitrary per-connection metadata
to each record they receive on a given connection. This may be used as a mechanism to communicate
per-connection information to on-path observers. There is no straightforward way to
address this concern with CIDs that contain arbitrary values. Implementations
concerned about this aspect <bcp14>SHOULD</bcp14> refuse to use CIDs.</t>
    </section>
    <section anchor="sec-cons" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>An on-path adversary can create reflection attacks
against third parties because a DTLS peer has no means to distinguish a
genuine address update event (for example, due to a NAT rebinding) from one
that is malicious. This attack is of particular concern when the request is small
and the response large. See <xref target="peer-address-update" format="default"/> for more
on address updates.</t>
      <t>Additionally, an attacker able to observe the data traffic exchanged between
two DTLS peers is able to replay datagrams with modified IP addresses / port numbers.</t>
      <t>The topic of peer address updates is discussed in <xref target="peer-address-update" format="default"/>.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document implements three IANA updates.</t>
      <section anchor="extra-column-to-tls-extensiontype-values-registry" numbered="true" toc="default">
        <name>Extra Column Added to the TLS ExtensionType Values Registry</name>
        <t>IANA has added an extra column named "DTLS-Only" to the
"TLS ExtensionType Values" registry to indicate whether an extension is only
applicable to DTLS and to include this document as an additional reference
for the registry.</t>
      </section>
      <section anchor="entry-to-the-tls-extensiontype-values-registry" numbered="true" toc="default">
        <name>New Entry in the TLS ExtensionType Values Registry</name>
        <t>IANA has allocated an entry in the existing "TLS ExtensionType
Values" registry for connection_id(54), as described
in the table below. Although the value 53 had been allocated by early allocation for a previous version of this document, it
is incompatible with this document.
Therefore, the early allocation has been deprecated
in favor of this assignment.</t>
<table anchor="iana-tls-ext-entry">
  <name></name>
  <thead>
    <tr>
      <th>Value</th>
      <th>Extension Name</th>
      <th>TLS 1.3</th>
      <th>DTLS-Only</th>
      <th>Recommended</th>
      <th>Reference</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>54</td>
      <td>connection_id</td>
      <td>CH, SH</td>
      <td>Y</td>
      <td>N</td>
      <td>RFC 9146</td>
    </tr>
  </tbody>
</table>
        <t>A new column, "DTLS-Only", has been added to the registry.
The valid entries are "Y" if the extension is only applicable to DTLS, "N" otherwise.
All the pre-existing entries are given the value "N".</t>
        <t indent="3">Note: The value "N" in the "Recommended" column is set because this
extension is intended only for specific use cases. This document describes
the behavior of this extension for DTLS 1.2 only; it is not applicable to TLS, and
its usage for DTLS 1.3 is described in <xref target="I-D.ietf-tls-dtls13" format="default"/>.</t>
      </section>
      <section anchor="entry-to-the-tls-contenttype-registry" numbered="true" toc="default">
        <name>New Entry in the TLS ContentType Registry</name>
        <t>IANA has allocated tls12_cid(25) in the "TLS ContentType"
registry. The tls12_cid content type is only applicable to DTLS 1.2.</t>
      </section>
    </section>
  </middle>
  <back>

<displayreference target="I-D.ietf-tls-dtls13" to="DTLS13"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6347.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7366.xml"/>

      </references>

      <references>

        <name>Informative References</name>

<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6973.xml"/>


<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.draft-ietf-tls-dtls13.xml"/>

<!-- draft-ietf-tls-dtls-rrc (I-D Exists) ("long way"; one author is editor) -->
<reference anchor='DTLS-RRC'>
<front>
<title>Return Routability Check for DTLS 1.2 and DTLS 1.3</title>
<author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig' role="editor">
    <organization />
</author>
<author initials='T' surname='Fossati' fullname='Thomas Fossati'>
    <organization />
</author>
<date month='March' day='7' year='2022'/>
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-tls-dtls-rrc-05' />
</reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="false" toc="default">
      <name>Acknowledgements</name>
      <t>We would like to thank <contact fullname="Hanno Becker"/>, <contact fullname="
Martin Duke"/>, <contact fullname="Lars Eggert"/>, <contact fullname="Ben Kaduk"/>, <contact fullname="Warren Kumari"/>,
<contact fullname="Francesca Palombini"/>, <contact fullname="Tom Petch"/>, <contact fullname="John Scudder"/>, <contact fullname="Sean Turner"/>, <contact fullname="Éric Vyncke"/>, and <contact fullname="Robert Wilton"/>
for their review comments.</t>
      <t>Finally, we want to thank the IETF TLS Working Group chairs, <contact fullname="Chris Wood"/>, <contact fullname="Joseph Salowey"/>, and
<contact fullname="Sean Turner"/>, for their patience, support, and feedback.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="default">
      <name>Contributors</name>
      <t>Many people have contributed to this specification, and we would like to thank
the following individuals for their contributions:</t>

      <contact fullname="Yin Xinxing">
        <organization>Huawei</organization>
        <address>
          <email>yinxinxing@huawei.com</email>
        </address>
      </contact>

      <contact fullname="Nikos Mavrogiannopoulos">
        <organization>RedHat</organization>
        <address>
          <email>nmav@redhat.com</email>
        </address>
      </contact>

      <contact fullname="Tobias Gondrom">
        <organization></organization>
        <address>
          <email>tobias.gondrom@gondrom.org</email>
        </address>
      </contact>

      <t>Additionally, we would like to thank the Connection ID task force team members:</t>
      <ul spacing="normal">
        <li><t><contact fullname="Martin Thomson"/> (Mozilla)</t></li>
        <li><t><contact fullname="Christian Huitema"/> (Private Octopus Inc.)</t></li>
        <li><t><contact fullname="Jana Iyengar"/> (Google)</t></li>
        <li><t><contact fullname="Daniel Kahn Gillmor"/> (ACLU)</t></li>
        <li><t><contact fullname="Patrick McManus"/> (Mozilla)</t></li>
        <li><t><contact fullname="Ian Swett"/> (Google)</t></li>
        <li><t><contact fullname="Mark Nottingham"/> (Fastly)</t></li>
      </ul>
      <t>The task force team discussed various design ideas, including cryptographically generated session
IDs using hash chains and public key encryption, but dismissed them due to their
inefficiency. The approach described in this specification is the
simplest possible design that works, given the limitations of DTLS 1.2. DTLS 1.3 provides
better privacy features, and developers are encouraged to switch to the new version of DTLS.</t>
    </section>
  </back>
</rfc>
