<?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.13 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-ctls-06" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title abbrev="cTLS 1.3">Compact TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ctls-06"/>
    <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>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <author initials="B." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Google</organization>
      <address>
        <email>bemasc@google.com</email>
      </address>
    </author>
    <date year="2022" month="July" day="09"/>
    <area>General</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a "compact" version of TLS and DTLS. It is logically
isomorphic to ordinary TLS, but saves space by trimming obsolete material,
tighter encoding, a template-based specialization technique, and
alternative cryptographic techniques. cTLS is not directly interoperable with
TLS or DTLS, but it should eventually be possible for a single server port
to 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, for example point compression.</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 semi-static Diffie-Hellman.</li>
      </ul>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: Semi-static and point compression are never mentioned again.</t>
        </li>
      </ul>
      <t>For the common (EC)DHE handshake with pre-established certificates, Stream cTLS
achieves an overhead of 45 bytes over the minimum required by the
cryptovariables.  For a PSK handshake, the overhead is 21 bytes.  Annotated
handshake transcripts for these cases can be found in <xref target="transcripts"/>.</t>
      <ul empty="true">
        <li>
          <t>TODO: Update these values.</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),
  cert_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>
        <ul empty="true">
          <li>
            <t>TODO: Reorder enum.</t>
          </li>
        </ul>
        <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>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: Is it really worth converting snake_case to camelCase?  camelCase is slightly more traditional in JSON, and saves one byte, but it seems annoying to implement.</t>
          </li>
        </ul>
        <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>
          <ul empty="true">
            <li>
              <t>TODO: Reorder section.</t>
            </li>
          </ul>
          <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 literal
"signature_algorithms" extension consisting solely of this group.</t>
            <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.
The server MUST omit the CertificateRequest message, as its contents
are redundant.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: We don't actually say that you can omit empty messages,
so we need to add that somewhere.</t>
              </li>
            </ul>
            <t>In JSON, this value is represented as <tt>true</tt> or <tt>false</tt>.</t>
          </section>
          <section anchor="clienthelloextensions-serverhelloextensions-encryptedextensions-and-certrequestextensions">
            <name><tt>client_hello_extensions</tt>, <tt>server_hello_extensions</tt>, <tt>encrypted_extensions</tt>, and <tt>cert_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>;
  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>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.</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 in <tt>expected_extensions</tt> whose value has fixed length.  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>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.</t>
              </li>
            </ul>
            <t>In JSON, this length is represented as an integer.</t>
          </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 stream transports, or a
<tt>DTLSHandshake</tt> (<xref section="5.2" sectionFormat="comma" target="RFC9147"/>) struct on datagram transports,
and MAY be broken into multiple records as in TLS and DTLS.  Otherwise,
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="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>
          </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>
        </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, the Cryptographic
Label Prefix used for the handshake SHALL be "Sctls " for Stream cTLS and "Dctls "
for Datagram cTLS.  (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: Does <tt>server_hello_extensions</tt> apply to <tt>HelloRetryRequest</tt>?</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>Transcript expansion also needs some analysis and we need to determine
whether we need an extension to indicate that cTLS is in use and with
which profile.</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>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: Should we require standards action for all profile IDs that would fit in 2 octets.</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">cert_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: ??? Not clear what to put here.</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 ECDSA with SHA256
and NIST P256r1. The ephemeral Diffie-Hellman uses the FX25519 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  Overhead
              ---  ----  --------
ClientHello   132   69       2
ServerHello    90   64       2
ServerFlight  478   73       5
ClientFlight  458   73       5
==================================
Total        1158  279      14
]]></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": "ecdsa_secp256r1_sha256",
  "finishedSize": 8,
  "clientHelloExtensions": {
    "predefinedExtensions": {
      "server_name": "000e00000b6578616d706c652e636f6d"
    },
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  },
  "serverHelloExtensions": {
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  },
  "certificateRequestExtensions": {
    "predefinedExtensions": {
      "certificate_request_context": "00",
      "signature_algorithms": "00020403"
    },
    "allowAdditional": false
  },
  "mutualAuth": true,
  "knownCertificates": {
    "61": "3082...",
    "62": "3082...",
    "63": "...",
    "64": "...",
    ...
  }
}
]]></sourcecode>
      <t>ClientHello: 71 bytes = Profile ID(5) + Random(32) + DH(32) + Overhead(2)</t>
      <artwork><![CDATA[
01                    // Handshake.msg_type = ClientHello
05 abcdef1234         // ClientHello.profile_id
5856a1...43168c130    // ClientHello.random
a690...af948          // KeyShareEntry.key_exchange
]]></artwork>
      <t>ServerHello: 65 bytes = Random(32) + DH(32) + Overhead(1)</t>
      <artwork><![CDATA[
02                     // Handshake.msg_type = ServerHello
cff4c0...684c859ca8    // ServerHello.random
9fbc...0f49            // KeyShareEntry.key_exchange
]]></artwork>
      <t>Server Flight: 78 = SIG(64) + MAC(8) + CERTID(1) + Overhead(5)</t>
      <t>The EncryptedExtensions, and the CertificateRequest messages
are omitted because they are empty.</t>
      <artwork><![CDATA[
0b                 // Certificate
  03               //   CertificateList
    01             //     CertData.length
      61           //       CertData = 'a'

0f                 // CertificateVerify
  3045...10ce      //   signature

14                 // Finished
  bfc9d66715bb2b04 //   VerifyData
]]></artwork>
      <t>Client Flight: 78 bytes = SIG(64) + MAC(8) + CERTID(1) + Overhead(5)</t>
      <artwork><![CDATA[
0b                 // Certificate
  03               //   CertificateList
    01             //     CertData.length
      62           //       CertData = 'b'


0f                 // CertificateVerify
  3045...f60e //   signature

14                 // Finished
  35e9c34eec2c5dc1 //   VerifyData
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We would like to thank Karthikeyan Bhargavan, Owen Friel, Sean Turner, Martin Thomson, and Chris Wood.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
XNbd42PtWueHP6vATUmJjeVJ9oqQCl+ouE2t85/n5sBCP81irlApIwI24+/6
9P1eG/TE4y5YxcnWpA+Sx5oyAbzBbKSmvOHEFrfCI5NlNmOatEp026yofGSF
mhU5UzIMVRK3dZJI7slBH16l6hNtSuupYllUIWhJinBpIJKQDyBcETr32LmH
/nm7fh8WpYjlZMsrojiX/tHg7WUUCLFLij3blmXbuZpsXhe68u3SvBVVV6Fp
FWopeVnbHNP/EGlJ5LRP6GVTcA4L67SkErjgC+u2+tNX1ciLlKFWHKO4JLwY
YWX99BjlpgNEI37EuYvXbgP0Ro29x3QRijzf5+ev+W4veUjemLZR2EM5tW6D
QTPW59lgpZehNgolKIN8Bp0FMNGNoWQMSVmq3iGGGOR574Qx0HgcEpXwF+N/
PlBdyl7gUfalhmRjyoZ0QYsEh4hvwSDPpJ3/jnjcHqcW2wuL7ELj0pfkV/B6
ETXKvn8w2oYuzJNk5x0vKVhc5kjUIShP1Y8VnCG17NLWQ8r9ES3Bv1/s5L+W
s3MdGVI3ljS6SCopK5I8qGwaEd51IPm/pWSw+SGly4quT2Ee7cYjg6es0SLz
uw4idx0OlW1XLtXBNWIuC9+fo+zZyQUhVrHaYIzNK926X7hWQbfOF6TNPied
5uv6EXz9xOuZA7lhaLSy+IEdYa8yC/6RmPGTHiflO8/ufN7WzU+I9Lp55mlr
N06gzAwmX0heJPamDpf4VLJLn9Nm35q76g7dOKAQ3qTzG7y6a0eOcF7DeRK9
m5/jQ0Sn1hW0pWtOsKc8Lv19rd39HBJvA8382Md6e0Dzez866S2l7E5q3TiR
t7WzzWOZVN/ZjI7WPom5u8nZr33D17RQbziPK356TQ9b+6KLZUt3VlVm/MHs
+Car1k42R7akXTAjsXKQHpca/MX96611lfXe1/VLVfl8VRqJ/w7KlCJ64Q0A
2n89t6+gJ/KSfnl5HWkk9xJ2g0nfS+CDwQBHJ0UPGFhlm9Xxa8BoTOHMXgzU
NXM19H3So5HzQj40TsNgkVPzdwysQY6JlS32t//e5oiU+u+gbmhM3ZVn5Hyc
Y0rSii9NZT8VVW5v18pzdrIbYGprOW2Mg9MuSLqjTvvj2fseSPZsYe4VnU6+
3MWY+IRCwFYyeO7Si/fK7kmq6N1NRZjaXsRoUqASnMd0BSjm17gMEBSnNuaM
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
fF2m6zyV31g9XWagNf2cptFA/T9Sf66RLoEAAA==

-->

</rfc>
