<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.8 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-rescorla-tls-ctls-00" category="info">

  <front>
    <title abbrev="CTLS 1.3">Compact TLS 1.3</title>

    <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
      <organization>Mozilla</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>

    <date year="2019" month="March" day="11"/>

    <area>General</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document specifies a “compact” version of TLS 1.3. It is isomorphic
to TLS 1.3 but saves space by aggressive use of defaults and tighter
encodings. CTLS is not interoperable with TLS 1.3, but it should
eventually be possible for the server to distinguish TLS 1.3 and CTLS handshakes.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>DDISCLAIMER: This is a work-in-progress draft of MLS 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 a “compact” version of TLS 1.3 <xref target="RFC8446"/>. It is isomorphic
to TLS 1.3 but designed to take up minimal bandwidth. The space reduction
is achieved by two basic techniques:</t>

<t><list style="symbols">
  <t>Default values for common configurations, thus avoiding the need
to take up space on the wire.</t>
  <t>More compact encodings, omitting unnecessary values.</t>
</list></t>

<t>For the common (EC)DHE handshake with (EC)DHE and pre-established
public keys, CTLS achieves an overhead of [TODO] bytes over the minimum
required by the cryptovariables.</t>

<t>Although isomorphic, CTLS implementations cannot interoperate with TLS 1.3
implementations because the packet formats are non-interoperable. It is
probably possible to make a TLS 1.3 server switch-hit between CTLS and TLS 1.3
but this specification does not define how.</t>

</section>
<section anchor="conventions-and-definitions" title="Conventions and Definitions">

<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>
<section anchor="common-primitives" title="Common Primitives">

<section anchor="varints" title="Varints">

<t>CTLS makes use of variable-length integers in order to allow a wide
integer range while still providing for a minimal encoding. The
width of the integer is encoded in the first two bits of the field
as follows, with xs indicating bits that form part of the integer.</t>

<texttable>
      <ttcol align='left'>Bit pattern</ttcol>
      <ttcol align='left'>Length (bytes)</ttcol>
      <c>0xxxxxxx</c>
      <c>1</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>10xxxxxx xxxxxxxx</c>
      <c>2</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>11xxxxxx xxxxxxxx xxxxxxxx</c>
      <c>3</c>
</texttable>

<t>Thus, one byte can be used to carry values up to 127.</t>

<t>In the TLS syntax variable integers are denoted as “varint” and
a vector with a top range of a varint is denoted as:</t>

<figure><artwork><![CDATA[
     opaque foo<1..V>;
]]></artwork></figure>

<t>[[OPEN ISSUE: Should we just re-encode this directly in CBOR?.
That might be easier for people, but I ran out of time.]]</t>

</section>
<section anchor="record-layer" title="Record Layer">

<t>The CTLS Record Layer assumes that records are externally framed
(i.e., that the length is already known because it is carried in a UDP
datagram or the like). Depending on how this was carried, you might
need another byte or two for that framing. Thus, only the type byte
need be carried. Thus, TLSPlaintext becomes:</t>

<figure><artwork><![CDATA[
      struct {
          ContentType type;
          opaque fragment[TLSPlaintext.length];
      } TLSPlaintext;
]]></artwork></figure>

<t>In addition, because the epoch is known in advance, the
dummy content type is not needed for the ciphertext, so
TLSCiphertext becomes:</t>

<figure><artwork><![CDATA[
      struct {
          opaque content[TLSPlaintext.length];
          ContentType type;
          uint8 zeros[length_of_padding];
      } TLSInnerPlaintext;

      struct {
          opaque encrypted_record[TLSCiphertext.length];
      } TLSCiphertext;
]]></artwork></figure>

<t>Note: The user is responsible for ensuring that the sequence
numbers/nonces are handled in the usual fashion.</t>

<t>Overhead: 1 byte per record.</t>

</section>
<section anchor="handshake-layer" title="Handshake Layer">

<t>The CTLS handshake layer is the same as the TLS 1.3 handshake
layer except that the length is a varint.</t>

<figure><artwork><![CDATA[
      struct {
          HandshakeType msg_type;    /* handshake type */
          varint length;             // CHANGED
          select (Handshake.msg_type) {
              case client_hello:          ClientHello;
              case server_hello:          ServerHello;
              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;
          };
      } Handshake;
]]></artwork></figure>

<t>Overhead: 2 bytes per handshake message (min).</t>

<t>[OPEN ISSUE: This can be shrunk to 1 byte in some cases if we are
willing to use a custom encoding. There are 11 handshake
types, so we can use the first 4 bits for the type and
then the bottom 4 bits for an encoding of the length, but
we would have to offset that by 16 or so to be able to
have a meaningful impact.]]</t>

</section>
<section anchor="extensions" title="Extensions">

<t>CTLS Extensions are the same as TLS 1.3 extensions, except varint
length coded:</t>

<figure><artwork><![CDATA[
    struct {
        ExtensionType extension_type;
        opaque extension_data<0..V>;
    } Extension;
]]></artwork></figure>

</section>
</section>
<section anchor="handshake-messages" title="Handshake Messages">

<t>In general, we retain the basic structure of each individual
TLS handshake message. However, the following handshake messages
are slightly modified for space reduction.</t>

<section anchor="clienthello" title="ClientHello">

<t>The CTLS ClientHello is as follows.</t>

<figure><artwork><![CDATA[
      uint8 ProtocolVersion;  // 1 byte
      opaque Random[16];      // shortened
      uint8 CipherSuite;      // 1 byte

      struct {
          ProtocolVersion versions<0..255>;
          Random random;
          CipherSuite cipher_suites<1..V>;
          Extension extensions[remainder_of_message];
      } ClientHello;
]]></artwork></figure>

<t>[[TODO: Define single-byte mappings of the cipher suites and
protocol version.]]</t>

<t>The versions list from “supported_versions” has moved into
ClientHello.versions with versions being one byte, but with the modern
semantics of the client offering N versions and the server picking
one.</t>

<t>In order to conserve space, the following extensions have default
values which apply if they are not present:</t>

<t><list style="symbols">
  <t>SignatureAlgorithms: ed25519</t>
  <t>SupportedGroups: the list of groups present in the KeyShare
extension.</t>
  <t>Pre-Shared Key Exchange Modes: psk_dhe_ke</t>
  <t>Certificate Type: A new TBD value indicating a key index.</t>
</list></t>

<t>As a practical matter, the only extension needed is the KeyShare
extension, as defined below.</t>

<t>Overhead: 8 bytes (min)</t>

<t><list style="symbols">
  <t>Versions: 1 + # Versions</t>
  <t>CipherSuites: 1 + # Suites</t>
  <t>Key shares: 2 + 2 * # shares</t>
</list></t>

<section anchor="keyshare" title="KeyShare">

<t>The KeyShare extension is redefined as:</t>

<figure><artwork><![CDATA[
      uint8 NamedGroup;
      struct {
          NamedGroup group;
          opaque key_exchange<1..V>;
      } KeyShareEntry;

      struct {
          KeyShareEntry client_shares[length of extension];
      } KeyShareClientHello;
]]></artwork></figure>

<t>[[TODO: Need a mapping for 8-bit group ids]]</t>

</section>
</section>
<section anchor="serverhello" title="ServerHello">

<t>We redefine ServerHello in a similar way:</t>

<figure><artwork><![CDATA[
      struct {
          ProtocolVersion version;
          Random random;
          CipherSuite cipher_suite;
          Extension extensions[remainder_of_message];
      } ServerHello;
]]></artwork></figure>

<t>The extensions have the same default values as in ClientHello,
so as a practical matter only KeyShare is needed.</t>

<t>Overhead: 6 bytes</t>

<t><list style="symbols">
  <t>Version: 1</t>
  <t>Cipher Suite: 1</t>
  <t>KeyShare: 4 bytes</t>
</list></t>

<section anchor="keyshare-1" title="KeyShare">
<figure><artwork><![CDATA[
      struct {
          KeyShareEntry server_share;
      } KeyShareServerHello;
]]></artwork></figure>

<t>[[OPEN ISSUE: We could save one byte here by removing the length
of the key share and another byte by only allowing the client
to send one key share (so group wasn’t needed)..]]</t>

<t>[[TODO: Need to define a single-byte list of NamedGroups]].</t>

</section>
<section anchor="presharedkeys" title="PreSharedKeys">

<t>[[TODO]]</t>

</section>
</section>
<section anchor="encryptedextensions" title="EncryptedExtensions">

<t>Unchanged.</t>

<t>[[OPEN ISSUE: We could save 2 bytes in handshake header by
omitting this value when it’s unneeded.]]</t>

</section>
<section anchor="certificaterequest" title="CertificateRequest">

<t>This message removes the certificate_request_context and
re-encodes the extensions.</t>

<figure><artwork><![CDATA[
      struct {
          Extension extensions[remainder of message];
      } CertificateRequest;
]]></artwork></figure>

</section>
<section anchor="certificate" title="Certificate">

<t>We can slim down the Certficate message somewhat.</t>

<figure><artwork><![CDATA[
      enum {
          X509(0),
          RawPublicKey(2),
          (255)
      } CertificateType;

      struct {
          select (certificate_type) {
              case RawPublicKey:
                /* From RFC 7250 ASN.1_subjectPublicKeyInfo */
                opaque ASN1_subjectPublicKeyInfo<1..V>;

              case X509:
                opaque cert_data<1..V>;
          };
          Extension extensions<0..V>;
      } CertificateEntry;

      struct {
          CertificateEntry certificate_list[rest of extension];
      } Certificate;
]]></artwork></figure>

<t>For a single certificate, this message will have a minumum of 2 bytes of
overhead for the two length bytes.</t>

<t>[[OPEN ISSUE: What should the default type be?]]</t>

<section anchor="key-ids" title="Key IDs">

<t>WARNING: This is a new feature which has not seen any analysis
and so may have real problems.</t>

<t>[[OPEN ISSUE: Do we want this at all?]]</t>

<t>It may also be possible to slim down the Certificate message further,
by adding a KeyID-based mode, in which they keys were just a table
index. This would redefines Certificate as:</t>

<figure><artwork><![CDATA[
    struct {
        varint key_id;
    } KeyIdCertificate;

    struct {
          select (certiticate_type):
              case RawPublicKey, x509:
                  CertificateEntry certificate_list<0..2^24-1>;

              case key_id:
                  KeyIdCertificate;
          }
      } Certificate;
]]></artwork></figure>

<t>This allows the use of a short key id. Note that this is orthogonal
to the rest of the changes.</t>

<t>IMPORTANT: You really want to include the certificate in the handshake
transcript somehow, but this isn’t specified for how.</t>

</section>
<section anchor="certificateverify" title="CertificateVerify">

<t>Remove the signature algorithm and assume it’s tied to the
key. Note that this does not work for RSA keys, but if
we just decide to be EC only, it works fine.</t>

<figure><artwork><![CDATA[
      struct {
          opaque signature[rest of message];
      } CertificateVerify;
]]></artwork></figure>

</section>
<section anchor="finished" title="Finished">

<t>Unchanged.</t>

</section>
<section anchor="helloretryrequest" title="HelloRetryRequest">

<t>[[TODO]]</t>

</section>
</section>
</section>
<section anchor="handshake-size-calculations" title="Handshake Size Calculations">

<section anchor="ecdhe-w-signatures" title="ECDHE w/ Signatures">

<t>We compute the total flight size with X25519 and P-256 signatures,
thus the keys are 32-bytes long and the signatures 64 bytes,
with a cipher with an 8 byte auth tag, as in AEAD_AES_128_CCM_8.
[Note: GCM should not be used with a shortened tag.]
Overhead estimates marked with *** have been verified with Mint.
Others are hand calculations and so may prove to be approximate.</t>

<section anchor="flight-1-clienthello-" title="Flight 1 (ClientHello) ***">

<t><list style="symbols">
  <t>Random: 16</t>
  <t>KeyShare: 32</t>
  <t>Message Overhead: 8</t>
  <t>Handshake Overhead: 2</t>
  <t>Record Overhead: 1</t>
  <t>Total: 59</t>
</list></t>

</section>
<section anchor="flight-2-serverhellofinished" title="Flight 2 (ServerHello..Finished)">

<t>ServerHello ***</t>

<t><list style="symbols">
  <t>Random: 16</t>
  <t>KeyShare: 32</t>
  <t>Message Overhead: 6</t>
  <t>Handshake Overhead: 2</t>
  <t>Total: 56</t>
</list></t>

<t>EncryptedExtensions ***</t>

<t><list style="symbols">
  <t>Handshake Overhead: 2</t>
  <t>Total: 2</t>
</list></t>

<t>CertificateRequest ***</t>

<t><list style="symbols">
  <t>Handshake Overhead: 2</t>
  <t>Total: 2</t>
</list></t>

<t>Certificate</t>

<t><list style="symbols">
  <t>Certificate: X</t>
  <t>Length bytes: 2</t>
  <t>Handshake Overhead: 2</t>
  <t>Total: 4 + X</t>
</list></t>

<t>CertificateVerify</t>

<t><list style="symbols">
  <t>Signature: 64</t>
  <t>Handshake Overhead: 2</t>
  <t>Total: 66</t>
</list></t>

<t>Finished</t>

<t><list style="symbols">
  <t>MAC: 32</t>
  <t>Overhead: 2</t>
  <t>Total: 34</t>
</list></t>

<t>Record Overhead: 2 bytes (2 records) + 8 bytes (auth tag).</t>

<t>[[OPEN ISSUE: We’ll actually need a length field for the ServerHello,
to separate it from the ciphertext.]]</t>

<t>Total Size: 175 + X bytes.</t>

</section>
<section anchor="flight-3-client-certificatefinished" title="Flight 3 (Client Certificate..Finished)">

<t>Certificate</t>

<t><list style="symbols">
  <t>Certificate: X</t>
  <t>Length bytes: 2</t>
  <t>Handshake Overhead: 2</t>
  <t>Total: 4 + X</t>
</list></t>

<t>CertificateVerify</t>

<t><list style="symbols">
  <t>Signature: 64</t>
  <t>Handshake Overhead: 2</t>
  <t>Total: 66</t>
</list></t>

<t>Finished</t>

<t><list style="symbols">
  <t>MAC: 32</t>
  <t>Handshake Overhead: 2</t>
  <t>Total: 34</t>
</list></t>

<t>Record Overhead: 1 byte + 8 bytes (auth tag)</t>

<t>Total: 113 + X bytes</t>

</section>
</section>
<section anchor="ecdhe-w-psk" title="ECDHE w/ PSK">

<t>[TODO]</t>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<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, modulo use of
new features such as KeyID certificate messages.</t>

<t>One piece that is a new TLS 1.3 feature is the addition of the key_id,
which definitely requires some analysis, especially as it looks like
a potential source of identity misbinding. This is entirely separable
from the rest of the specification.</t>

<t>[[OPEN ISSUE: One could imagine internally translating CTLS to TLS 1.3
so that the transcript, etc. were the same, but I doubt it’s worth it,
and then you might need to worry about cross-protocol attacks.]]</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document has no IANA actions.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<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="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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 numbered="false" anchor="acknowledgments" title="Acknowledgments">

<t>TODO acknowledge.</t>

</section>


  </back>

<!-- ##markdown-source:
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
fiQi/v8CCioPVNAyAAA=

-->

</rfc>

