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


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-dprive-unilateral-probing-03" category="std" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="Unilateral Encrypted Authoritative DNS">Unilateral Opportunistic Deployment of Encrypted Recursive-to-Authoritative DNS</title>

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor" role="editor">
      <organization abbrev="ACLU">American Civil Liberties Union</organization>
      <address>
        <postal>
          <street>125 Broad St.</street>
          <city>New York, NY</city>
          <code>10004</code>
          <country>USA</country>
        </postal>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>
    <author initials="J." surname="Salazar" fullname="Joey Salazar" role="editor">
      <organization></organization>
      <address>
        <postal>
          <city>Alajuela</city>
          <code>20201</code>
          <country>CR</country>
        </postal>
        <email>joeygsal@gmail.com</email>
      </address>
    </author>
    <author initials="P." surname="Hoffman" fullname="Paul Hoffman" role="editor">
      <organization>ICANN</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>paul.hoffman@icann.org</email>
      </address>
    </author>

    <date year="2023" month="February" day="16"/>

    <area>int</area>
    <workgroup>dprive</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document sets out steps that DNS servers (recursive resolvers and authoritative servers) can take unilaterally (without any coordination with other peers) to defend DNS query privacy against a passive network monitor.
The steps in this document can be defeated by an active attacker, but should be simpler and less risky to deploy than more powerful defenses.</t>

<t>The goal of this document is to simplify and speed deployment of opportunistic encrypted transport in the recursive-to-authoritative hop of the DNS ecosystem.
With wider easy deployment of the underlying transport on an opportunistic basis, we hope to facilitate the future specification of stronger cryptographic protections against more powerful attacks.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://dkg.gitlab.io/dprive-unilateral-probing/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-dprive-unilateral-probing/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        DPRIVE Working Group mailing list (<eref target="mailto:dns-privacy@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dns-privacy/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dns-privacy/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/dkg/dprive-unilateral-probing"/>.</t>
    </note>


  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>This document aims to provide guidance to implementers who want to simply enable protection against passive network observers.</t>

<t>In particular, it focuses on mechanisms that can be adopted unilaterally by recursive resolvers and authoritative servers, without any explicit coordination with the other parties.
This guidance provides opportunistic security (see <xref target="RFC7435"/>) -- encrypting things that would otherwise be in the clear, without interfering with or weakening stronger forms of security.</t>

<t>The document also briefly introduces (but does not try to specify) how a future protocol might permit defense against an active attacker in <xref target="adding-auth"/>.</t>

<t>The protocol described here offers three concrete advantages to the Internet ecosystem:</t>

<t><list style="symbols">
  <t>Protection from passive attackers of DNS queries in transit between recursive and authoritative servers.</t>
  <t>A roadmap for gaining real-world experience at scale with encrypted protections of this traffic.</t>
  <t>A bridge to some possible future protection against a more powerful attacker.</t>
</list></t>

<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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="terminology"><name>Terminology</name>

<dl>
  <dt>Unilateral:</dt>
  <dd>
    <t>capable of opportunistic probing deployment without external coordination with any of the other parties</t>
  </dd>
  <dt>Do53:</dt>
  <dd>
    <t>traditional cleartext DNS over port 53 (<xref target="RFC1035"/>)</t>
  </dd>
  <dt>DoQ:</dt>
  <dd>
    <t>DNS-over-QUIC (<xref target="RFC9250"/>)</t>
  </dd>
  <dt>DoT:</dt>
  <dd>
    <t>DNS-over-TLS (<xref target="RFC7858"/>)</t>
  </dd>
  <dt>DoH:</dt>
  <dd>
    <t>DNS-over-HTTPS (<xref target="RFC8484"/>)</t>
  </dd>
  <dt>Encrypted transports:</dt>
  <dd>
    <t>DoQ, DoT, and DoH collectively</t>
  </dd>
</dl>

</section>
</section>
<section anchor="priorities"><name>Priorities</name>

<section anchor="minimizing-negative-impacts"><name>Minimizing Negative Impacts</name>

<t>This document aims to minimize potentially negative impacts caused by the probing of encrypted transports -- for the systems that adopt these guidelines, for the parties that they communicate with, and for uninvolved third parties.
The negative impacts that we specifically try to minimize are:</t>

<t><list style="symbols">
  <t>excessive bandwidth use</t>
  <t>excessive use of computational resources (CPU and memory in particular)</t>
  <t>the potential for amplification attacks (where DNS resolution infrastructure is wielded as part of a DoS attack)</t>
</list></t>

</section>
<section anchor="protocol-choices"><name>Protocol Choices</name>

<t>Although this document focuses specifically on strategies used by DNS servers, it does not go into detail on the specific protocols used because those protocols, in particular DoT and DoQ, are described in other documents.</t>

<t>This document does not pursue the use of DoH in this context, because a DoH client needs to know the path part of a DoH endpoint URL, and there are currently no mechanisms for a DNS resolver to predict the path on its own, in an opportunistic or unilateral fashion, without incurring in excessive use of resources.
If such mechanisms are later defined, the protocol in this document can be updated to accomodate them.</t>

</section>
</section>
<section anchor="authoritative-guidance"><name>Guidance for Authoritative Servers</name>

<t>An authoritative server <bcp14>SHOULD</bcp14> implement and deploy DNS-over-TLS (DoT) on TCP port 853.</t>

<t>An authoritative server <bcp14>SHOULD</bcp14> implement and deploy DNS-over-QUIC (DoQ) on UDP port 853.</t>

<t>An authoritative server implementing the protocol described in this document <bcp14>MUST</bcp14> implement at least one of DoT or DoQ on port 853.</t>

<section anchor="authoritative-pools"><name>Pooled Authoritative Servers Behind a Single IP Address</name>

<t>Some authoritative DNS servers are structured as a pool of authoritatives standing behind a load-balancer that runs on a single IP address, forwarding queries to members of the pool.</t>

<t>In such a deployment, individual members of the pool typically get updated independently from each other.</t>

<t>A recursive resolver following the guidance in <xref target="recursive-guidance"/> that interacts with such a pool likely does not know that it is a pool.
If some members of the pool follow this guidance while others do not, the recursive client might see the pool as a single authoritative server that sometimes offers and sometimes refuses encrypted transport.</t>

<t>To avoid incurring additional minor timeouts for such a recursive resolver, the pool operator <bcp14>SHOULD</bcp14> either:</t>

<t><list style="symbols">
  <t>ensure that all members of the pool enable the same encrypted transport(s) within the span of a few seconds, or</t>
  <t>ensure that the load balancer maps client requests to pool members based on client IP addresses.</t>
</list></t>

<t>Similar concerns apply to authoritative servers responding from an anycast IP address.
As long as the pool of servers is in a heterogeneous state, any flapping route that switches a given client IP address to a different responder risks incurring an additional timeout.
Frequent changes of routing for anycast listening IP addresses are also likely to cause problems for TLS, TCP, or QUIC connection state as well, so stable routes are important to ensure that the service remains available and responsive.
The servers in a pool can share session information to increase the likelihood of successful resumptions.</t>

</section>
<section anchor="authentication"><name>Authentication</name>

<t>For unilateral deployment, an authoritative server does not need to offer any particular form of authentication.</t>

<t>The simplest deployment would simply provide a self-issued, regularly-updated X.509 certificate.
This mechanism is supported by many TLS and QUIC clients, and will be acceptable for any opportunistic connection.</t>

</section>
<section anchor="authoritative-sni"><name>Server Name Indication</name>

<t>An authoritative DNS server that wants to handle unilateral queries <bcp14>MAY</bcp14> rely on Server Name Indication (SNI) to select alternate server credentials.
However, such a server <bcp14>MUST NOT</bcp14> serve resource records that differ based on SNI (or on the lack of SNI) provided by the client, because a probing recursive resolver that offers SNI might or might not have used the right server name to get the records it is looking for.</t>

</section>
<section anchor="authoritative-resource-exhaustion"><name>Resource Exhaustion</name>

<t>A well-behaved recursive resolver may keep an encrypted connection open to an authoritative server, to amortize the costs of connection setup for both parties.</t>

<t>However, some authoritative servers may have insufficient resources available to keep many connections open concurrently.</t>

<t>To keep resources under control, authoritative servers should proactively manage their encrypted connections.
Section 6.5 of <xref target="RFC9250"/> ("Connection Handling") offers useful guidance for servers managing DoQ connections.
Section 3.4 of <xref target="RFC7858"/> offers useful guidance for servers managing DoT connections.</t>

<t>An authoritative server facing unforeseen resource exhaustion <bcp14>SHOULD</bcp14> cleanly close open connections from recursive resolvers based on the authoritative's preferred prioritization.</t>

<t>In the case of unanticipated resource exhaustion, close connections until resources are back in control.
A reasonable prioritization scheme would be to close connections with no outstanding queries, ordered by idle time (longest idle time gets closed first), then close connections with outstanding queries, ordered by age of outstanding query (oldest outstanding query gets closed first).</t>

<t>When resources are especially tight, the authoritative server may also decline to accept new connections over encrypted transport.</t>

</section>
<section anchor="pad-responses-to-mitigate-traffic-analysis"><name>Pad Responses to Mitigate Traffic Analysis</name>

<t>To increase the anonymity set for each response, the authoritative server <bcp14>SHOULD</bcp14> use a sensible padding mechanism for all responses it sends when possible (this might be limited by e.g. not receiving an EDNS(0) option in the query).
Specifically, a DoT server <bcp14>SHOULD</bcp14> use EDNS(0) padding <xref target="RFC7830"/> if possible, and a DoQ server <bcp14>SHOULD</bcp14> follow the guidance in Section 5.4 of <xref target="RFC9250"/>.
How much to pad is out of scope of this document, but a reasonable suggestion can be found in <xref target="RFC8467"/>.</t>

</section>
</section>
<section anchor="recursive-guidance"><name>Guidance for Recursive Resolvers</name>

<t>This section outlines a probing policy suitable for unilateral adoption by any recursive resolver.
Following this policy should not result in failed resolutions or significant delay.</t>

<section anchor="high-level-overview"><name>High-level Overview</name>

<t>In addition to querying on Do53, the recursive resolver will try either or both of DoT and DoQ concurrently.
The recursive resolver remembers what opportunistic encrypted transport protocols have worked recently based on a (clientIP, serverIP, protocol) tuple.</t>

<t>If a query needs to go to a given authoritative server, and the recursive resolver remembers a recent successful encrypted transport to that server, then it doesn't send the query over Do53 at all.
Rather, it only sends the query using the recently-good encrypted transport protocol.</t>

<t>If the encrypted transport protocol fails, the recursive resolver falls back to Do53 for that tuple.
When any encrypted transport fails, the recursive resolver remembers that failure for a reasonable amount of time to avoid flooding a non-compatible server with requests that it cannot accept.</t>

<t>See the subsections below for a more detailed description of this protocol.</t>

</section>
<section anchor="maintaining-authoritative-state-by-ip-address"><name>Maintaining Authoritative State by IP Address</name>

<t>In designing a probing strategy, the recursive resolver could record its knowledge about any given authoritative server with different strategies, including at least:</t>

<t><list style="symbols">
  <t>the authoritative server's IP address,</t>
  <t>the authoritative server's name (the NS record used), or</t>
  <t>the zone that contains the record being looked up.</t>
</list></t>

<t>This document encourages the first strategy, to minimize timeouts or accidental delays.
This document does not describe the other two strategies because the first is strongly encouraged.</t>

<t>A timeout (accidental delay) is most likely to happen when the recursive client believes that the authoritative server offers encrypted transport, but the actual server reached declines encrypted transport (or worse, filters the incoming traffic and does not even respond with an ICMP port closed message).</t>

<t>By associating state with the IP address, the recursive client is most able to avoid reaching a heterogeneous deployment.</t>

<t>For example, consider an authoritative server named <spanx style="verb">ns0.example.com</spanx> that is served by two installations (with two <spanx style="verb">A</spanx> records), one at <spanx style="verb">192.0.2.7</spanx> that follows this guidance, and one at <spanx style="verb">192.0.2.8</spanx> that is a legacy (cleartext port 53-only) deployment.
A recursive client who associates state with the <spanx style="verb">NS</spanx> name and reaches <spanx style="verb">.7</spanx> first will "learn" that <spanx style="verb">ns0.example.com</spanx> supports encrypted transport.
A subsequent query over encrypted transport dispatched to <spanx style="verb">.8</spanx> would fail, potentially delaying the response.</t>

<t>By associating the state with the authoritative IP address, the client can minimize the number of accidental delays introduced (see also <xref target="resolver-binding"/> and <xref target="authoritative-pools"/>).</t>

</section>
<section anchor="overall-recursive-resolver-settings"><name>Overall Recursive Resolver Settings</name>

<t>A recursive resolver implementing this document needs to set system-wide values for some default parameters.
These parameters may be set independently for each supported encrypted transport, though a simple implementation may keep the parameters constant across encrypted transports.</t>

<texttable title="Recursive resolver system parameters per encrypted transport">
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Suggested Default</ttcol>
      <c><spanx style="verb">persistence</spanx></c>
      <c>How long should the recursive resolver remember successful encrypted transport connections?</c>
      <c>3 days (259200 seconds)</c>
      <c><spanx style="verb">damping</spanx></c>
      <c>How long should the recursive resolver remember unsuccessful encrypted transport connections?</c>
      <c>1 day (86400 seconds)</c>
      <c><spanx style="verb">timeout</spanx></c>
      <c>How long should the recursive resolver wait for an initiated encrypted connection to complete?</c>
      <c>4 seconds</c>
</texttable>

<t>This document uses the notation <spanx style="verb">E-foo</spanx> to refer to the <spanx style="verb">foo</spanx> parameter for the encrypted transport <spanx style="verb">E</spanx>.</t>

<t>For example <spanx style="verb">DoT-persistence</spanx> would indicate the length of time that the recursive resolver will remember that an authoritative server had a successful connection over <spanx style="verb">DoT</spanx>.</t>

<t>This document also assumes that the resolver maintains a list of outstanding cleartext queries destined for the authoritative server's IP address <spanx style="verb">X</spanx>.
This list is referred to as <spanx style="verb">Do53-queries[X]</spanx>.
This document does not attempt to describe the specific operation of sending and receiving cleartext DNS queries (Do53) for a recursive resolver.
Instead it describes a "bolt-on" mechanism that extends the recursive resolver's operation on a few simple hooks into the recursive resolver's existing handling of Do53.</t>

<t>Implementers or deployers of DNS recursive resolvers that follow the strategies in this document are encouraged to report their preferred values of these parameters.</t>

</section>
<section anchor="recursive-resolver-requirements"><name>Recursive Resolver Requirements</name>

<t>To follow this guidance, a recursive resolver <bcp14>MUST</bcp14> implement at least one of either DoT or DoQ in its capacity as a client of authoritative nameservers.</t>

<t>A recursive resolver <bcp14>SHOULD</bcp14> implement the client side of DNS-over-TLS (DoT).
A recursive resolver <bcp14>SHOULD</bcp14> implement the client side of DNS-over-QUIC (DoQ).</t>

<t>DoT queries from the recursive resolver <bcp14>MUST</bcp14> target TCP port 853, with an ALPN of "<spanx style="verb">dot</spanx>".
DoQ queries from the recursive resolver <bcp14>MUST</bcp14> target UDP port 853, with an ALPN of "<spanx style="verb">doq</spanx>".
ALPN is described in <xref target="RFC7301"/>.</t>

<t>While this document focuses on the recursive-to-authoritative hop, a recursive resolver implementing these strategies <bcp14>SHOULD</bcp14> also accept queries from its clients over some encrypted transport (current common transports are DoH or DoT).</t>

</section>
<section anchor="authoritative-server-encrypted-transport-connection-state"><name>Authoritative Server Encrypted Transport Connection State</name>

<t>The recursive resolver <bcp14>SHOULD</bcp14> keep a record of the state for each authoritative server it contacts, indexed by the IP address of the authoritative server and the encrypted transports supported by the recursive resolver.
In addition, the recursive resolver <bcp14>SHOULD</bcp14> also keep a record of its own IP addresses used for queries, as described in <xref target="resolver-binding"/>.</t>

<t>In addition to tracking the state of connection attempts and outcomes, a recursive resolver <bcp14>SHOULD</bcp14> record the state of established sessions for encrypted protocols.
The details of how sessions are identified is dependent on the transport protocol implementation (such as TLS session ticket or TLS session ID, QUIC connection ID, and so on).
The use of session resumption as recommended here is limited somewhat because the tickets are only stored within the context defined by the (clientIP, serverIP, protocols) tuples used to track client-server interaction by the recursive resolver in a table like the one below.
However, session resumption still offers the ability to optimize the handshake in some circumstances.</t>

<t>Each record should contain the following fields for each supported encrypted transport, each of which would initially be <spanx style="verb">null</spanx>:</t>

<texttable title="Recursive resolver state per authoritative IP, per encrypted transport">
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Retain Across Reset</ttcol>
      <c><spanx style="verb">session</spanx></c>
      <c>The associated state of any existing, established session (the structure of this value is dependent on the encrypted transport implementation).  If <spanx style="verb">session</spanx> is not <spanx style="verb">null</spanx>, it may be in one of two states: <spanx style="verb">pending</spanx> or <spanx style="verb">established</spanx></c>
      <c>no</c>
      <c><spanx style="verb">initiated</spanx></c>
      <c>Timestamp of most recent connection attempt</c>
      <c>yes</c>
      <c><spanx style="verb">completed</spanx></c>
      <c>Timestamp of most recent completed handshake</c>
      <c>yes</c>
      <c><spanx style="verb">status</spanx></c>
      <c>Enumerated value of <spanx style="verb">success</spanx> or <spanx style="verb">fail</spanx> or <spanx style="verb">timeout</spanx>, associated with the <spanx style="verb">completed</spanx> handshake</c>
      <c>yes</c>
      <c><spanx style="verb">last-response</spanx></c>
      <c>A timestamp of the most recent response received on the connection</c>
      <c>yes</c>
      <c><spanx style="verb">resumptions</spanx></c>
      <c>A stack of resumption tickets (and associated parameters) that could be used to resume a prior successful session</c>
      <c>yes</c>
      <c><spanx style="verb">queries</spanx></c>
      <c>A queue of queries intended for this authoritative server, each of which has additional status <spanx style="verb">early</spanx>, <spanx style="verb">unsent</spanx>, or <spanx style="verb">sent</spanx></c>
      <c>no</c>
      <c><spanx style="verb">last-activity</spanx></c>
      <c>A timestamp of the most recent activity on the connection</c>
      <c>no</c>
</texttable>

<t>QUESTION: For clarification - does <spanx style="verb">completed handshake</spanx> above mean <spanx style="verb">completed full handshake (that generates a new session)</spanx> or just <spanx style="verb">completed handshake (which can include one where an existing session is resumed)</spanx>?</t>

<t>Note that the <spanx style="verb">session</spanx> fields in aggregate constitute a pool of open connections to different servers.</t>

<t>With the exception of the <spanx style="verb">session</spanx>, <spanx style="verb">queries</spanx>, and <spanx style="verb">last-activity</spanx> fields, this cache information should be kept across restart of the server unless explicitly cleared by administrative action.</t>

<t>This document uses the notation <spanx style="verb">E-foo[X]</spanx> to indicate the value of field <spanx style="verb">foo</spanx> for encrypted transport <spanx style="verb">E</spanx> to IP address <spanx style="verb">X</spanx>.</t>

<t>For example, <spanx style="verb">DoT-initiated[192.0.2.4]</spanx> represents the timestamp when the most recent DoT connection packet was sent to IP address 192.0.2.4.</t>

<section anchor="resolver-binding"><name>Separate State for Each of the Recursive Resolver's Own IP Addresses</name>

<t>Note that the recursive resolver should record this per-authoritative-IP state for each source IP address it uses as it sends its queries.
For example, if a recursive resolver can send a packet to authoritative servers from IP addresses <spanx style="verb">192.0.2.100</spanx> and <spanx style="verb">192.0.2.200</spanx>, it should keep two distinct sets of per-authoritative-IP state, one for each source address it uses.
Keeping these state tables distinct for each source address makes it possible for a pooled authoritative server behind a load balancer to do a partial rollout while minimizing accidental timeouts (see <xref target="authoritative-pools"/>).</t>

</section>
</section>
<section anchor="probing-policy"><name>Probing Policy</name>

<t>When a recursive resolver discovers the need for an authoritative lookup to an authoritative DNS server using IP address <spanx style="verb">X</spanx>, it retrieves the records associated with <spanx style="verb">X</spanx> from its cache.</t>

<t>The following sections presume that the time of the discovery of the need for lookup is time <spanx style="verb">T0</spanx>.</t>

<t>If any of the records discussed here are absent, they are treated as <spanx style="verb">null</spanx>.</t>

<t>The recursive resolver must decide whether to initially send a query over Do53, or over any of the supported encrypted transports (DoT or DoQ).</t>

<t>Note that a resolver might initiate this query via any or all of the known transports.
When multiple queries are sent, the initial packets for each connection can be sent concurrently, similar to "Happy Eyeballs" (<xref target="RFC8305"/>).
However, unlike Happy Eyeballs, when one transport succeeds, the other connections do not need to be terminated, but can instead be continued to establish whether the IP address <spanx style="verb">X</spanx> is capable of communicating on the relevant transport.</t>

<section anchor="sending-a-query-over-do53"><name>Sending a Query over Do53</name>

<t>For any of the supported encrypted transports <spanx style="verb">E</spanx>, if either of the following holds true, the resolver <bcp14>SHOULD NOT</bcp14> send a query to <spanx style="verb">X</spanx> over Do53:</t>

<t><list style="symbols">
  <t><spanx style="verb">E-session[X]</spanx> is in the <spanx style="verb">established</spanx> state, or</t>
  <t><spanx style="verb">E-status[X]</spanx> is <spanx style="verb">success</spanx>, and <spanx style="verb">(T0 - E-last-response[X]) &lt; persistence</spanx></t>
</list></t>

<t>QUESTION: It seems the persistence and damping parameters do not apply to E-session and the only specific circumstances
I can find here that set to null are on error/timeout/clean server shutdown? So would one successful connection to a
server that the client then closed result in the client NOT sending the next query over Do53, regardless of how long
ago that was?</t>

<t>Otherwise, if there is no outstanding session for any encrypted transport, and the last successful encrypted transport connection was long ago, the resolver sends a query to <spanx style="verb">X</spanx> over Do53.
When it does so, it inserts a handle for the query in <spanx style="verb">Do53-queries[X]</spanx>.</t>

</section>
<section anchor="receiving-a-response-over-do53"><name>Receiving a Response over Do53</name>

<t>When a response <spanx style="verb">R</spanx> for query <spanx style="verb">Q</spanx> arrives at the recursive resolver in cleartext sent over Do53 from authoritative server with IP address <spanx style="verb">X</spanx>, the recursive resolver should:</t>

<t>If <spanx style="verb">Q</spanx> is not in <spanx style="verb">Do53-queries[X]</spanx>:</t>

<t><list style="symbols">
  <t>Discard <spanx style="verb">R</spanx> and process it no further (do not respond to a cleartext response to a query that is not outstanding)</t>
</list></t>

<t>Otherwise:</t>

<t><list style="symbols">
  <t>Remove <spanx style="verb">Q</spanx> from <spanx style="verb">Do53-queries[X]</spanx></t>
</list></t>

<t>If <spanx style="verb">R</spanx> is successful:</t>

<t><list style="symbols">
  <t>If <spanx style="verb">Q</spanx> is in <spanx style="verb">Do53-queries[X]</spanx>:
  <list style="symbols">
      <t>Return <spanx style="verb">R</spanx> to the requesting client</t>
    </list></t>
  <t>For each supported encrypted transport <spanx style="verb">E</spanx>:
  <list style="symbols">
      <t>If <spanx style="verb">Q</spanx> is in <spanx style="verb">E-queries[X]</spanx>:
      <list style="symbols">
          <t>Remove <spanx style="verb">Q</spanx> from <spanx style="verb">E-queries[X]</spanx></t>
        </list></t>
    </list></t>
</list></t>

<t>But if <spanx style="verb">R</spanx> is unsuccessful (e.g. <spanx style="verb">SERVFAIL</spanx>):</t>

<t><list style="symbols">
  <t>if <spanx style="verb">Q</spanx> is not in any of <spanx style="verb">*-queries[X]</spanx>:
  <list style="symbols">
      <t>Return <spanx style="verb">SERVFAIL</spanx> to the client</t>
    </list></t>
</list></t>

<!--
FIXME: What response should be sent to the client in the case that an extended DNS error (RFC 8914) is offered in an authoritative's response?
Paul says: Commented this out. It is unrelated to encryption between a recursive resolver and an anuthoritative server.
-->

</section>
<section anchor="initiating-a-connection-over-encrypted-transport"><name>Initiating a Connection over Encrypted Transport</name>

<t>If any <spanx style="verb">E-session[X]</spanx> is in the <spanx style="verb">established</spanx> state, the recursive resolver <bcp14>SHOULD NOT</bcp14> initiate a new connection to <spanx style="verb">X</spanx> over Do53 or <spanx style="verb">E</spanx>, but should instead send queries to <spanx style="verb">X</spanx> through the existing session (see <xref target="sending"/>).</t>

<t>COMMENT: I think <spanx style="verb">new connection</spanx> is used here to imply one where session resumption is not attempted, but in <xref target="resumption"/> it is used and qualified that it may or may involve resumption.</t>

<t>If the recursive resolver has a preferred encrypted transport, but only a different transport is in the <spanx style="verb">established</spanx> state, it <bcp14>MAY</bcp14> also initiate a new connection to <spanx style="verb">X</spanx> over its preferred transport while concurrently sending the query over the <spanx style="verb">established</spanx> transport <spanx style="verb">E</spanx>.</t>

<t>Before considering whether to initiate a new connection over an encrypted transport, the timer should examine and possibly refresh its state for encrypted transport <spanx style="verb">E</spanx> to authoritative IP address <spanx style="verb">X</spanx>:</t>

<t><list style="symbols">
  <t>if <spanx style="verb">E-session[X]</spanx> is in state <spanx style="verb">pending</spanx>, and</t>
  <t><spanx style="verb">T0 - E-initiated[X] &gt; E-timeout</spanx>, then
  <list style="symbols">
      <t>set <spanx style="verb">E-session[X]</spanx> to <spanx style="verb">null</spanx> and</t>
      <t>set <spanx style="verb">E-status[X]</spanx> to <spanx style="verb">timeout</spanx></t>
    </list></t>
</list></t>

<t>When resources are available to attempt a new encrypted transport, the resolver should only initiate a new connection to <spanx style="verb">X</spanx> over <spanx style="verb">E</spanx> as long as one of the following holds true:</t>

<t><list style="symbols">
  <t><spanx style="verb">E-status[X]</spanx> is <spanx style="verb">success</spanx>, or</t>
  <t><spanx style="verb">E-status[X]</spanx> is <spanx style="verb">fail</spanx> or <spanx style="verb">timeout</spanx> and <spanx style="verb">(T0 - E-completed[X]) &gt; damping</spanx>, or</t>
  <t><spanx style="verb">E-status[X]</spanx> is <spanx style="verb">null</spanx> and <spanx style="verb">E-initiated[X]</spanx> is <spanx style="verb">null</spanx></t>
</list></t>

<t>When initiating a session to <spanx style="verb">X</spanx> over encrypted transport <spanx style="verb">E</spanx>, if <spanx style="verb">E-resumptions[X]</spanx> is not empty, one ticket should be popped off the stack and used to try to resume a previous session.
Otherwise, the initial Client Hello handshake should not try to resume any session.</t>

<t>When initiating a connection, the resolver should take the following steps:</t>

<t><list style="symbols">
  <t>set <spanx style="verb">E-initiated[X]</spanx> to <spanx style="verb">T0</spanx></t>
  <t>store a handle for the new session (which should have <spanx style="verb">pending</spanx> state)  in <spanx style="verb">E-session[X]</spanx></t>
  <t>insert a handle for the query that prompted this connection in <spanx style="verb">E-queries[X]</spanx>, with status <spanx style="verb">unsent</spanx> or <spanx style="verb">early</spanx>, as appropriate (see below).</t>
</list></t>

<section anchor="early-data"><name>Early Data</name>

<t>Modern encrypted transports like TLS 1.3 offer the chance to store "early data" from the client into the initial Client Hello in some contexts.
A resolver that initiates a connection over a encrypted transport according to this guidance in a context where early data is possible <bcp14>SHOULD</bcp14> send the DNS query that prompted the connection in the early data, according to the sending guidance in <xref target="sending"/>.</t>

<t>If it does so, the status of <spanx style="verb">Q</spanx> in <spanx style="verb">E-queries[X]</spanx> should be set to <spanx style="verb">early</spanx> instead of <spanx style="verb">unsent</spanx>.</t>

</section>
<section anchor="resumption"><name>Resumption Tickets</name>

<t>When initiating a new connection (whether by resuming an old session or not), the recursive resolver <bcp14>SHOULD</bcp14> request a session resumption ticket from the authoritative server.
If the authoritative server supplies a resumption ticket, the recursive resolver pushes it into the stack at <spanx style="verb">E-resumptions[X]</spanx>.</t>

</section>
<section anchor="recursive-sni"><name>Server Name Indication</name>

<t>For modern encrypted transports like TLS 1.3, most client implementations expect to send a Server Name Indication (SNI) in the Client Hello.</t>

<t>There are two complications with selecting or sending SNI in this unilateral probing:</t>

<t><list style="symbols">
  <t>Some authoritative servers are known by more than one name; selecting a single name to use for a given connection may be difficult or impossible.</t>
  <t>In most configurations, the contents of the SNI field is exposed on the wire to a passive adversary.
This potentially reveals additional information about which query is being made, based on the NS of the query itself.</t>
</list></t>

<t>To avoid additional leakage and complexity, a recursive resolver following this guidance <bcp14>SHOULD NOT</bcp14> send SNI to the authoritative when attempting encrypted transport.</t>

<t>If the recursive resolver needs to send SNI to the authoritative for some reason not found in this document, it is <bcp14>RECOMMENDED</bcp14> that it implements Encrypted Client Hello (<xref target="I-D.ietf-tls-esni"/>) to reduce leakage.</t>

</section>
<section anchor="authoritative-server-authentication"><name>Authoritative Server Authentication</name>

<t>Because this probing policy is unilateral and opportunistic, the client connecting under this policy <bcp14>MUST</bcp14> accept any certificate presented by the server.
If the client cannot verify the server's identity, it <bcp14>MAY</bcp14> use that information for reporting, logging, or other analysis purposes.
But it <bcp14>MUST NOT</bcp14> reject the connection due to the authentication failure, as the result would be falling back to cleartext, which would leak the content of the session to a passive network monitor.</t>

</section>
</section>
<section anchor="establishing-an-encrypted-transport-connection"><name>Establishing an Encrypted Transport Connection</name>

<t>When an encrypted transport connection actually completes (e.g., the TLS handshake completes) at time <spanx style="verb">T1</spanx>, the resolver sets <spanx style="verb">E-completed[X]</spanx> to <spanx style="verb">T1</spanx> and does the following:</t>

<t>If the handshake completed successfully:</t>

<t><list style="symbols">
  <t>update <spanx style="verb">E-session[X]</spanx> so that it is in state <spanx style="verb">established</spanx></t>
  <t>set <spanx style="verb">E-status[X]</spanx> to <spanx style="verb">success</spanx></t>
  <t>set <spanx style="verb">E-last-response[X]</spanx> to <spanx style="verb">T1</spanx></t>
  <t>set <spanx style="verb">E-completed[X]</spanx> to <spanx style="verb">T1</spanx></t>
  <t>for each query <spanx style="verb">Q</spanx> in <spanx style="verb">E-queries[X]</spanx>:
  <list style="symbols">
      <t>if early data was accepted and <spanx style="verb">Q</spanx> is <spanx style="verb">early</spanx>,
      <list style="symbols">
          <t>set the status of <spanx style="verb">Q</spanx> to <spanx style="verb">sent</spanx></t>
        </list></t>
      <t>otherwise:
      <list style="symbols">
          <t>send <spanx style="verb">Q</spanx> through the session (see <xref target="sending"/>), and set the status of <spanx style="verb">Q</spanx> to <spanx style="verb">sent</spanx></t>
        </list></t>
    </list></t>
</list></t>

</section>
<section anchor="failing-to-establish-an-encrypted-transport-connection"><name>Failing to Establish an Encrypted Transport Connection</name>

<t>If, at time <spanx style="verb">T2</spanx> an encrypted transport handshake completes with a failure (e.g. a TLS alert),</t>

<t><list style="symbols">
  <t>set <spanx style="verb">E-session[X]</spanx> to <spanx style="verb">null</spanx></t>
  <t>set <spanx style="verb">E-status[X]</spanx> to <spanx style="verb">fail</spanx></t>
  <t>set <spanx style="verb">E-completed[X]</spanx> to <spanx style="verb">T2</spanx></t>
  <t>for each query <spanx style="verb">Q</spanx> in <spanx style="verb">E-queries[X]</spanx>:
  <list style="symbols">
      <t>if <spanx style="verb">Q</spanx> is not present in any other <spanx style="verb">*-queries[X]</spanx> or in <spanx style="verb">Do53-queries[X]</spanx>, add <spanx style="verb">Q</spanx> to <spanx style="verb">Do53-queries[X]</spanx> and send query <spanx style="verb">Q</spanx> to <spanx style="verb">X</spanx> over Do53.</t>
    </list></t>
</list></t>

<t>Note that this failure will trigger the recursive resolver to fall back to cleartext queries to the authoritative server at IP address <spanx style="verb">X</spanx>.
It will retry encrypted transport to <spanx style="verb">X</spanx> once the <spanx style="verb">damping</spanx> timer has elapsed.</t>

</section>
<section anchor="encrypted-transport-failure"><name>Encrypted Transport Failure</name>

<t>Once established, an encrypted transport might fail for a number of reasons (e.g., decryption failure, or improper protocol sequence).</t>

<t>If this happens:</t>

<t><list style="symbols">
  <t>set <spanx style="verb">E-session[X]</spanx> to <spanx style="verb">null</spanx></t>
  <t>set <spanx style="verb">E-status[X]</spanx> to <spanx style="verb">fail</spanx></t>
  <t>for each query <spanx style="verb">Q</spanx> in <spanx style="verb">E-queries[X]</spanx>:
  <list style="symbols">
      <t>if <spanx style="verb">Q</spanx> is not present in any other <spanx style="verb">*-queries[X]</spanx> or in <spanx style="verb">Do53-queries[X]</spanx>, add <spanx style="verb">Q</spanx> to <spanx style="verb">Do53-queries[X]</spanx> and send query <spanx style="verb">Q</spanx> to <spanx style="verb">X</spanx> over Do53.
<!--
FIXME: should a resumption ticket be used here for this previously successful connection?
Paul says: Remove this. If we include it, it adds a lot of complexity for a rare edge case because the resolver would also have to keep track of whether a ticket had been reused yet.
--></t>
    </list></t>
</list></t>

<t>Note that this failure will trigger the recursive resolver to fall back to cleartext queries to the authoritative server at IP address <spanx style="verb">X</spanx>.
It will retry encrypted transport to <spanx style="verb">X</spanx> once the <spanx style="verb">damping</spanx> timer has elapsed.</t>

<!--
FIXME: are there specific forms of failure that we might handle differently?
Paul says: remove this until someone gives a specific example that is needed.
-->
<t>For example, What if a TCP timeout closes an idle DoT connection?
What if a QUIC stream ends up timing out but other streams on the same QUIC connection are going through?
Do the described scenarios cover the case when an encrypted transport's port is made unavailable/closed?</t>

</section>
<section anchor="handling-clean-shutdown-of-an-encrypted-transport-connection"><name>Handling Clean Shutdown of an Encrypted Transport Connection</name>

<t>At time <spanx style="verb">T3</spanx>, the recursive resolver may find that authoritative server <spanx style="verb">X</spanx> cleanly closes an existing outstanding connection (most likely due to resource exhaustion, see <xref target="authoritative-resource-exhaustion"/>).</t>

<t>When this happens:</t>

<t><list style="symbols">
  <t>set <spanx style="verb">E-session[X]</spanx> to <spanx style="verb">null</spanx></t>
  <t>for each query <spanx style="verb">Q</spanx> in <spanx style="verb">E-queries[X]</spanx>:
  <list style="symbols">
      <t>if <spanx style="verb">Q</spanx> is not present in any other <spanx style="verb">*-queries[X]</spanx> or in <spanx style="verb">Do53-queries[X]</spanx>, add <spanx style="verb">Q</spanx> to <spanx style="verb">Do53-queries[X]</spanx> and send query <spanx style="verb">Q</spanx> to <spanx style="verb">X</spanx> over Do53.</t>
    </list></t>
</list></t>

<t>Note that this premature shutdown will trigger the recursive resolver to fall back to cleartext queries to the authoritative server at IP address <spanx style="verb">X</spanx>.
Any subsequent query to <spanx style="verb">X</spanx> will retry the encrypted connection promptly.</t>

</section>
<section anchor="sending"><name>Sending a Query over Encrypted Transport</name>

<t>When sending a query to an authoritative server over encrypted transport at time <spanx style="verb">T4</spanx>, the recursive resolver should take a few reasonable steps to ensure privacy and efficiency.</t>

<t>After sending query <spanx style="verb">Q</spanx>, the recursive resolver should ensure that <spanx style="verb">Q</spanx>'s state in <spanx style="verb">E-queries[X]</spanx> is set to <spanx style="verb">sent</spanx>.</t>

<t>The recursive resolver also sets <spanx style="verb">E-last-activity[X]</spanx> to <spanx style="verb">T4</spanx>.</t>

<t>In addition, the recursive resolver should consider the guidance in the following sections.</t>

<section anchor="pad-queries-to-mitigate-traffic-analysis"><name>Pad Queries to Mitigate Traffic Analysis</name>

<t>To increase the anonymity set for each query, the recursive resolver <bcp14>SHOULD</bcp14> use a sensible padding mechanism for all queries it sends.
Specifically, a DoT client <bcp14>SHOULD</bcp14> use EDNS(0) padding <xref target="RFC7830"/>, and a DoQ client <bcp14>SHOULD</bcp14> follow the guidance in Section 5.4 of <xref target="RFC9250"/>.
How much to pad is out of scope of this document, but a reasonable suggestion can be found in <xref target="RFC8467"/>.</t>

</section>
<section anchor="send-queries-in-separate-channels"><name>Send Queries in Separate Channels</name>

<t>When multiple queries are multiplexed on a single encrypted transport to a single authoritative server, the recursive resolver <bcp14>SHOULD</bcp14> pipeline queries and <bcp14>MUST</bcp14> be capable of receiving responses out of order.
For guidance on how to best achieve this on a given encrypted transport, see <xref target="RFC7766"/> (for DoT) and <xref target="RFC9250"/> (for DoQ).</t>

</section>
</section>
<section anchor="receiving-a-response-over-encrypted-transport"><name>Receiving a Response over Encrypted Transport</name>

<t>When a response <spanx style="verb">R</spanx> for query <spanx style="verb">Q</spanx> arrives at the recursive resolver over encrypted transport <spanx style="verb">E</spanx> from authoritative server with IP address <spanx style="verb">X</spanx> at time <spanx style="verb">T5</spanx>, the recursive resolver should:</t>

<t>If <spanx style="verb">Q</spanx> is not in <spanx style="verb">E-queries[X]</spanx>:</t>

<t><list style="symbols">
  <t>Discard <spanx style="verb">R</spanx> and process it no further (do not respond to a encrypted response to a query that is not outstanding)</t>
</list></t>

<t>Otherwise:</t>

<t><list style="symbols">
  <t>Remove <spanx style="verb">Q</spanx> from <spanx style="verb">E-queries[X]</spanx></t>
  <t>Set <spanx style="verb">E-last-activity[X]</spanx> to <spanx style="verb">T5</spanx></t>
  <t>Set <spanx style="verb">E-last-response[X]</spanx> to <spanx style="verb">T5</spanx></t>
</list></t>

<t>If <spanx style="verb">R</spanx> is successful:</t>

<t><list style="symbols">
  <t>Return <spanx style="verb">R</spanx> to the requesting client</t>
  <t>For each supported encrypted transport <spanx style="verb">N</spanx> other than <spanx style="verb">E</spanx>:
  <list style="symbols">
      <t>If <spanx style="verb">Q</spanx> is in <spanx style="verb">N-queries[X]</spanx>:
      <list style="symbols">
          <t>Remove <spanx style="verb">Q</spanx> from <spanx style="verb">N-queries[X]</spanx></t>
        </list></t>
    </list></t>
  <t>If <spanx style="verb">Q</spanx> is in <spanx style="verb">Do53-queries[X]</spanx>:
  <list style="symbols">
      <t>Remove <spanx style="verb">Q</spanx> from <spanx style="verb">Do53-queries[X]</spanx></t>
    </list></t>
</list></t>

<t>But if <spanx style="verb">R</spanx> is unsuccessful (e.g. <spanx style="verb">SERVFAIL</spanx>):</t>

<t><list style="symbols">
  <t>If <spanx style="verb">Q</spanx> is not in <spanx style="verb">Do53-queries[X]</spanx> or in any of <spanx style="verb">*-queries[X]</spanx>:
  <list style="symbols">
      <t>Return <spanx style="verb">SERVFAIL</spanx> to the requesting client</t>
    </list></t>
</list></t>

<!--
FIXME: What response should be sent to the client in the case that an extended DNS error (RFC 8914) is offered in an authoritative's response?
Paul says: Commented this out. It is unrelated to encryption between a recursive resolver and an anuthoritative server.
-->

</section>
<section anchor="recursive-resource-exhaustion"><name>Resource Exhaustion</name>

<t>To keep resources under control, a recursive resolver should proactively manage outstanding encrypted connections.
Section 6.5 of <xref target="RFC9250"/> ("Connection Handling") offers useful guidance for clients managing DoQ connections.
Section 3.4 of <xref target="RFC7858"/> offers useful guidance for clients managing DoT connections.</t>

<t>Even with sensible connection management, a recursive resolver doing unilateral probing may find resources unexpectedly scarce, and may need to close some outstanding connections.</t>

<t>In such a situation, the recursive resolver <bcp14>SHOULD</bcp14> use a reasonable prioritization scheme to close outstanding connections.</t>

<t>One reasonable prioritization scheme would be:</t>

<t><list style="symbols">
  <t>close outstanding <spanx style="verb">established</spanx> sessions based on <spanx style="verb">E-last-activity[X]</spanx> (oldest timestamp gets closed first)</t>
</list></t>

<t>Note that when resources are limited, a recursive resolver following this guidance may also choose not to initiate new connections for encrypted transport.</t>

</section>
<section anchor="maintaining-connections"><name>Maintaining Connections</name>

<t>Some recursive resolvers looking to amortize connection costs, and to minimize latency <bcp14>MAY</bcp14> choose to synthesize queries to a particular resolver to keep a encrypted transport session active.</t>

<t>A recursive resolver that adopts this approach should try to align the synthesized queries with other optimizations.
For example, a recursive resolver that "pre-fetches" a particular resource record to keep its cache "hot" can send that query over an established encrypted transport session.</t>

</section>
<section anchor="additional-tuning"><name>Additional Tuning</name>

<t>A recursive resolver's state table for an authoritative server can contain additional information beyond what is described above.
The recursive resolver might use that additional state to change the way it interacts with the authoritative server in the future.
Some examples of additional state include:</t>

<t><list style="symbols">
  <t>Whether the server accepts "early data" over a transport such as DoQ</t>
  <t>Whether the server fails to respond to queries after the handshake succeeds:</t>
  <t>Track the RTT (round trip time) of queries to the server</t>
  <t>Track the number of timeouts (compared to the number of successful queries)</t>
</list></t>

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

<t>IANA does not need to do anything for implementers to adopt the guidance found in this document.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<section anchor="sni-considerations"><name>Server Name Indication</name>

<t>A recursive resolver querying an authoritative server over DoT or DoQ that sends Server Name Indication (SNI) in the clear in the cryptographic handshake leaks information about the intended query to a passive network observer.</t>

<t>In particular, if two different zones refer to the same nameserver IP addresses via differently-named NS records, a passive network observer can distinguish queries to one zone from the queries to the other.</t>

<t>Omitting SNI entirely, or using Encrypted Client Hello to hide the intended SNI, avoids this additional leakage.
However, a series of queries that leak this information is still an improvement over the all-cleartext status quo at the time of this document.</t>

</section>
<section anchor="modelling-probability-of-encryption"><name>Modelling Probability of Encryption</name>

<t>Given that there are many parameter choices that can be made by recursive resolvers and authoritative servers, it is reasonable to ask what is the probability that queries are being encrypted.
The resulting measurement would also certainly be affected by the types of queries being sent by the recursive resolver, which in turn is also related to the types of queries that are sent to the recursive resolver by the stub resolvers and forwarders downstream.
Doing this type of research would be valuable to the DNS community after initial implementation by a variety of recursive resolvers and authoritative servers because it would help assess the value of implementing the protocol.</t>

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

<t>The guidance in this document provides defense against passive network monitors for most queries.
It does not defend against active attackers.
It can also leak some queries and their responses due to "happy eyeballs" optimizations when the resolver's cache is cold.</t>

<t>Implementation of the guidance in this document should increase deployment of opportunistic encrypted DNS transport between recursive resolvers and authoritative servers at little operational risk.</t>

<t>However, implementers cannot rely on the guidance in this document for robust defense against active attackers, but should treat it as a stepping stone en route to stronger defense.</t>

<t>In particular, a recursive resolver following this guidance can easily be forced by an active attacker to fall back to cleartext DNS queries.
Or, an active attacker could position itself as a machine-in-the-middle, which the recursive resolver would not defend against or detect due to lack of server authentication.
Defending against these attacks without risking additional unexpected protocol failures would require signalling and coordination that are out of scope for this document.</t>

<t>This guidance is only one part of operating a privacy-preserving DNS ecosystem.
A privacy-preserving recursive resolver should adopt other practices as well, such as QNAME minimization (<xref target="RFC9156"/>), local root zone (<xref target="RFC8806"/>), etc, to reduce the overall leakage of query information that could infringe on the client's privacy.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Many people contributed to the development of this document beyond the authors, including
Alexander Mayrhofer,
Brian Dickson,
Christian Huitema,
Eric Nygren,
Jim Reid,
Kris Shrishak,
Ralf Weber,
Robert Evans,
Sara Dickinson,
and the DPRIVE working group.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC2119' xml:base='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml'>
  <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' xml:base='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml'>
  <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='RFC7301'>
<front>
<title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
<author fullname='S. Friedl' initials='S.' surname='Friedl'><organization/></author>
<author fullname='A. Popov' initials='A.' surname='Popov'><organization/></author>
<author fullname='A. Langley' initials='A.' surname='Langley'><organization/></author>
<author fullname='E. Stephan' initials='E.' surname='Stephan'><organization/></author>
<date month='July' year='2014'/>
<abstract><t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t></abstract>
</front>
<seriesInfo name='RFC' value='7301'/>
<seriesInfo name='DOI' value='10.17487/RFC7301'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC7435'>
<front>
<title>Opportunistic Security: Some Protection Most of the Time</title>
<author fullname='V. Dukhovni' initials='V.' surname='Dukhovni'><organization/></author>
<date month='December' year='2014'/>
<abstract><t>This document defines the concept &quot;Opportunistic Security&quot; in the context of communications protocols.  Protocol designs based on Opportunistic Security use encryption even when authentication is not available, and use authentication when possible, thereby removing barriers to the widespread use of encryption on the Internet.</t></abstract>
</front>
<seriesInfo name='RFC' value='7435'/>
<seriesInfo name='DOI' value='10.17487/RFC7435'/>
</reference>

<reference anchor='RFC1035' xml:base='https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml'>
  <front>
    <title>Domain names - implementation and specification</title>
    <author fullname='P. Mockapetris' initials='P.' surname='Mockapetris'/>
    <date month='November' year='1987'/>
    <abstract>
      <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System.  It obsoletes RFC-883.  This memo documents the details of the domain name client - server communication.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='13'/>
  <seriesInfo name='RFC' value='1035'/>
  <seriesInfo name='DOI' value='10.17487/RFC1035'/>
</reference>


<reference anchor='RFC9250'>
<front>
<title>DNS over Dedicated QUIC Connections</title>
<author fullname='C. Huitema' initials='C.' surname='Huitema'><organization/></author>
<author fullname='S. Dickinson' initials='S.' surname='Dickinson'><organization/></author>
<author fullname='A. Mankin' initials='A.' surname='Mankin'><organization/></author>
<date month='May' year='2022'/>
<abstract><t>This document describes the use of QUIC to provide transport confidentiality for DNS. The encryption provided by QUIC has similar properties to those provided by TLS, while QUIC transport eliminates the head-of-line blocking issues inherent with TCP and provides more efficient packet-loss recovery than UDP. DNS over QUIC (DoQ) has privacy properties similar to DNS over TLS (DoT) specified in RFC 7858, and latency characteristics similar to classic DNS over UDP. This specification describes the use of DoQ as a general-purpose transport for DNS and includes the use of DoQ for stub to recursive, recursive to authoritative, and zone transfer scenarios.</t></abstract>
</front>
<seriesInfo name='RFC' value='9250'/>
<seriesInfo name='DOI' value='10.17487/RFC9250'/>
</reference>



<reference anchor='RFC7858'>
<front>
<title>Specification for DNS over Transport Layer Security (TLS)</title>
<author fullname='Z. Hu' initials='Z.' surname='Hu'><organization/></author>
<author fullname='L. Zhu' initials='L.' surname='Zhu'><organization/></author>
<author fullname='J. Heidemann' initials='J.' surname='Heidemann'><organization/></author>
<author fullname='A. Mankin' initials='A.' surname='Mankin'><organization/></author>
<author fullname='D. Wessels' initials='D.' surname='Wessels'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<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'>
<front>
<title>DNS Queries over HTTPS (DoH)</title>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<author fullname='P. McManus' initials='P.' surname='McManus'><organization/></author>
<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>



<reference anchor='RFC7830'>
<front>
<title>The EDNS(0) Padding Option</title>
<author fullname='A. Mayrhofer' initials='A.' surname='Mayrhofer'><organization/></author>
<date month='May' year='2016'/>
<abstract><t>This document specifies the EDNS(0) &quot;Padding&quot; option, which allows DNS clients and servers to pad request and response messages by a variable number of octets.</t></abstract>
</front>
<seriesInfo name='RFC' value='7830'/>
<seriesInfo name='DOI' value='10.17487/RFC7830'/>
</reference>



<reference anchor='RFC8467'>
<front>
<title>Padding Policies for Extension Mechanisms for DNS (EDNS(0))</title>
<author fullname='A. Mayrhofer' initials='A.' surname='Mayrhofer'><organization/></author>
<date month='October' year='2018'/>
<abstract><t>RFC 7830 specifies the &quot;Padding&quot; option for Extension Mechanisms for DNS (EDNS(0)) but does not specify the actual padding length for specific applications.  This memo lists the possible options (&quot;padding policies&quot;), discusses the implications of each option, and provides a recommended (experimental) option.</t></abstract>
</front>
<seriesInfo name='RFC' value='8467'/>
<seriesInfo name='DOI' value='10.17487/RFC8467'/>
</reference>



<reference anchor='RFC8305'>
<front>
<title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
<author fullname='D. Schinazi' initials='D.' surname='Schinazi'><organization/></author>
<author fullname='T. Pauly' initials='T.' surname='Pauly'><organization/></author>
<date month='December' year='2017'/>
<abstract><t>Many communication protocols operating over the modern Internet use hostnames.  These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics.  Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as &quot;Happy Eyeballs&quot;.  This document obsoletes the original algorithm description in RFC 6555.</t></abstract>
</front>
<seriesInfo name='RFC' value='8305'/>
<seriesInfo name='DOI' value='10.17487/RFC8305'/>
</reference>


<reference anchor='I-D.ietf-tls-esni'>
   <front>
      <title>TLS Encrypted Client Hello</title>
      <author fullname='Eric Rescorla' initials='E.' surname='Rescorla'>
         <organization>RTFM, Inc.</organization>
      </author>
      <author fullname='Kazuho Oku' initials='K.' surname='Oku'>
         <organization>Fastly</organization>
      </author>
      <author fullname='Nick Sullivan' initials='N.' surname='Sullivan'>
         <organization>Cloudflare</organization>
      </author>
      <author fullname='Christopher A. Wood' initials='C. A.' surname='Wood'>
         <organization>Cloudflare</organization>
      </author>
      <date day='3' month='October' year='2022'/>
      <abstract>
	 <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-tls-esni-15'/>
   
</reference>



<reference anchor='RFC7766'>
<front>
<title>DNS Transport over TCP - Implementation Requirements</title>
<author fullname='J. Dickinson' initials='J.' surname='Dickinson'><organization/></author>
<author fullname='S. Dickinson' initials='S.' surname='Dickinson'><organization/></author>
<author fullname='R. Bellis' initials='R.' surname='Bellis'><organization/></author>
<author fullname='A. Mankin' initials='A.' surname='Mankin'><organization/></author>
<author fullname='D. Wessels' initials='D.' surname='Wessels'><organization/></author>
<date month='March' year='2016'/>
<abstract><t>This document specifies the requirement for support of TCP as a transport protocol for DNS implementations and provides guidelines towards DNS-over-TCP performance on par with that of DNS-over-UDP. This document obsoletes RFC 5966 and therefore updates RFC 1035 and RFC 1123.</t></abstract>
</front>
<seriesInfo name='RFC' value='7766'/>
<seriesInfo name='DOI' value='10.17487/RFC7766'/>
</reference>



<reference anchor='RFC9156'>
<front>
<title>DNS Query Name Minimisation to Improve Privacy</title>
<author fullname='S. Bortzmeyer' initials='S.' surname='Bortzmeyer'><organization/></author>
<author fullname='R. Dolmans' initials='R.' surname='Dolmans'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<date month='November' year='2021'/>
<abstract><t>This document describes a technique called &quot;QNAME minimisation&quot; to improve DNS privacy, where the DNS resolver no longer always sends the full original QNAME and original QTYPE to the upstream name server. This document obsoletes RFC 7816.</t></abstract>
</front>
<seriesInfo name='RFC' value='9156'/>
<seriesInfo name='DOI' value='10.17487/RFC9156'/>
</reference>



<reference anchor='RFC8806'>
<front>
<title>Running a Root Server Local to a Resolver</title>
<author fullname='W. Kumari' initials='W.' surname='Kumari'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<date month='June' year='2020'/>
<abstract><t>Some DNS recursive resolvers have longer-than-desired round-trip times to the closest DNS root server; those resolvers may have difficulty getting responses from the root servers, such as during a network attack. Some DNS recursive resolver operators want to prevent snooping by third parties of requests sent to DNS root servers. In both cases, resolvers can greatly decrease the round-trip time and prevent observation of requests by serving a copy of the full root zone on the same server, such as on a loopback address or in the resolver software. This document shows how to start and maintain such a copy of the root zone that does not cause problems for other users of the DNS, at the cost of adding some operational fragility for the operator.</t><t>This document obsoletes RFC 7706.</t></abstract>
</front>
<seriesInfo name='RFC' value='8806'/>
<seriesInfo name='DOI' value='10.17487/RFC8806'/>
</reference>



<reference anchor='MTA-STS'>
<front>
<title>SMTP MTA Strict Transport Security (MTA-STS)</title>
<author fullname='D. Margolis' initials='D.' surname='Margolis'><organization/></author>
<author fullname='M. Risher' initials='M.' surname='Risher'><organization/></author>
<author fullname='B. Ramakrishnan' initials='B.' surname='Ramakrishnan'><organization/></author>
<author fullname='A. Brotman' initials='A.' surname='Brotman'><organization/></author>
<author fullname='J. Jones' initials='J.' surname='Jones'><organization/></author>
<date month='September' year='2018'/>
<abstract><t>SMTP MTA Strict Transport Security (MTA-STS) is a mechanism enabling mail service providers (SPs) to declare their ability to receive Transport Layer Security (TLS) secure SMTP connections and to specify whether sending SMTP servers should refuse to deliver to MX hosts that do not offer TLS with a trusted server certificate.</t></abstract>
</front>
<seriesInfo name='RFC' value='8461'/>
<seriesInfo name='DOI' value='10.17487/RFC8461'/>
</reference>



<reference anchor='DANE-SMTP'>
<front>
<title>SMTP Security via Opportunistic DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS)</title>
<author fullname='V. Dukhovni' initials='V.' surname='Dukhovni'><organization/></author>
<author fullname='W. Hardaker' initials='W.' surname='Hardaker'><organization/></author>
<date month='October' year='2015'/>
<abstract><t>This memo describes a downgrade-resistant protocol for SMTP transport security between Message Transfer Agents (MTAs), based on the DNS-Based Authentication of Named Entities (DANE) TLSA DNS record. Adoption of this protocol enables an incremental transition of the Internet email backbone to one using encrypted and authenticated Transport Layer Security (TLS).</t></abstract>
</front>
<seriesInfo name='RFC' value='7672'/>
<seriesInfo name='DOI' value='10.17487/RFC7672'/>
</reference>



<reference anchor='TLSRPT'>
<front>
<title>SMTP TLS Reporting</title>
<author fullname='D. Margolis' initials='D.' surname='Margolis'><organization/></author>
<author fullname='A. Brotman' initials='A.' surname='Brotman'><organization/></author>
<author fullname='B. Ramakrishnan' initials='B.' surname='Ramakrishnan'><organization/></author>
<author fullname='J. Jones' initials='J.' surname='Jones'><organization/></author>
<author fullname='M. Risher' initials='M.' surname='Risher'><organization/></author>
<date month='September' year='2018'/>
<abstract><t>A number of protocols exist for establishing encrypted channels between SMTP Mail Transfer Agents (MTAs), including STARTTLS, DNS- Based Authentication of Named Entities (DANE) TLSA, and MTA Strict Transport Security (MTA-STS).  These protocols can fail due to misconfiguration or active attack, leading to undelivered messages or delivery over unencrypted or unauthenticated channels.  This document describes a reporting mechanism and format by which sending systems can share statistics and specific information about potential failures with recipient domains.  Recipient domains can then use this information to both detect potential attacks and diagnose unintentional misconfigurations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8460'/>
<seriesInfo name='DOI' value='10.17487/RFC8460'/>
</reference>


<reference anchor='DNS-Error-Reporting'>
   <front>
      <title>DNS Error Reporting</title>
      <author fullname='Roy Arends' initials='R.' surname='Arends'>
         <organization>ICANN</organization>
      </author>
      <author fullname='Matt Larson' initials='M.' surname='Larson'>
         <organization>ICANN</organization>
      </author>
      <date day='3' month='February' year='2023'/>
      <abstract>
	 <t>   DNS error reporting is a lightweight reporting mechanism that
   provides the operator of an authoritative server with reports on DNS
   resource records that fail to resolve or validate.  A domain owner or
   DNS hosting organization can use these reports to improve domain
   hosting.  The reports are based on extended DNS errors as described
   in RFC 8914.

   When a domain name fails to resolve or validate due to a
   misconfiguration or an attack, the operator of the authoritative
   server may be unaware of this.  To mitigate this lack of feedback,
   this document describes a method for a validating recursive resolver
   to automatically signal an error to a monitoring agent specified by
   the authoritative server.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-dnsop-dns-error-reporting-04'/>
   
</reference>



<reference anchor='RFC9102'>
<front>
<title>TLS DNSSEC Chain Extension</title>
<author fullname='V. Dukhovni' initials='V.' surname='Dukhovni'><organization/></author>
<author fullname='S. Huque' initials='S.' surname='Huque'><organization/></author>
<author fullname='W. Toorop' initials='W.' surname='Toorop'><organization/></author>
<author fullname='P. Wouters' initials='P.' surname='Wouters'><organization/></author>
<author fullname='M. Shore' initials='M.' surname='Shore'><organization/></author>
<date month='August' year='2021'/>
<abstract><t>This document describes an experimental TLS extension for the in-band transport of the complete set of records that can be validated by DNSSEC and that are needed to perform DNS-Based Authentication of Named Entities (DANE) of a TLS server. This extension obviates the need to perform separate, out-of-band DNS lookups.  When the requisite DNS records do not exist, the extension conveys a denial-of-existence proof that can be validated.</t><t>This experimental extension is developed outside the IETF and is published here to guide implementation of the extension and to ensure interoperability among implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='9102'/>
<seriesInfo name='DOI' value='10.17487/RFC9102'/>
</reference>




    </references>


<section anchor="adding-auth"><name>Defense Against Active Attackers</name>

<t>The protocol described in this document provides no defense against active attackers.
A future protocol for recursive-to-authoritative DNS might want to provide such protection.</t>

<t>This appendix assumes that the use case for that future protocol is a recursive resolver that wants to prevent an active attack on communication between it and an authoritative server that has committed to offering encrypted DNS transport.
An inherent part of this use case is that the recursive resolver would want to respond with a <spanx style="verb">SERVFAIL</spanx> response to its client if it cannot make an authenticated encrypted connection to any of the authoritative nameservers for a name.</t>

<t>However, an authoritative server that merely offers encrypted transport (for example, by following the guidance in <xref target="authoritative-guidance"/>) has made no such commitment, and no recursive resolver that prioritizes delivery of DNS records to its clients would want to "fail closed" unilaterally.</t>

<t>So such a future protocol would need at least three major distinctions from the protocol described in this document:</t>

<t><list style="symbols">
  <t>A signaling mechanism that tells the resolver that the authoritative server intends to offer authenticated encryption</t>
  <t>Authentication of the authoritative server</t>
  <t>A way to combine defense against an active attacker with the defenses described in this document</t>
</list></t>

<t>This can be thought of as a DNS analog to <xref target="MTA-STS"/> or <xref target="DANE-SMTP"/>.</t>

<section anchor="signalling-mechanism-properties"><name>Signalling Mechanism Properties</name>

<t>To defend against an active attacker, the signalling mechanism needs to be able to indicate that the recursive resolver should "fail closed" if it cannot authenticate the server for a particular query.</t>

<t>The signalling mechanism itself would have to be resistant to downgrade attacks from active attackers.</t>

<t>One open question is how such a signal should be scoped.
While this document scopes opportunistic state about encrypted transport based on the IP addresses of the client and server, signalled intent to offer encrypted transport is more likely to be scoped by queried zone in the DNS, or by nameserver name than by IP address.</t>

<t>A reasonable authoritative server operator or zone administrator probably doesn't want to risk breaking anything when they first enable the signal.
Therefore, a signalling mechanism should probably also offer a means to report problems to the authoritative server operator without the client failing closed.
Such a mechanism is likely to be similar to <xref target="TLSRPT"/> or <xref target="DNS-Error-Reporting"/>.</t>

</section>
<section anchor="authentication-of-authoritative-server"><name>Authentication of Authoritative Server</name>

<t>Forms of server authentication might include:</t>

<t><list style="symbols">
  <t>an X.509 Certificate issued by a widely-known certification authority associated with the common NS names used for this authoritative server</t>
  <t>DANE authentication (to avoid infinite recursion, the DNS records necessary to authenticate could be transmitted in the TLS handshake using the DNSSEC Chain Extension (see <xref target="RFC9102"/>))</t>
</list></t>

<t>A recursive resolver would have to verify the server's identity.
When doing so, the identity would presumably be based on the NS name used for a given query or the IP address of the server.</t>

</section>
<section anchor="combining-protocols"><name>Combining Protocols</name>

<t>If this protocol gains reasonable adoption, and a newer protocol that can offer defense against an active attacker were available, deployment is likely to be staggered and incomplete.
This means that an operator that want to maximize confidentiality for their users will want to use both protocols together.</t>

<t>Any new stronger protocol should consider how it interacts with the opportunistic protocol defined here, so that operators are not faced with the choice between widespread opportunistic protection against passive attackers (this document) and more narrowly-targeted protection against active attackers.</t>

</section>
</section>
<section anchor="document-considerations"><name>Document Considerations</name>

<t>[ RFC Editor: please remove this section before publication ]</t>

<section anchor="document-history"><name>Document History</name>

<section anchor="substantive-changes-from-02-to-03"><name>Substantive Changes from -02 to -03</name>

<t><list style="symbols">
  <t>Added an Additional Tuning section on recursive resolvers recording other data about an authoritative server's capabilities for future interactions (thank you again Sara Dickinson!).
Feedback from operators on how the extra information would be used by a recursive resolver that retains such an expanded state table is particularly welcome.</t>
  <t>Added more text about sharing session state information.</t>
  <t>Added section on modelling the probability of encryption as a future task.</t>
</list></t>

</section>
<section anchor="substantive-changes-from-01-to-02"><name>Substantive Changes from -01 to -02</name>

<t><list style="symbols">
  <t>Removed EDNS Client Subnet recommendations from the probing policy: recursive resolvers implementing the guidance provided in this draft intend to enhance privacy for their users' queries, and although ECS is a valuable feature, it represents a privacy risk. Therefore, a future document encompassing a "how to add privacy" approach could serve for better discussion on this discrepancy (thank you Puneet Sood!).</t>
  <t>Added text on padding queries and responses to mitigate traffic analysis (thank you Sara Dickinson!).</t>
  <t>Put draft on standards track</t>
</list></t>

</section>
<section anchor="substantive-changes-from-00-to-01"><name>Substantive Changes from -00 to -01</name>

<t><list style="symbols">
  <t>Moved discussion of non-opportunistic encryption to an appendix</t>
  <t>Clarify state transitions when sending over encrypted transport</t>
  <t>Introduced new field <spanx style="verb">E-last-response[X]</spanx> for comparison with persistence</t>
</list></t>

</section>
<section anchor="substantive-changes-from-01-to-02-now-draft-ietf-dprive-unilateral-probing-00"><name>Substantive Changes from -01 to -02 (now draft-ietf-dprive-unilateral-probing-00)</name>

<t><list style="symbols">
  <t>Clarify that deployment to a pool does not need to be strictly simultaneous</t>
  <t>Explain why authoritatives need to serve the same records regardless of SNI</t>
  <t>Defer to external, protocol-specific references for resource management</t>
  <t>Clarify that probed connections must not fail due to authentication failure</t>
</list></t>

</section>
<section anchor="draft-dkgjsal-dprive-unilateral-probing-substantive-changes-from-00-to-01"><name>draft-dkgjsal-dprive-unilateral-probing Substantive Changes from -00 to -01</name>

<t><list style="symbols">
  <t>Fallback to cleartext when encrypted transport fails.</t>
  <t>Reduce default <spanx style="verb">timeout</spanx> to 4s</t>
  <t>Clarify SNI guidance: OK for selecting server credentials, not OK for changing answers</t>
  <t>Document ALPN and port numbers</t>
  <t>Justify sorting recursive resolver state by authoritative IP address</t>
</list></t>

</section>
</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+1963bj1rHmfz4FjvLD0lkkrb75okniyJI6raRb3Zbk2F6Z
rCFIbJJwgwADgGIzTr/LeZZ5sqmvqvYFICCpc7xm5sya/HDUILCvtevy1WWP
RqNBndaZOYm+z9Msrk0ZZ9Hb9boo602eVnU6i87NOit2K5PXUTGPLvJZuVvX
JomuzWxTVumdGdXF6HRTL4syreOaHkTnVzeDeDotzV2jXf/t/utJMcvjFY0j
KeN5PUpNPR8l6xLNb1wLo3VZTNN8MTp+NpjRo0VR7k6iqk4Gg3RdnkR1uanq
p8fHXx8/HcSliU+iNK8H26J8vyiLzZoa5xYH782OHiYn0WVO7eamHp2j10G1
ma7SqkqL/Ha3prFcXty+HNyZfGNOBlGkbRycv7u+/MvFAT2p+a2DH6gDGlX0
R7yA56s4zeh5klcjdBjPdn/AhMZFucDPcTlb0s/Lul5XJ59/jrfxiEY2tq99
jgefT8tiW5nPg3Y+x/elWRfB9wvawHg6nhWrz5P3i897Vw2f4lFVBx/TF2Nt
IC36v6V+B1Ud58n/iLMip0nvTDUYxLyNWJtRRP+JaLmrk+h8HP15HP0xzbJV
UfJj2dnzOE9NFv05XuaNX2m6J9HpypTpLM6js/QuzaLX6dSUdWoq0E+R83tV
XRpDY3/y9EX0bVnESXRTj/mXWVoTHVyZbfQTbcUwuvpJHhcJdfvk+Pj4uf57
k9egmO9vTvmBpdHTs9ff8wMjO0eL8od5Oq+XNLuKnuVjohF+oSxwVkyS1jz4
kZ/1n8bRTZzF/4jDKf+pMLvGYxnpaRb/vDFZHIzy6fHT4yfNUZ5dh2P6mZpa
VHH2hwX+jd1+YEDvxtGrYj6n0QcDehdvssZjXvzLs9Orq+4l0t7X9N14Kd/9
AfuUg0r3R5Dm86Jc8bE+GeT+z9FoRKtNOxjP6sHgdplWEZ34DXOVytRVVGzo
j9qsq6hexjVYAj0v70xZRYel5TRE+VWR8UMixShucBF9/SgCFdXxexN5Ms52
0eE2pbeplzjf0TTp+Kc5fVjkEX6IinppymhtuIW6iBIzN9QFxvH3jSl3kR7A
KF7EtLzUDK1JxYMi2gCLiVZFjjUY0/SMziWlkTTmirFNDbcegxFOqcE8okVB
Q3Fdx7P3phxGU6wGjTZL8HaVrtYZjQ5zzkxVRWVavd/JKMGbsWQ5dV+aaF1s
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
tlYnYsIna9oilUCNHvwvpVJ+j6msAAA=

-->

</rfc>

