<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.22 (Ruby 2.7.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-ctls-08" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="cTLS 1.3">Compact TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ctls-08"/>
    <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
      <organization>Mozilla</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>
    <author initials="R." surname="Barnes" fullname="Richard Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization/>
      <address>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="B." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Google</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2023" month="March" day="13"/>
    <area>General</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a "compact" version of TLS 1.3 and DTLS 1.3. It saves bandwidth
by trimming obsolete material, tighter encoding, a template-based specialization technique,
and alternative cryptographic techniques. cTLS is not directly interoperable with
TLS 1.3 or DTLS 1.3 since the over-the-wire framing is different. A single server
can, however, offer cTLS alongside TLS or DTLS.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>DISCLAIMER: This is a work-in-progress draft of cTLS and has not yet
seen significant security analysis, so could contain major errors. It
should not be used as a basis for building production systems.</t>
      <t>This document specifies "compact" versions of TLS <xref target="RFC8446"/> and DTLS
<xref target="RFC9147"/>, respectively known as "Stream cTLS" and "Datagram cTLS".  cTLS
provides equivalent security and functionality to TLS and DTLS, but it is
designed to take up minimal bandwidth. The space reduction
is achieved by five basic techniques:</t>
      <ul spacing="normal">
        <li>Omitting unnecessary values that are a holdover from previous versions
of TLS.</li>
        <li>Omitting the fields and handshake messages required for preserving backwards-compatibility
with earlier TLS versions.</li>
        <li>More compact encodings.</li>
        <li>A template-based specialization mechanism that allows pre-populating information
at both endpoints without the need for negotiation.</li>
        <li>Alternative cryptographic techniques, such as nonce truncation.</li>
      </ul>
      <t>For the common (EC)DHE handshake with pre-established certificates, Stream cTLS
achieves an overhead of 53 bytes over the minimum required by the
cryptovariables.  For a PSK handshake, the overhead is 21 bytes.  An annotated
handshake transcript can be found in <xref target="transcripts"/>.</t>
      <ul empty="true">
        <li>
          <t>TODO: Make a PSK transcript and check the overhead.</t>
        </li>
      </ul>
      <t>cTLS supports the functionality of TLS and DTLS 1.3, and is forward-compatible
to future versions of TLS and DTLS.  cTLS itself is versioned by
<tt>CTLSTemplate.version</tt> (currently zero).</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
      <t>Structure definitions listed below override TLS 1.3 definitions; any PDU
not internally defined is taken from TLS 1.3.</t>
      <section anchor="template-based-specialization">
        <name>Template-based Specialization</name>
        <t>A significant transmission overhead in TLS 1.3 is contributed to by two factors:</t>
        <ul spacing="normal">
          <li>the negotiation of algorithm parameters, and extensions,  as well as</li>
          <li>the exchange of certificates.</li>
        </ul>
        <t>TLS 1.3 supports different credential types and modes that
are impacted differently by a compression scheme. For example, TLS supports
certificate-based authentication, raw public key-based authentication as well
as pre-shared key (PSK)-based authentication. PSK-based authentication can be
used with externally configured PSKs or with PSKs established through tickets.</t>
        <t>The basic idea of template-based specialization is that we start with the basic
TLS 1.3 handshake, which is fully general and then remove degrees of freedom,
eliding parts of the handshake which are used to express those degrees of
freedom. For example, if we only support one version of TLS, then it
is not necessary to have version negotiation and the
supported_versions extension can be omitted.  Thus, each specialization
produces a new protocol that preserves the security guarantees of TLS, but has
its own unique handshake.</t>
        <t>By assuming that out-of-band agreements took place already prior to the start of
the cTLS protocol exchange, the amount of data exchanged can be radically reduced.
Because different clients may use different compression templates and because multiple
compression templates may be available for use in different deployment environments,
a client needs to inform the server about the profile it is planning to use. The
profile field in the ClientHello serves this purpose.</t>
        <t>Although the template-based specialization mechanisms described here are general,
we also include specific mechanism for certificate-based exchanges because those are
where the most complexity and size reduction can be obtained. Most of the other exchanges in
TLS 1.3 are highly optimized and do not require compression to be used.</t>
        <t>The compression profile defining the use of algorithms, algorithm parameters, and
extensions is represented by the <tt>CTLSTemplate</tt> structure:</t>
        <artwork><![CDATA[
enum {
  profile(0),
  version(1),
  cipher_suite(2),
  dh_group(3),
  signature_algorithm(4),
  random(5),
  mutual_auth(6),
  handshake_framing(7),
  client_hello_extensions(8),
  server_hello_extensions(9),
  encrypted_extensions(10),
  certificate_request_extensions(11),
  known_certificates(12),
  finished_size(13),
  optional(65535)
} CTLSTemplateElementType;

struct {
  CTLSTemplateElementType type;
  opaque data<0..2^32-1>;
} CTLSTemplateElement;

struct {
  uint16 ctls_version = 0;
  CTLSTemplateElement elements<0..2^32-1>
} CTLSTemplate;
]]></artwork>
        <t>Elements in a <tt>CTLSTemplate</tt> MUST appear sorted by the type field in strictly
ascending order.  The initial elements are defined in the subsections below.
Future elements can be added via an IANA registry (<xref target="template-keys"/>).  When
generating a template, all elements are OPTIONAL to include.  When processing
a template, all elements are mandatory to understand (but see discussion of
<tt>optional</tt> in <xref target="optional"/>).</t>
        <t>For ease of configuration, an equivalent JSON dictionary format is also defined.
It consists of a dictionary whose keys are the name of each element type (converted
from snake_case to camelCase), and whose values are a type-specific representation
of the element intended to maximize legibility.  The cTLS version is represented
by the key "ctlsVersion", whose value is an integer, defaulting to 0 if omitted.</t>
        <t>For example, the following specialization describes a protocol with a single fixed
version (TLS 1.3) and a single fixed cipher suite (TLS_AES_128_GCM_SHA256). On the
wire, ClientHello.cipher_suites, ServerHello.cipher_suites, and the
supported_versions extensions in the ClientHello and ServerHello would be omitted.</t>
        <sourcecode type="JSON"><![CDATA[
{
  "ctlsVersion": 0,
  "profile": "0001020304050607",
  "version": 772,
  "cipherSuite": "TLS_AES_128_GCM_SHA256"
}
]]></sourcecode>
        <section anchor="initial-template-elements">
          <name>Initial template elements</name>
          <section anchor="profile">
            <name><tt>profile</tt></name>
            <t>This element identifies the profile being defined.  Its binary value is:</t>
            <artwork><![CDATA[
opaque ProfileID<1..2^8-1>
]]></artwork>
            <t>This encodes the profile ID, if one is specified.  IDs whose
decoded length is 4 bytes or less are reserved (see <xref target="reserved-profiles"/>). When a
reserved value is used (including the default value), other keys MUST NOT appear
in the template, and a client MUST NOT accept the template unless it recognizes
the ID.</t>
            <t>In JSON, the profile ID is represented as a hexadecimal-encoded string.</t>
          </section>
          <section anchor="version">
            <name><tt>version</tt></name>
            <t>Value: a single <tt>ProtocolVersion</tt> (<xref section="4.1.2" sectionFormat="comma" target="RFC8446"/>) that both parties agree to use. For TLS 1.3, the <tt>ProtocolVersion</tt> is 0x0304.</t>
            <t>When this element is included, the <tt>supported_versions</tt> extension
is omitted from <tt>ClientHello.extensions</tt>.</t>
            <t>In JSON, the version is represented as an integer (772 = 0x0304 for TLS 1.3).</t>
          </section>
          <section anchor="ciphersuite">
            <name><tt>cipher_suite</tt></name>
            <t>Value: a single <tt>CipherSuite</tt> (<xref section="4.1.2" sectionFormat="comma" target="RFC8446"/>) that both parties agree to use.</t>
            <t>When this element is included, the <tt>ClientHello.cipher_suites</tt> and
<tt>ServerHello.cipher_suite</tt> fields are omitted.</t>
            <t>In JSON, the cipher suite is represented using the "TLS_AEAD_HASH" syntax
defined in <xref section="8.4" sectionFormat="comma" target="RFC8446"/>.</t>
          </section>
          <section anchor="dhgroup">
            <name><tt>dh_group</tt></name>
            <t>Value: a single <tt>NamedGroup</tt> (<xref section="4.2.7" sectionFormat="comma" target="RFC8446"/>) to use for key establishment.</t>
            <t>This is equivalent to a literal "supported_groups" extension
consisting solely of this group.</t>
            <t>Static vectors (see <xref target="static-vectors"/>):</t>
            <ul spacing="normal">
              <li>
                <tt>KeyShareClientHello.client_shares</tt></li>
              <li>
                <tt>KeyShareEntry.key_exchange</tt>, if the <tt>NamedGroup</tt> uses fixed-size key shares.</li>
            </ul>
            <t>In JSON, the group is listed by the code point name in <xref section="4.2.7" sectionFormat="comma" target="RFC8446"/>
(e.g., "x25519").</t>
          </section>
          <section anchor="signaturealgorithm">
            <name><tt>signature_algorithm</tt></name>
            <t>Value: a single <tt>SignatureScheme</tt> (<xref section="4.2.3" sectionFormat="comma" target="RFC8446"/>) to use for authentication.</t>
            <t>This is equivalent to a placing a literal "signature_algorithms" extension
consisting solely of this group in every extensions field where it is
permitted to appear.  When this element is included,
<tt>CertificateVerify.algorithm</tt> is omitted.</t>
            <t>Static vectors (see <xref target="static-vectors"/>):</t>
            <ul spacing="normal">
              <li>
                <tt>CertificateVerify.signature</tt>, if the <tt>SignatureScheme</tt> output is
self-delimiting.</li>
            </ul>
            <t>In JSON, the
signature algorithm is listed by the code point name in <xref section="4.2.3" sectionFormat="comma" target="RFC8446"/>. (e.g., ecdsa_secp256r1_sha256).</t>
          </section>
          <section anchor="random">
            <name><tt>random</tt></name>
            <t>Value: a single <tt>uint8</tt>.</t>
            <t>The <tt>ClientHello.Random</tt> and <tt>ServerHello.Random</tt> values
are truncated to the given length.  Where a 32-byte <tt>Random</tt> is
required, the Random is padded to the right with 0s and the
anti-downgrade mechanism in <xref section="4.1.3" sectionFormat="comma" target="RFC8446"/> is disabled.
IMPORTANT: Using short Random values can lead to potential
attacks. The Random length MUST be less than or equal to 32 bytes.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: Karthik Bhargavan suggested the idea of hashing
ephemeral public keys and to use the result (truncated to 32 bytes)
as random values. Such a change would require a security analysis.</t>
              </li>
            </ul>
            <t>In JSON, the length is represented as an integer.</t>
          </section>
          <section anchor="mutualauth">
            <name><tt>mutual_auth</tt></name>
            <t>Value: a single <tt>uint8</tt>, with 1 representing "true" and 0 representing
"false".  All other values are forbidden.</t>
            <t>If set to true, this element indicates that the client must authenticate with
a certificate by sending Certificate and a CertificateVerify message.
If the CertificateRequest message does not add information not already
conveyed in the template, the server SHOULD omit it.</t>
            <t>In JSON, this value is represented as <tt>true</tt> or <tt>false</tt>.</t>
            <ul empty="true">
              <li>
                <t>TODO: It seems like there was an intent to elide the
<tt>Certificate.certificate_request_context</tt> field, but this is not stated
explicitly anywhere.</t>
              </li>
            </ul>
          </section>
          <section anchor="handshakeframing">
            <name><tt>handshake_framing</tt></name>
            <t>Value: <tt>uint8</tt>, with 0 indicating "false" and 1 indicating "true".
If true, handshake messages MUST be conveyed inside a <tt>Handshake</tt>
(<xref section="4" sectionFormat="comma" target="RFC8446"/>) struct on reliable, ordered transports, or a
<tt>DTLSHandshake</tt> (<xref section="5.2" sectionFormat="comma" target="RFC9147"/>) struct otherwise,
and MAY be broken into multiple records as in TLS and DTLS.  If false,
each handshake message is conveyed in a <tt>CTLSHandshake</tt> or
<tt>CTLSDatagramHandshake</tt> struct (<xref target="ctlshandshake"/>), which MUST be the payload
of a single record.</t>
            <t>In JSON, this value is represented as <tt>true</tt> or <tt>false</tt>.</t>
          </section>
          <section anchor="clienthelloextensions-serverhelloextensions-encryptedextensions-and-certificaterequestextensions">
            <name><tt>client_hello_extensions</tt>, <tt>server_hello_extensions</tt>, <tt>encrypted_extensions</tt>, and <tt>certificate_request_extensions</tt></name>
            <t>Value: a single <tt>CTLSExtensionTemplate</tt> struct:</t>
            <artwork><![CDATA[
struct {
  Extension predefined_extensions<0..2^16-1>;
  ExtensionType expected_extensions<0..2^16-1>;
  ExtensionType self_delimiting_extensions<0..2^16-1>;
  uint8 allow_additional;
} CTLSExtensionTemplate;
]]></artwork>
            <t>The <tt>predefined_extensions</tt> field indicates extensions that should be treated
as if they were included in the corresponding message.  This allows these
extensions to be omitted entirely.</t>
            <t>The <tt>expected_extensions</tt> field indicates extensions that must be included
in the corresponding message, at the beginning of its <tt>extensions</tt> field.
The types of these extensions are omitted when serializing the <tt>extensions</tt>
field of the corresponding message.</t>
            <t>The <tt>self_delimiting_extensions</tt> field indicates extensions whose data is
self-delimiting. The cTLS implementation MUST be able to parse all these
extensions, and all extensions listed in <xref section="4.2" sectionFormat="of" target="RFC8446"/>.</t>
            <t>The <tt>allow_additional</tt> field MUST be 0 (false) or 1 (true), indicating whether
additional extensions are allowed here.</t>
            <t><tt>predefined_extensions</tt> and <tt>expected_extensions</tt> MUST be in strictly ascending
order by <tt>ExtensionType</tt>, and a single <tt>ExtensionType</tt> MUST NOT appear in both
lists.  If the <tt>version</tt>, <tt>dh_group</tt>, or <tt>signature_algorithm</tt> element appears
in the template, the corresponding <tt>ExtensionType</tt> MUST NOT appear here.  The
<tt>pre_shared_key</tt> <tt>ExtensionType</tt> MUST NOT appear in either list.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: Are there other extensions that would benefit from special
treatment, as opposed to hex values.</t>
              </li>
            </ul>
            <t>Static vectors (see <xref target="static-vectors"/>):</t>
            <ul spacing="normal">
              <li>
                <tt>Extension.extension_data</tt> for any extension whose type is in
<tt>self_delimiting_extensions</tt>, or is listed in
<xref section="4.2" sectionFormat="of" target="RFC8446"/> except <tt>padding</tt>.  This applies only to the corresponding message.</li>
              <li>The <tt>extensions</tt> field of the corresponding message, if <tt>allow_additional</tt> is false.</li>
            </ul>
            <t>In JSON, this value is represented as a dictionary with three keys:</t>
            <ul spacing="normal">
              <li>
                <tt>predefinedExtensions</tt>: a dictionary mapping <tt>ExtensionType</tt> names (<xref section="4.2" sectionFormat="comma" target="RFC8446"/>) to values encoded as hexadecimal strings.</li>
              <li>
                <tt>expectedExtensions</tt>: an array of <tt>ExtensionType</tt> names.</li>
              <li>
                <tt>selfDelimitingExtensions</tt>: an array of <tt>ExtensionType</tt> names.</li>
              <li>
                <tt>allowAdditional</tt>: <tt>true</tt> or <tt>false</tt>.</li>
            </ul>
            <t>If <tt>predefinedExtensions</tt> or <tt>expectedExtensions</tt> is empty, it MAY be omitted.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: Should we have a <tt>certificate_entry_extensions</tt> element?</t>
              </li>
            </ul>
          </section>
          <section anchor="finishedsize">
            <name><tt>finished_size</tt></name>
            <t>Value: <tt>uint8</tt>, indicating that the Finished value is to be truncated to the given
length.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: How short should we allow this to be? TLS 1.3 uses
the native hash and TLS 1.2 used 12 bytes. More analysis is needed
to know the minimum safe Finished size. See <xref section="E.1" sectionFormat="comma" target="RFC8446"/>
for more on this, as well as
https://mailarchive.ietf.org/arch/msg/tls/TugB5ddJu3nYg7chcyeIyUqWSbA.
The minimum safe size may vary depending on whether the template was
learned via a trusted channel.</t>
              </li>
            </ul>
            <t>In JSON, this length is represented as an integer.</t>
          </section>
          <section anchor="optional">
            <name><tt>optional</tt></name>
            <t>Value: a <tt>CTLSTemplate</tt> containing elements that are not required to be understood
by the client.  Server operators MUST NOT place an element in this section unless
the server is able to determine whether the client is using it from the client data
it receives. A key MUST NOT appear in both the main template and the optional
section.</t>
            <t>In JSON, this value is represented in the same way as the <tt>CTLSTemplate</tt> itself.</t>
          </section>
          <section anchor="known-certs">
            <name><tt>known_certificates</tt></name>
            <t>Value: a <tt>CertificateMap</tt> struct:</t>
            <artwork><![CDATA[
struct {
  opaque id<1..2^8-1>;
  opaque cert_data<1..2^16-1>;
} CertificateMapEntry;

struct {
  CertificateMapEntry entries<2..2^24-1>;
} CertificateMap;
]]></artwork>
            <t>Entries in the certificate map must appear in strictly ascending lexicographic
order by ID.</t>
            <t>In JSON, <tt>CertificateMap</tt> is represented as a dictionary from <tt>id</tt> to <tt>cert_data</tt>,
which are both represented as hexademical strings:</t>
            <sourcecode type="JSON"><![CDATA[
{
  "00": "3082...",
  "01": "3082...",
}
]]></sourcecode>
            <t>Certificates are a major contributor to the size of a TLS handshake.  In order
to avoid this overhead when the parties to a handshake have already exchanged
certificates, a compression profile can specify a dictionary of "known
certificates" that effectively acts as a compression dictionary on certificates.</t>
            <t>When compressing a Certificate message, the sender examines the cert_data field
of each CertificateEntry.  If the cert_data matches a value in the known
certificates object, then the sender replaces the cert_data with the
corresponding key.  Decompression works the opposite way, replacing keys with
values.</t>
            <t>Note that in this scheme, there is no signaling on the wire for whether a given
cert_data value is compressed or uncompressed.  Known certificates objects
SHOULD be constructed in such a way as to avoid a uncompressed object being
mistaken for compressed one and erroneously decompressed.  For X.509, it is
sufficient for the first byte of the compressed value (key) to have a value
other than 0x30, since every X.509 certificate starts with this byte.</t>
            <t>This element can be used to compress both client and server certificates.
However, in most deployments where client certificates are used, it would be
inefficient to encode all client certificates into a single profile.  Instead,
deployments can define a unique profile for each client, distinguished by
the profile ID.  Note that the profile ID is sent in cleartext, so this
strategy has significant privacy implications.</t>
          </section>
        </section>
        <section anchor="static-vectors">
          <name>Static vector compression</name>
          <t>Some cTLS template elements imply that certain vectors (as defined in <xref section="3.4" sectionFormat="comma" target="RFC8446"/>) have a fixed number of elements during the handshake.  These
template elements note these "static vectors" in their definition.  When encoding
a "static vector", its length prefix is omitted.</t>
          <t>For example, suppose that the cTLS template is:</t>
          <sourcecode type="JSON"><![CDATA[
{
  "ctlsVersion": 0,
  "version": 772,
  "dhGroup": "x25519",
  "clientHelloExtensions": {
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  }
}
]]></sourcecode>
          <t>Then, the following structure:</t>
          <artwork><![CDATA[
   28                 // length(extensions)
   33 26              // extension_type = KeyShare
     0024             // length(client_shares)
       001d           // KeyShareEntry.group
       0020           // length(KeyShareEntry.key_exchange)
         a690...af948 // KeyShareEntry.key_exchange
]]></artwork>
          <t>is compressed down to:</t>
          <artwork><![CDATA[
   a690...af948 // KeyShareEntry.key_exchange
]]></artwork>
          <t>according to the following rationale:</t>
          <ul spacing="normal">
            <li>The length of <tt>extensions</tt> is omitted because <tt>allowAdditional</tt> is false, so
the number of items in <tt>extensions</tt> (i.e., 1) is known in advance.</li>
            <li>
              <tt>extension_type</tt> is omitted because it is specified by <tt>expected_extensions</tt>.</li>
            <li>The length of <tt>client_shares</tt> is omitted because the use of <tt>dhGroup</tt> implies
that there can only be one <tt>KeyShareEntry</tt>.</li>
            <li>
              <tt>KeyShareEntry.group</tt> is omitted because it is specified by <tt>dhGroup</tt>.</li>
            <li>The length of the <tt>key_exchange</tt> is omitted because the "x25519" key share
has a fixed size (32 bytes).</li>
          </ul>
        </section>
      </section>
      <section anchor="record-layer">
        <name>Record Layer</name>
        <t>The only cTLS records that are sent in plaintext are handshake records
(ClientHello and ServerHello/HRR) and alerts. cTLS alerts are the same
as TLS/DTLS alerts and use the same content types.  For handshake records,
we set the <tt>content_type</tt> field to a fixed cTLS-specific value to
distinguish cTLS plaintext records from encrypted records, TLS/DTLS
records, and other protocols using the same 5-tuple.</t>
        <artwork><![CDATA[
      struct {
          ContentType content_type = ctls_handshake;
          opaque profile_id<0..2^8-1>;
          opaque fragment<0..2^16-1>;
      } CTLSClientPlaintext;
]]></artwork>
        <t>The <tt>profile_id</tt> field MUST identify the profile that is in use. A
zero-length ID corresponds to the cTLS default protocol.
The server's reply does not include the <tt>profile_id</tt>, because the server
must be using the same profile indicated by the client.</t>
        <artwork><![CDATA[
      struct {
          ContentType content_type = ctls_handshake;
          opaque fragment<0..2^16-1>;
      } CTLSServerPlaintext;
]]></artwork>
        <t>Encrypted records use DTLS 1.3 <xref target="RFC9147"/> record framing, comprising a configuration octet
followed by optional connection ID, sequence number, and length fields. The
encryption process and additional data are also as described in DTLS.</t>
        <artwork><![CDATA[
      0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      |0|0|1|C|S|L|E E|
      +-+-+-+-+-+-+-+-+
      | Connection ID |   Legend:
      | (if any,      |
      /  length as    /   C   - Connection ID (CID) present
      |  negotiated)  |   S   - Sequence number length
      +-+-+-+-+-+-+-+-+   L   - Length present
      | 8 or 16 bit   |   E   - Epoch
      |Sequence Number|
      | (if present)  |
      +-+-+-+-+-+-+-+-+
      | 16 bit Length |
      | (if present)  |
      +-+-+-+-+-+-+-+-+

      struct {
          opaque unified_hdr[variable];
          opaque encrypted_record[length];
      } CTLSCiphertext;
]]></artwork>
        <t>The presence and size of the connection ID field is negotiated as in DTLS.</t>
        <t>As with DTLS, the length field MAY be omitted by clearing the L bit, which means
that the record consumes the entire rest of the data in the lower level
transport.  In this case it is not possible to have multiple DTLSCiphertext
format records without length fields in the same datagram.  In stream-oriented
transports (e.g., TCP), the length field MUST be present. For use over other
transports length information may be inferred from the underlying layer.</t>
        <t>Normal DTLS does not provide a mechanism for suppressing the sequence number
field entirely. When a reliable, ordered transport (e.g., TCP) is in use, the
S bit in the configuration octet MUST be cleared and the sequence number
MUST be omitted. When an unreliable transport is in use, the S bit
has its usual meaning and the sequence number MUST be included.</t>
      </section>
      <section anchor="ctlshandshake">
        <name>cTLS Handshake Layer</name>
        <t>The cTLS handshake is modeled in three layers:</t>
        <ol spacing="normal" type="1"><li>The Transport layer</li>
          <li>The Transcript layer</li>
          <li>The Logical layer</li>
        </ol>
        <section anchor="the-transport-layer">
          <name>The Transport layer</name>
          <t>When <tt>template.handshake_framing</tt> is false, the cTLS transport layer
uses a custom handshake
framing that saves space by relying on the record layer for message lengths.
(This saves 3 bytes per message compared to TLS, or 9 bytes compared to DTLS.)
This compact framing is defined by the <tt>CTLSHandshake</tt> and
<tt>CTLSDatagramHandshake</tt> structs.</t>
          <t>Any handshake type registered in the IANA TLS HandshakeType Registry can be
conveyed in a <tt>CTLS[Datagram]Handshake</tt>, but not all messages are actually
allowed on a given connection.  This definition shows the messages types
supported in <tt>CTLSHandshake</tt> as of TLS 1.3 and DTLS 1.3, but any future
message types are also permitted.</t>
          <artwork><![CDATA[
      struct {
          HandshakeType msg_type;    /* handshake type */
          select (CTLSHandshake.msg_type) {
              case client_hello:          ClientHello;
              case server_hello:          ServerHello;
              case hello_retry_request:   HelloRetryRequest;  /* New */
              case end_of_early_data:     EndOfEarlyData;
              case encrypted_extensions:  EncryptedExtensions;
              case certificate_request:   CertificateRequest;
              case certificate:           Certificate;
              case certificate_verify:    CertificateVerify;
              case finished:              Finished;
              case new_session_ticket:    NewSessionTicket;
              case key_update:            KeyUpdate;
              case request_connection_id: RequestConnectionId;
              case new_connection_id:     NewConnectionId;
          };
      } CTLSHandshake;

      struct {
          HandshakeType msg_type;    /* handshake type */
          uint16 message_seq;        /* DTLS-required field */
          select (CTLSDatagramHandshake.msg_type) {
            ... /* same as CTLSHandshake */
          };
      } CTLSDatagramHandshake;
]]></artwork>
          <t>Each <tt>CTLSHandshake</tt> or <tt>CTLSDatagramHandshake</tt> MUST be conveyed as a single
<tt>CTLSClientPlaintext.fragment</tt>, <tt>CTLSServerPlaintext.fragment</tt>, or
<tt>CTLSCiphertext.encrypted_record</tt>, and is therefore limited to a maximum
length of <tt>2^16-1</tt> or less.  When operating over UDP, large
<tt>CTLSDatagramHandshake</tt> messages will also require the use of IP
fragmentation, which is sometimes undesirable.  Operators can avoid these
concerns by setting <tt>template.handshakeFraming = true</tt>.</t>
          <t>On unreliable transports, the DTLS 1.3 ACK system is used.</t>
        </section>
        <section anchor="the-transcript-layer">
          <name>The Transcript layer</name>
          <t>TLS and DTLS start the handshake with an empty transcript.  cTLS is different:
it starts the transcript with a "virtual message" whose HandshakeType is
<tt>ctls_template</tt> (<xref target="template-handshaketype"/>) containing the <tt>CTLSTemplate</tt> used
for this connection.  This message is included in the transcript even though it
is not exchanged during connection setup, in order to ensure that both parties
are using the same template.  Subsequent messages are appended to the transcript
as usual.</t>
          <t>When computing the handshake transcript, all handshake messages are represented
in TLS <tt>Handshake</tt> messages, as in DTLS 1.3 (<xref section="5.2" sectionFormat="comma" target="RFC9147"/>),
regardless of <tt>template.handshake_framing</tt>.</t>
          <t>To ensure that all parties agree about what protocol is in use, and whether
records are subject to loss, the Cryptographic Label Prefix used for the
handshake SHALL be "Sctls " (for "Stream cTLS") if <tt>Handshake</tt> or <tt>CTLSHandshake</tt>
transport was used, and "Dctls " (for "Datagram cTLS") otherwise.  (This is
similar to the prefix substitution in <xref section="5.9" sectionFormat="of" target="RFC9147"/>).</t>
        </section>
        <section anchor="the-logical-layer">
          <name>The Logical layer</name>
          <t>The logical handshake layer consists of handshake messages that are reconstructed
following the instructions in the template.  At this layer, predefined extensions
are reintroduced, truncated Random values are extended, and all information is
prepared to enable the cryptographic handshake and any import or export of
key material and configuration.</t>
          <t>There is no obligation to reconstruct logical handshake messages in any specific
format, and client and server do not need to agree on the precise representation
of these messages, so long as they agree on their logical contents.</t>
        </section>
      </section>
    </section>
    <section anchor="handshake-messages">
      <name>Handshake Messages</name>
      <t>In general, we retain the basic structure of each individual
TLS or DTLS handshake message. However, the following handshake
messages have been modified for space reduction and cleaned
up to remove pre-TLS 1.3 baggage.</t>
      <section anchor="clienthello">
        <name>ClientHello</name>
        <t>The cTLS ClientHello is defined as follows.</t>
        <artwork><![CDATA[
      opaque Random[RandomLength];      // variable length

      struct {
          Random random;
          CipherSuite cipher_suites<1..2^16-1>;
          Extension extensions<1..2^16-1>;
      } ClientHello;
]]></artwork>
      </section>
      <section anchor="serverhello">
        <name>ServerHello</name>
        <t>We redefine ServerHello in the following way.</t>
        <artwork><![CDATA[
      struct {
          Random random;
          CipherSuite cipher_suite;
          Extension extensions<1..2^16-1>;
      } ServerHello;
]]></artwork>
      </section>
      <section anchor="helloretryrequest">
        <name>HelloRetryRequest</name>
        <t>In cTLS, the HelloRetryRequest message is a true handshake message
instead of a specialization of ServerHello.  The HelloRetryRequest has
the following format.</t>
        <artwork><![CDATA[
      struct {
          CipherSuite cipher_suite;
          Extension extensions<2..2^16-1>;
      } HelloRetryRequest;
]]></artwork>
        <t>The HelloRetryRequest is the same as the ServerHello above
but without the unnecessary sentinel Random value.</t>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: Should we define a <tt>hello_retry_request_extensions</tt> template
  element?  Or is this too far off the happy path to be worth optimizing?</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section provides some example specializations.</t>
      <t>For this example we use TLS 1.3 only with AES_GCM,
x25519, ALPN h2, short random values, and everything
else is ordinary TLS 1.3.</t>
      <sourcecode type="JSON"><![CDATA[
{
   "ctlsVersion": 0,
   "profile": "0504030201",
   "version" : 772,
   "random": 16,
   "cipherSuite" : "TLS_AES_128_GCM_SHA256",
   "dhGroup": "x25519",
   "clientHelloExtensions": {
      "predefinedExtensions": {
          "application_layer_protocol_negotiation" : "030016832",
      },
      "allowAdditional": true
    }
}
]]></sourcecode>
      <t>Version 772 corresponds to the hex representation 0x0304 (i.e. 1.3).</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>WARNING: This document is effectively brand new and has seen no
analysis. The idea here is that cTLS is isomorphic to TLS 1.3, and
therefore should provide equivalent security guarantees.</t>
      <t>The use of key ids is a new feature introduced in this document, which
requires some analysis, especially as it looks like a potential source
of identity misbinding. This is, however, entirely separable
from the rest of the specification.</t>
      <t>Once the handshake has completed, this specification is intended to
provide a fully secured connection even if the client initially learned the
template through an untrusted channel.  However, this security relies on
the use of a cryptographically strong Finished message.  If the Finished
message has not yet been received, or the transcript hash has been
truncated by use of a small <tt>finished_size</tt> template element value, an
attacker could be using a forged template to impersonate the other party.
This should not impact any ordinary use of TLS, including Early Data (which
is secured by the previously completed handshake).</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="adding-a-contenttype">
        <name>Adding a ContentType</name>
        <t>This document requests that a code point be allocated from the "TLS ContentType
registry.  This value must be in the range 0-31 (inclusive).  The row to be
added in the registry has the following form:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">DTLS-OK</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">ctls</td>
              <td align="left">Y</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">TBD</td>
              <td align="left">ctls_handshake</td>
              <td align="left">Y</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
        <ul empty="true">
          <li>
            <t>RFC EDITOR: Please replace the value TBD with the value assigned by IANA, and
the value XXXX to the RFC number assigned for this document.</t>
          </li>
        </ul>
      </section>
      <section anchor="template-keys">
        <name>Template Keys</name>
        <t>This document requests that IANA open a new registry entitled "cTLS Template Keys", on the Transport Layer Security (TLS) Parameters page, with a "Specification Required" registration policy and the following initial contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">profile</td>
              <td align="left">0</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">version</td>
              <td align="left">1</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">cipher_suite</td>
              <td align="left">2</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">dh_group</td>
              <td align="left">3</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">signature_algorithm</td>
              <td align="left">4</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">random</td>
              <td align="left">5</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">mutual_auth</td>
              <td align="left">6</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">handshake_framing</td>
              <td align="left">7</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">client_hello_extensions</td>
              <td align="left">8</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">server_hello_extensions</td>
              <td align="left">9</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">encrypted_extensions</td>
              <td align="left">10</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">certificate_request_extensions</td>
              <td align="left">11</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">known_certificates</td>
              <td align="left">12</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">finished_size</td>
              <td align="left">13</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">optional</td>
              <td align="left">65535</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="template-handshaketype">
        <name>Adding a cTLS Template message type</name>
        <t>IANA is requested to add the following entry to the TLS HandshakeType registry.</t>
        <ul spacing="normal">
          <li>Value: TBD</li>
          <li>Description: ctls_template</li>
          <li>DTLS-OK: Y</li>
          <li>Reference: (This document)</li>
          <li>Comment: Virtual message used in cTLS.</li>
        </ul>
      </section>
      <section anchor="activating-the-helloretryrequest-messagetype">
        <name>Activating the HelloRetryRequest MessageType</name>
        <t>This document requests that IANA change the name of entry 6 in the TLS
HandshakeType Registry from "hello_retry_request_RESERVED" to
"hello_retry_request", and set its Reference field to this document.</t>
      </section>
      <section anchor="reserved-profiles">
        <name>Reserved profiles</name>
        <t>This document requests that IANA open a new registry entitled "Well-known
cTLS Profile IDs", on the Transport Layer Security (TLS) Parameters page,
with the following columns:</t>
        <ul spacing="normal">
          <li>ID value: A sequence of 1-4 octets.</li>
          <li>Template: A JSON object.</li>
          <li>Note: An explanation or reference.</li>
        </ul>
        <t>The ID values of length 1 are subject to a "Standards Action" registry
policy. Values of length 2 are subject to an "RFC Required" policy. Values
of length 3 and 4 are subject to a "First Come First Served" policy. Values
longer than 4 octets are not subject to registration and MUST NOT appear
in this registry.</t>
        <t>The initial registry contents are:</t>
        <table>
          <thead>
            <tr>
              <th align="left">ID value</th>
              <th align="left">Template</th>
              <th align="left">Note</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>[0x00]</tt></td>
              <td align="left">
                <tt>{"version": 772}</tt></td>
              <td align="left">cTLS 1.3-only</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
      <reference anchor="RFC9147">
        <front>
          <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
            <organization/>
          </author>
          <author fullname="N. Modadugu" initials="N." surname="Modadugu">
            <organization/>
          </author>
          <date month="April" year="2022"/>
          <abstract>
            <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
            <t>This document obsoletes RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9147"/>
        <seriesInfo name="DOI" value="10.17487/RFC9147"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <section anchor="transcripts">
      <name>Example Exchange</name>
      <t>The follow exchange illustrates a complete cTLS-based exchange supporting
mutual authentication using certificates. The digital signatures use Ed25519.
The ephemeral Diffie-Hellman uses the X25519 curve and
the exchange negotiates TLS-AES-128-CCM8-SHA256.
The certificates are exchanged using certificate identifiers.</t>
      <t>The resulting byte counts are as follows:</t>
      <artwork><![CDATA[
                     ECDHE
              ------------------
              TLS  CTLS  Cryptovariables
              ---  ----  ---------------
ClientHello   132   74       64
ServerHello    90   68       64
ServerFlight  478   92       72
ClientFlight  458   91       72
========================================
Total        1158  325      272
]]></artwork>
      <t>The following compression profile was used in this example:</t>
      <sourcecode type="JSON"><![CDATA[
{
  "ctlsVersion": 0,
  "profile": "abcdef1234",
  "version": 772,
  "cipherSuite": "TLS_AES_128_CCM_8_SHA256",
  "dhGroup": "x25519",
  "signatureAlgorithm": "ed25519",
  "finishedSize": 8,
  "clientHelloExtensions": {
    "predefinedExtensions": {
      "server_name": "000e00000b6578616d706c652e636f6d"
    },
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  },
  "serverHelloExtensions": {
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  },
  "encryptedExtensions": {
    "allowAdditional": false
  },
  "mutualAuth": true,
  "knownCertificates": {
    "61": "3082...",
    "62": "3082...",
    "63": "...",
    "64": "...",
    ...
  }
}
]]></sourcecode>
      <t>ClientHello: 74 bytes = Profile ID(5) + Random(32) + DH(32) + Overhead(5)</t>
      <artwork><![CDATA[
$TBD               // CTLSClientPlaintext.message_type = ctls_handshake
05 abcdef1234      // CTLSClientPlaintext.profile_id
0041               // CTLSClientPlaintext.fragment length = 65
  01               // CTLSHandshake.msg_type = client_hello
    5856...c130    //   ClientHello.random (32 bytes)
// ClientHello.extensions is omitted except for the key share contents.
      a690...f948  //     KeyShareEntry.key_exchange (32 bytes)
]]></artwork>
      <t>ServerHello: 68 bytes = Random(32) + DH(32) + Overhead(4)</t>
      <artwork><![CDATA[
$TBD               // CTLSServerPlaintext.message_type = ctls_handshake
0041               // CTLSServerPlaintext.fragment length
  02               //   CTLSHandshake.msg_type = server_hello
    cff4...9ca8    //     ServerHello.random (32 bytes)
// ServerHello.extensions is omitted except for the key share contents.
      9fbc...0f49  //       KeyShareEntry.key_exchange (32 bytes)
]]></artwork>
      <t>Server Flight: 92 =
    SIG(64) + Finished(8) + MAC(8) + CERTID(1) + Overhead(11)</t>
      <artwork><![CDATA[
24                 // CTLSCipherText header, L=1, C,S,E=0
0059               // CTLSCipherText.length = 89

// BEGIN ENCRYPTED CONTENT

08                 // CTLSHandshake.msg_type = encrypted_extensions

// The EncryptedExtensions body is omitted because there are no more
// extensions.  The length is also omitted, because allowAdditional is
// false.

// The CertificateRequest message is omitted because "mutualAuth" and
// "signatureAlgorithm" are specified in the template.

0b                 // CTLSHandshake.msg_type = certificate
  00               //   Certificate.certificate_request_context = ""
  03               //   Certificate.certificate_list length
    01             //     CertificateEntry.cert_data length
      61           //       cert_data = 'a'
    00             //     CertificateEntry.extensions

0f                 // CTLShandshake.msg_type = certificate_verify
  3045...10ce      //   CertificateVerify.signature

14                 // CTLSHandshake.msg_type = finished
  bfc9d66715bb2b04 //   Finished.verify_data

// END ENCRYPTED CONTENT

b3d9...0aa7        // CCM-8 MAC (8 bytes)
]]></artwork>
      <t>Client Flight: 91 bytes =
    SIG(64) + Finished(8) + MAC(8) + CERTID(1) + Overhead(10)</t>
      <artwork><![CDATA[
24                 // CTLSCipherText header, L=1, C,S,E=0
0058               // CTLSCipherText.length = 88

// BEGIN ENCRYPTED CONTENT

0b                 // CTLSHandshake.msg_type = certificate
  00               //   Certificate.certificate_request_context = ""
  03               //   Certificate.certificate_list length
    01             //     CertificateEntry.cert_data length
      62           //       cert_data = 'b'
    00             //     CertificateEntry.extensions

0f                 // CTLSHandshake.msg_type = certificate_verify
                   //   CertificateVerify.algorithm is omitted
                   //   CertificateVerify.signature length is omitted
  3045...f60e      //   CertificateVerify.signature (64 bytes)

14                 // CTLSHandshake.msg_type = finished
  35e9c34eec2c5dc1 //   Finished.verify_data

// END ENCRYPTED CONTENT

09c5..37b1         // CCM-8 MAC (8 bytes)
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We would like to thank Karthikeyan Bhargavan, Owen Friel, Sean Turner, Martin Thomson, Chris Wood, and John Preuß Mattsson.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
