<?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.7.2 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-joseph-tls-turbotls-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="joseph-tls-turbotls">TurboTLS for faster connection establishment</title>
    <seriesInfo name="Internet-Draft" value="draft-joseph-tls-turbotls-00"/>
    <author initials="D." surname="Stebila" fullname="Douglas Stebila">
      <organization>University of Waterloo</organization>
      <address>
        <email>dstebila@uwaterloo.ca</email>
      </address>
    </author>
    <author initials="D." surname="Joseph" fullname="David Joseph">
      <organization>SandboxAQ</organization>
      <address>
        <email>dj@sandboxaq.com</email>
      </address>
    </author>
    <author initials="C." surname="Aguilar-Melchor" fullname="Carlos Aguilar-Melchor">
      <organization>SandboxAQ</organization>
      <address>
        <email>carlos.aguilar@sandboxaq.com</email>
      </address>
    </author>
    <author initials="J." surname="Goertzen" fullname="Jason Goertzen">
      <organization>SandboxAQ</organization>
      <address>
        <email>jason.goertzen@sandboxquantum.com</email>
      </address>
    </author>
    <date year="2023" month="November" day="05"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 126?>

<t>This document provides a high level protocol description for handshaking over UDP in the Transport Layer Security (TLS) protocol (version independent). In parallel, a TCP session is established, and once this is done, the TLS session reverts to TCP. In the event that the UDP handshaking portion fails, TurboTLS falls back to TLS-over-TCP as is usually done, resulting in negligible latency cost in the case of failure.</t>
      <t>Discussion of this work is encouraged to happen on the TLS IETF mailing list tls@ietf.org or on the GitHub repository which contains the draft: https://github.com/PhDJsandboxaq/draft-ietf-turbotls-design/.</t>
    </abstract>
  </front>
  <middle>
    <?line 132?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document gives a construction for TurboTLS <xref target="ABGGJS23"/>, which at its core is a method for handshaking over UDP in TLS before switching back to TCP for the TLS session. A technique called client request-based fragmentation is described which reduces the susceptability of TurboTLS servers to being exploited by UDP reflection attacks.</t>
      <t>reduce the possibility of portions of the handshake over UDP being filtered by poorly configured middle-boxes, and a fallback procedure to standard TLS-over-TCP (at minimal latency overhead) is provided.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <ul spacing="normal">
          <li>
            <t><strong>UDP</strong> Universal Datagram Protocol: a connectionless transport protocol, whereby packets are sent, but without any codified way of knowing that such packets have been successfully received. This leads to low reliability but can be appropriate where applications are time sensitive.</t>
          </li>
          <li>
            <t><strong>TCP</strong> Transmission Control Protocol: a connection-oriented protocol that ensures the successful delivery of packets. Before a communication over TCP can start in earnest, a connection must be established. This is done via a TCP handshake consisting of a SYN, a SYN ACK and an ACK.</t>
          </li>
          <li>
            <t><strong>TLS</strong> Transport Layer Security: a cryptographic protocol that enables a client and server to authenticate one another, and communicate confidentially. TLS initializes with a handshake where cryptographic primitives are executed and session parameters are agreed upon, and then a session over which applications exchange encrypted communications.</t>
          </li>
          <li>
            <t><strong>QUIC</strong> (not an acronym): a security protocol that embeds TLS functionality directly into UDP-based transport. Due to the drawbacks of UDP, QUIC implements its own reliability, packet reordering, and packet dropping procedures as well as the security properties.</t>
          </li>
        </ul>
      </section>
      <section anchor="motivation">
        <name>Motivation for handshaking over UDP</name>
        <t>TLS is the most ubiquitous application layer security protocol in use at the time of writing. Other protocols for secure connection establishment have been proposed, and one such widely-used protocol is QUIC. QUIC runs entirely over UDP and merges the transport and security aspects into one specification, handling packet loss, reordering, handshake establishment, and session management all in one protocol. One benefit of QUIC is that it enjoys fast connection establishment because it runs over UDP, whereas running on TCP would mean waiting for a TCP handshake to occur which requires one round trip.</t>
        <t>Many will make the choice to move from TLS to QUIC, however some will not for a range of reasons. Deep packet inspection is inhibited in QUIC, and updating some legacy systems can be difficult. TurboTLS aims to provide a method for those who do not want to fully switch to QUIC, to benefit from the fast connection establishment enabled by UDP, but without fundamentally changing the security properties of TLS, and furthermore enabling implementation via transparent proxying, thus avoiding the need to directly upgrade such systems themselves.</t>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document focuses on TurboTLS <xref target="ABGGJS23"/>. It covers everything needed to achieve the handshaking portion of a TLS connection over UDP, including</t>
        <ul spacing="normal">
          <li>
            <t><strong>Construction in principle:</strong> It provides an outline of which flows are sent over UDP, which are sent over TCP and in what order.</t>
          </li>
          <li>
            <t><strong>TLS-over-TCP fallback:</strong> The document describes what to do in the case of failure due to UDP packet loss or filtering. The scheme should revert to TLS-over-TCP incurring a small latency overhead that should be minimal in comparison with standard TLS-over-TCP without a TurboTLS attempt.</t>
          </li>
          <li>
            <t><strong>Client request-based fragmentation:</strong> Due to the impact of post-quantum cryptography such as larger keys certain considerations have to be taken into account. One is that a Server Hello is likely to require multiple UDP packets, thus to eliminate the possibility of reflection attacks and hence serve as a DDoS mitigation, we describe how to create a one-to-one correspondence between Client Hello packets and Server Hello packets.</t>
          </li>
          <li>
            <t><strong>How to implement via a transparent proxy:</strong> The document gives a brief description of how one can implement TurboTLS via a transparent proxy, which has two implications. The first is that it demonstrates clearly that the security of TLS is unchanged, as a server and client can have their entire transcript intercepted by two proxies (one in front of each), which TurboTLS-ify the interaction. Thus the view server and client is unchanged versus standard TLS. The second is that the TLS proxy represents a way for legacy systems to benefit from faster connection establishment without requiring direct upgrades.</t>
          </li>
          <li>
            <t><strong>Performance considerations</strong> Due to the parallelization of the UDP flow and TCP flows, as well as the TCP fallback mechanism, TurboTLS will have some impact on bandwidth requirements. We discuss these briefly, as well as the expected benefit from reducing a round trip when TurboTLS works and the small latency overhead when it doesn't and reverts to TLS-over-TCP.</t>
          </li>
        </ul>
        <t>It intentionally does not address:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Protocol design of TLS:</strong> The internal workings and security mechanisms of TLS are not affected by TurboTLS, as can be seen via the transparent proxying argument. This document does not discuss the design or merits of any version of TLS.</t>
          </li>
        </ul>
      </section>
      <section anchor="goals">
        <name>Goals</name>
        <ul spacing="normal">
          <li>
            <t><strong>High performance:</strong> Successful use of TurboTLS removes one round trip and should cut handshaking time by up to 50%. However in the worst case, when the fallback mechanism to TLS-over-TCP is used, there should be only a minimal impact on latency.</t>
          </li>
          <li>
            <t><strong>Ease of implementation:</strong> TurboTLS should be designed such that it is possible to implement in many scenarios where other more invasive upgrades may not be possible, such as switching to QUIC. Transparent proxying should enable this via network proxies, sidecar proxies, or directly modifying the client/server applications.</t>
          </li>
          <li>
            <t><strong>Security:</strong> The design should not create any opportunities for adversaries, either to attack TurboTLS servers or to use them e.g. during a reflection attack. The ratio of received:sent UDP packets, in particular, affects an adversary's chances of carrying out such reflection attacks. The handling of semi-open TCP connections is also important to consider in mitigating DoS attacks.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="TLS">
      <name>Transport Layer Security</name>
      <t>The Transport Layer Security (TLS) protocol is ubiquitous and provides security services to many network applications.  TLS runs over TCP.  As shown in <xref target="fig-tls-over-tcp"/>, the main flow for TLS 1.3 connection establishment <xref target="TLS13"/> in a web browser is as follows.</t>
      <t>First of all, the client makes a DNS query to convert the requested domain name into an IP address.  Simultaneously, browsers request an HTTPS resource record <xref target="SBN22"/> from the DNS server which can provide additional information about the server's HTTPS configuration.  Next, the client and server perform the TCP three-way handshake.  Once the TCP handshake is complete and a TCP connection is established, the TLS handshake can start; it requires one round trip -- one client-to-server C-&gt;S flow and one server-to-client S-&gt;C flow -- before the client can start transmitting application data.</t>
      <t>In total (not including the DNS resolution) this results in two round trips before the client can send the first byte of application data (the TCP handshake, plus the first C-&gt;S and S-&gt;C flows of the TLS handshake), and one further round trip before the client receives its first byte of response.</t>
      <t>TLS does have a pre-shared key mode that allows for an abbreviated handshake permitting application data to be sent in the first C-&gt;S TLS flow, but this requires that the client and server have a pre-shared key in advance, established either through some out-of-band mechanism or saved from a previous TLS connection for session resumption.</t>
    </section>
    <section anchor="construction">
      <name>Construction for TLS</name>
      <t>We first demonstrate protocol diagrams of the handshaking parts of TLS and TurboTLS.</t>
      <section anchor="construction-diag-tls">
        <name>Protocol diagram TLS</name>
        <figure anchor="fig-tls-over-tcp">
          <name>TLS-over-TCP handshake</name>
          <artwork><![CDATA[
┌----------┐                        ┌----------┐
│TLS client│                        │DNS server│
└----------┘                        └----------┘
               DNS: A request
     ------------------------------------>
              DNS: AAAA request
     ------------------------------------>
             DNS: HTTPS RR request
     ------------------------------------>
               DNS: A response
     <------------------------------------
              DNS: AAAA response
     <------------------------------------
             DNS: HTTPS RR response
     <------------------------------------

┌----------┐                        ┌----------┐
│TLS client│                        │TLS server│
└----------┘                        └----------┘
                 TCP: SYN
     ------------------------------------>  │
                TCP: SYN-ACK                │RT1
     <------------------------------------  │

                 TCP: ACK
     ------------------------------------>  │
                TCP: TLS CH                 │
     ------------------------------------>  │
                TCP: TLS SH                 │RT2
     <------------------------------------  │
              TCP: TLS app data             │
     <------------------------------------  │

                TCP: TLS *, FIN
     ------------------------------------>  │
              TCP: TLS app data             │RT3
     ------------------------------------>  │
]]></artwork>
        </figure>
      </section>
      <section anchor="construction-diag-turbotls">
        <name>Protocol diagram TurboTLS</name>
        <figure anchor="fig-turbotls">
          <name>TurboTLS Handshake</name>
          <artwork><![CDATA[
┌----------┐                        ┌----------┐
│TLS client│                        │DNS server│
└----------┘                        └----------┘
               DNS: A request
     ------------------------------------>
              DNS: AAAA request
     ------------------------------------>
             DNS: HTTPS RR request
     ------------------------------------>
               DNS: A response
     <------------------------------------
              DNS: AAAA response
     <------------------------------------
       DNS: HTTPS RR response w/ TTLS flag
     <------------------------------------

┌----------┐                        ┌----------┐
│TLS client│                        │TLS server│
└----------┘                        └----------┘
       UDP: TurboTLS id, TLS CH frag#1
     ------------------------------------>  │
       UDP: TurboTLS id, TLS CH frag#2      │
     ------------------------------------>  │
       UDP: TurboTLS id, empty frag#1       │
     ------------------------------------>  │
       UDP: TurboTLS id, empty frag#2       │
     ------------------------------------>  │
                                            │
                 TCP: SYN                   │
     ------------------------------------>  │
                                            │RT1
       UDP: TurboTLS id, TLS resp frag#1    │
     <------------------------------------  │
       UDP: TurboTLS id, TLS resp frag#2    │
     <------------------------------------  │
       UDP: TurboTLS id, TLS resp frag#3    │
     <------------------------------------  │
                                            │
                TCP: SYN-ACK                │
     <------------------------------------  │

                 TCP: ACK
     ------------------------------------>  │
       TCP: TurboTLS id, TLS *, FIN         │
     ------------------------------------>  │RT2
              TCP: TLS app data             │
     ------------------------------------>  │
]]></artwork>
        </figure>
        <t>As described in <xref target="fig-turbotls"/>, TurboTLS sends part of the TLS handshake over UDP, rather than TCP.
Switching from TCP to UDP for handshake establishment means we cannot rely on TCP's features, namely connection-oriented, reliable, in-order delivery.
However, since the rest of the connection will still run over TCP and only part of the handshake runs over UDP,
we can reproduce the required functionality in a lightweight way without adding latency and allowing for a simple implementation.</t>
      </section>
      <section anchor="Construction-fragmentation">
        <name>Fragmentation</name>
        <t>One of the major problems to deal with is that of fragmentation.  TLS handshake messages can be too large to fit in a single packet -- especially with long certificate chains or if post-quantum algorithms are used.</t>
        <t>Obviously the client can fragment its first C-&gt;S flow across multiple UDP packets.  To allow a server to link fragments received across multiple UDP requests, we add a 12-byte session ID field, containing a client-selected random value <em>id</em> that is used across all TurboTLS fragments sent by the client. The session ID is also included in the first message on the established TLS connection as part of the tombstone message to allow the server to link together data received on the UDP and TCP connections. To allow the server to reassemble fragments if they arrive out-of-order. The client will send the last in-order UDP packet it received's sequence number as a part of the tombstone message so that the server can detect packetloss.</t>
        <t>Similarly, the server can fragment its first S-&gt;C flow across multiple UDP packets.  One additional problem here however is that the S-&gt;C flow is typically larger than the C-&gt;S flow (as it typically contains one or more certificates), so the server may have to send more UDP response packets than UDP request packets.  As noted by <xref target="SW19"/> in the context of DNSSEC, many network devices do not behave well when receiving multiple UDP responses to a single UDP request, and may close the port after the first packet, dropping the request.  Subsequent packets received at a closed port lead to ICMP failure alerts, which can be a nuisance.</t>
        <section anchor="Construction-CRBF">
          <name>Client request-based fragmentation</name>
          <t>A method proposed by Goertzen and Stebila <xref target="GS22"/> for DNSSEC is called request-based fragmentation.  In the context of large resource records in DNSSEC, <xref target="GS22"/> had the first response be a truncated response that included information about the size of the response, and then the client sent multiple additional requests, in parallel, for the remaining fragments.  This ensured that there was only one UDP response for each UDP request.</t>
          <t>Maintaining one-to-oneness of UDP packets can prevent reflection attacks. We therefore offer an adaptation of that method for TurboTLS: the client can, in its first C-&gt;S flow, fragment its own C-&gt;S data across multiple UDP packets. Additionally it sends (in parallel) enough nearly-empty UDP requests for a predicted upper bound on the number of fragments the server will need to fit its response.  This preserves the model of each UDP request receiving a single UDP response reducing the potential for DDoS amplification attacks.</t>
          <t>TODO: we solicit advice on the potential impacts of this method on middlebox compatibility, and whether the benefit in DDoS protection is offset by other presently unknown factors.</t>
        </section>
      </section>
      <section anchor="Construction-fallback">
        <name>TLS-over-TCP fallback</name>
        <t>UDP does not have reliable delivery, so packets may be lost.  Since the first TurboTLS round-trip includes the TCP handshake, we can immediately fall back to TCP if a UDP packet is lost in either direction.  This will induce a latency cost of however long the client decides to wait for UDP packets to arrive before giving up and assuming they were lost.</t>
        <t>In an implementation, the client delay could be a fixed number of milliseconds, or could be variable depending on observed network conditions; this need not be fixed by a standard.
We believe that in many cases a client delay of just 2ms after the TCP reply is received in the first round trip will be enough to ensure UDP responses are received a large majority of the time.  In other words, by tolerating a potential 2ms of extra latency on <em>X%</em> of connections, we can save an entire round-trip on a large proportion <em>(100-X%)</em> of the connections.
This mechanic was not implemented in the experimental results presented here and constitutes future work.</t>
        <section anchor="Construction-early-data">
          <name>Early data, post-handshake messages, and TCP fallback</name>
          <t>As part of the TLS 1.3 specification, a server is able to send encrypted application data and connection maintenance related messages after it sends its server finished message. One could wait until the TCP connection is established and is associated with the correct UDP handshake. This would remove the benefit that TurboTLS offers as it requires the server to wait for the TCP connection to finish being established. We therefore propose that all post-handshake messages and early data message attempt to be transmitted over UDP. These messages should therefore be wrapped with the standard TurboTLS headers (session ID and index) to ensure that can be associated with the correct TLS session. Once the TCP connection is established, the client's first message should include the index of the last in order UDP based packet that was received. The server can then determine what needs to be retransmitted over the reliable TCP connection.</t>
          <t>In the best case scenario, these early data and post-handshake messages arrive one round trip sooner than they would than in TCP-based TLS, and in the worst cast arrive at the same time as TCP-based TLS. However, this fallback method comes at the cost of requiring additional memory usage by the server to store the messages sent over UDP until it has verified they have been delivered.</t>
        </section>
      </section>
      <section anchor="Construction-advertisment">
        <name>TurboTLS support advertisment</name>
        <t>To protect servers who do not support TurboTLS from being bombarded with unwanted UDP traffic, it would be preferable if clients only used TurboTLS with servers that they already know support it.  Clients could cache this information from previous non-TurboTLS connections, but in fact we can do better.  Even on the first visit to a server, we can communicate server support for TurboTLS to the client, without an extra round trip, using the HTTPS resource record in DNS <xref target="SBN22"/>.  Today when web browsers perform the DNS lookup for the domain name in question, they typically send three requests in parallel: an A query for an IPv4 address, an AAAA query for an IPv6 address, and a query for an HTTPS resource record <xref target="SBN22"/>.  Servers can advertise support for TurboTLS with an additional flag in the HTTPS resource record and clients can check for it without incurring any extra latency.</t>
      </section>
      <section anchor="Construction-embedding">
        <name>Specification: Handshake embedding into UDP</name>
        <t>Rather than relying on IP fragmentation, and the issues that may arise from IP/UDP fragmentation, we fragment at the application layer and send a new UDP packet each time the packet size would exceed a predefined <em>safe</em> size. This predefined size will need to account for the various headers and metadata being sent in each packet. In DNS, for example, the recommended maximum payload size is 1232 bytes to account for IPv6, and UDP headers <xref target="DNSUDP"/>. As previously mentioned, TurboTLS UDP packets contain a session ID, and a sequence number. These Turbo-headers will be prefixed to the payload of each UDP packet being set. Both client and server UDP communication streams have their own distinct sequence counters to maintain ordering in either direction.</t>
        <figure anchor="turbotls-udp-packet">
          <name>TurboTLS UDP packet layout</name>
          <artwork><![CDATA[
                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |             Session ID            |Seq. Number|
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                    Payload                    /
    /                                               /
    /                                               /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
]]></artwork>
        </figure>
      </section>
      <section anchor="specification-udp-tombstone">
        <name>Specification: UDP Tombstone</name>
        <t>As part of joining the UDP and TCP streams together once a TCP connection is established, the cleint sends a tombstone message as the first message over TCP. This message contains the session ID as well as the sequence number of the last in order UDP packet that it received. The server will then use this message to determine which handshake a given TCP stream should be associated with, as well as what data needs to be retransmitted due packet loss.</t>
        <figure anchor="turbotls-tombstone">
          <name>TurboTLS tombstone packet layout</name>
          <artwork><![CDATA[
                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |             Session ID            |Seq. Number|
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="security-proxy">
        <name>Transparent proxying</name>
        <t>TurboTLS benefits from a nice feature: TurboTLS makes no change whatsoever to the content of a TLS handshake, only changes the delivery mechanism.  As a result, all cryptographic properties of TLS are untouched.  In fact, it is possible to implement TurboTLS without changing the client or server's TLS library at all, and instead use transparent proxies on both the client and server side to change the network delivery from pure TCP in TLS to UDP+TCP in TurboTLS. Of course in such a construction the initial client or server, who does not know TurboTLS, will observe two round trip times, but if each proxy is close to its host (say on the same machine), then the two round trip times will be negligible, and the higher latency client--server distance will only be covered over one round trip.</t>
      </section>
      <section anchor="security-DoS">
        <name>Denial-of-Service</name>
        <t>We now consider the implications for TurboTLS of various types of denial-of-service and distributed denial-of-service attacks, including whether a TurboTLS server is a victim in a DoS attack or being leveraged by an attacker to direct a DDoS attack elsewhere. TurboTLS runs on top of both TCP and UDP so we have to consider attacks involving both protocols.</t>
        <section anchor="attacks-on-turbotls-servers">
          <name>Attacks <em>on</em> TurboTLS servers</name>
          <t>The most significant TCP DoS attack is the SYN flood attack where a target machine is overwhelmed by TCP SYN messages faster than it can process them. This is because a server, upon receiving a SYN, typically stores the source IP, TCP packet index number, and port in a `SYN queue', and this represents a half-open connection. An attacker could flood the server with SYN messages thereby exhausting its memory. The server cannot just arbitrarily drop connections because then legitimate users may find themselves unable to connect. There are multiple protections against SYN flood attacks, such as:</t>
          <ul spacing="normal">
            <li>
              <t>Allocating only very small amounts (micro blocks) of memory to half-open connections.</t>
            </li>
            <li>
              <t>Using TCP cryptographic cookies <xref target="Ber05"/> <xref target="Sim11"/> whereby the sequence number of the ACK encodes information about the SYN queue entry so that the server can reconstruct the entry even if it was not stored due to having a full SYN queue. TCP cookies enjoy support in the Linux kernel -- this and other such mitigations are already sufficient to protect TurboTLS from SYN floods.</t>
            </li>
          </ul>
          <t>In general there are several vectors to consider for resource exhaustion attacks on a server running TurboTLS.
The server needs to maintain a buffer of received UDP packets containing fragments of a TLS CH message.</t>
          <ul spacing="normal">
            <li>
              <t>To avoid memory exhaustion attacks, a server can safely bound the memory allocated to this buffer and flush old entries on a regular basis (e.g. after two seconds).
              </t>
              <ul spacing="normal">
                <li>
                  <t>In the worst case, a legitimate client whose UDP packets are rejected from a busy server or flushed early will be able to fall back to vanilla TLS over TCP, and will incur negligible latency loss (compared to TLS over TCP) in doing so, because TurboTLS starts the TCP handshake in parallel to the first C-&gt;S UDP flow.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>An attacker spoofing IP addresses and sending well-formed CH messages could also try to exhaust a server's CPU resources by causing a large amount of cryptographic computation.
              </t>
              <ul spacing="normal">
                <li>
                  <t>Again, a server under attack can limit the CPU resources allocated to UDP-received CH messages, and then fall back to vanilla TLS over TCP.
In the worst case, legitimate clients affected by this and having to fall back to vanilla TLS over TCP will incur negligible latency loss compared to TLS over TCP since the TCP handshake has already been started in parallel.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="attacks-leveraging-turbotls-servers">
          <name>Attacks <em>leveraging</em> TurboTLS servers</name>
          <t>UDP reflection attacks present another threat. Typical defenses against these are:
- blocking unused ports,
- rate limiting based on expected traffic loads from peers (exorbitant traffic loads are likely to be malicious),
- blocking IPs of other known vulnerable servers.
However such defenses are provided by middleboxes and therefore do not affect the protocol.</t>
          <t>The one-to-oneness of the UDP request/response significantly reduces the impact of any amplification attack which tries to utilize a TurboTLS server as a reflector: an attacker would have to send one UDP packet for every reflected packet generated by the server, meaning that initial requests and responses are of comparable sizes, making the amplification factor so low that it would be an ineffective use of resources. Furthermore, the UDP requests ultimately must contain a fully formed CH before the server responds, limiting the amplification factor.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ABGGJS23" target="https://arxiv.org/abs/2302.05311">
          <front>
            <title>TurboTLS: TLS connection establishment with 1 less round trip</title>
            <author initials="" surname="Carlos Aguilar-Melchor">
              <organization/>
            </author>
            <author initials="" surname="Thomas Bailleux">
              <organization/>
            </author>
            <author initials="" surname="Jason Goertzen">
              <organization/>
            </author>
            <author initials="" surname="Adrien Guinet">
              <organization/>
            </author>
            <author initials="" surname="David Joseph">
              <organization/>
            </author>
            <author initials="" surname="Douglas Stebila">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TLS13">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <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="TLS12">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author fullname="T. Dierks" initials="T." surname="Dierks"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol. The TLS protocol provides communications security over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5246"/>
          <seriesInfo name="DOI" value="10.17487/RFC5246"/>
        </reference>
        <reference anchor="UDP">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="TCP">
          <front>
            <title>Transmission Control Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="RFC" value="793"/>
          <seriesInfo name="DOI" value="10.17487/RFC0793"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SW19" target="https://datatracker.ietf.org/doc/html/draft-song-atr-large-resp-00">
          <front>
            <title>ATR: Additional Truncated Response for Large DNS Response</title>
            <author initials="" surname="Linjian Song">
              <organization/>
            </author>
            <author initials="" surname="Shengling Wan">
              <organization/>
            </author>
            <date year="2017" month="September" day="10"/>
          </front>
        </reference>
        <reference anchor="GS22" target="https://link.springer.com/chapter/10.1007/978-3-031-40003-2_20">
          <front>
            <title>Post-Quantum Signatures in DNSSEC via Request-Based Fragmentation</title>
            <author initials="" surname="Douglas Stebila">
              <organization/>
            </author>
            <author initials="" surname="Jason Goertzen">
              <organization/>
            </author>
            <date year="2022" month="November" day="25"/>
          </front>
        </reference>
        <reference anchor="SBN22" target="https://datatracker.ietf.org/doc/draft-ietf-dnsop-svcb-https/11/">
          <front>
            <title>Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)</title>
            <author initials="" surname="Benjamin M Schwartz">
              <organization/>
            </author>
            <author initials="" surname="Mike Bishop">
              <organization/>
            </author>
            <author initials="" surname="Erik Nygren">
              <organization/>
            </author>
            <date year="2022" month="October" day="11"/>
          </front>
        </reference>
        <reference anchor="Ber05" target="https://cr.yp.to/syncookies.html">
          <front>
            <title>SYN cookies</title>
            <author initials="" surname="Daniel J Bernstein">
              <organization/>
            </author>
            <date year="2005" month="December" day="01"/>
          </front>
        </reference>
        <reference anchor="Sim11" target="https://www.rfc-editor.org/rfc/rfc6013">
          <front>
            <title>TCP Cookie Transactions (TCPCT)</title>
            <author initials="W." surname="Simpson">
              <organization/>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="DNSUDP" target="https://indico.dns-oarc.net/event/36/contributions/776/">
          <front>
            <title>Defragmenting DNS - Determining the optimal maximum UDP response size for DNS</title>
            <author initials="" surname="Axel Koolhaas">
              <organization/>
            </author>
            <author initials="" surname="Tjeerd Slokker">
              <organization/>
            </author>
            <date year="2020" month="September" day="11"/>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19W5Mbx5XmO35FhRkOkRoAfaEuVs+uw2S3JFKjCy20RjOx
scEtAAmg2IVKuLKq0TDNfZjnfdgHP+zvm18y33dOZlYWgOZlZHs3NtwhiWyg
Ki8nz+U7lzwajUaDpmhKc5Fdt/XUXn87yRa2zha5a0ydzWxVmVlT2Cozrsmn
ZeFWa1M1g3w6rc3tRfbKOrNZjZrSjRq+j78M5nZW5WuMOK/zRTM68sjo9HQw
zxs8cn56/nh0djY6/XQwwwdLW+8usqJa2MGg2NQXWVO3rjk/Pf3i9HxwY3Zb
W88vsucV1laZZnTFCQYDrKyav8xLW2HEnXGDTXGR/bfGzoaZs3VTm4XD33Zr
/uW/4/F2ui6cw6audxu88fzL668Gg7xtVra+GGTZCP9mWIS7yK7G2aQx06LM
5TPd1pVtl2Xuet/YeplXxR9zkuoi+6kqbk3timaX2UX2MzZWl9bKg2adFyVI
4/Tl37Vb/+14lh/M/Y2QLp06vy3m6cf9eSegw9TePfl9b6pXv3P6ef6H8cyu
+7NcjrMnyxYrqUffmXIGEiTTXeZYmTv6wHtMPJO3x7m+/bZFfDPOvrambv5o
qmT2b3IHvut98R6zvuJb46V/K8z6hzavmnYtUw8qW68xxK3haT95+vXX30zO
H1/IIE1eL01zka2aZuMuTk7y+q64HWPak3zqTs4fn56PTz99fHamD6vg/CpI
DmQI4nOfzGTbolllZ1lpnMtq21ZzcHex+ZUM1XEff0b+z3BG9x/DwbPXK7sG
bz4FLUrT3h1/6AhlD555Mq8Lg4faApJ2/JEDbjx84kBUQKGzxxfZj19d/uaT
Tz7zH5zLB5+eywc/Xb2QXz//7Df8+tL/9sVjqAQohuToJj+ffXH82KBc8qbO
ZzemHhemWcgJQi+drJp1eaJ6CSRYjvDUqOTLo9q4DfVSerBPrn8kIeYFTzMv
s+u6raim5tmPeNpWzoiy/JYDZFffT+LHeqhBxZ19Pjr9YnR2+u6T/raoXhV5
lU2wtuNPTFamWpZFtYRa4cl9PTk/P04DPHQzdpsaz4IKYPyT2SrfQNmcnJ2O
z05PPz/54vPfjB6PTh+fjT45PT19PDp/ed7f/wvrmtHvVXSySbGscmhw47AS
7nby5WV2W+TY9B9acProae5Ama/qfEl2Fxnt0+H8nKr+/NN30+GYin03F0+e
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
vGxN9rKYv/QJP004hsmZrO7u2MQ1SrBxmlIm1CfENcREj8SIVXN0sUl/yOGy
SxpM3IsE5n190tj11DUM1YYhmkDTLgkQqdrYpRE9I8ozUtbPGspY93JU4+6Y
+kOyTtKZNXOOHSkKWRcErK6Z6PRhT60uE5p4zlH1EILbZS73i7y6ScrEihhe
nn9EOuO4qXeqdj1lXpJ5m7eTw9m0QkaWTqadm4ZlGzoLa9HA4ZNizVvmzNvs
PX2ExbsUwttZnOogydV4ZZBJZjhUo6b1K924/HS3KWYiw74iTOwDH+sk7CHv
czXJo/FGFMlgfeY5kXz3aKhUiVtcS2ZH68nkSOSV3nXKUGAlC0gkL9npEylV
0DKI1695Q13Tct4uNOZOjkmvTw/7+cO50byir3CdGlmOFJxIeYDyACV3T/x1
eaJboxJMlqeZDO5vVloXytdYlb1oTJ0IoG5j2JXIJ4k/5vXaqfJe3HCilxpR
J1Zqxjl2KQWINnt++d2LWAGZlyxeGSaZPF6IASMXjgkEsTMPsndXFe5bn8sf
n371ZvAkFAyHunYeQrgfrjkfvU+Ok+G9eaYZ9W4sr7IzZae3wd4yMajw/OAw
1RDt5TKTW/LDbr5VnuaxImMJFZrYXSB+rtq3U5ZHU5y84+slP7yY3AJJ7JQo
6Mg6iTx2BqRIb3SG23M1W2tUisK8hqPZWsnNRid3yYLk4oy3uVNoQ8nriQ/H
Y3VcyptSwl5Ek9RVPFa83aXXPiK3aepXL4Meqzj42egaJDdnFwujybN5vmmS
yjJeW+sKy7vmHX2LLrQ4YsyHfT3IXL58J8bkrVqwayTB+y+Nx8UPE5I/Aj0l
WVZJVeNIHezUxHuUBiLMC7HY7WaDXU4lM+ktmDcLCaZyqZ7Tgn9fRi7QSeTY
pyj9uUrRYH1rwsUVYN9Q29hTfJ1K2lM8/shjLZzqnEbvRqnYSSUH6z3jVe2u
ruP6h6sfLghnnC2LWUHkKhe+/Ra7kbTGycUrt/5kef1DrjdO7Z0WOzdFuB5E
0YA+9a5GdweE8so1MSPYZenBRs4IrrH+ro2UU7LyvuJ1Qd46njW2dgqSj1aN
H4Bl//mbAYkV69tE3QfHI7obYqeCBFCJQ1lAz4pCju6HMmlXrUZ+GEmm2muP
rlYySY1vQ7nuGuwEzYNNcWm9K7QFK/dTLOJkdrnwpxleLZ7yqF2uPRdy3UY8
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

-->

</rfc>
