<?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.39 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-key-share-prediction-00" category="std" consensus="true" updates="8446" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title>TLS Key Share Prediction</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-key-share-prediction-00"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <date year="2023" month="September" day="25"/>
    <area>General</area>
    <workgroup>TLS</workgroup>
    <abstract>
      <?line 25?>

<t>This document clarifies an ambiguity in the TLS 1.3 key share selection, to avoid a downgrade when server assumptions do not match client behavior. It additionally defines a mechanism for servers to communicate key share preferences in DNS. Clients may use this information to reduce TLS handshake round-trips.</t>
    </abstract>
  </front>
  <middle>
    <?line 29?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Most TLS <xref target="RFC8446"/> parameters are negotiated as follows: The client sends a list of supported options in preference order. Then, the server evaluates this against its own preferences to make a selection. The aim is to arrive at the best common option, without permitting attackers to downgrade to a weaker one. Newer clients and servers often support legacy options for compatibility with older peers. Downgrade-protected parameter selection reduces the security risk of those legacy options when both sides of a connection are newer.</t>
      <t>Named groups in TLS 1.3 instead use two client lists. The client sends its full preferences in the <tt>supported_groups</tt> extension, but also generates key shares for a subset in the <tt>key_share</tt> extension. If the server selects a named group in this subset, the handshake may complete in one round trip. Otherwise, the handshake requires a HelloRetryRequest and two round trips. Unused key shares consume network and computational resources, so clients only predict a subset of supported groups, balancing round-trip reduction against other concerns. This adds another dimension to server group selection.</t>
      <t><xref target="RFC8446"/> is ambiguous on the semantics of the <tt>key_share</tt> subset. Some existing servers assume it reflects client preferences, selecting named groups in <tt>key_share</tt> above all others. However, the concerns above mean clients may need to predict based on other factors. Where these interpretations conflict, the selection may be downgraded, potentially even under attacker influence.</t>
      <t>This document resolves the ambiguity in three ways:</t>
      <ul spacing="normal">
        <li>It updates server behavior to clarify that key shares may not reflect client preferences</li>
        <li>For existing named groups, it recommends clients to predict key shares that reflect their preferences, for compatibility with servers that predate this document</li>
        <li>For future named groups, it mandates the updated server behavior, so that clients may predict key shares more flexibly</li>
      </ul>
      <t>It is expected that all post-quantum key encapsulation methods (KEMs) will fall in the last category. Post-quantum KEMs have large keys and ciphertexts, so bandwidth concerns are particularly pronounced.</t>
      <t>This document additionally defines a method for servers to declare their named group preferences in DNS, using SVCB or HTTPS resource records <xref target="I-D.ietf-dnsop-svcb-https"/>. This allows the client to predict key shares more accurately.</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>
    </section>
    <section anchor="predictions-vs-preferences-in-tls">
      <name>Predictions vs Preferences in TLS</name>
      <section anchor="downgrades">
        <name>Downgrades</name>
        <t>Some existing TLS 1.3 servers implement the following named group selection algorithm:</t>
        <ol spacing="normal" type="1"><li>Select a common named group in <tt>key_share</tt>. If found, select it and send ServerHello.</li>
          <li>Otherwise, select a common named group in <tt>supported_groups</tt>. If found, select it and send HelloRetryRequest.</li>
          <li>Otherwise, terminate the handshake with a <tt>handshake_failure</tt> alert.</li>
        </ol>
        <t>While this algorithm avoids HelloRetryRequest whenever possible, it implicitly assumes the client prefers the values sent in <tt>key_share</tt>, and that the server has no preferences between any groups. If these assumptions do not hold, the server's selection may be downgraded.</t>
        <t>The following sections describe example downgrade scenarios with this algorithm. <tt>postquantum1</tt> and <tt>postquantum2</tt> refer to future post-quantum named groups, which both client and server prefer over <tt>x25519</tt>.</t>
        <section anchor="uncommon-groups">
          <name>Uncommon Groups</name>
          <t>Consider a client which implements, in preference order, <tt>postquantum2</tt>, <tt>postquantum1</tt>, and <tt>x25519</tt>. Sending keys for both <tt>postquantum2</tt> and <tt>postquantum1</tt> is expensive, so the client only predicts one of them. <tt>postquantum2</tt> is preferred (e.g. more efficient or more commonly deployed), and older <tt>x25519</tt>-only servers still exist, so the client predicts <tt>postquantum2</tt>, <tt>x25519</tt> in <tt>key_share</tt>.</t>
          <t>If the server predates <tt>postquantum2</tt> and only implements <tt>postquantum1</tt> and <tt>x25519</tt>, it will select <tt>x25519</tt>, although <tt>postquantum1</tt> is available in <tt>supported_groups</tt>.</t>
        </section>
        <section anchor="predictions">
          <name>Predictions</name>
          <t>The client may predict key shares based on prior knowledge about the server, such as a DNS hint (see <xref target="dns-service-parameter"/>). For example, during a transition from <tt>postquantum1</tt> to <tt>postquantum2</tt>, both options will be available in the ecosystem. The client may use a DNS hint to avoid needing HelloRetryRequest with both existing and upgraded servers.</t>
          <t>If the client's prior knowledge is outdated or under attacker influence, this can lead to a downgrade. Suppose the server implements <tt>postquantum1</tt> and <tt>x25519</tt>, but the client believed it only implemented <tt>x25519</tt>. The client may then predict <tt>x25519</tt> in <tt>key_share</tt>, leading the server to select <tt>x25519</tt> over the preferred <tt>postquantum1</tt>.</t>
        </section>
        <section anchor="compatibility">
          <name>Compatibility</name>
          <t>Software bugs in existing TLS servers may prevent them from processing larger ClientHellos. During an early rollout of post-quantum KEMs, a client may prefer <tt>postquantum1</tt>, but sometimes only predict <tt>x25519</tt> to reduce compatibility risk, expecting that newer servers can still select it with HelloRetryRequest.</t>
          <t>However, a server implementing the above algorithm would instead select <tt>x25519</tt> over the preferred <tt>postquantum1</tt>.</t>
        </section>
      </section>
      <section anchor="tls-server-behavior">
        <name>Server Behavior</name>
        <t>TLS 1.3 servers implementing this document MUST NOT assume the client's <tt>key_share</tt> extension reflects client preferences. Instead, servers SHOULD select the best common named group based on <tt>supported_groups</tt>, without reference to <tt>key_share</tt>. The server then looks for the selected named group in <tt>key_share</tt> to decide whether to send HelloRetryRequest or ServerHello.</t>
        <t>If choosing between two named groups which the server equally prefers, and for which the server is willing to ignore the client's <tt>supported_groups</tt> preference order, the server MAY use presence in the client's <tt>key_share</tt> extension to select one which will avoid HelloRetryRequest. However, attackers may then influence which of the two is chosen.</t>
        <t>Note the algorithm in <xref target="downgrades"/> is permitted if the above applies to all of a server's supported groups. However, this is unlikely to apply if the server implements a combination of post-quantum and legacy named groups, or if the server software's configuration specifies a preference order.</t>
      </section>
      <section anchor="prediction-safe-named-groups">
        <name>Prediction-Safe Named Groups</name>
        <t>Although <xref target="tls-server-behavior"/> defines new rules for TLS 1.3 servers, TLS 1.3 has already been deployed. Clients that assume a server implements the new rules may introduce a downgrade attack on a pre-existing server. To avoid this, this document uses named group codepoints to distinguish the old and new behavior.</t>
        <t>A named group is considered prediction-safe if the value in the "Prediction-Safe" column of the registry (see <xref target="iana-considerations"/>) is "Y". Otherwise, it is considered prediction-unsafe. Any TLS server which implements a prediction-safe named group MUST follow the guidelines in <xref target="tls-server-behavior"/>. To be a prediction-safe named group, the defining specification MUST cite this document and include such a requirement. For example:</t>
        <ul empty="true">
          <li>
            <t>TLS servers which support this named group MUST select parameters as described in <xref target="tls-server-behavior"/> of [this-RFC].</t>
          </li>
        </ul>
      </section>
      <section anchor="tls-client-behavior">
        <name>Client Behavior</name>
        <t>When sending the initial ClientHello, clients SHOULD ensure the prediction-unsafe groups in the <tt>key_share</tt> extension are consistent with its preferences. This is determined by the following procedure:</t>
        <ol spacing="normal" type="1"><li>Let <tt>key_share_pred_unsafe</tt> be the list of prediction-unsafe named groups in the <tt>key_share</tt> extension</li>
          <li>Let <tt>supported_groups_pred_unsafe</tt> be the list of prediction-unsafe named groups in the <tt>supported_groups</tt> extension</li>
          <li>The <tt>key_share</tt> extension is consistent if and only if <tt>key_share_pred_unsafe</tt> is a prefix of <tt>supported_groups_pred_unsafe</tt></li>
        </ol>
        <t>This procedure ignores all prediction-safe named groups. Clients MAY freely vary whether a prediction-safe named group is included, including using untrusted signals.</t>
        <t>For example, suppose <tt>safe1</tt> and <tt>safe2</tt> are prediction-safe, while <tt>unsafe1</tt> and <tt>unsafe2</tt> are prediction-unsafe. If the client's <tt>supported_groups</tt> extension contains, in order, <tt>safe1</tt>, <tt>unsafe1</tt>, <tt>safe2</tt>, <tt>unsafe2</tt>, the following <tt>key_share</tt> predictions would meet this criteria:</t>
        <ul spacing="normal">
          <li>No key shares</li>
          <li>
            <tt>safe1</tt>, <tt>safe2</tt></li>
          <li>
            <tt>safe2</tt></li>
          <li>
            <tt>unsafe1</tt>, <tt>unsafe2</tt></li>
          <li>
            <tt>unsafe1</tt>, <tt>safe2</tt></li>
        </ul>
        <t>The following would not:</t>
        <ul spacing="normal">
          <li>
            <tt>unsafe2</tt></li>
          <li>
            <tt>safe1</tt>, <tt>unsafe2</tt></li>
        </ul>
        <t>If the client has trusted, prior knowledge that the server implements a selection algorithm consistent with <xref target="tls-server-behavior"/>, it MAY disregard the above and freely vary both prediction-safe and prediction-unsafe groups.</t>
      </section>
    </section>
    <section anchor="dns-service-parameter">
      <name>DNS Service Parameter</name>
      <t>This section defines the <tt>tls-supported-groups</tt> SvcParamKey <xref target="I-D.ietf-dnsop-svcb-https"/>, which specifies the endpoint's TLS supported group preferences, as a sequence of TLS NamedGroup codepoints in order of decreasing preference.</t>
      <section anchor="format">
        <name>Format</name>
        <t>The presentation <tt>value</tt> of the SvcParamValue is a comma-separated list (<xref section="A.1" sectionFormat="of" target="I-D.ietf-dnsop-svcb-https"/>) of decimal integers between 0 and 65536 in ASCII. Any other <tt>value</tt> is a syntax error. To enable simpler parsing, this SvcParam MUST NOT contain escape sequences.</t>
        <t>The wire format of the SvcParamValue is a sequence of 2-octet numeric values in network byte order. An empty list of values is invalid.</t>
      </section>
      <section anchor="configuring-services">
        <name>Configuring Services</name>
        <t>Services SHOULD include supported TLS named groups, in order of decreasing preference in the <tt>tls-supported-groups</tt> parameter of their HTTPS or SVCB endpoints. As TLS preferences are updated, services SHOULD update the DNS record to match. Services MAY include GREASE values <xref target="RFC8701"/> in this list.</t>
        <t>A service MUST NOT configure this service parameter if any of the corresponding TLS servers do not implement the TLS server guidance in <xref target="tls-server-behavior"/>.</t>
      </section>
      <section anchor="dns-client-behavior">
        <name>Client Behavior</name>
        <t>When connecting to a service endpoint whose HTTPS or SVCB record contains the <tt>tls-supported-groups</tt> parameter, the client evaluates the server preferences against its own and predicts named groups to send in the <tt>key_share</tt> extension. In evaluating the server preferences, the client MUST ignore any codepoints that it does not support or recognize.</t>
        <t>If one of the following hold, the client MAY use the result to predict key shares in the initial ClientHello:</t>
        <ul spacing="normal">
          <li>The HTTPS or SVCB record was authenticated by the origin server, or</li>
          <li>The resulting prediction is consistent with client preferences, as described in <xref target="tls-client-behavior"/></li>
        </ul>
        <t>Otherwise, the client SHOULD ignore the parameter and compute <tt>key_share</tt> via its usual logic. Note a secure connection to the DNS resolver, such as DNS over TLS <xref target="RFC7858"/> or DNS over HTTPS <xref target="RFC8484"/>, is not sufficient to authenticate the record by the origin server.</t>
      </section>
      <section anchor="misprediction">
        <name>Misprediction</name>
        <t>Although this service parameter is intended to reduce key share mispredictions, mispredictions may still occur. For example, HelloRetryRequest may be required in the following cases:</t>
        <ul spacing="normal">
          <li>The client has fetched a stale HTTPS or SVCB record that no longer reflects the server preferences</li>
          <li>The server is in the process of deploying a change to named group preferences, and different server instances temporary evaluate different preferences</li>
          <li>The client was unable to fetch the HTTPS or SVCB record</li>
          <li>The client and server implement incompatible selection algorithms, such that client's evaluation of the service parameter did not match the server's final selection</li>
          <li>The server preferred a prediction-unsafe named group for this client, so the client was unable to safely act on the service parameter</li>
        </ul>
        <t>Clients and servers MUST correctly handle mispredictions by responding to or sending HelloRetryRequest, respectively.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document updates TLS server behavior and introduces a notion of prediction-safe named groups to avoid the downgrades in <xref target="downgrades"/>, for both new and existing TLS 1.3 implementations:</t>
      <ul spacing="normal">
        <li>New servers that implement <xref target="tls-server-behavior"/> have selection algorithms that permit arbitrary client <tt>key_share</tt> prediction criteria, even under attacker influence.</li>
        <li>Existing servers are assumed to only implement prediction-unsafe named groups. <xref target="tls-client-behavior"/> ensures that, for all named groups they implement, the client's predicted list will be compatible with possible server assumptions.</li>
      </ul>
      <t>If a TLS server implements a prediction-safe named group but does not follow the guidelines in <xref target="tls-server-behavior"/>, downgrades are possible. Thus <xref target="prediction-safe-named-groups"/> requires all prediction-safe named groups to include text referencing this document.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="updates-to-the-tls-supported-groups-registry">
        <name>Updates to the TLS Supported Groups Registry</name>
        <t>This document updates the TLS Supported Groups registry <xref target="RFC8422"/> to add a "Prediction-Safe" column immediately following the "Recommended" column. The "Prediction-Safe" column is set to a value of "N" for all existing allocations except for X25519Kyber768Draft00 and SecP256r1Kyber768Draft00. Those two values should be set to "Y".</t>
        <t>[[TODO: As of writing, neither of the Kyber768 hybrids above include the necessary text. But, as Kyber is a large post-quantum KEM, it's desirable for them to be prediction-safe. If this document is adopted, the respective Kyber drafts can be updated to incorporate the necessary sentence.]]</t>
        <t>This document additional adds the following note to the registry:</t>
        <ul empty="true">
          <li>
            <t>Note: <xref target="prediction-safe-named-groups"/> of [this-RFC] defines the procedure for a group to be considered prediction-safe and thus set the corresponding column to a value of "Y". All new allocations to this registry are expected to be prediction-safe, unless some interoperability consideration prevents it. For example, if the new allocation is documenting a pre-existing deployment with the older server behavior, it may be allocated with a value of "N".</t>
          </li>
        </ul>
      </section>
      <section anchor="updates-to-the-service-parameter-keys-registry">
        <name>Updates to the Service Parameter Keys Registry</name>
        <t>This document updates the Service Parameter Keys registry <xref target="I-D.ietf-dnsop-svcb-https"/> with the following entry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Number</th>
              <th align="left">Name</th>
              <th align="left">Meaning</th>
              <th align="left">Format Reference</th>
              <th align="left">Change Controller</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">tls-supported-groups</td>
              <td align="left">Supported groups in TLS</td>
              <td align="left">(this document) <xref target="format"/></td>
              <td align="left">IETF</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
          <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="I-D.ietf-dnsop-svcb-https" target="https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-12" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-dnsop-svcb-https.xml">
          <front>
            <title>Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Google</organization>
            </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Erik Nygren" initials="E." surname="Nygren">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="11" month="March" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP [HTTP]. By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy. TO BE REMOVED: This document is being collaborated on in Github at: https://github.com/MikeBishop/dns-alt-svc (https://github.com/MikeBishop/dns-alt-svc). The most recent working version of the document, open issues, etc. should all be available there. The authors (gratefully) accept pull requests.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnsop-svcb-https-12"/>
        </reference>
        <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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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>
        <reference anchor="RFC8701" target="https://www.rfc-editor.org/info/rfc8701" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8701.xml">
          <front>
            <title>Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This document describes GREASE (Generate Random Extensions And Sustain Extensibility), a mechanism to prevent extensibility failures in the TLS ecosystem. It reserves a set of TLS protocol values that may be advertised to ensure peers correctly handle unknown values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8701"/>
          <seriesInfo name="DOI" value="10.17487/RFC8701"/>
        </reference>
        <reference anchor="RFC8422" target="https://www.rfc-editor.org/info/rfc8422" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8422.xml">
          <front>
            <title>Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier</title>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="M. Pegourie-Gonnard" initials="M." surname="Pegourie-Gonnard"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes key exchange algorithms based on Elliptic Curve Cryptography (ECC) for the Transport Layer Security (TLS) protocol. In particular, it specifies the use of Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) key agreement in a TLS handshake and the use of the Elliptic Curve Digital Signature Algorithm (ECDSA) and Edwards-curve Digital Signature Algorithm (EdDSA) as authentication mechanisms.</t>
              <t>This document obsoletes RFC 4492.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8422"/>
          <seriesInfo name="DOI" value="10.17487/RFC8422"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7858" target="https://www.rfc-editor.org/info/rfc7858" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7858.xml">
          <front>
            <title>Specification for DNS over Transport Layer Security (TLS)</title>
            <author fullname="Z. Hu" initials="Z." surname="Hu"/>
            <author fullname="L. Zhu" initials="L." surname="Zhu"/>
            <author fullname="J. Heidemann" initials="J." surname="Heidemann"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <author fullname="D. Wessels" initials="D." surname="Wessels"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="May" year="2016"/>
            <abstract>
              <t>This document describes the use of Transport Layer Security (TLS) to provide privacy for DNS. Encryption provided by TLS eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network, such as discussed in RFC 7626. In addition, this document specifies two usage profiles for DNS over TLS and provides advice on performance considerations to minimize overhead from using TCP and TLS with DNS.</t>
              <t>This document focuses on securing stub-to-recursive traffic, as per the charter of the DPRIVE Working Group. It does not prevent future applications of the protocol to recursive-to-authoritative traffic.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7858"/>
          <seriesInfo name="DOI" value="10.17487/RFC7858"/>
        </reference>
        <reference anchor="RFC8484" target="https://www.rfc-editor.org/info/rfc8484" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8484.xml">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS. Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
      </references>
    </references>
    <?line 207?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author would like to thank David Adrian, Bob Beck, Sophie Schmieg, and Bas Westerbaan for discussions and review on initial iterations of this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61bXXMbt5J9n1+BVR4S3yJZlmInjqr2Q5acxBVb9lrKzd5K
pSJwBiSxHg6YwYxkXkX/fU93AzOYISlnt9YPCUVygEZ/nD7dDU6n06yxTWlO
1fWbK/WT2aqrla6Nel+bwuaNdVVWuLzSa3yjqPWimRb61hZzU02b0k8/mu3U
0wPTTffA9OnTLNeNWbp6e6p8U2RZuynwhj9VL549+ybL7KY+VU3d+ubk6dPv
np5kWECfqh9MZWpdZneu/risXbthobJsY0/Vr43LJ8q7uqnNwuPVdk0vfssy
3TYrV59mapop+Wcr7HQxUy9N9d96bav4vpziguTf+czVS13Zf2o6ACRxblka
9ebNefzcrLUtoYJw+P9Y8jdmuVtnWeXqNR68Nac4WrVI/ppOp0rPfVPrvMmy
65X1Ctps16ZqVF7q2i6s8UpXSq/ndtnaZgvhVbMybI3j2dcKClasYOVNaVi/
E9U4pW8dTqGx3F21rHVh1N3KVPhSfWtqpb1v1xv6Mm2oKtcoyJSvsKmlvedm
hYO4eqZeN0oXhaWv6rLcqsIsbEUyqbXJV1CJXyucKCzsaWuced1WlkyciAf7
L0xtqhwP4wwXl1czdc67eey9Va03OJilD4OGXEWrwW3aXM6L7Qos9tEoGL8q
pk1tN34mWlzboihNln2hXldN7fAM+2b21vmGH76//5cP35+Tfz08qI2uYeuG
BCbZKvhiYyEvNOZxnLJ0d3CRa+g5KMQbbI1DlxbLuYXy7WYDX8MDLqgRZ+qP
CHcpDLSHFcgcKxMVb2512ZKry1n1UsMZG2WhBBhqoCScfU1n1b1leUGl7VpZ
/lzXNfxI6Ya3mBusRMqH4kSqibqzcP62URtTr23T2GqJbzc6/xhs1bsHLafu
DHaslavMTF2aO7zMg4mg+s7GbtGQK4kKVGmWOt92eiBngBAbGHBuS/JYkkG5
EgqBGHh+pi7irkAF1+Bs0GNnkv64wfY+KDBva1qutv4jmQAHg8uMdmcnnzts
6G1hSFScKndVFVYUa+NgcJtL7FcoBhI2XwwpsojRhXjknYsuQKb3s12nINst
2rIcezgJfdP5ye+yz40yn6A8z8aZwzC69E4tGdjIK7p4EUXC9u3cm6ZbD5//
zp8nCyFIF6mPif7IW6v+hLIC3EYWFKfsA4oikKxWwgL0VXiABJmiIJupd/h6
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

-->

</rfc>
