One document matched: draft-ietf-dprive-dnsodtls-02.xml
<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-dprive-dnsodtls-02" ipr="trust200902">
<front>
<title abbrev="DNS over DTLS (DNSoD)">DNS over DTLS (DNSoD)</title>
<author fullname="Tirumaleswar Reddy" initials="T." surname="Reddy">
<organization abbrev="Cisco">Cisco Systems, Inc.</organization>
<address>
<postal>
<street>Cessna Business Park, Varthur Hobli</street>
<street>Sarjapur Marathalli Outer Ring Road</street>
<city>Bangalore</city>
<region>Karnataka</region>
<code>560103</code>
<country>India</country>
</postal>
<email>tireddy@cisco.com</email>
</address>
</author>
<author fullname="Dan Wing" initials="D." surname="Wing">
<organization abbrev="Cisco">Cisco Systems, Inc.</organization>
<address>
<postal>
<street>170 West Tasman Drive</street>
<city>San Jose</city>
<region>California</region>
<code>95134</code>
<country>USA</country>
</postal>
<email>dwing@cisco.com</email>
</address>
</author>
<author fullname="Prashanth Patil" initials="P." surname="Patil">
<organization abbrev="Cisco">Cisco Systems, Inc.</organization>
<address>
<postal>
<street></street>
<street></street>
<city>Bangalore</city>
<country>India</country>
</postal>
<email>praspati@cisco.com</email>
</address>
</author>
<date />
<workgroup>DPRIVE</workgroup>
<abstract>
<t>DNS queries and responses are visible to network elements on the path
between the DNS client and its server. These queries and responses can
contain privacy-sensitive information which is valuable to protect. An
active attacker can send bogus responses causing misdirection of the
subsequent connection.</t>
<t>To counter passive listening and active attacks, this document
proposes the use of Datagram Transport Layer Security (DTLS) for DNS, to
protect against passive listeners and certain active attacks. As DNS
needs to remain fast, this proposal also discusses mechanisms to reduce
DTLS round trips and reduce DTLS handshake size. The proposed mechanism
runs over port 853.</t>
</abstract>
</front>
<middle>
<section anchor="introduction" title="Introduction">
<t>The Domain Name System is specified in <xref target="RFC1034"></xref>
and <xref target="RFC1035"></xref>. DNS queries and responses are
normally exchanged unencrypted and are thus vulnerable to eavesdropping.
Such eavesdropping can result in an undesired entity learning domains
that a host wishes to access, thus resulting in privacy leakage. DNS
privacy problem is further discussed in <xref
target="I-D.bortzmeyer-dnsop-dns-privacy"></xref>.</t>
<t>Active attackers have long been successful at injecting bogus
responses, causing cache poisoning and causing misdirection of the
subsequent connection (if attacking A or AAAA records). A popular
mitigation against that attack is to use ephemeral and random source
ports for DNS queries <xref target="RFC5452"></xref>.</t>
<t>This document defines DNS over DTLS (DNSoD, pronounced "dee-enn-sod")
which provides confidential DNS communication for stub resolvers,
recursive resolvers, iterative resolvers and authoritative servers.</t>
<t>The motivations for proposing DNSoD are that</t>
<t><list style="symbols">
<t>TCP suffers from network head-of-line blocking, where the loss of
a packet causes all other TCP segments to not be delivered to the
application until the lost packet is re-transmitted. DNSoD, because
it uses UDP, does not suffer from network head-of-line blocking.</t>
<t>DTLS session resumption consumes 1 round trip whereas TLS session
resumption can start only after TCP handshake is complete. Although
<xref target="RFC7413">TCP Fast Open </xref> can reduce that
handshake, TCP Fast Open is not yet available in
commercially-popular operating systems.</t>
</list></t>
</section>
<section title="Relationship to TCP Queries and to DNSSEC">
<t>DNS queries can be sent over UDP or TCP. The scope of this document,
however, is only UDP. DNS over TCP could be protected with TLS, as
described in <xref target="I-D.ietf-dprive-dns-over-tls"></xref>.
Alternatively, a shim protocol could be defined between DTLS and DNS,
allowing large responses to be sent over DTLS itself, see <xref
target="performance"></xref>.</t>
<t>DNS Security Extensions (<xref target="RFC4033">DNSSEC</xref>)
provides object integrity of DNS resource records, allowing end-users
(or their resolver) to verify legitimacy of responses. However, DNSSEC
does not protect privacy of DNS requests or responses. DNSoD works in
conjunction with DNSSEC, but DNSoD does not replace the need or value of
DNSSEC.</t>
</section>
<section title="Common problems with DNS Privacy">
<t>This section describes problems common to any DNS privacy solution.
To achieve DNS privacy an encrypted and integrity-protected channel is
needed between the client and server. This channel can be blocked, and
the client needs to react to such blockages.</t>
<section title="Firewall Blocking Ports or DNS Privacy Protocol">
<t>When sending DNS over an encrypted channel, there are two choices:
send the encrypted traffic over the DNS ports (UDP 53, TCP 53) or send
the encrypted traffic over a different port. The encrypted traffic is
not normal DNS traffic, but rather is a cryptographic handshake
followed by encrypted payloads. There can be firewalls, other security
devices, or intercepting DNS proxies which block the non-DNS traffic
or otherwise react negatively (e.g., quarantining the host for
suspicious behavior). Alternatively, if a different port is used for
the encrypted traffic, a firewall or other security device might block
that port or otherwise react negatively.</t>
<t>There is no panacea, and only experiments on the Internet will
uncover which technique or combination of techniques will work best.
This document describes using DNSoD on a well-known port.</t>
</section>
<section title="Authenticating the DNS Privacy Server">
<t>DNS privacy requires encrypting the query (and response) from
passive attacks. Such encryption typically provides integrity
protection as a side-effect, which means on-path attackers cannot
simply inject bogus DNS responses. However, to provide stronger
protection from active attackers pretending to be the server, the
server itself needs to be authenticated.</t>
<t>To authenticate the server providing DNS privacy, the DNS client
needs to be configured with the names or IP addresses of those DNS
privacy servers. The server certificate MUST contain DNS-ID
(subjectAltName) as described in Section 4.1 of <xref
target="RFC6125"></xref>. DNS names and IP addresses can be contained
in the subjectAltName entries. The client MUST use the rules and
guidelines given in section 6 of <xref target="RFC6125"></xref> to
validate the DNS server identity.</t>
<figure>
<preamble>We imagine this could be implemented by adding the
certificate name to the /etc/resolv.conf file, such as
below:</preamble>
<artwork align="left"><![CDATA[
nameserver 8.8.8.8
certificate google-public-dns.google.com
nameserver 208.67.220.220
certificate resolver.opendns.com
]]></artwork>
</figure>
<t>For DNS privacy servers that don't have a certificate trust chain
(e.g., because they are on a home network or a corporate network), the
configured list of DNS privacy servers can contain the Subject Public
Key Info (SPKI) fingerprint of the DNS privacy server (i.e., a simple
whitelist of name and SPKI fingerprint). The public key is used for
the same reasons HTTP pinning <xref target="RFC7469"></xref> uses the
public key. Raw public key-based authentication mechanism defined in
<xref target="RFC7250"></xref> can be also used to authenticate the
DNS server.</t>
<figure>
<preamble>We imagine this could be implemented by adding the SPKI
fingerprint to the /etc/resolv.conf file, such as below (line split
for Internet Draft formatting):</preamble>
<artwork><![CDATA[
nameserver 192.168.1.1
sha256 : "d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM="]]></artwork>
</figure>
<t>The only algorithm considered at this time is "sha256", i.e., the
hash algorithm SHA256 <xref target="RFC6234"></xref>; additional
algorithms may be allowed for use in this context in the future. The
quoted-string is a sequence of base 64 digits: the base64-encoded SPKI
Fingerprint <xref target="RFC4648"></xref>.</t>
</section>
<section title="Downgrade attacks">
<t>Using DNS privacy with an authenticated server is most preferred,
DNS privacy with an unauthenticated server is next preferred, and
plain DNS is least preferred. This section gives a non-normative
discussion on common behaviors and choices.</t>
<t>An implementation MAY attempt to obtain DNS privacy by contacting
DNS servers on the local network (provided by DHCP) and on the
Internet, and make those attempts in parallel to reduce user impact.
If DNS privacy cannot be successfully negotiated for whatever reason,
the client can do three things: <list style="numbers">
<t>refuse to send DNS queries on this network, which means the
client cannot make effective use of this network, as modern
networks require DNS; or,</t>
<t>use opportunistic security, as described in <xref
target="RFC7435"></xref>. or,</t>
<t>send plain DNS queries on this network, which means no DNS
privacy is provided.</t>
</list></t>
<t>Heuristics can improve this situation, but only to a degree (e.g.,
previous success of DNS privacy on this network may be reason to alert
the user about failure to establish DNS privacy on this network now).
Still, the client (in cooperation with the end user) has to decide to
use the network without the protection of DNS privacy.</t>
</section>
</section>
<section anchor="term" title="Terminology">
<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 <xref
target="RFC2119"></xref>.</t>
</section>
<section anchor="problem_stmt" title="Incremental Deployment">
<t>DNSoD can be deployed incrementally by the Internet Service Provider
or as an Internet service.</t>
<t>If the ISP's DNS resolver supports DNSoD, then DNS queries are
protected from passive listening and from many active attacks along that
path.</t>
<t>DNSoD can be offered as an Internet service, and a stub resolver or
DNS resolver can be configured to point to that DNSoD server (rather
than to the ISP-provided DNS server).</t>
</section>
<section anchor="demux"
title="DTLS session initiation, Polling and Discovery">
<t>Many modern operating systems already detect if a web proxy is
interfering with Internet communications, using proprietary mechanisms
that are out of scope of this document. After that mechanism has run
(and detected Internet connectivity is working), the DNSoD procedure
described in this document should commence. This timing avoids delays in
joining the network (and displaying an icon indicating successful
Internet connection), at the risk that those initial DNS queries will be
sent without protection afforded by DNSoD.</t>
<t>DNSoD MUST run over standard UDP port 853 as defined in <xref
target="IANA"></xref>. A DNS server that supports DNSoD MUST listen for
and accept DTLS packets on a designated port 853.</t>
<t>The host should determine if the DNS server supports DNSoD by sending
a DTLS ClientHello message. A DNS server that does not support DNSoD
will not respond to ClientHello messages sent by the client. The client
MUST use timer values defined in Section 4.2.4.1 of <xref
target="RFC6347"></xref> for retransmission of ClientHello message and
if no response is received from the DNS server. After 15 seconds, it
MUST cease attempts to re-transmit its ClientHello. If the DNS client
receives a hard ICMP error <xref target="RFC1122"></xref>, it MUST
immediately cease attempts to re-transmit its ClientHello. Thereafter,
the client MAY repeat that procedure in the event the DNS server has
been upgraded to support DNSoD, but such probing SHOULD NOT be done more
frequently than every 24 hours and MUST NOT be done more frequently than
every 15 minutes. This mechanism requires no additional signaling
between the client and server.</t>
</section>
<section anchor="performance" title="Performance Considerations">
<t>To reduce number of octets of the DTLS handshake, especially the size
of the certificate in the ServerHello (which can be several kilobytes),
DNS client and server can use raw public keys <xref
target="RFC7250"></xref> or <xref
target="I-D.ietf-tls-cached-info">Cached Information Extension</xref>.
Cached Information Extension avoids transmitting the server's
certificate and certificate chain if the client has cached that
information from a previous TLS handshake.</t>
<t>Multiple DNS queries can be sent over a single DTLS session and the
DNSoD client need not wait for an outstanding reply before sending the
next query. The existing Query ID allows multiple requests and responses
to be interleaved in whatever order they can be fulfilled by the DNS
server. This means DNSoD reduces the consumption of UDP port numbers,
and because DTLS protects the communication between the DNS client and
its server, the resolver SHOULD NOT use random ephemeral source ports
(Section 9.2 of <xref target="RFC5452"></xref>) because such source port
use would incur additional, unnecessary DTLS load on the DNSoD server.
When sending multiple queries over a single DTLS session, clients MUST
take care to avoid Message ID collisions. In other words, they MUST not
re-use the DNS Message ID of an in-flight query.</t>
<t>It is highly advantageous to avoid server-side DTLS state and reduce
the number of new DTLS sessions on the server which can be done with
<xref target="RFC5077"></xref>. This also eliminates a round-trip for
subsequent DNSoD queries, because with <xref target="RFC5077"></xref>
the DTLS session does not need to be re-established.</t>
<t>Compared to normal DNS, DTLS adds at least 13 octets of header, plus
cipher and authentication overhead to every query and every response.
This reduces the size of the DNS payload that can be carried. Certain
DNS responses are large (e.g., many AAAA records, TXT, SRV) and don't
fit into a single UDP packet, causing a partial response with the
truncation (TC) bit set. The client is then expected to repeat the query
over TCP, which causes additional name resolution delay. We have
considered two ideas, one that reduces the need to switch to TCP and
another that eliminates the need to switch to TCP: <list style="symbols">
<t>To avoid IP fragmentation, DTLS handshake messages incorporate
their own fragment offset and fragment length, but this is only for
the handshake. Payloads that cause the DTLS packet to exceed the
path maximum MTU need their own fragmentation support <xref
target="fragmentation"></xref>.</t>
<t>DNS client and server MUST support the EDNS0 option defined in
<xref target="RFC6891"></xref> so that the DNS client can indicate
to the DNS server the maximum DNS response size it can handle
without IP fragmentation.</t>
</list></t>
<t>DNSoD puts an additional computational load on servers. The largest
gain for privacy is to protect the communication between the DNS client
(the end user's machine) and its caching resolver. Implementing DNSoD on
root servers is outside the scope of this document.</t>
</section>
<section anchor="DTLS" title="Established sessions">
<t>In DTLS, all data is protected using the same record encoding and
mechanisms. When the mechanism described in this document is in effect,
DNS messages are encrypted using the standard DTLS record encoding. When
a user of DTLS wishes to send an DNS message, it delivers it to the DTLS
implementation as an ordinary application data write (e.g.,
SSL_write()). A single DTLS session can be used to receive multiple DNS
requests and generate DNS multiple responses.</t>
<t>DNSoD client and server can use DTLS heartbeat <xref
target="RFC6520"></xref> to verify that the peer still has DTLS state.
DTLS session is terminated by the receipt of an authenticated message
that closes the connection (e.g., a DTLS fatal alert).</t>
<figure title="Message Flow for Full Handshake Issuing New Session Ticket">
<artwork align="left"><![CDATA[
Client Server
------ ------
ClientHello -------->
<------- HelloVerifyRequest
(contains cookie)
ClientHello -------->
(contains cookie)
(empty SessionTicket extension)
ServerHello
(empty SessionTicket extension)
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
NewSessionTicket
[ChangeCipherSpec]
<-------- Finished
DNS Request --------->
<--------- DNS Response
]]></artwork>
</figure>
</section>
<section anchor="fragmentation" title="Fragmentation and Reassembly">
<t>This section describes an optional procedure the client and server
can negotiate to send large DNS responses without IP fragmentation or
reassembly.</t>
<t>Large DNS responses cannot exceed the DNS maximum payload size (512)
unless a larger size is negotiated with EDNS0. Even using EDNS0,
requesting responses larger the path MTU causes IP fragmentation. If the
response exceeds that size it is truncated and the TC bit set, forcing a
DNS client that wants the entire response to establish a TCP connection
and send the query again over TCP. This slows down DNS lookups, and is
even more troublesome if a TLS session also needs to be established.</t>
<t>To avoid these problems with DNS over DTLS, the DNS client and the
DNS server can indicate support for a new application-layer
fragmentation and reassembly mechanism, by using the new DTLS extension
"DNS-fragment" in the DTLS ClientHello, and indicate how many fragments
the client is willing to receive. If the server supports this extension,
it includes "DNS-fragment" in its DTLS ServerHello and indicates how
many fragments it is willing to send in a response. The EDNS0 value
controls the size of the responses, including the size of fragmented
responses. If both the DTLS client and DTLS server indicate support
DNS-fragment, and the DNS server's response exceeds the EDNS0-indicated
size, the DNS server fragments the response into packets that are no
larger than the EDNS0-indicated size, and sends them all to the DNS
client. Logically, the layering of the fragmentation is like this,</t>
<figure>
<artwork align="center"><![CDATA[
| DNS |
| fragmentation |
| DTLS |
| UDP |
| IP |
]]></artwork>
</figure>
<section title="Generating fragmented packets">
<t>The response is formed, and separate packets are sent with their
own fragmentation header, as follows:</t>
<figure>
<artwork align="center"><![CDATA[
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| DNS Query ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| 1| M| M| Fragment-count | Fragment-ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| Master Fragment Sequence Number (MFSN) |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
]]></artwork>
</figure>
<t>The above fragment header appears at the beginning of all
fragments. The fields are defined as follows: <list style="hanging">
<t>DNS Query ID: Is the same as the ID value of the DNS response;
this means the first fragment has the DNS Query ID value appear
twice in the packet, and means subsequent fragments will contain
their associated DNS Query ID in the fragmentation header.</t>
<t>QR: This is the QR field in a normal DNS packet, and is always
set, because fragmentation/reassembly is only defined in this
document for responses.</t>
<t>OP: This bit is always set. This bit corresponds to first bit
of the Opcode field of a normal DNS packet; that Opcode field for
a normal DNS packet must be all 0. By setting this bit to 1, this
fragmentation header is distinguished from a normal DNS
packet.</t>
<t>M: The next two "M" bits must be 0, for future use.</t>
<t>Fragment-count: For each query ID that generates a fragmented
response, this field is set to the number of fragments that will
be sent (that is, the highest Fragment-ID minus 1).</t>
<t>Fragment-ID: Starts at 0 for the first fragmented segment and
is incremented for each fragment.</t>
<t>Master Fragment Sequence Number: starts at 0 and is incremented
for the first packet of each fragmented response.</t>
</list></t>
<t>The length of each fragment is calculated from the UDP packet size
minus the DTLS overhead.</t>
<t>It is RECOMMENDED that a value not exceeding 10 is used by the DNS
client and DNS server during their DNS-fragment negotiation <xref
target="RFC6928"></xref>. If the server needs to generate more
fragments than were negotiated, MUST set the TC bit and SHOULD send
the number of fragments negotiated.</t>
<t>The fragments MUST be at least 64 bytes (minimum Ethernet MTU)
minus DTLS, UDP, and IP overhead. The fragments need not all be the
same size. The DNS client indicates the maximum DNS size using EDNS0,
which constrains the size of the response packet on the wire. When
generating fragmented packets, the DNS server MUST NOT generate
fragments that exceed the maximum DNS size.</t>
</section>
<section title="Receiving fragmented packets">
<t>Upon receipt of a DTLS packet, DTLS processing is performed and the
Opcode field is examined to determine if reassembly is required before
processing as a DNS packet, as depicted below:</t>
<figure>
<artwork align="left"><![CDATA[
+--------+
| 00000 -+------------> DNS processing
Opcode = | | ^
| | |
| 1xxxx -+--->reassembly----+
+--------+
]]></artwork>
</figure>
<t>If reassembly needs to be performed, the packets are matched
according to their DNS query ID value (at the top of the fragment
header), their Master Fragment Sequence Number, and ordered by their
Fragment-ID. Once all the fragments have been received (that is, all
fragments from 0 through the Fragment-ID matching the frag-count minus
1), the fragment headers are removed and the DNS payload is handed to
the DNS layer. Due to network loss or packet corruption, some
fragments might not be received, which will cause the DNS layer to
perform a normal re-transmission of the DNS query, with the same query
ID. The re-transmitted answer, which will be fragmented identically to
the original answer (assuming that resource record did not change
between the two answers), will have a different Master Fragment
Sequence Number. <list style="empty">
<t>Design Note: Tha MFSN protects against corruption caused by DNS
resource record changing between the initial query and its
re-transmitted query.</t>
</list> After a time out, incomplete fragments are discarded by the
receiver.</t>
<t>If the Fragment-ID is 0 and the DNS Query ID value in the fragment
header does not match the ID value in the DNS header, a DTLS Alert is
generated and an error is logged.</t>
<!--
THIS IS NOW FIXED, with Master Fragment Sequence Number
<t><list style="empty"><t>[[ Editor's Note: When a resource record on
the DNS server changes between DNS client re-transmits, DNS is not
idempotent. This causes grief for the reassembly procedure described
above, specifically the received fragments will be intermixed with new
fragments, corrupting the reassembly and corrupting the DNS response.
Clearing out the received fragments when re-transmitting a query is
not effective, because delayed packets (from the first query) could
still be arriving after the second query is sent. There are a few
ways to solve the problem:
<list style="symbols">
<t>if some fragments for a query ID were received,
and the query needs to be re-transmitted, use a different query ID. This
has undesirable operational side-effects, specifically retransmissions
are harder to identify.</t>
<t>effectively extend the query-ID with 2-3 bits sent by the client that
are echoed by the server. This could be implemented as an EDNS0
option (from client to server) and high-order bits of the Fragment-ID</t>
<t>effectively extend the query-ID with a few bits of monotonically
increasing fragment identifier, for each DTLS association, maintained
by the server.</t>
<t>include a lightweight checksum over the entire response, so that
the reassembly layer never forwards corrupted data to the DNS client,
due to non-idempotency on the DNS server.</t>
</list></t>
<t>However, instead of engineering such a solution we may simply assume
that DNS servers are idempotent, and a request and its retransmissions
will earn the exact same response from the server. ]]</t>
</list></t>
-->
</section>
<section title="The DNS-fragment Extension">
<t>A new extension type ("DNS_fragment(TBA)") is defined and MUST be
included by the client in its "ClientHello" message if it wants to use
fragmentation, and MUST be included in the ServerHello if the server
agrees to use fragmentation.</t>
<t><figure>
<artwork align="left"><![CDATA[enum { DNS-fragment(TBA), (65535) } ExtensionType;
]]></artwork>
</figure></t>
<t>The "extension_data" field of the "DNS-fragment" extension MUST
contain a "MaxNumOfFragments" value, which is the maximum number of
fragments the client wants to receive (indicated in the ClientHello),
and the maximum number of fragments the server will send (indicated in
the ServerHello).</t>
<t><figure>
<artwork align="left"><![CDATA[uint8 MaxNoOfFragments;
]]></artwork>
</figure></t>
<t>The value indicated in the ServerHello MUST be less than or equal
to the value indicated in the ClientHello, and if not the client MUST
terminate the DTLS association with an Alert, and MAY establish a new
DTLS association without the dns_fragment extension.</t>
</section>
</section>
<section title="Anycast">
<t>DNS servers are often configured with anycast addresses. While the
network is stable, packets transmitted from a particular source to an
anycast address will reach the same server that has the cryptographic
context from the DNS over DTLS handshake. But when the network
configuration changes,a DNS over DTLS packet can be received by a server
that does not have the necessary cryptographic context. To encourage the
client to initiate a new DTLS handshake, DNS servers SHOULD generate a
DTLS Alert message in response to receiving a DTLS packet for which the
server does not have any cryptographic context.</t>
</section>
<section anchor="IANA" title="IANA Considerations">
<t>This document adds a new extension for DTLS, in accordance with <xref
target="RFC5246"></xref>:</t>
<t>enum { DNS-Fragment(TBA), (65535) } ExtensionType;</t>
<t>[[ NOTE: This value needs to be assigned by IANA ]]</t>
<t>This extension MUST only be used with DTLS.</t>
<t>IANA is requested to add the following value to the "Service Name and
Transport Protocol Port Number Registry" registry in the System Range.
The registry for that range requires IETF Review or IESG Approval <xref
target="RFC6335"></xref> and such a review has been requested using the
Early Allocation process <xref target="RFC7120"></xref> for the
well-known UDP port in this document. <!-- That
registry is populated by expert review <xref target="RFC6335"/>,
and such a review will be requested if this document
progresses.
--></t>
<figure>
<artwork><![CDATA[
Service Name domain-s
Transport Protocol(s) UDP/TCP
Port 853
Assignee IESG
Contact dwing@cisco.com
Description DNS query-response protocol runs over
DTLS and TLS
Reference This document
]]></artwork>
</figure>
</section>
<section anchor="security" title="Security Considerations">
<t>The interaction between a DNS client and DNS server requires Datagram
Transport Layer Security (DTLS) with a ciphersuite offering
confidentiality protection and guidance given in <xref
target="RFC7525"></xref> must be followed to avoid attacks on DTLS. Once
a DNSoD client has established a security association with a particular
DNS server, and outstanding normal DNS queries with that server (if any)
have been received, the DNSoD client MUST ignore any subsequent normal
DNS responses from that server, as all subsequent responses should be
encrypted. This behavior mitigates all possible attacks described in
<xref target="RFC5452">Measures for Making DNS More Resilient against
Forged Answers</xref>.</t>
<t>The DNS Fragment extension does not impact security of DTLS session
establishment or application data exchange. DNS Fragment provides
fragmentation and reassembly of the encrypted DNS payload.</t>
</section>
<section anchor="ack" title="Acknowledgements">
<t>Thanks to Phil Hedrick for his review comments on TCP and to Josh
Littlefield for pointing out DNSoD load on busy servers (most notably
root servers). The authors would like to thank Simon Josefsson, Daniel
Kahn Gillmor, Bob Harold, Ilari Liusvaara and Sara Dickinson for
discussions and comments on the design of DNSoD.</t>
</section>
</middle>
<back>
<references title="Normative References">
<?rfc include="reference.RFC.2119"?>
<?rfc include="reference.RFC.1034"?>
<?rfc include="reference.RFC.1035"?>
<?rfc include="reference.RFC.4033"?>
<?rfc include="reference.RFC.5077"?>
<?rfc include="reference.RFC.6347"?>
<!--
<?rfc include="reference.RFC.6891"?>
-->
<?rfc include="reference.RFC.5452"?>
<!--
<?rfc include="reference.RFC.3596"?>
-->
<?rfc include="reference.RFC.5246"?>
<?rfc include="reference.RFC.4492"?>
<?rfc include="reference.RFC.5288"?>
<?rfc include="reference.RFC.7525"?>
<?rfc include="reference.RFC.6125"
?>
<?rfc include="reference.RFC.4648"
?>
<?rfc include="reference.RFC.7435"
?>
<?rfc include="reference.RFC.6234"
?>
<?rfc include="reference.RFC.7469"?>
<?rfc include="reference.RFC.6335"
?>
<?rfc include="reference.RFC.7120"?>
<?rfc include="reference.RFC.6891"?>
<?rfc include="reference.RFC.6520"?>
</references>
<references title="Informative References">
<?rfc include='reference.I-D.bortzmeyer-dnsop-dns-privacy'?>
<?rfc include='reference.I-D.ietf-dprive-dns-over-tls' ?>
<?rfc include="reference.I-D.ietf-tls-cached-info"?>
<?rfc include="reference.RFC.7250"?>
<!--
<?rfc include="reference.RFC.4892"?>
-->
<?rfc include="reference.RFC.7413"?>
<?rfc include="reference.RFC.4821"?>
<?rfc include="reference.RFC.3749"?>
<?rfc include="reference.RFC.1122"?>
<?rfc include="reference.RFC.6928"?>
<!--
<reference anchor="IANA-domain" target="http://www.iana.org/assignments/special-use-domain-names/special-use-domain-names.xhtml">
<front>
<title>Special-Use Domain Names</title>
<author>
<organization>IANA</organization>
</author>
<date month="February" year="2013"/>
</front>
</reference>
-->
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-24 04:24:24 |