| rfc8945xml2.original.xml | rfc8945.xml | |||
|---|---|---|---|---|
| <?xml version="1.0"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- This template is for creating an Internet Draft using xml2rfc, | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| which is available here: http://xml.resource.org. --> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <!-- used by XSLT processors --> | ||||
| <!-- For a complete list and description of processing instructions (PIs), | ||||
| please see http://xml.resource.org/authoring/README.html. --> | ||||
| <!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ||||
| might want to use. | ||||
| (Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
| <?rfc strict="yes" ?> | ||||
| <!-- give errors regarding ID-nits and DTD validation --> | ||||
| <!-- control the table of contents (ToC) --> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc tocappendix="yes"?> | ||||
| <!-- generate a ToC --> | ||||
| <?rfc tocdepth="3"?> | ||||
| <!-- the number of levels of subsections in ToC. default: 3 --> | ||||
| <!-- control references --> | ||||
| <?rfc symrefs="yes"?> | ||||
| <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <!-- sort the reference entries alphabetically --> | ||||
| <!-- control vertical white space | ||||
| (using these PIs as follows is recommended by the RFC Editor) --> | ||||
| <?rfc compact="yes" ?> | ||||
| <!-- do not start each main section on a new page --> | ||||
| <?rfc subcompact="no" ?> | ||||
| <!-- keep one blank line between list items --> | ||||
| <!-- end of list of popular I-D processing instructions --> | ||||
| <?rfc comments="no" ?> | ||||
| <?rfc inline="yes" ?> | ||||
| <!-- includes pre RFC 5378 (2008) material --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" | |||
| <rfc category="std" docName="draft-ietf-dnsop-rfc2845bis-09" | category="std" consensus="true" docName="draft-ietf-dnsop-rfc2845bis-09" | |||
| ipr="pre5378Trust200902" obsoletes="2845, 4635" > | number="8945" ipr="pre5378Trust200902" obsoletes="2845, 4635" updates="" | |||
| xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" | ||||
| sortRefs="true" version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 2.46.0 --> | ||||
| <front> | <front> | |||
| <title abbrev="DNS TSIG">Secret Key Transaction Authentication for DNS (TSIG )</title> | <title abbrev="DNS TSIG">Secret Key Transaction Authentication for DNS (TSIG )</title> | |||
| <seriesInfo name="RFC" value="8945"/> | ||||
| <seriesInfo name="STD" value="93"/> | ||||
| <author fullname="Francis Dupont" initials="F" surname="Dupont"> | <author fullname="Francis Dupont" initials="F" surname="Dupont"> | |||
| <organization abbrev="ISC">Internet Systems Consortium, Inc.</organization > | <organization abbrev="ISC">Internet Systems Consortium, Inc.</organization > | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>PO Box 360</street> | <street>PO Box 360</street> | |||
| <city>Newmarket</city> | <city>Newmarket</city> | |||
| <region>NH</region> | <region>NH</region> | |||
| <code>03857</code> | <code>03857</code> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>Francis.Dupont@fdupont.fr</email> | <email>Francis.Dupont@fdupont.fr</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Stephen Morris" initials="S" surname="Morris"> | <author fullname="Stephen Morris" initials="S" surname="Morris"> | |||
| <organization abbrev="ISC">Internet Systems Consortium, Inc.</organization > | <organization abbrev="Unaffiliated">Unaffiliated</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>PO Box 360</street> | <country>United Kingdom</country> | |||
| <city>Newmarket</city> | </postal> | |||
| <region>NH</region> | ||||
| <code>03857</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>sa.morris8@gmail.com</email> | <email>sa.morris8@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Paul Vixie" initials="P" surname="Vixie"> | <author fullname="Paul Vixie" initials="P" surname="Vixie"> | |||
| <organization abbrev="Farsight">Farsight Security Inc</organization> | <organization abbrev="Farsight">Farsight Security Inc</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>177 Bovet Road, Suite 180</street> | <street>177 Bovet Road</street> | |||
| <extaddr>Suite 180</extaddr> | ||||
| <city>San Mateo</city> | <city>San Mateo</city> | |||
| <region>CA</region> | <region>CA</region> | |||
| <code>94402</code> | <code>94402</code> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>paul@redbarn.org</email> | <email>paul@redbarn.org</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Donald E. Eastlake 3rd" initials="D" surname="Eastlake 3rd "> | <author fullname="Donald E. Eastlake 3rd" initials="D" surname="Eastlake 3rd "> | |||
| <organization abbrev="Futurewei">Futurewei Technologies</organization> | <organization abbrev="Futurewei">Futurewei Technologies</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>2386 Panoramic Circle</street> | <street>2386 Panoramic Circle</street> | |||
| <city>Apopka</city> | <city>Apopka</city> | |||
| <region>FL</region> | <region>FL</region> | |||
| <code>32703</code> | <code>32703</code> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| skipping to change at line 96 ¶ | skipping to change at line 66 ¶ | |||
| <postal> | <postal> | |||
| <street>2386 Panoramic Circle</street> | <street>2386 Panoramic Circle</street> | |||
| <city>Apopka</city> | <city>Apopka</city> | |||
| <region>FL</region> | <region>FL</region> | |||
| <code>32703</code> | <code>32703</code> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>d3e3e3@gmail.com</email> | <email>d3e3e3@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Olafur Gudmundsson" initials="O" surname="Gudmundsson"> | <author fullname="Olafur Gudmundsson" initials="O" surname="Gudmundsson"> | |||
| <organization abbrev="Cloudflare">Cloudflare</organization> | <organization abbrev="Cloudflare">Cloudflare</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street/> | <street/> | |||
| <city>San Francisco</city> | <city></city> | |||
| <region>CA</region> | <region></region> | |||
| <code>94107</code> | <code></code> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>olafur+ietf@cloudflare.com</email> | <email>olafur+ietf@cloudflare.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Brian Wellington" initials="B" surname="Wellington"> | <author fullname="Brian Wellington" initials="B" surname="Wellington"> | |||
| <organization abbrev="Akamai">Akamai</organization> | <organization abbrev="Akamai">Akamai</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street/> | <street/> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>bwelling@akamai.com</email> | <email>bwelling@akamai.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| skipping to change at line 121 ¶ | skipping to change at line 89 ¶ | |||
| <author fullname="Brian Wellington" initials="B" surname="Wellington"> | <author fullname="Brian Wellington" initials="B" surname="Wellington"> | |||
| <organization abbrev="Akamai">Akamai</organization> | <organization abbrev="Akamai">Akamai</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street/> | <street/> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>bwelling@akamai.com</email> | <email>bwelling@akamai.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2020" month="November" /> | ||||
| <date/> | ||||
| <area>Operations and Management Area</area> | <area>Operations and Management Area</area> | |||
| <workgroup>Internet Engineering Task Force</workgroup> | <workgroup>Internet Engineering Task Force</workgroup> | |||
| <abstract> | <abstract> | |||
| <t>This document describes a protocol for transaction level authentication | <t>This document describes a protocol for transaction-level authentication | |||
| using shared secrets and one way hashing. It can be used to authenticate | using shared secrets and one-way hashing. It can be used to authenticate | |||
| dynamic updates to a DNS zone as coming from an approved client, or to aut | dynamic updates to a DNS zone as coming from an approved client or to | |||
| henticate | authenticate responses as coming from an approved name server.</t> | |||
| responses as coming from an approved name server.</t> | <t>No recommendation is made here for distributing the shared secrets; | |||
| <t>No recommendation is made here for distributing the shared secrets: | ||||
| it is expected that a network administrator will statically configure | it is expected that a network administrator will statically configure | |||
| name servers and clients using some out of band mechanism.</t> | name servers and clients using some out-of-band mechanism.</t> | |||
| <t>This document obsoletes RFCs 2845 and 4635.</t> | ||||
| <t>This document obsoletes RFC2845 and RFC4635.</t> | ||||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section title="Introduction"> | <section numbered="true" toc="default"> | |||
| <section title="Background"> | <name>Introduction</name> | |||
| <t>The Domain Name System (DNS, <xref target="RFC1034"/>, <xref | <section numbered="true" toc="default"> | |||
| target="RFC1035"/>) is a replicated hierarchical distributed | <name>Background</name> | |||
| <t>The Domain Name System (DNS) (<xref target="RFC1034" | ||||
| format="default"/> <xref target="RFC1035" format="default"/>) is a | ||||
| replicated hierarchical distributed | ||||
| database system that provides information fundamental to Internet | database system that provides information fundamental to Internet | |||
| operations, such as name to address translation and mail | operations, such as name-to-address translation and mail-handling | |||
| handling information.</t> | information.</t> | |||
| <t>This document specifies use of a message authentication code | <t>This document specifies use of a message authentication code | |||
| (MAC), generated using certain keyed hash functions, to | (MAC), generated using certain keyed hash functions, to | |||
| provide an efficient means of point-to-point authentication and | provide an efficient means of point-to-point authentication and | |||
| integrity checking for DNS transactions. Such transactions include | integrity checking for DNS transactions. Such transactions include | |||
| DNS update requests and responses for which this can provide a lightweig ht | DNS update requests and responses for which this can provide a lightweig ht | |||
| alternative to the secure DNS dynamic update protocol described by <xref | alternative to the secure DNS dynamic update protocol described by | |||
| target="RFC3007"/>.</t> | <xref target="RFC3007" format="default"/>.</t> | |||
| <t>A further use of this mechanism is to protect zone transfers. | <t>A further use of this mechanism is to protect zone transfers. | |||
| In this case the data covered would be the whole zone transfer | In this case, the data covered would be the whole zone transfer | |||
| including any glue records sent. The protocol described by DNSSEC | including any glue records sent. The protocol described by DNSSEC | |||
| (<xref target="RFC4033"/>, <xref target="RFC4034"/>, | (<xref target="RFC4033" format="default"/>, <xref target="RFC4034" forma | |||
| <xref target="RFC4035"/>) does not protect glue records and unsigned | t="default"/>, | |||
| <xref target="RFC4035" format="default"/>) does not protect glue records | ||||
| and unsigned | ||||
| records.</t> | records.</t> | |||
| <t>The authentication mechanism proposed here provides a | <t>The authentication mechanism proposed here provides a | |||
| simple and efficient authentication between clients and servers, | simple and efficient authentication between clients and servers, | |||
| by using shared secret keys to establish a trust relationship between | by using shared secret keys to establish a trust relationship between | |||
| two entities. Such keys must be protected in a manner similar to | two entities. Such keys must be protected in a manner similar to | |||
| private keys, lest a third party masquerade as one of the intended | private keys, lest a third party masquerade as one of the intended | |||
| parties (by forging the MAC). The proposal is unsuitable for general | parties (by forging the MAC). The proposal is unsuitable for general | |||
| server to server authentication and for servers which speak with many | server-to-server authentication and for servers that speak with many | |||
| other servers, since key management would become unwieldy with the | other servers, since key management would become unwieldy with the | |||
| number of shared keys going up quadratically. But it is suitable for | number of shared keys going up quadratically. But it is suitable for | |||
| many resolvers on hosts that only talk to a few recursive servers.</t> | many resolvers on hosts that only talk to a few recursive servers.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <section title="Protocol Overview"> | <name>Protocol Overview</name> | |||
| <t>Secret Key Transaction Authentication makes use of signatures | <t>Secret Key Transaction Authentication makes use of signatures | |||
| on messages sent between the parties involved (e.g. resolver and | on messages sent between the parties involved (e.g., resolver and | |||
| server). These are known as "transaction signatures", or TSIG. | server). These are known as "transaction signatures", or TSIG. | |||
| For historical reasons, in this document they are referred to as | For historical reasons, in this document, they are referred to as | |||
| message authentication codes (MAC).</t> | message authentication codes (MACs).</t> | |||
| <t>Use of TSIG presumes prior agreement between the | ||||
| <t>Use of TSIG presumes prior agreement between the | ||||
| two parties involved (e.g., resolver and server) as to any | two parties involved (e.g., resolver and server) as to any | |||
| algorithm and key to be used. The way that this agreement | algorithm and key to be used. The way that this agreement | |||
| is reached is outside the scope of the document.</t> | is reached is outside the scope of the document.</t> | |||
| <t>A DNS message exchange involves the sending of a query and the | ||||
| <t>A DNS message exchange involves the sending of a query and the | ||||
| receipt of one of more DNS messages in response. For | receipt of one of more DNS messages in response. For | |||
| the query, the MAC is calculated based on the hash of the contents | the query, the MAC is calculated based on the hash of the contents | |||
| and the agreed TSIG key. The MAC for the response is similar, but | and the agreed TSIG key. The MAC for the response is similar but | |||
| also includes the MAC of the query as part of the calculation. | also includes the MAC of the query as part of the calculation. | |||
| Where a response comprises multiple packets, the calculation of | Where a response comprises multiple packets, the calculation of | |||
| the MAC associated with the second and subsequent packets includes in | the MAC associated with the second and subsequent packets includes in | |||
| its inputs the MAC for the preceding packet. | its inputs the MAC for the preceding packet. | |||
| In this way it is possible to detect any interruption in the | In this way, it is possible to detect any interruption in the | |||
| packet sequence, although not its premature termination.</t> | packet sequence, although not its premature termination.</t> | |||
| <t>The MAC is contained in a TSIG resource record included | ||||
| <t>The MAC is contained in a TSIG resource record included | in the additional section of the DNS message.</t> | |||
| in the Additional Section of the DNS message.</t> | </section> | |||
| </section> | <section numbered="true" toc="default"> | |||
| <section title="Document History"> | <name>Document History</name> | |||
| <t>TSIG was originally specified by <xref target="RFC2845"/>. | <t>TSIG was originally specified by <xref target="RFC2845" format="defau | |||
| In 2017, two nameserver implementations strictly following that documen | lt"/>. | |||
| t (and | In 2017, two name server implementations strictly following that docume | |||
| the related <xref target="RFC4635"/>) were discovered to have | nt (and | |||
| security problems related to this feature (<xref target="CVE-2017-3142" | the related <xref target="RFC4635" format="default"/>) were discovered | |||
| />, | to have | |||
| <xref target="CVE-2017-3143"/>, <xref target="CVE-2017-11104"/>). The | security problems related to this feature (<xref | |||
| implementations | target="CVE-2017-3142" format="default"/>, | |||
| were fixed but, to avoid similar problems in the future, the | <xref target="CVE-2017-3143" format="default"/>, <xref | |||
| target="CVE-2017-11104" format="default"/>). The implementations | ||||
| were fixed, but to avoid similar problems in the future, the | ||||
| two documents were updated and merged, producing this revised | two documents were updated and merged, producing this revised | |||
| specification for TSIG.</t> | specification for TSIG.</t> | |||
| <t>While TSIG implemented according to this RFC provides for enhanced | ||||
| security, there are no changes in interoperability. TSIG on the wire | ||||
| is still the same mechanism described in <xref target="RFC2845" | ||||
| format="default"/>; only the checking semantics have been | ||||
| changed. | ||||
| <t>While TSIG implemented according to this RFC provides for enhanced | See <xref target="issuesfixed" format="default"/> for | |||
| security, there are no changes in interoperability. TSIG is on the wire | further details.</t> | |||
| still the same mechanism described in <xref target="RFC2845"/>; only | </section> | |||
| the checking semantics have been changed. See <xref target="issuesfixed | ||||
| "/> | ||||
| for further details.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Key Words" anchor="keywords"> | ||||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | ||||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | ||||
| "MAY", and "OPTIONAL" in this document are to be interpreted as | ||||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
| when, and only when, they appear in all capitals, as shown here.</t> | ||||
| </section> | </section> | |||
| <section anchor="keywords" numbered="true" toc="default"> | ||||
| <section title="Assigned Numbers" anchor="numbers"> | <name>Key Words</name> | |||
| <t>This document defines the following RR type and associated value:</t> | <t> | |||
| <t><list style="hanging" hangIndent="6"> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| <t>TSIG (250)</t> | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| </list></t> | 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="numbers" numbered="true" toc="default"> | ||||
| <name>Assigned Numbers</name> | ||||
| <t>This document defines the following Resource Record (RR) type and | ||||
| associated value:</t> | ||||
| <ul empty="true"> | ||||
| <li>TSIG (250)</li> | ||||
| </ul> | ||||
| <t>In addition, the document also defines the following DNS RCODEs | <t>In addition, the document also defines the following DNS RCODEs | |||
| and associated names:</t> | and associated names:</t> | |||
| <t><list style="hanging" hangIndent="6"> | <ul empty="true" spacing="compact"> | |||
| <t>16 (BADSIG)<vspace/> | <li>16 (BADSIG)</li> | |||
| 17 (BADKEY)<vspace/> | <li>17 (BADKEY)</li> | |||
| 18 (BADTIME)<vspace/> | <li>18 (BADTIME)</li> | |||
| 22 (BADTRUNC)</t> | <li>22 (BADTRUNC)</li> | |||
| </list></t> | </ul> | |||
| <t>(See <xref target="RFC6895"/> Section 2.3 concerning the assignment | <t>(See <xref target="RFC6895" sectionFormat="of" section="2.3"/> | |||
| of the value 16 to BADSIG.)</t> | concerning the assignment of the value 16 to BADSIG.)</t> | |||
| <t>These RCODES may appear within the "Error" field of a TSIG RR.</t> | <t>These RCODES may appear within the "Error" field of a TSIG RR.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="TSIG RR Format"> | <name>TSIG RR Format</name> | |||
| <section title="TSIG RR Type"> | <section numbered="true" toc="default"> | |||
| <name>TSIG RR Type</name> | ||||
| <t>To provide secret key authentication, we use an RR | <t>To provide secret key authentication, we use an RR | |||
| type whose mnemonic is TSIG and whose type code is 250. | type whose mnemonic is TSIG and whose type code is 250. | |||
| TSIG is a meta-RR and MUST NOT be cached. TSIG RRs are | TSIG is a meta-RR and <bcp14>MUST NOT</bcp14> be cached. TSIG RRs are | |||
| used for authentication between DNS entities that have | used for authentication between DNS entities that have | |||
| established a shared secret key. TSIG RRs are dynamically | established a shared secret key. TSIG RRs are dynamically | |||
| computed to cover a particular DNS transaction and are not | computed to cover a particular DNS transaction and are not | |||
| DNS RRs in the usual sense.</t> | DNS RRs in the usual sense.</t> | |||
| <t>As the TSIG RRs are related to one DNS request/response, | <t>As the TSIG RRs are related to one DNS request/response, | |||
| there is no value in storing or retransmitting them, thus the | there is no value in storing or retransmitting them; thus, the | |||
| TSIG RR is discarded once it has been used to authenticate a DNS | TSIG RR is discarded once it has been used to authenticate a DNS | |||
| message.</t> | message.</t> | |||
| </section> | </section> | |||
| <section anchor="format" numbered="true" toc="default"> | ||||
| <section title="TSIG Record Format" anchor="format"> | <name>TSIG Record Format</name> | |||
| <t>The fields of the TSIG RR are described below. As is usual, | <t>The fields of the TSIG RR are described below. All multi-octet integ | |||
| all multi-octet integers in the record are sent in network byte | ers in the record are sent in network byte | |||
| order (see <xref target="RFC1035"/> 2.3.2).</t> | order (see <xref target="RFC1035" sectionFormat="of" section="2.3.2"/>). | |||
| </t> | ||||
| <t><list style="hanging" hangIndent="6"> | <dl newline="false" spacing="normal"> | |||
| <dt>NAME:</dt> | ||||
| <t hangText="NAME">The name of the key used, in domain | <dd><t>The name of the key used, in domain | |||
| name syntax. The name should reflect the names of the | name syntax. The name should reflect the names of the | |||
| hosts and uniquely identify the key among a set of keys | hosts and uniquely identify the key among a set of keys | |||
| these two hosts may share at any given time. For example, | these two hosts may share at any given time. For example, | |||
| if hosts | if hosts | |||
| A.site.example and B.example.net share a key, possibilities | A.site.example and B.example.net share a key, possibilities | |||
| for the key name include <id>.A.site.example, | for the key name include <id>.A.site.example, | |||
| <id>.B.example.net, and | <id>.B.example.net, and | |||
| <id>.A.site.example.B.example.net. It should be | <id>.A.site.example.B.example.net. It should be | |||
| possible for more than one key to be in simultaneous use | possible for more than one key to be in simultaneous use | |||
| among a set of interacting hosts. This allows for periodic | among a set of interacting hosts. This allows for periodic | |||
| key rotation as per best operational practices, as well as | key rotation as per best operational practices, as well as | |||
| algorithm agility as indicated by <xref target="BCP201"/>.</t> | algorithm agility as indicated by <xref target="RFC7696" format="defau | |||
| lt"/>.</t> | ||||
| <t>The name may be used as a local index | <t>The name may be used as a local index | |||
| to the key involved but it is recommended that it be | to the key involved, but it is recommended that it be | |||
| globally unique. Where a key is just shared between two | globally unique. Where a key is just shared between two | |||
| hosts, its name actually need only be meaningful to | hosts, its name actually need only be meaningful to | |||
| them but it is recommended that the key name be mnemonic | them, but it is recommended that the key name be mnemonic | |||
| and incorporates the names of participating agents or | and incorporate the names of participating agents or | |||
| resources as suggested above.</t> | resources as suggested above.</t></dd> | |||
| <dt>TYPE:</dt> | ||||
| <t hangText="TYPE">This MUST be TSIG (250: Transaction SIGnature)</t> | <dd>This <bcp14>MUST</bcp14> be TSIG (250: Transaction SIGnature).</dd | |||
| > | ||||
| <t hangText="CLASS">This MUST be ANY</t> | <dt>CLASS:</dt> | |||
| <dd>This <bcp14>MUST</bcp14> be ANY.</dd> | ||||
| <t hangText="TTL">This MUST be 0</t> | <dt>TTL:</dt> | |||
| <dd>This <bcp14>MUST</bcp14> be 0.</dd> | ||||
| <t hangText="RdLen">(variable)</t> | <dt>RDLENGTH:</dt> | |||
| <dd>(variable)</dd> | ||||
| <t hangText="RDATA">The RDATA for a TSIG RR consists of a | <dt>RDATA:</dt> | |||
| number of fields, described below:</t> | <dd>The RDATA for a TSIG RR consists of a | |||
| </list></t> | number of fields, described below:</dd> | |||
| </dl> | ||||
| <figure><artwork> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 | 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| / Algorithm Name / | / Algorithm Name / | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | Time Signed +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Time Signed +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | Fudge | | | | Fudge | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | MAC Size | / | | MAC Size | / | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ MAC / | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ MAC / | |||
| / / | / / | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Original ID | Error | | | Original ID | Error | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Other Len | / | | Other Len | / | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Other Data / | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Other Data / | |||
| / / | / / | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork></figure> | ]]></artwork> | |||
| <t>The contents of the RDATA fields are:</t> | ||||
| <t><list style="hanging" hangIndent="6"> | <dl newline="true" spacing="normal"> | |||
| <t>The contents of the RDATA fields are: | <dt>Algorithm Name:</dt> | |||
| <list style="symbols"> | <dd>an octet sequence identifying the TSIG algorithm in the | |||
| domain name syntax. (Allowed names are listed in <xref | ||||
| <t>Algorithm Name - a octet sequence identifying the TSIG algorith | target="allowed-algorithms" format="default"/>.) The name is stored | |||
| m name in | in the DNS name wire format as described in <xref target="RFC1034" | |||
| the domain name syntax. (Allowed names are listed in | format="default"/>. As per <xref target="RFC3597" | |||
| <xref target="allowed-algorithms"/>.) The name is stored in the | format="default"/>, this name <bcp14>MUST NOT</bcp14> be | |||
| DNS name wire format as described in <xref target="RFC1034"/>. | compressed.</dd> | |||
| As per <xref target="RFC3597"/>, this name MUST NOT be | <dt>Time Signed:</dt> | |||
| compressed.</t> | <dd>an unsigned 48-bit integer containing the time the message was | |||
| signed as seconds since 00:00 on 1970-01-01 UTC, ignoring leap | ||||
| <t>Time Signed - an unsigned 48-bit integer containing | seconds.</dd> | |||
| the time the message was signed as seconds since | <dt>Fudge:</dt> | |||
| 00:00 on 1970-01-01 UTC, ignoring leap seconds.</t> | <dd>an unsigned 16-bit integer specifying the allowed time | |||
| difference in seconds permitted in the Time Signed field.</dd> | ||||
| <t>Fudge - an unsigned 16-bit integer specifying the allowed | <dt>MAC Size:</dt> | |||
| time difference in | <dd>an unsigned 16-bit integer giving the length of the MAC field in | |||
| seconds permitted in the Time Signed field.</t> | octets. Truncation is indicated by a MAC Size less than the size of | |||
| the keyed hash produced by the algorithm specified by the Algorithm | ||||
| <t>MAC Size - an unsigned 16-bit integer giving the length of MAC | Name.</dd> | |||
| field in octets. Truncation is indicated by a MAC size less | <dt>MAC:</dt> | |||
| than the size of the keyed hash produced by the algorithm | <dd>a sequence of octets whose contents are defined by the TSIG | |||
| specified by the Algorithm Name.</t> | algorithm used, possibly truncated as specified by the MAC Size. The | |||
| length of this field is given by the MAC Size. Calculation of the | ||||
| <t>MAC - a sequence of octets whose contents are defined by the | MAC is detailed in <xref target="mac_computation" | |||
| TSIG algorithm used, possibly truncated as specified by | format="default"/>.</dd> | |||
| MAC Size. The length of this field is given by the Mac Size. | <dt>Original ID:</dt> | |||
| Calculation of the MAC is detailed in <xref target="mac_computatio | <dd>an unsigned 16-bit integer holding the message ID of the | |||
| n"/>.</t> | original request message. For a TSIG RR on a request, it is set | |||
| equal to the DNS message ID. In a TSIG attached to a response -- or | ||||
| <t>Original ID - An unsigned 16-bit integer holding | in cases such as the forwarding of a dynamic update request -- the | |||
| the message ID of the original request message. | field contains the ID of the original DNS request.</dd> | |||
| For a TSIG RR on a request, it is set equal to the DNS message ID. | <dt>Error:</dt> | |||
| In a TSIG attached to a response - or in cases such as the | <dd>in responses, an unsigned 16-bit integer containing the extended | |||
| forwarding of a dynamic update request - the field contains the | RCODE covering TSIG processing. In requests, this | |||
| ID of the original DNS request.</t> | <bcp14>MUST</bcp14> be zero.</dd> | |||
| <dt>Other Len:</dt> | ||||
| <t>Error - in responses, an unsigned 16-bit integer containing | <dd>an unsigned 16-bit integer specifying the length of the Other | |||
| the extended RCODE covering TSIG processing. In requests, this | Data field in octets.</dd> | |||
| MUST be zero.</t> | <dt>Other Data:</dt> | |||
| <dd>additional data relevant to the TSIG record. In responses, this | ||||
| <t>Other Len - an unsigned 16-bit integer specifying the length | will be empty (i.e., Other Len will be zero) unless the content of | |||
| of the "Other Data" field in octets.</t> | the Error field is BADTIME, in which case it will be a 48-bit | |||
| unsigned integer containing the server's current time as the number | ||||
| <t>Other Data - additional data relevant to the TSIG record. | of seconds since 00:00 on 1970-01-01 UTC, ignoring leap seconds (see | |||
| In responses, this will be empty (i.e. "Other Len" will be zero) | <xref target="time_check" format="default"/>). This document assigns | |||
| unless the content of the Error field is BADTIME, in which case it | no meaning to its contents in requests.</dd> | |||
| will be a 48-bit unsigned integer containing the server's current | </dl> | |||
| time as the number of seconds since 00:00 on 1970-01-01 UTC, ignor | ||||
| ing | ||||
| leap seconds (see <xref target="time_check"/>). This document assi | ||||
| gns | ||||
| no meaning to its contents in requests.</t> | ||||
| </list> | ||||
| </t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| <section title="MAC Computation" anchor="mac_computation"> | <section anchor="mac_computation" numbered="true" toc="default"> | |||
| <name>MAC Computation</name> | ||||
| <t>When generating or verifying the contents of a TSIG record, | <t>When generating or verifying the contents of a TSIG record, | |||
| the data listed in the rest of this section are passed, | the data listed in the rest of this section are passed, | |||
| in the order listed below, as input to MAC computation. The | in the order listed below, as input to MAC computation. The | |||
| data are passed in network byte order or wire format, | data are passed in network byte order or wire format, | |||
| as appropriate, and are fed into the hashing function | as appropriate and are fed into the hashing function | |||
| as a continuous octet sequence with no inter-field separator or | as a continuous octet sequence with no interfield separator or | |||
| padding.</t> | padding.</t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Request MAC"> | <name>Request MAC</name> | |||
| <t>Only included in the computation of a MAC for a response message | <t>Only included in the computation of a MAC for a response message | |||
| (or the first message in a multi-message response), | (or the first message in a multi-message response), | |||
| the validated request MAC MUST be included in the MAC | the validated request MAC <bcp14>MUST</bcp14> be included in the MAC | |||
| computation. If the request MAC failed to validate, an unsigned | computation. If the request MAC failed to validate, an unsigned | |||
| error message MUST be returned instead. (<xref | error message <bcp14>MUST</bcp14> be returned instead (<xref | |||
| target="on_error"/>).</t> | target="on_error" format="default"/>).</t> | |||
| <t>The request's MAC, comprising the following fields, is digested in | <t>The request's MAC, comprising the following fields, is digested in | |||
| wire format:</t> | wire format:</t> | |||
| <table anchor="mac-field" align="center"> | ||||
| <name>Request's MAC</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Field</th> | ||||
| <th align="left">Type</th> | ||||
| <th align="left">Description</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">MAC Size</td> | ||||
| <td align="left">Unsigned 16-bit integer</td> | ||||
| <td align="left">in network byte order</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">MAC Data</td> | ||||
| <td align="left">octet sequence</td> | ||||
| <td align="left">exactly as transmitted</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>Special considerations apply to the TSIG calculation for the | ||||
| second and subsequent messages in a response that consists of multiple | ||||
| DNS messages (e.g., a zone transfer). | ||||
| <texttable style="headers"> | These are described in <xref | |||
| <ttcol>Field</ttcol> | target="tcp" format="default"/>.</t> | |||
| <ttcol>Type</ttcol> | ||||
| <ttcol>Description</ttcol> | ||||
| <c>MAC Length</c> | ||||
| <c>Unsigned 16-bit integer</c> | ||||
| <c>in network byte order</c> | ||||
| <c>MAC Data</c> | ||||
| <c>octet sequence</c> | ||||
| <c>exactly as transmitted</c> | ||||
| </texttable> | ||||
| <t>Special considerations apply to the TSIG calculation for the | ||||
| second and subsequent messages a response | ||||
| that consists of multiple DNS messages (e.g. a zone transfer). | ||||
| These are described in <xref target="tcp"/>.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>DNS Message</name> | ||||
| <t>In the MAC computation, the whole/complete DNS message in | ||||
| wire format is used.</t> | ||||
| <section title="DNS Message"> | <t>When creating an outgoing message, the TSIG is based on | |||
| <t>The DNS message used in the MAC computation is | the message content before | |||
| a whole and complete DNS message in wire format.</t> | the TSIG | |||
| RR has been added to the additional section and before the | ||||
| <t>When creating a TSIG, it is the message before | DNS Message Header's ARCOUNT has been incremented to include | |||
| the TSIG RR has been added to the additional data section | the TSIG RR.</t> | |||
| and before the DNS Message Header's ARCOUNT field has | ||||
| been incremented to contain the TSIG RR.</t> | ||||
| <t>When verifying an incoming message, it is the message after | ||||
| the TSIG RR has been removed and the ARCOUNT field | ||||
| decremented. If the message ID differs from the original | ||||
| message ID, the original message ID is substituted for the | ||||
| message ID. (This could happen, for example, when forwarding | ||||
| a dynamic update request.)</t> | ||||
| <t>When verifying an incoming message, the TSIG is checked against | ||||
| the message after the TSIG RR has been removed, the ARCOUNT | ||||
| decremented, and the message ID replaced by the original message | ||||
| ID from the TSIG if those IDs differ. (This could happen, for | ||||
| example, when forwarding a dynamic update request.)</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="TSIG Variables"> | <name>TSIG Variables</name> | |||
| <t>Also included in the digest is certain information present | <t>Also included in the digest is certain information present | |||
| in the TSIG RR. Adding this data provides further protection against an | in the TSIG RR. Adding this data provides further protection against an | |||
| attempt to interfere with the message.</t> | attempt to interfere with the message.</t> | |||
| <table anchor="tisg-field-names" align="center"> | ||||
| <texttable style="headers" anchor="tisg-field-names"> | <name>TSIG Variables</name> | |||
| <ttcol>Source</ttcol> | <thead> | |||
| <ttcol>Field Name</ttcol> | <tr> | |||
| <ttcol>Notes</ttcol> | <th align="left">Source</th> | |||
| <th align="left">Field Name</th> | ||||
| <c>TSIG RR</c> | <th align="left">Notes</th> | |||
| <c>NAME</c> | </tr> | |||
| <c>Key name, in canonical wire format</c> | </thead> | |||
| <tbody> | ||||
| <c>TSIG RR</c> | <tr> | |||
| <c>CLASS</c> | <td align="left">TSIG RR</td> | |||
| <c>(Always ANY in the current specification)</c> | <td align="left">NAME</td> | |||
| <td align="left">Key name, in canonical wire format</td> | ||||
| <c>TSIG RR</c> | </tr> | |||
| <c>TTL</c> | <tr> | |||
| <c>(Always 0 in the current specification)</c> | <td align="left">TSIG RR</td> | |||
| <td align="left">CLASS</td> | ||||
| <c>TSIG RDATA</c> | <td align="left"><bcp14>MUST</bcp14> be ANY</td> | |||
| <c>Algorithm Name</c> | </tr> | |||
| <c>in canonical wire format</c> | <tr> | |||
| <td align="left">TSIG RR</td> | ||||
| <c>TSIG RDATA</c> | <td align="left">TTL</td> | |||
| <c>Time Signed</c> | <td align="left"><bcp14>MUST</bcp14> be 0</td> | |||
| <c>in network byte order</c> | </tr> | |||
| <tr> | ||||
| <c>TSIG RDATA</c> | <td align="left">TSIG RDATA</td> | |||
| <c>Fudge</c> | <td align="left">Algorithm Name</td> | |||
| <c>in network byte order</c> | <td align="left">in canonical wire format</td> | |||
| </tr> | ||||
| <c>TSIG RDATA</c> | <tr> | |||
| <c>Error</c> | <td align="left">TSIG RDATA</td> | |||
| <c>in network byte order</c> | <td align="left">Time Signed</td> | |||
| <td align="left">in network byte order</td> | ||||
| <c>TSIG RDATA</c> | </tr> | |||
| <c>Other Len</c> | <tr> | |||
| <c>in network byte order</c> | <td align="left">TSIG RDATA</td> | |||
| <td align="left">Fudge</td> | ||||
| <c>TSIG RDATA</c> | <td align="left">in network byte order</td> | |||
| <c>Other Data</c> | </tr> | |||
| <c>exactly as transmitted</c> | <tr> | |||
| </texttable> | <td align="left">TSIG RDATA</td> | |||
| <td align="left">Error</td> | ||||
| <t>The RR RDLEN and RDATA MAC Length are not included in the | <td align="left">in network byte order</td> | |||
| input to MAC computation since they are not guaranteed to be | </tr> | |||
| <tr> | ||||
| <td align="left">TSIG RDATA</td> | ||||
| <td align="left">Other Len</td> | ||||
| <td align="left">in network byte order</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">TSIG RDATA</td> | ||||
| <td align="left">Other Data</td> | ||||
| <td align="left">exactly as transmitted</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>The RR RDLENGTH and RDATA MAC Size are not included in the | ||||
| input to MAC computation, since they are not guaranteed to be | ||||
| knowable before the MAC is generated.</t> | knowable before the MAC is generated.</t> | |||
| <t>The Original ID field is not included in this section, | <t>The Original ID field is not included in this section, | |||
| as it has already been substituted for the message ID in | as it has already been substituted for the message ID in | |||
| the DNS header and hashed.</t> | the DNS header and hashed.</t> | |||
| <t>For each label type, there must be a defined "Canonical | <t>For each label type, there must be a defined "Canonical | |||
| wire format" that specifies how to express a label in an | wire format" that specifies how to express a label in an | |||
| unambiguous way. For label type 00, this is defined in <xref | unambiguous way. For label type 00, this is defined in <xref | |||
| target="RFC4034"/> Section 6.2. The use of label types other than | target="RFC4034" sectionFormat="of" section="6.2"/>. The use of | |||
| 00 is not defined for this specification.</t> | label types other than 00 is not defined for this specification.</t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Time Values Used in TSIG Calculations"> | <name>Time Values Used in TSIG Calculations</name> | |||
| <t>The data digested includes the two timer values in the | <t>The data digested includes the two timer values in the | |||
| TSIG header in order to defend against replay attacks. If | TSIG header in order to defend against replay attacks. If | |||
| this were not done, an attacker could replay old messages | this were not done, an attacker could replay old messages | |||
| but update the "Time Signed" and "Fudge" fields to make the | but update the Time Signed and Fudge fields to make the | |||
| message look new. This data is named "TSIG Timers", and | message look new. The two fields are collectively named "TSIG Timer | |||
| s", and | ||||
| for the purpose of MAC calculation, they are hashed in | for the purpose of MAC calculation, they are hashed in | |||
| their "on the wire" format, in the following order: first | their wire format, in the following order: first | |||
| Time Signed, then Fudge.</t> | Time Signed, then Fudge.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="details" numbered="true" toc="default"> | ||||
| <section title="Protocol Details" anchor="details"> | <name>Protocol Details</name> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Generation of TSIG on Requests"> | <name>Generation of TSIG on Requests</name> | |||
| <t>Once the outgoing record has been constructed, the client performs | <t>Once the outgoing record has been constructed, the client performs | |||
| the keyed hash (HMAC) computation, appends a TSIG | the keyed hash (Hashed Message Authentication Code (HMAC)) | |||
| record with the calculated MAC to the Additional Data section (increment | computation, appends a TSIG record with the | |||
| ing | calculated MAC to the additional section (incrementing the | |||
| the ARCOUNT | ARCOUNT to reflect the additional RR), and transmits the request to | |||
| to reflect the additional RR), and transmits the request to | the server. This TSIG record <bcp14>MUST</bcp14> be the only TSIG RR | |||
| the server. This TSIG record MUST be the only TSIG RR in the message | in the message and <bcp14>MUST</bcp14> be the last record in the | |||
| and MUST be last record in the Additional Data section. The client MUST | additional data section. The client <bcp14>MUST</bcp14> store the MAC | |||
| store the MAC and the key name from the request while awaiting an answer | and the key name from the request while awaiting an answer.</t> | |||
| .</t> | ||||
| <t>The digest components for a request are:</t> | <t>The digest components for a request are:</t> | |||
| <ul empty="true" spacing="compact"> | ||||
| <t><list style="empty"> | <li>DNS Message (request)</li> | |||
| <t>DNS Message (request)<vspace/> | <li>TSIG Variables (request)</li> | |||
| TSIG Variables (request)</t> | </ul> | |||
| </list></t> | ||||
| </section> | </section> | |||
| <section anchor="request_processing" numbered="true" toc="default"> | ||||
| <section title="Server Processing of Request" anchor="request_processing"> | <name>Server Processing of Request</name> | |||
| <t>If an incoming message contains a TSIG record, it MUST | <t>If an incoming message contains a TSIG record, it <bcp14>MUST</bcp14> | |||
| be the last record in the additional section. Multiple | be the last record in the additional section. Multiple | |||
| TSIG records are not allowed. If multiple TSIG records are detected | TSIG records are not allowed. If multiple TSIG records are detected | |||
| or a TSIG record is present | or a TSIG record is present | |||
| in any other position, the DNS message is dropped and a response | in any other position, the DNS message is dropped and a response | |||
| with RCODE 1 (FORMERR) MUST be returned. Upon receipt of | with RCODE 1 (FORMERR) <bcp14>MUST</bcp14> be returned. Upon receipt of | |||
| a message with exactly one correctly placed TSIG RR, a copy of the | a message with exactly one correctly placed TSIG RR, a copy of the | |||
| TSIG RR is stored, and the TSIG RR is removed from the DNS Message, | TSIG RR is stored and the TSIG RR is removed from the DNS message | |||
| and decremented out of the DNS message header's ARCOUNT.</t> | and decremented out of the DNS message header's ARCOUNT.</t> | |||
| <t>If the TSIG RR cannot be interpreted, the server <bcp14>MUST</bcp14> | ||||
| <t>If the TSIG RR cannot be interpreted, the server MUST | ||||
| regard the message as corrupt and return a FORMERR to the server. | regard the message as corrupt and return a FORMERR to the server. | |||
| Otherwise the server is REQUIRED to return a TSIG RR in | Otherwise, the server is <bcp14>REQUIRED</bcp14> to return a TSIG RR in | |||
| the response.</t> | the response.</t> | |||
| <t>To validate the received TSIG RR, the server <bcp14>MUST</bcp14> perf | ||||
| <t>To validate the received TSIG RR, the server MUST perform the | orm the | |||
| following checks in the following order:</t> | following checks in the following order:</t> | |||
| <ol type="1" spacing="normal"> | ||||
| <t><list style="hanging"> | <li>Check key</li> | |||
| <t>1. Check KEY<vspace/> | <li>Check MAC</li> | |||
| 2. Check MAC<vspace/> | <li>Check time values</li> | |||
| 3. Check TIME values<vspace/> | <li>Check truncation policy</li> | |||
| 4. Check Truncation policy</t> | </ol> | |||
| </list></t> | <section numbered="true" toc="default"> | |||
| <name>Key Check and Error Handling</name> | ||||
| <section title="Key Check and Error Handling"> | <t>If a non-forwarding server does not recognize the key or | |||
| <t>If a non-forwarding server does not recognize the key | algorithm used by the client (or recognizes the algorithm but does | |||
| or algorithm used by the client (or recognizes the algorithm but does | not implement it), the server <bcp14>MUST</bcp14> generate an error | |||
| not implement it), the server MUST generate an error | response with RCODE 9 (NOTAUTH) and TSIG ERROR 17 (BADKEY). This | |||
| response with RCODE 9 (NOTAUTH) and TSIG ERROR 17 (BADKEY). | response <bcp14>MUST</bcp14> be unsigned as specified in <xref | |||
| This response MUST be unsigned as specified in <xref target= | target="on_error" format="default"/>. The server | |||
| "on_error"/>. The server SHOULD log the error. (Special | <bcp14>SHOULD</bcp14> log the error. (Special considerations apply | |||
| considerations apply to forwarding servers, see | to forwarding servers; see <xref target="forwarding" | |||
| <xref target="forwarding"/>.)</t> | format="default"/>.)</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="MAC Check and Error Handling"> | <name>MAC Check and Error Handling</name> | |||
| <t>Using the information in the TSIG, the server MUST verify | <t>Using the information in the TSIG, the server <bcp14>MUST</bcp14> v | |||
| erify | ||||
| the MAC by doing its own calculation and comparing the result with | the MAC by doing its own calculation and comparing the result with | |||
| the MAC received. If the MAC fails to | the MAC received. If the MAC fails to | |||
| verify, the server MUST generate an | verify, the server <bcp14>MUST</bcp14> generate an | |||
| error response as specified in <xref target="on_error"/> with | error response as specified in <xref target="on_error" format="default | |||
| "/> with | ||||
| RCODE 9 (NOTAUTH) and TSIG ERROR 16 (BADSIG). This response | RCODE 9 (NOTAUTH) and TSIG ERROR 16 (BADSIG). This response | |||
| MUST be unsigned as specified in <xref target="on_error"/>. | <bcp14>MUST</bcp14> be unsigned, as specified in <xref | |||
| The server SHOULD log the error.</t> | target="on_error" format="default"/>. | |||
| The server <bcp14>SHOULD</bcp14> log the error.</t> | ||||
| <section title="MAC Truncation" anchor="trunc"> | <section anchor="trunc" numbered="true" toc="default"> | |||
| <t>When space is at a premium and the strength of the full | <name>MAC Truncation</name> | |||
| <t>When space is at a premium and the strength of the full | ||||
| length of a MAC is not needed, it is reasonable to truncate | length of a MAC is not needed, it is reasonable to truncate | |||
| the keyed hash and use the truncated value for | the keyed hash and use the truncated value for | |||
| authentication. HMAC SHA-1 truncated to 96 bits is an option | authentication. HMAC SHA-1 truncated to 96 bits is an option | |||
| available in several IETF protocols, including IPsec and TLS. | available in several IETF protocols, including IPsec and TLS. | |||
| However, while this option is kept for backwards compatibility, | However, while this option is kept for backwards compatibility, | |||
| it may not provide a security level appropriate for all cases | it may not provide a security level appropriate for all cases | |||
| in the modern environment. In these cases, it is preferable to | in the modern environment. In these cases, it is preferable to | |||
| use a hashing algorithm such as SHA-256-128, SHA-384-192 or | use a hashing algorithm such as SHA-256-128, SHA-384-192, or | |||
| SHA-512-256 <xref target="RFC4868"/>. </t> | SHA-512-256 <xref target="RFC4868" format="default"/>. </t> | |||
| <t>Processing of a truncated MAC follows these rules:</t> | ||||
| <dl spacing="normal"> | ||||
| <dt>If the MAC Size field is greater than the keyed hash output | ||||
| length:</dt><dd>This case <bcp14>MUST NOT</bcp14> be generated an | ||||
| d, if | ||||
| received, <bcp14>MUST</bcp14> cause the DNS message to be | ||||
| dropped and RCODE 1 (FORMERR) to be returned.</dd> | ||||
| <t>Processing of a truncated MAC follows these rules:</t> | <dt>If the MAC Size field equals the keyed hash output length:</dt | |||
| <t><list style="numbers"> | ><dd>The | |||
| <t>If "MAC size" field is greater than keyed hash output length: | entire keyed hash output is present and used.</dd> | |||
| <vspace/><vspace/> | <dt>If the MAC Size field is less than the larger of 10 (octets) a | |||
| This case MUST NOT be generated and, if received, | nd | |||
| MUST cause the DNS message to be dropped and RCODE 1 | half the length of the hash function in use:</dt><dd>With the | |||
| (FORMERR) to be returned. | exception of certain TSIG error messages described | |||
| </t> | in <xref target="on_error" format="default"/>, where it is | |||
| <t>If "MAC size" field equals keyed hash output length: | permitted that the MAC Size be zero, this case <bcp14>MUST | |||
| <vspace/><vspace/> | NOT</bcp14> be generated and, if received, <bcp14>MUST</bcp14> | |||
| The entire output keyed hash output is present and used. | cause the DNS message to be dropped and RCODE 1 (FORMERR) to | |||
| </t> | be returned.</dd> | |||
| <t>"MAC size" field is less than the larger of 10 (octets) and half | <dt>Otherwise:</dt><dd>This is sent when the signer has truncated | |||
| the length of the hash function in use: | the keyed hash | |||
| <vspace/><vspace/> | output to an allowable length, as described in <xref | |||
| With the exception of certain TSIG error messages | target="RFC2104" format="default"/>, taking initial octets and | |||
| described in <xref target="on_error"/>, where it is | discarding trailing octets. TSIG truncation can only be to an | |||
| permitted that the MAC size be zero, this case MUST NOT | integral number of octets. On receipt of a DNS message with | |||
| be generated and, if received, MUST cause the DNS message to | truncation thus indicated, the locally calculated MAC is | |||
| be dropped and RCODE 1 (FORMERR) to be returned. | similarly truncated, and only the truncated values are compared | |||
| </t> | for authentication. The request MAC used when calculating the | |||
| <t>Otherwise: | TSIG MAC for a reply is the truncated request MAC.</dd> | |||
| <vspace/><vspace/> | </dl> | |||
| This is sent when the signer has truncated the keyed hash | ||||
| output to an allowable length, as described in | ||||
| <xref target="RFC2104"/>, taking initial octets and | ||||
| discarding trailing octets. TSIG truncation can only be | ||||
| to an integral number of octets. On receipt of a DNS message | ||||
| with truncation thus indicated, the locally calculated | ||||
| MAC is similarly truncated and only the truncated values | ||||
| are compared for authentication. The request MAC used | ||||
| when calculating the TSIG MAC for a reply is the | ||||
| truncated request MAC. | ||||
| </t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="time_check" numbered="true" toc="default"> | ||||
| <section title="Time Check and Error Handling" anchor="time_check"> | <name>Time Check and Error Handling</name> | |||
| <t>If the server time is outside the time interval specified | <t>If the server time is outside the time interval specified | |||
| by the request (which is: Time Signed, plus/minus Fudge), | by the request (which is the Time Signed value plus/minus | |||
| the server MUST generate an error response with RCODE 9 | the Fudge value), | |||
| (NOTAUTH) and TSIG ERROR 18 (BADTIME). The server SHOULD | the server <bcp14>MUST</bcp14> generate an error response with RCODE 9 | |||
| (NOTAUTH) and TSIG ERROR 18 (BADTIME). The server <bcp14>SHOULD</bcp1 | ||||
| 4> | ||||
| also cache the most recent Time Signed value in a message | also cache the most recent Time Signed value in a message | |||
| generated by a key, and SHOULD return BADTIME if a message | generated by a key and <bcp14>SHOULD</bcp14> return BADTIME if a messa ge | |||
| received later has an earlier Time Signed value. A | received later has an earlier Time Signed value. A | |||
| response indicating a BADTIME error MUST be signed by the | response indicating a BADTIME error <bcp14>MUST</bcp14> be signed by t | |||
| same key as the request. It MUST include the client's | he | |||
| same key as the request. It <bcp14>MUST</bcp14> include the client's | ||||
| current time in the Time Signed field, the server's current | current time in the Time Signed field, the server's current | |||
| time (an unsigned 48-bit integer) in the Other Data field, and 6 in th e | time (an unsigned 48-bit integer) in the Other Data field, and 6 in th e | |||
| Other Len field. This is done so that the client | Other Len field. This is done so that the client | |||
| can verify a message with a BADTIME error without the | can verify a message with a BADTIME error without the | |||
| verification failing due to another BADTIME error. In | verification failing due to another BADTIME error. In | |||
| addition, the Fudge field MUST be set to the fudge value | addition, the Fudge field <bcp14>MUST</bcp14> be set to the fudge valu e | |||
| received from the client. The data signed is specified in | received from the client. The data signed is specified in | |||
| <xref target="on_error"/>. The server SHOULD log the error.</t> | <xref target="on_error" format="default"/>. The server | |||
| <bcp14>SHOULD</bcp14> log the error.</t> | ||||
| <t>Caching the most recent Time Signed value and rejecting | <t>Caching the most recent Time Signed value and rejecting | |||
| requests with an earlier one could lead to valid messages | requests with an earlier one could lead to valid messages | |||
| being rejected if transit through the network led to UDP | being rejected if transit through the network led to UDP | |||
| packets arriving in a different order to the one in which | packets arriving in a different order to the one in which | |||
| they were sent. Implementations should be aware of | they were sent. Implementations should be aware of | |||
| this possibility and be prepared to deal with it, e.g. by | this possibility and be prepared to deal with it, e.g., by | |||
| retransmitting the rejected request with a new TSIG once | retransmitting the rejected request with a new TSIG once | |||
| outstanding requests have completed or the time given by their | outstanding requests have completed or the time given by their | |||
| Time Signed plus fudge value has passed. If implementations | Time Signed value plus the Fudge value has passed. If implementations | |||
| do retry requests in these cases, a limit SHOULD be placed | do retry requests in these cases, a limit <bcp14>SHOULD</bcp14> be pla | |||
| ced | ||||
| on the maximum number of retries.</t> | on the maximum number of retries.</t> | |||
| </section> | </section> | |||
| <section anchor="trunc_check" numbered="true" toc="default"> | ||||
| <section title="Truncation Check and Error Handling" | <name>Truncation Check and Error Handling</name> | |||
| anchor="trunc_check"> | ||||
| <t>If a TSIG is received with truncation that is permitted | <t>If a TSIG is received with truncation that is permitted | |||
| under <xref target="trunc"/> above but the MAC is too short | per <xref target="trunc" format="default"/> but the MAC is too short | |||
| for the local policy in force, an RCODE 9 (NOTAUTH) and TSIG | for the local policy in force, an RCODE 9 (NOTAUTH) and TSIG | |||
| ERROR 22 (BADTRUNC) MUST be returned. The server SHOULD | ERROR 22 (BADTRUNC) <bcp14>MUST</bcp14> be returned. The server <bcp14 >SHOULD</bcp14> | |||
| log the error.</t> | log the error.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Generation of TSIG on Answers" anchor="answers"> | <section anchor="answers" numbered="true" toc="default"> | |||
| <name>Generation of TSIG on Answers</name> | ||||
| <t>When a server has generated a response to a signed request, | <t>When a server has generated a response to a signed request, | |||
| it signs the response using the same algorithm and key. The | it signs the response using the same algorithm and key. The | |||
| server MUST NOT generate a signed response to a request if | server <bcp14>MUST NOT</bcp14> generate a signed response to a request i | |||
| either the KEY is invalid (e.g. key name or algorithm name are unknown), | f | |||
| or the MAC fails validation: see <xref target="on_error"/> for | either the key is invalid (e.g., key name or algorithm name are unknown) | |||
| or the MAC fails validation; see <xref target="on_error" format="default | ||||
| "/> for | ||||
| details of responding in these cases.</t> | details of responding in these cases.</t> | |||
| <t>It also <bcp14>MUST NOT</bcp14> generate a signed | ||||
| <t>It also MUST NOT not generate a signed | ||||
| response to an unsigned request, except in the case of a | response to an unsigned request, except in the case of a | |||
| response to a client's unsigned TKEY request if the secret key | response to a client's unsigned TKEY request if the secret key | |||
| is established on the server side after the server processed the | is established on the server side after the server processed the | |||
| client's request. Signing responses to unsigned TKEY requests | client's request. Signing responses to unsigned TKEY requests | |||
| MUST be explicitly specified in the description of an individual | <bcp14>MUST</bcp14> be explicitly specified in the description of an ind | |||
| secret key establishment algorithm <xref target="RFC3645"/>.</t> | ividual | |||
| secret key establishment algorithm <xref target="RFC3645" format="defaul | ||||
| t"/>.</t> | ||||
| <t>The digest components used to generate a TSIG on a response are:</t> | <t>The digest components used to generate a TSIG on a response are:</t> | |||
| <ul empty="true" spacing="compact"> | ||||
| <t><list style="empty"> | <li>Request MAC</li> | |||
| <t>Request MAC<vspace/> | <li>DNS Message (response)</li> | |||
| DNS Message (response)<vspace/> | <li>TSIG Variables (response)</li> | |||
| TSIG Variables (response)</t> | </ul> | |||
| </list></t> | ||||
| <t>(This calculation is different for the second and subsequent message | <t>(This calculation is different for the second and subsequent message | |||
| in a multi-message answer, see below.)</t> | in a multi-message answer; see below.)</t> | |||
| <t>If addition of the TSIG record will cause the message to be truncated , | <t>If addition of the TSIG record will cause the message to be truncated , | |||
| the server MUST alter the response so that a TSIG can be included. | the server <bcp14>MUST</bcp14> alter the response so that a TSIG can be | |||
| This response consists of only the question and a TSIG | included. | |||
| record, and has the TC bit set and an RCODE of 0 (NOERROR). The | This response contains only the question and a TSIG | |||
| client SHOULD at this point retry the request using TCP | record, has the TC bit set, and has an RCODE of 0 (NOERROR). | |||
| (as per <xref target="RFC1035"/> 4.2.2).</t> | At this point, the | |||
| client <bcp14>SHOULD</bcp14> retry the request using TCP | ||||
| <section title="TSIG on TCP Connections" | (as per <xref target="RFC1035" sectionFormat="of" section="4.2.2"/>).</t | |||
| anchor="tcp"> | > | |||
| <t>A DNS TCP session such as a zone transfer can include multiple | <section anchor="tcp" numbered="true" toc="default"> | |||
| <name>TSIG on TCP Connections</name> | ||||
| <t>A DNS TCP session, such as a zone transfer, can include multiple | ||||
| DNS messages. Using TSIG on such a connection can protect the | DNS messages. Using TSIG on such a connection can protect the | |||
| connection from attack and provide data integrity. The TSIG | connection from an attack and provide data integrity. The TSIG | |||
| MUST be included on all DNS messages in the response. For backward | <bcp14>MUST</bcp14> be included on all DNS messages in the response. Fo | |||
| compatibility, a client which receives DNS messages and verifies | r backward | |||
| TSIG MUST accept up to 99 intermediary messages without a TSIG and | compatibility, a client that receives DNS messages and verifies | |||
| MUST verify that both the first and last message contain a TSIG.</t> | TSIG <bcp14>MUST</bcp14> accept up to 99 intermediary messages without a | |||
| TSIG and | ||||
| <t>The first message is processed as a standard answer | <bcp14>MUST</bcp14> verify that both the first and last message contain | |||
| (see <xref target="answers"/>) but | a TSIG.</t> | |||
| subsequent messages have the following digest components:</t> | <t>The first message is processed as a standard answer (see <xref | |||
| target="answers" format="default"/>), but subsequent messages have | ||||
| <t><list style="empty"> | the following digest components:</t> | |||
| <t>Prior MAC (running)<vspace/> | <ul empty="true" spacing="compact"> | |||
| DNS Messages (any unsigned messages since the last TSIG)<vspace/> | <li>Prior MAC (running)</li> | |||
| TSIG Timers (current message)</t> | <li>DNS Messages (any unsigned messages since the last TSIG)</li> | |||
| </list></t> | <li>TSIG Timers (current message)</li> | |||
| </ul> | ||||
| <t>The "Prior MAC" is the MAC from the TSIG attached to the last | <t>The "Prior MAC" is the MAC from the TSIG attached to the last | |||
| message containing a TSIG. "DNS Messages" comprises the | message containing a TSIG. "DNS Messages" comprises the | |||
| concatenation (in message order) of all messages after the last | concatenation (in message order) of all messages after the last | |||
| message that included a TSIG and includes the current message. | message that included a TSIG and includes the current message. | |||
| "TSIG timers" comprises the "Time Signed" and "Fudge" fields (in | "TSIG Timers" comprises the Time Signed and Fudge fields (in | |||
| that order) pertaining to the message for which the TSIG is being create | that order) pertaining to the message for which the TSIG was created; | |||
| d: | ||||
| this means that the successive TSIG records in the stream will have | this means that the successive TSIG records in the stream will have | |||
| non-decreasing "Time Signed" fields. Note that only the | non-decreasing Time Signed values. Note that only the | |||
| timers are included in the second and subsequent messages, not all | timers are included in the second and subsequent messages, not all | |||
| the TSIG variables.</t> | the TSIG variables.</t> | |||
| <t>This allows the client to rapidly detect when the session has | ||||
| <t>This allows the client to rapidly detect when the session has | been altered; at which point, it can close the connection and retry. | |||
| been altered; at which point it can close the connection and retry. | If a client TSIG verification fails, the client <bcp14>MUST</bcp14> clos | |||
| If a client TSIG verification fails, the client MUST close the | e the | |||
| connection. If the client does not receive TSIG records frequently | connection. If the client does not receive TSIG records frequently | |||
| enough (as specified above) it SHOULD assume the connection has | enough (as specified above), it <bcp14>SHOULD</bcp14> assume the connect | |||
| been hijacked and it SHOULD close the connection. The client SHOULD | ion has | |||
| been hijacked, and it <bcp14>SHOULD</bcp14> close the connection. The | ||||
| client <bcp14>SHOULD</bcp14> | ||||
| treat this the same way as they would any other interrupted transfer | treat this the same way as they would any other interrupted transfer | |||
| (although the exact behavior is not specified).</t> | (although the exact behavior is not specified).</t> | |||
| </section> | </section> | |||
| <section anchor="on_error" numbered="true" toc="default"> | ||||
| <section title="Generation of TSIG on Error Returns" anchor="on_error"> | <name>Generation of TSIG on Error Returns</name> | |||
| <t>When a server detects an error relating to the key or MAC in the | <t>When a server detects an error relating to the key or MAC in the | |||
| incoming request, the | incoming request, the | |||
| server SHOULD send back an unsigned error message (MAC size == 0 | server <bcp14>SHOULD</bcp14> send back an unsigned error message (MAC Si | |||
| and empty MAC). It MUST NOT send back a signed error message.</t> | ze == 0 | |||
| and empty MAC). It <bcp14>MUST NOT</bcp14> send back a signed error mess | ||||
| <t>If an error is detected relating to the TSIG | age.</t> | |||
| <t>If an error is detected relating to the TSIG | ||||
| validity period or the MAC is too short for the local policy, | validity period or the MAC is too short for the local policy, | |||
| the server SHOULD send back a signed error message. | the server <bcp14>SHOULD</bcp14> send back a signed error message. | |||
| The digest components are:</t> | The digest components are:</t> | |||
| <ul empty="true" spacing="compact"> | ||||
| <t><list style="empty"> | <li>Request MAC (if the request MAC validated)</li> | |||
| <t>Request MAC (if the request MAC validated)<vspace/> | <li>DNS Message (response)</li> | |||
| DNS Message (response)<vspace/> | <li>TSIG Variables (response)</li> | |||
| TSIG Variables (response)</t> | </ul> | |||
| </list></t> | <t>The reason that the request MAC is not included in this MAC in | |||
| <t>The reason that the request MAC is not included in this MAC in | ||||
| some cases is to make it possible for the client to verify the | some cases is to make it possible for the client to verify the | |||
| error. If the error is not a TSIG error the response MUST be | error. If the error is not a TSIG error, the response <bcp14>MUST</bcp1 | |||
| generated as specified in <xref target="answers"/>.</t> | 4> be | |||
| </section> | generated as specified in <xref target="answers" format="default"/>.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="client_proc_answer" numbered="true" toc="default"> | ||||
| <section title="Client Processing of Answer" anchor="client_proc_answer"> | <name>Client Processing of Answer</name> | |||
| <t>When a client receives a response from a server and | <t>When a client receives a response from a server and | |||
| expects to see a TSIG, it first checks if the TSIG RR is | expects to see a TSIG, it first checks if the TSIG RR is | |||
| present in the response. If not, the response is treated as | present in the response. If not, the response is treated as | |||
| having a format error and is discarded.</t> | having a format error and is discarded.</t> | |||
| <t>If the TSIG RR is present, the client performs the same checks as | <t>If the TSIG RR is present, the client performs the same checks as | |||
| described in <xref target="request_processing"/>. If the TSIG RR is | described in <xref target="request_processing" format="default"/>. If t | |||
| unsigned as specified in <xref target="on_error"/> or does not | he TSIG RR is | |||
| validate, the message MUST be discarded unless the RCODE is 9 (NOAUTH). | unsigned as specified in <xref target="on_error" format="default"/> or d | |||
| In this case, the client SHOULD attempt to verify the response as if it | oes not | |||
| validate, the message <bcp14>MUST</bcp14> be discarded unless the RCODE | ||||
| is 9 (NOAUTH). | ||||
| In this case, the client <bcp14>SHOULD</bcp14> attempt to verify the res | ||||
| ponse as if it | ||||
| were a TSIG error, as described in the following subsections.</t> | were a TSIG error, as described in the following subsections.</t> | |||
| <t>Regardless of the RCODE, a message containing a TSIG RR that is | <t>Regardless of the RCODE, a message containing a TSIG RR that is | |||
| unsigned as specified in <xref target="on_error"/> or which fails | unsigned as specified in <xref target="on_error" format="default"/> or t | |||
| verification SHOULD NOT be considered an acceptable response as it | hat fails | |||
| verification <bcp14>SHOULD NOT</bcp14> be considered an acceptable respo | ||||
| nse, as it | ||||
| may have been spoofed or manipulated. Instead, the | may have been spoofed or manipulated. Instead, the | |||
| client SHOULD log an error and continue to wait for a signed response | client <bcp14>SHOULD</bcp14> log an error and continue to wait for a sig ned response | |||
| until the request times out.</t> | until the request times out.</t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Key Error Handling"> | <name>Key Error Handling</name> | |||
| <t>If an RCODE on a response is 9 (NOTAUTH), but the response | <t>If an RCODE on a response is 9 (NOTAUTH), but the response | |||
| TSIG validates and the TSIG key is recognized by the client | TSIG validates and the TSIG key is recognized by the client | |||
| but different from that used on the request, then this is a | but is different from that used on the request, then this is a | |||
| Key Error. The client MAY retry the request using the key | key-related error. The client <bcp14>MAY</bcp14> retry the request us | |||
| ing the key | ||||
| specified by the server. However, this should never occur, as | specified by the server. However, this should never occur, as | |||
| a server MUST NOT sign a response with a different key to that | a server <bcp14>MUST NOT</bcp14> sign a response with a different key to that | |||
| used to sign the request.</t> | used to sign the request.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="MAC Error Handling"> | <name>MAC Error Handling</name> | |||
| <t>If the response RCODE is 9 (NOTAUTH) and TSIG ERROR | <t>If the response RCODE is 9 (NOTAUTH) and TSIG ERROR | |||
| is 16 (BADSIG), this is a MAC error, and client MAY retry | is 16 (BADSIG), this is a MAC-related error, and clients <bcp14>MAY</b | |||
| the request with a new request ID but it would be better | cp14> retry | |||
| the request with a new request ID, but it would be better | ||||
| to try a different shared key if one is available. Clients | to try a different shared key if one is available. Clients | |||
| SHOULD keep track of how many MAC errors are associated | <bcp14>SHOULD</bcp14> keep track of how many MAC errors are associated | |||
| with each key. Clients SHOULD log this event.</t> | with each key. Clients <bcp14>SHOULD</bcp14> log this event.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Time Error Handling"> | <name>Time Error Handling</name> | |||
| <t>If the response RCODE is 9 (NOTAUTH) and the TSIG ERROR | <t>If the response RCODE is 9 (NOTAUTH) and the TSIG ERROR | |||
| is 18 (BADTIME), or the current time does not fall in the | is 18 (BADTIME) or the current time does not fall in the | |||
| range specified in the TSIG record, then this is a Time | range specified in the TSIG record, then this is a time-related | |||
| error. This is an indication that the client and server | error. This is an indication that the client and server | |||
| clocks are not synchronized. In this case the client | clocks are not synchronized. In this case, the client | |||
| SHOULD log the event. DNS resolvers MUST NOT adjust any | <bcp14>SHOULD</bcp14> log the event. DNS resolvers <bcp14>MUST | |||
| clocks in the client based on BADTIME errors, but the | NOT</bcp14> adjust any clocks in the client based on BADTIME errors, | |||
| server's time in the Other Data field SHOULD be logged.</t> | but the server's time in the Other Data field <bcp14>SHOULD</bcp14> | |||
| be logged.</t> | ||||
| </section> | </section> | |||
| <section anchor="trunc_err" numbered="true" toc="default"> | ||||
| <section title="Truncation Error Handling" anchor="trunc_err"> | <name>Truncation Error Handling</name> | |||
| <t>If the response RCODE is 9 (NOTAUTH) and the TSIG ERROR | <t>If the response RCODE is 9 (NOTAUTH) and the TSIG ERROR | |||
| is 22 (BADTRUNC) then this is a Truncation error. The client | is 22 (BADTRUNC), then this is a truncation-related error. The client | |||
| MAY retry with a lesser truncation up to the full HMAC output | <bcp14>MAY</bcp14> retry with a lesser truncation up to the full | |||
| (no truncation), using the truncation used in the response | HMAC output (no truncation), using the truncation used in the | |||
| as a hint for what the server policy allowed | response as a hint for what the server policy allowed (<xref | |||
| (<xref target="trunc_pol"/>). Clients SHOULD log this event.</t> | target="trunc_pol" format="default"/>). Clients | |||
| <bcp14>SHOULD</bcp14> log this event.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="forwarding" numbered="true" toc="default"> | ||||
| <section title="Special Considerations for Forwarding Servers" | <name>Special Considerations for Forwarding Servers</name> | |||
| anchor="forwarding"> | ||||
| <t>A server acting as a forwarding server of a DNS message | <t>A server acting as a forwarding server of a DNS message | |||
| SHOULD check for the existence of a TSIG record. If the name on | <bcp14>SHOULD</bcp14> check for the existence of a TSIG record. If the name on | |||
| the TSIG is not of a secret that the server shares with the | the TSIG is not of a secret that the server shares with the | |||
| originator the server MUST forward the message unchanged | originator, the server <bcp14>MUST</bcp14> forward the message unchanged | |||
| including the TSIG. If the name of the TSIG is of a key this | including the TSIG. If the name of the TSIG is of a key this | |||
| server shares with the originator, it MUST process the TSIG. If | server shares with the originator, it <bcp14>MUST</bcp14> process the TS | |||
| the TSIG passes all checks, the forwarding server MUST, if | IG. If | |||
| possible, include a TSIG of its own, to the destination or the | the TSIG passes all checks, the forwarding server <bcp14>MUST</bcp14>, i | |||
| f | ||||
| possible, include a TSIG of its own to the destination or the | ||||
| next forwarder. If no transaction security is available to the | next forwarder. If no transaction security is available to the | |||
| destination and the message is a query then, if the | destination and the message is a query, and if the | |||
| corresponding response has the AD flag (see <xref | corresponding response has the AD flag (see <xref target="RFC4035" | |||
| target="RFC4035"/>) set, the forwarder MUST clear the AD flag | format="default"/>) set, the forwarder <bcp14>MUST</bcp14> clear the | |||
| AD flag | ||||
| before adding the TSIG to the response and returning the result | before adding the TSIG to the response and returning the result | |||
| to the system from which it received the query.</t> | to the system from which it received the query.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="algorithm_id" numbered="true" toc="default"> | ||||
| <section title="Algorithms and Identifiers" anchor="algorithm_id"> | <name>Algorithms and Identifiers</name> | |||
| <t>The only message digest algorithm specified in the first | <t>The only message digest algorithm specified in the first | |||
| version of these specifications <xref target="RFC2845"/> was | version of these specifications <xref target="RFC2845" format="default"/> | |||
| "HMAC-MD5" (see <xref target="RFC1321"/>, <xref target="RFC2104"/>). | was | |||
| Although a review of its security some years ago <xref target="RFC6151"/> | "HMAC-MD5" (see <xref target="RFC1321" format="default"/> and <xref | |||
| concluded | target="RFC2104" format="default"/>). | |||
| Although a review of its security some years ago <xref target="RFC6151" | ||||
| format="default"/> concluded | ||||
| that "it may not be urgent to remove HMAC-MD5 from the existing | that "it may not be urgent to remove HMAC-MD5 from the existing | |||
| protocols", with the availability of more secure alternatives the | protocols", with the availability of more secure alternatives, the | |||
| opportunity has been taken to make the implementation of this | opportunity has been taken to make the implementation of this | |||
| algorithm optional. </t> | algorithm optional. </t> | |||
| <t><xref target="RFC4635" format="default"/> added mandatory support in | ||||
| <t><xref target="RFC4635"/> added mandatory support in TSIG for | TSIG for SHA-1 <xref target="FIPS180-4" format="default"/> <xref | |||
| SHA-1 <xref target="FIPS180-4"/>, <xref target="RFC3174"/>. | target="RFC3174" format="default"/>. SHA-1 collisions have been | |||
| SHA-1 collisions have been demonstrated <xref | demonstrated <xref target="SHA1SHAMBLES" format="default"/>, so the MD5 | |||
| target="SHA1SHAMBLES"/> so the MD5 security considerations | security considerations described in <xref target="RFC6151" | |||
| described in section 2 of <xref target="RFC6151"/> apply to SHA-1 in a sim | sectionFormat="of" section="2"/> apply to SHA-1 in a similar manner. | |||
| ilar | Although support for hmac-sha1 in TSIG is still mandatory for | |||
| manner. Although support for hmac-sha1 in TSIG is still mandatory | compatibility reasons, existing uses <bcp14>SHOULD</bcp14> be replaced | |||
| for compatibility reasons, existing uses SHOULD be replaced with | with hmac-sha256 or other SHA-2 digest algorithms (<xref | |||
| hmac-sha256 or other SHA-2 digest algorithms <xref | target="FIPS180-4" format="default"/>, <xref target="RFC3874" | |||
| target="FIPS180-4"/>, <xref target="RFC3874"/>, <xref | format="default"/>, <xref target="RFC6234" format="default"/>).</t> | |||
| target="RFC6234"/>.</t> | ||||
| <t>Use of TSIG between two DNS agents is by mutual | <t>Use of TSIG between two DNS agents is by mutual | |||
| agreement. That agreement can include the support of additional | agreement. That agreement can include the support of additional | |||
| algorithms and criteria as to which algorithms and truncations are | algorithms and criteria as to which algorithms and truncations are | |||
| acceptable, subject to the restriction and guidelines in | acceptable, subject to the restriction and guidelines in | |||
| <xref target="trunc"/> above. | <xref target="trunc" format="default"/>. | |||
| Key agreement can be by the TKEY mechanism <xref target="RFC2930"/> | Key agreement can be by the TKEY mechanism <xref target="RFC2930" format=" | |||
| default"/> | ||||
| or some other mutually agreeable method.</t> | or some other mutually agreeable method.</t> | |||
| <t>Implementations that support TSIG <bcp14>MUST</bcp14> | ||||
| <t>Implementations that support TSIG MUST | also implement HMAC SHA1 and HMAC SHA256 and <bcp14>MAY</bcp14> implement | |||
| also implement HMAC SHA1 and HMAC SHA256 and MAY implement | ||||
| gss-tsig and the other algorithms listed below. SHA-1 truncated | gss-tsig and the other algorithms listed below. SHA-1 truncated | |||
| to 96 bits (12 octets) SHOULD be implemented.</t> | to 96 bits (12 octets) <bcp14>SHOULD</bcp14> be implemented.</t> | |||
| <!-- | ||||
| <texttable style="headers" anchor="allowed_algs"> | ||||
| <ttcol>Requirement</ttcol> | ||||
| <ttcol>Name</ttcol> | ||||
| <c>Optional</c> <c>HMAC-MD5.SIG-ALG.REG.INT</c> | ||||
| <c>Optional</c> <c>gss-tsig</c> | ||||
| <c>Mandatory</c> <c>hmac-sha1</c> | ||||
| <c>Optional</c> <c>hmac-sha224</c> | ||||
| <c>Optional</c> <c>hmac-sha256-128</c> | ||||
| <c>Mandatory</c> <c>hmac-sha256</c> | ||||
| <c>Optional</c> <c>hmac-sha384-192</c> | ||||
| <c>Optional</c> <c>hmac-sha384</c> | ||||
| <c>Optional</c> <c>hmac-sha512-256</c> | ||||
| <c>Optional</c> <c>hmac-sha512</c> | ||||
| </texttable> | ||||
| <texttable style="headers" anchor="allowed-algorithms"> | ||||
| <ttcol>Name</ttcol> | ||||
| <ttcol>Implementation</ttcol> | ||||
| <ttcol>Use</ttcol> | ||||
| <c>HMAC-MD5.SIG-ALG.REG.INT</c> <c>MAY</c> <c>MUST NOT</c> | ||||
| <c>gss-tsig</c> <c>MAY</c> <c>MAY</c> | ||||
| <c>hmac-sha1</c> <c>MUST</c> <c>NOT RECOMMENDED</c> | ||||
| <c>hmac-sha224</c> <c>MAY</c> <c>MAY</c> | ||||
| <c>hmac-sha256</c> <c>MUST</c> <c>RECOMMENDED</c> | ||||
| <c>hmac-sha256-128</c> <c>MAY</c> <c>MAY</c> | ||||
| <c>hmac-sha384</c> <c>MAY</c> <c>MAY</c> | ||||
| <c>hmac-sha384-192</c> <c>MAY</c> <c>MAY</c> | ||||
| <c>hmac-sha512</c> <c>MAY</c> <c>MAY</c> | ||||
| <c>hmac-sha512-256</c> <c>MAY</c> <c>MAY</c> | ||||
| </texttable> | ||||
| <table anchor="allowed-algorithms" align="center"> | ||||
| <name>Algorithms for Implementations Supporting TSIG</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Algorithm Name</th> | ||||
| <th align="left">Implementation</th> | ||||
| <th align="left">Use</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">HMAC-MD5.SIG-ALG.REG.INT</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MUST NOT</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">gss-tsig</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha1</td> | ||||
| <td align="left"><bcp14>MUST</bcp14></td> | ||||
| <td align="left"><bcp14>NOT RECOMMENDED</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha224</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha256</td> | ||||
| <td align="left"><bcp14>MUST</bcp14></td> | ||||
| <td align="left"><bcp14>RECOMMENDED</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha256-128</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha384</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha384-192</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha512</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">hmac-sha512-256</td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| <td align="left"><bcp14>MAY</bcp14></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section anchor="trunc_pol" numbered="true" toc="default"> | ||||
| <section title="TSIG Truncation Policy" anchor="trunc_pol"> | <name>TSIG Truncation Policy</name> | |||
| <t>As noted above, two DNS agents (e.g., resolver and server) must | <t>As noted above, two DNS agents (e.g., resolver and server) must | |||
| mutually agree to use TSIG. | mutually agree to use TSIG. | |||
| Implicit in such an "agreement" are criteria as to acceptable keys and | Implicit in such an "agreement" are criteria as to acceptable keys, | |||
| algorithms and, with the extensions in this document, truncations. | algorithms, and (with the extensions in this document) truncations. | |||
| Local policies MAY require the rejection of TSIGs, even though | Local policies <bcp14>MAY</bcp14> require the rejection of TSIGs, even tho | |||
| ugh | ||||
| they use an algorithm for which implementation is mandatory.</t> | they use an algorithm for which implementation is mandatory.</t> | |||
| <t>When a local policy permits acceptance of a TSIG with a particular | <t>When a local policy permits acceptance of a TSIG with a particular | |||
| algorithm and a particular non-zero amount of truncation, it SHOULD | algorithm and a particular non-zero amount of truncation, it <bcp14>SHOULD </bcp14> | |||
| also permit the use of that algorithm with lesser truncation (a | also permit the use of that algorithm with lesser truncation (a | |||
| longer MAC) up to the full keyed hash output.</t> | longer MAC) up to the full keyed hash output.</t> | |||
| <t>Regardless of a lower acceptable truncated MAC length specified by | <t>Regardless of a lower acceptable truncated MAC length specified by | |||
| local policy, a reply SHOULD be sent with a MAC at least as long as | local policy, a reply <bcp14>SHOULD</bcp14> be sent with a MAC at least as | |||
| that in the corresponding request. Note if the request specified a MAC | long as | |||
| length longer than the keyed hash output it will be rejected by | that in the corresponding request. Note, if the request specified a MAC | |||
| processing rules <xref target="trunc"/> case 1.</t> | length longer than the keyed hash output, it will be rejected by | |||
| processing rules (<xref target="trunc" format="default"/>, case 1).</t> | ||||
| <t>Implementations permitting multiple acceptable algorithms and/or | <t>Implementations permitting multiple acceptable algorithms and/or | |||
| truncations SHOULD permit this list to be ordered by presumed | truncations <bcp14>SHOULD</bcp14> permit this list to be ordered by presum | |||
| strength and SHOULD allow different truncations for the same | ed | |||
| strength and <bcp14>SHOULD</bcp14> allow different truncations for the sam | ||||
| e | ||||
| algorithm to be treated as separate entities in this list. When so | algorithm to be treated as separate entities in this list. When so | |||
| implemented, policies SHOULD accept a presumed stronger algorithm and | implemented, policies <bcp14>SHOULD</bcp14> accept a presumed stronger alg orithm and | |||
| truncation than the minimum strength required by the policy.</t> | truncation than the minimum strength required by the policy.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Shared Secrets"> | <name>Shared Secrets</name> | |||
| <t>Secret keys are very sensitive information and all available | <t>Secret keys are very sensitive information and all available | |||
| steps should be taken to protect them on every host on which they | steps should be taken to protect them on every host on which they | |||
| are stored. Generally such hosts need to be physically protected. | are stored. Generally, such hosts need to be physically protected. | |||
| If they are multi-user machines, great care should be taken that | If they are multi-user machines, great care should be taken so that | |||
| unprivileged users have no access to keying material. Resolvers | unprivileged users have no access to keying material. Resolvers | |||
| often run unprivileged, which means all users of a host would be | often run unprivileged, which means all users of a host would be | |||
| able to see whatever configuration data is used by the resolver.</t> | able to see whatever configuration data are used by the resolver.</t> | |||
| <t>A name server usually runs privileged, which means its | <t>A name server usually runs privileged, which means its | |||
| configuration data need not be visible to all users of the host. | configuration data need not be visible to all users of the host. | |||
| For this reason, a host that implements transaction-based | For this reason, a host that implements transaction-based | |||
| authentication should probably be configured with a "stub | authentication should probably be configured with a "stub | |||
| resolver" and a local caching and forwarding name server. This | resolver" and a local caching and forwarding name server. This | |||
| presents a special problem for <xref target="RFC2136"/> which | presents a special problem for <xref target="RFC2136" format="default"/>, which | |||
| otherwise depends on clients to communicate only with a zone's | otherwise depends on clients to communicate only with a zone's | |||
| authoritative name servers.</t> | authoritative name servers.</t> | |||
| <t>Use of strong, random shared secrets is essential to the | ||||
| <t>Use of strong random shared secrets is essential to the | security of TSIG. See <xref target="RFC4086" format="default"/> for a dis | |||
| security of TSIG. See <xref target="RFC4086"/> for a discussion | cussion | |||
| of this issue. The secret SHOULD be at least as long as the keyed hash | of this issue. The secret <bcp14>SHOULD</bcp14> be at least as long as th | |||
| output <xref target="RFC2104"/>.</t> | e keyed hash | |||
| output <xref target="RFC2104" format="default"/>.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <t>IANA maintains a registry of algorithm names to be used as | <t>IANA maintains a registry of algorithm names to be used as | |||
| "Algorithm Names" as defined in <xref target="format"/>. Algorithm | "Algorithm Names", as defined in <xref target="format" | |||
| format="default"/> <xref target="IANA-TSIG"/>. Algorithm | ||||
| names are text strings encoded using the syntax of a domain name. There | names are text strings encoded using the syntax of a domain name. There | |||
| is no structure to the names, and algorithm names are compared | is no structure to the names, and algorithm names are compared | |||
| as if they were DNS names, i.e., comparison is case | as if they were DNS names, i.e., comparison is case | |||
| insensitive. Previous specifications <xref target="RFC2845"/> and <xref | insensitive. Previous specifications (<xref target="RFC2845" | |||
| target="RFC4635"/> defined values for the HMAC-MD5 and some HMAC-SHA | format="default"/> and <xref target="RFC4635" format="default"/>) | |||
| defined values for the HMAC-MD5 and some HMAC-SHA | ||||
| algorithms. IANA has also registered "gss-tsig" as an identifier for TSIG | algorithms. IANA has also registered "gss-tsig" as an identifier for TSIG | |||
| authentication where the cryptographic operations are delegated to the | authentication where the cryptographic operations are delegated to the | |||
| Generic Security Service (GSS) <xref target="RFC3645"/>. This document | Generic Security Service (GSS) <xref target="RFC3645" format="default"/>. | |||
| adds to allowed algorithms, and the registry should be updated with the | This document | |||
| names listed in <xref target="allowed-algorithms"/>.</t> | adds to the allowed algorithms, and the registry has been updated with the | |||
| names listed in <xref target="allowed-algorithms" format="default"/>.</t> | ||||
| <t>New algorithms are assigned using | <t>New algorithms are assigned using | |||
| the IETF Review policy defined in <xref target="RFC8126"/>. | the IETF Review policy defined in <xref target="RFC8126" format="default"/ >. | |||
| The algorithm name | The algorithm name | |||
| HMAC-MD5.SIG-ALG.REG.INT looks like a fully-qualified domain | HMAC-MD5.SIG-ALG.REG.INT looks like a fully qualified domain | |||
| name for historical reasons; | name for historical reasons; | |||
| other algorithm names are simple, single-component names.</t> | other algorithm names are simple, single-component names.</t> | |||
| <t>IANA maintains a registry of RCODES (error codes), including | <t>IANA maintains a registry of RCODEs (error codes) (see <xref | |||
| "TSIG Error values" to be used for "Error" values as defined in | target="IANA-RCODEs"/>, including | |||
| <xref target="format"/>. New error codes are assigned and | "TSIG Error values" to be used for "Error" values, as defined in | |||
| specified as in <xref target="RFC6895"/>.</t> | <xref target="format" format="default"/>. This document defines the RCODE | |||
| s as | ||||
| described in <xref target="numbers"/>. New error codes are assigned and | ||||
| specified as in <xref target="RFC6895" format="default"/>.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Security Considerations"> | <name>Security Considerations</name> | |||
| <t>The approach specified here is computationally much less | <t>The approach specified here is computationally much less | |||
| expensive than the signatures specified in DNSSEC. As long as | expensive than the signatures specified in DNSSEC. As long as | |||
| the shared secret key is not compromised, strong authentication | the shared secret key is not compromised, strong authentication | |||
| is provided between two DNS systems, e.g., for the last hop from | is provided between two DNS systems, e.g., for the last hop from | |||
| a local name server to the user resolver, or between primary and | a local name server to the user resolver or between primary and | |||
| secondary nameservers.</t> | secondary name servers.</t> | |||
| <t>Recommendations for choosing and maintaining secret keys can be found | <t>Recommendations for choosing and maintaining secret keys can be found | |||
| in <xref target="RFC2104"/>. If the client host has been compromised, | in <xref target="RFC2104" format="default"/>. If the client host has been compromised, | |||
| the server should suspend the use of all secrets known to that client. | the server should suspend the use of all secrets known to that client. | |||
| If possible, secrets should be stored in encrypted form. Secrets should | If possible, secrets should be stored in an encrypted form. Secrets shoul d | |||
| never be transmitted in the clear over any network. This document does | never be transmitted in the clear over any network. This document does | |||
| not address the issue on how to distribute secrets except that it | not address the issue on how to distribute secrets except that it | |||
| mentions the possibilities of manual configuration and the use of TKEY | mentions the possibilities of manual configuration and the use of TKEY | |||
| <xref target="RFC2930"/>. Secrets SHOULD NOT be shared by more than two | <xref target="RFC2930" format="default"/>. Secrets <bcp14>SHOULD | |||
| NOT</bcp14> be shared by more than two | ||||
| entities; any such additional sharing would allow any party knowing the | entities; any such additional sharing would allow any party knowing the | |||
| key to impersonate any other such party to members of the group.</t> | key to impersonate any other such party to members of the group.</t> | |||
| <t>This mechanism does not authenticate source data, only its | <t>This mechanism does not authenticate source data, only its | |||
| transmission between two parties who share some secret. The | transmission between two parties who share some secret. The | |||
| original source data can come from a compromised zone master or | original source data can come from a compromised zone master or | |||
| can be corrupted during transit from an authentic zone master to | can be corrupted during transit from an authentic zone master to | |||
| some "caching forwarder." However, if the server is faithfully | some "caching forwarder". However, if the server is faithfully | |||
| performing the full DNSSEC security checks, then | performing the full DNSSEC security checks, then | |||
| only security checked data will be available to the client.</t> | only security-checked data will be available to the client.</t> | |||
| <t>A Fudge value that is too large may leave the server open | ||||
| <t>A fudge value that is too large may leave the server open | to replay attacks. A Fudge value that is too small may cause | |||
| to replay attacks. A fudge value that is too small may cause | ||||
| failures if machines are not time synchronized or there are unexpected | failures if machines are not time synchronized or there are unexpected | |||
| network delays. The RECOMMENDED value in most situations is 300 | network delays. The <bcp14>RECOMMENDED</bcp14> value in most situations i s 300 | |||
| seconds.</t> | seconds.</t> | |||
| <t>To prevent cross-algorithm attacks, there <bcp14>SHOULD</bcp14> only be | ||||
| <t>To prevent cross-algorithm attacks, there SHOULD only be one | one | |||
| algorithm associated with any given key name.</t> | algorithm associated with any given key name.</t> | |||
| <t>In several cases where errors are detected, an unsigned error | <t>In several cases where errors are detected, an unsigned error | |||
| message must be returned. This can allow for an attacker to spoof | message must be returned. This can allow for an attacker to spoof | |||
| or manipulate these responses. <xref target="client_proc_answer"/> | or manipulate these responses. <xref target="client_proc_answer" format=" default"/> | |||
| recommends logging these as errors and continuing to wait for a | recommends logging these as errors and continuing to wait for a | |||
| signed response until the request times out.</t> | signed response until the request times out.</t> | |||
| <t>Although the strength of an algorithm determines its security, | <t>Although the strength of an algorithm determines its security, | |||
| there have been some arguments that mild truncation can | there have been some arguments that mild truncation can | |||
| strengthen a MAC by reducing the information available to an | strengthen a MAC by reducing the information available to an | |||
| attacker. However, excessive truncation clearly weakens authentication by | attacker. However, excessive truncation clearly weakens authentication by | |||
| reducing the number of bits an attacker has to try to break the | reducing the number of bits an attacker has to try to break the | |||
| authentication by brute force <xref target="RFC2104"/>.</t> | authentication by brute force <xref target="RFC2104" format="default"/>.</ | |||
| t> | ||||
| <t>Significant progress has been made recently in cryptanalysis of hash | <t>Significant progress has been made recently in cryptanalysis of hash | |||
| functions of the types used here. While the results so far should not | functions of the types used here. While the results so far should not | |||
| affect HMAC, the stronger SHA-256 algorithm is being made mandatory as a | affect HMAC, the stronger SHA-256 algorithm is being made mandatory as a | |||
| precaution.</t> | precaution.</t> | |||
| <t>See also the Security Considerations section of <xref | <t>See also the Security Considerations section of <xref | |||
| target="RFC2104"/> from which the limits on truncation in this | target="RFC2104" format="default"/> from which the limits on truncation | |||
| RFC were taken.</t> | in this RFC were taken.</t> | |||
| <section anchor="issuesfixed" numbered="true" toc="default"> | ||||
| <section title="Issue Fixed in this Document" anchor="issuesfixed"> | <name>Issue Fixed in This Document</name> | |||
| <t>When signing a DNS reply message using TSIG, the MAC | <t>When signing a DNS reply message using TSIG, the MAC | |||
| computation uses the request message's MAC as an input to | computation uses the request message's MAC as an input to | |||
| cryptographically relate the reply to the request. The | cryptographically relate the reply to the request. The | |||
| original TSIG specification <xref target="RFC2845"/> required | original TSIG specification <xref target="RFC2845" format="default"/> r | |||
| that the TIME values be checked before the request's MAC. If | equired | |||
| the TIME was invalid, some implementations failed to carry out | that the time values be checked before the request's MAC. If | |||
| the time was invalid, some implementations failed to carry out | ||||
| further checks and could use an invalid request MAC in the | further checks and could use an invalid request MAC in the | |||
| signed reply.</t> | signed reply.</t> | |||
| <t>This document makes it mandatory that the request MAC | ||||
| <t>This document makes it a mandatory that the request MAC | is considered to be invalid until it has been validated; | |||
| is considered to be invalid until it has been validated: | ||||
| until then, any answer must be unsigned. For this reason, the | until then, any answer must be unsigned. For this reason, the | |||
| request MAC is now checked before the TIME value.</t> | request MAC is now checked before the time values.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Why Not DNSSEC?</name> | ||||
| <section title="Why not DNSSEC?"> | <t>DNS has been extended by DNSSEC | |||
| <t>These extracts from the original document <xref target="RFC2845"/> | (<xref target="RFC4033" format="default"/>, <xref target="RFC4034" | |||
| (updated to reference current standards) analyze DNSSEC in order to | format="default"/>, and | |||
| justify the introduction of TSIG.</t> | <xref target="RFC4035" format="default"/>) to provide for data origin | |||
| <t><list style="empty" hangIndent="10"> | ||||
| <t>DNS has recently been extended by DNSSEC | ||||
| (<xref target="RFC4033"/>, <xref target="RFC4034"/> and | ||||
| <xref target="RFC4035"/>) to provide for data origin | ||||
| authentication, and public key distribution, all based on | authentication, and public key distribution, all based on | |||
| public key cryptography and public key based digital | public key cryptography and public key based digital | |||
| signatures. To be practical, this form of security | signatures. To be practical, this form of security | |||
| generally requires extensive local caching of keys and | generally requires extensive local caching of keys and | |||
| tracing of authentication through multiple keys and | tracing of authentication through multiple keys and | |||
| signatures to a pre-trusted locally configured key.</t> | signatures to a pre-trusted locally configured key.</t> | |||
| <t>One difficulty with the DNSSEC scheme is that common DNS | ||||
| <t>One difficulty with the DNSSEC scheme is that common DNS | ||||
| implementations include simple "stub" resolvers which do not | implementations include simple "stub" resolvers which do not | |||
| have caches. Such resolvers typically rely on a caching DNS | have caches. Such resolvers typically rely on a caching DNS | |||
| server on another host. It is impractical for these stub | server on another host. It is impractical for these stub | |||
| resolvers to perform general DNSSEC authentication and they | resolvers to perform general DNSSEC authentication and they | |||
| would naturally depend on their caching DNS server to | would naturally depend on their caching DNS server to | |||
| perform such services for them. To do so securely requires | perform such services for them. To do so securely requires | |||
| secure communication of queries and responses. DNSSEC | secure communication of queries and responses. DNSSEC | |||
| provides public key transaction signatures to support this, | provides public key transaction signatures to support this, | |||
| but such signatures are very expensive computationally to | but such signatures are very expensive computationally to | |||
| generate. In general, these require the same complex public | generate. In general, these require the same complex public | |||
| key logic that is impractical for stubs.</t> | key logic that is impractical for stubs.</t> | |||
| </list></t> | ||||
| <t>and</t> | <t>A second area where use of straight DNSSEC public key based | |||
| mechanisms may be impractical is authenticating dynamic update <xref | ||||
| target="RFC2136" format="default"/> requests. DNSSEC provides for | ||||
| request signatures but with DNSSEC they, like transaction | ||||
| signatures, require computationally expensive public key | ||||
| cryptography and complex authentication logic. Secure Domain Name | ||||
| System Dynamic Update (<xref target="RFC3007" format="default"/>) | ||||
| describes how different keys are used in dynamically updated | ||||
| zones.</t> | ||||
| <t><list style="empty" hangIndent="10"> | ||||
| <t>A second area where use of straight DNSSEC public key | ||||
| based mechanisms may be impractical is authenticating | ||||
| dynamic update <xref target="RFC2136"/> requests. DNSSEC | ||||
| provides for request signatures but with DNSSEC they, like | ||||
| transaction signatures, require computationally expensive | ||||
| public key cryptography and complex authentication logic. | ||||
| Secure Domain Name System Dynamic Update | ||||
| (<xref target="RFC3007"/>) describes how different keys are | ||||
| used in dynamically updated zones.</t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | ||||
| <reference anchor="FIPS180-4" target=""> | <references> | |||
| <front> | <name>References</name> | |||
| <references> | ||||
| <name>Normative References</name> | ||||
| <reference anchor="FIPS180-4" target=""> | ||||
| <front> | ||||
| <title>Secure Hash Standard (SHS)</title> | <title>Secure Hash Standard (SHS)</title> | |||
| <seriesInfo name="FIPS" value="PUB 180-4"/> | ||||
| <author> | <author> | |||
| <organization>National Institute of Standards and | <organization>National Institute of Standards and | |||
| Technology</organization> | Technology</organization> | |||
| </author> | </author> | |||
| <date month="August" year="2015"/> | <date month="August" year="2015"/> | |||
| </front> | </front> | |||
| <seriesInfo name="FIPS" value="PUB 180-4"/> | <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/> | |||
| </reference> | </reference> | |||
| <?rfc include="reference.RFC.1034.xml"?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.1035.xml"?> | ence.RFC.1034.xml"/> | |||
| <?rfc include="reference.RFC.2119.xml"?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.2845.xml"?> | ence.RFC.1035.xml"/> | |||
| <?rfc include="reference.RFC.3597.xml"?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.4635.xml"?> | ence.RFC.2119.xml"/> | |||
| <?rfc include="reference.RFC.8174.xml"?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| </references> | ence.RFC.2845.xml"/> | |||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3597.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4635.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8174.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <references title="Informative References"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <!-- | ence.RFC.7696.xml"/> | |||
| <reference anchor="FIPS202" target=""> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <front> | ence.RFC.1321.xml"/> | |||
| <title>SHA-3 Standard</title> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| ence.RFC.2104.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2136.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2930.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3007.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3174.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3645.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3874.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4033.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4034.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4035.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4086.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4868.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6151.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6234.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6895.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8126.xml"/> | ||||
| <reference anchor="CVE-2017-3142" target="https://cve.mitre.org/cgi-bin/ | ||||
| cvename.cgi?name=CVE-2017-3142"> | ||||
| <front> | ||||
| <title>CVE-2017-3142: An error in TSIG authentication can permit una | ||||
| uthorized zone transfers</title> | ||||
| <author> | <author> | |||
| <organization>National Institute of Standards and | <organization>Common Vulnerabilities and Exposures</organization> | |||
| Technology</organization> | ||||
| </author> | </author> | |||
| <date month="August" year="2015"/> | <date month="June" year="2017"/> | |||
| </front> | </front> | |||
| <seriesInfo name="FIPS" value="PUB 202"/> | </reference> | |||
| </reference> | <reference anchor="CVE-2017-3143" target="https://cve.mitre.org/cgi-bin/ | |||
| <reference anchor="BCP201" target="https://www.rfc-editor.org/info/bcp201" | cvename.cgi?name=CVE-2017-3143"> | |||
| > | <front> | |||
| <front> | <title>CVE-2017-3143: An error in TSIG authentication can permit una | |||
| <title>Guidelines for Cryptographic Algorithm Agility and Selecting Ma | uthorized dynamic updates</title> | |||
| ndatory-to-Implement Algorithms</title> | <author> | |||
| <author initials="R." surname="Housley" fullname="R. Housley"> | <organization>Common Vulnerabilities and Exposures</organization> | |||
| <organization/> | </author> | |||
| </author> | <date month="June" year="2017"/> | |||
| <date year="2015" month="November"/> | </front> | |||
| </front> | </reference> | |||
| <seriesInfo name="BCP" value="201"/> | <reference anchor="CVE-2017-11104" target="https://cve.mitre.org/cgi-bin | |||
| <seriesInfo name="RFC" value="7696"/> | /cvename.cgi?name=CVE-2017-11104"> | |||
| <seriesInfo name="DOI" value="10.17487/RFC7696"/> | <front> | |||
| </reference> | <title>CVE-2017-11104: Improper TSIG validity period check can allow | |||
| <?rfc include="reference.RFC.1321.xml"?> | TSIG forgery</title> | |||
| <?rfc include="reference.RFC.2104.xml"?> | <author> | |||
| <?rfc include="reference.RFC.2136.xml"?> | <organization>Common Vulnerabilities and Exposures</organization> | |||
| <?rfc include="reference.RFC.2930.xml"?> | </author> | |||
| <?rfc include="reference.RFC.3007.xml"?> | <date month="June" year="2017"/> | |||
| <?rfc include="reference.RFC.3174.xml"?> | </front> | |||
| <?rfc include="reference.RFC.3645.xml"?> | </reference> | |||
| <?rfc include="reference.RFC.3874.xml"?> | <reference anchor="SHA1SHAMBLES" target="https://eprint.iacr.org/2020/01 | |||
| <?rfc include="reference.RFC.4033.xml"?> | 4.pdf"> | |||
| <?rfc include="reference.RFC.4034.xml"?> | <front> | |||
| <?rfc include="reference.RFC.4035.xml"?> | <title>SHA-1 is a Shambles</title> | |||
| <?rfc include="reference.RFC.4086.xml"?> | <author surname="Leurent" initials="G" fullname="Gaetan Leurent"/> | |||
| <?rfc include="reference.RFC.4868.xml"?> | <author surname="Peyrin" initials="T" fullname="Thomas Peyrin"/> | |||
| <?rfc include="reference.RFC.6151.xml"?> | <date month="January" year="2020"/> | |||
| <?rfc include="reference.RFC.6234.xml"?> | </front> | |||
| <?rfc include="reference.RFC.6895.xml"?> | </reference> | |||
| <?rfc include="reference.RFC.8126.xml"?> | ||||
| <reference anchor="CVE-2017-3142" target="https://cve.mitre.org/cgi-bin/cv | ||||
| ename.cgi?name=CVE-2017-3142"> | ||||
| <front> | ||||
| <title>CVE-2017-3142: An error in TSIG authentication can permit unaut | ||||
| horized zone transfers</title> | ||||
| <author> | ||||
| <organization>Common Vulnerabilities and Exposures</organization> | ||||
| </author> | ||||
| <date month="June" year="2017"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="CVE-2017-3143" target="https://cve.mitre.org/cgi-bin/cv | ||||
| ename.cgi?name=CVE-2017-3143"> | ||||
| <front> | ||||
| <title>CVE-2017-3143: An error in TSIG authentication can permit unaut | ||||
| horized dynamic updates</title> | ||||
| <author> | ||||
| <organization>Common Vulnerabilities and Exposures</organization> | ||||
| </author> | ||||
| <date month="June" year="2017"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="CVE-2017-11104" target="https://cve.mitre.org/cgi-bin/c | ||||
| vename.cgi?name=CVE-2017-11104"> | ||||
| <front> | ||||
| <title>CVE-2017-11104: Improper TSIG validity period check can allow T | ||||
| SIG forgery</title> | ||||
| <author> | ||||
| <organization>Common Vulnerabilities and Exposures</organization> | ||||
| </author> | ||||
| <date month="June" year="2017"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="SHA1SHAMBLES" target="https://eprint.iacr.org/2020/014. | ||||
| pdf"> | ||||
| <front> | ||||
| <title>SHA-1 is a Shambles</title> | ||||
| <author surname="Leurent" initials="G"/> | ||||
| <author surname="Peyrin" initials="T"/> | ||||
| <date month="January" year="2020"/> | ||||
| </front> | ||||
| </reference> | ||||
| <!-- <reference anchor="TRANCOLL" target="https://eprint.iacr.org/2020/014. | ||||
| pdf"> | ||||
| <front> | ||||
| <title>SHA-1 is a Shambles</title> | ||||
| <author surname="Leurent" initials="G"/> | ||||
| <author surname="Peyrin" initials="T"/> | ||||
| <date month="January" year="2016"/> | ||||
| </front> | ||||
| </reference> --> | ||||
| </references> | ||||
| <section title="Acknowledgments" anchor="acks"> | ||||
| <t>This document consolidates and updates the earlier documents | ||||
| by the authors of <xref target="RFC2845"/> (Paul Vixie, | ||||
| Olafur Gudmundsson, Donald E. Eastlake 3rd and Brian Wellington) | ||||
| and <xref target="RFC4635"/> (Donald E. Eastlake 3rd).</t> | ||||
| <t>The security problem addressed by this document was reported | ||||
| by Clement Berthaux from Synacktiv.</t> | ||||
| <t>Note for the RFC Editor (to be removed before publication): | ||||
| the first 'e' in Clement is a fact a small 'e' with acute, | ||||
| unicode code U+00E9. I do not know if xml2rfc supports non ASCII | ||||
| characters so I prefer to not experiment with it. BTW I am French too | ||||
| so I can help if you have questions like correct spelling...</t> | ||||
| <t>Peter van Dijk, Benno Overeinder, Willem Toroop, Ondrej Sury, | ||||
| Mukund Sivaraman and Ralph Dolmans participated in the discussions | ||||
| that prompted this document. Mukund Sivaraman, Martin Hoffman and | ||||
| Tony Finch made extremely helpful suggestions concerning the | ||||
| structure and wording of the updated document.</t> | ||||
| <!-- If we get the reporter correctly spelled we can try to fix some | ||||
| others here: I can't believe unicode is not required for at least | ||||
| another name! --> | ||||
| </section> | ||||
| <section title="Change History (to be removed before publication)"> | ||||
| <t>RFC EDITOR: Please remove this appendix before publication.</t> | ||||
| <t>draft-dupont-dnsop-rfc2845bis-00</t> | ||||
| <t><list> | ||||
| <t><xref target="RFC4635"/> was merged.</t> | ||||
| <t>Authors of original documents were moved to | ||||
| Acknowledgments (<xref target="acks"/>).</t> | ||||
| <t><xref target="keywords"/> was updated to | ||||
| <xref target="RFC8174"/> style.</t> | ||||
| <t>Spit references into normative and informative references | ||||
| and updated them.</t> | ||||
| <t>Added a text explaining why this document was written | ||||
| in the Abstract and at the beginning of the introduction.</t> | ||||
| <t>Clarified the layout of TSIG RDATA.</t> | ||||
| <t>Moved the text about using DNSSEC from the Introduction | ||||
| to the end of Security Considerations.</t> | ||||
| <t>Added the security clarifications: | ||||
| <list style="numbers"> | ||||
| <t>Emphasized that MAC is invalid until it is successfully | ||||
| validated.</t> | ||||
| <t>Added requirement that a request MAC that has not been | ||||
| successfully validated MUST NOT be included into a | ||||
| response.</t> | ||||
| <t>Added requirement that a request that has not been | ||||
| validated MUST NOT generate a signed response.</t> | ||||
| <t>Added note about MAC too short for the local policy to | ||||
| <xref target="on_error"/>.</t> | ||||
| <t>Changed the order of server checks and swapped corresponding | ||||
| sections.</t> | ||||
| <t>Removed the truncation size limit "also case" as it does not | ||||
| apply and added confusion.</t> | ||||
| <t>Relocated the error provision for TSIG truncation to the new | ||||
| <xref target="trunc_check"/>. Moved from RCODE 22 | ||||
| to RCODE 9 and TSIG ERROR 22, i.e., aligned with other TSIG | ||||
| error cases.</t> | ||||
| <t>Added <xref target="trunc_err"/> about truncation error | ||||
| handling by clients.</t> | ||||
| <t>Removed the limit to HMAC output in replies as a request | ||||
| which specified a MAC length longer than the HMAC output | ||||
| is invalid according to the first processing rule in <xref | ||||
| target="trunc"/>.</t> | ||||
| <t>Promoted the requirement that a secret length should be | ||||
| at least as long as the HMAC output to a SHOULD | ||||
| <xref target="RFC2119"/> key word.</t> | ||||
| <t>Added a short text to explain the security issue.</t> | ||||
| </list></t> | ||||
| </list></t> | ||||
| <t>draft-dupont-dnsop-rfc2845bis-01</t> | ||||
| <t><list> | ||||
| <t>Improved wording (post-publication comments).</t> | ||||
| <t>Specialized and renamed the "TSIG on TCP connection" | ||||
| (<xref target="tcp"/>) to "TSIG on zone transfer over a TCP | ||||
| connection". Added a SHOULD for a TSIG in each message | ||||
| (was envelope) for new implementations.</t> | ||||
| <!-- No other usage than zone transfer --> | ||||
| <!-- Is a current implementation not adding a TSIG to each message --> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-00</t> | ||||
| <t><list> | ||||
| <t>Adopted by the IETF DNSOP working group: title updated | ||||
| and version counter reset to 00.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-01</t> | ||||
| <t><list> | ||||
| <t>Relationship between protocol change and principle of | ||||
| assuming the request MAC is invalid until validated clarified. | ||||
| (Jinmei Tatuya)</t> | ||||
| <t>Cross reference to considerations for forwarding servers | ||||
| added. (Bob Harold)</t> | ||||
| <t>Added text from <xref target="RFC3645"/> concerning the | ||||
| signing behavior if a secret key is added during a multi-message | ||||
| exchange.</t> | ||||
| <t>Added reference to <xref target="RFC6895"/>.</t> | ||||
| <t>Many improvements in the wording.</t> | ||||
| <t>Added RFC 2845 authors as co-authors of this document.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-02</t> | ||||
| <t><list> | ||||
| <t>Added a recommendation to copy time fields in BADKEY errors. | ||||
| (Mark Andrews)</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-03</t> | ||||
| <t><list> | ||||
| <t>Further changes as a result of comments by Mukund Sivaraman.</t> | ||||
| <t>Miscellaneous changes to wording.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-04</t> | ||||
| <t><list> | ||||
| <t>Major restructuring as a result of comprehensive review by Martin Hoff | ||||
| man. | ||||
| Amongst the more significant changes: | ||||
| <list style="symbols"> | ||||
| <t>More comprehensive introduction.</t> | ||||
| <t>Merged "Protocol Description" and "Protocol Details" sections.</t> | ||||
| <t>Reordered sections so as to follow message exchange through "client | ||||
| "sending", "server receipt", "server sending", "client receipt".</t> | ||||
| <t>Added miscellaneous clarifications.</t> | ||||
| </list></t> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-05</t> | <reference anchor="IANA-TSIG" | |||
| <t><list> | target="https://www.iana.org/assignments/tsig-algorithm-names/"> | |||
| <t>Make implementation of HMAC-MD5 optional.</t> | <front> | |||
| <t>Require that the Fudge field in BADTIME response be equal to the | <title>TSIG Algorithm Names</title> | |||
| Fudge field received from the client.</t> | <author><organization>IANA</organization></author> | |||
| <t>Added comment concerning the handling of BADTIME messages due to out | </front> | |||
| of order packet reception.</t> | </reference> | |||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-06</t> | <reference anchor="IANA-RCODEs" | |||
| <t><list> | target="https://www.iana.org/assignments/dns-parameters/"> | |||
| <t>Wording changes and minor corrections after feedback.</t> | <front> | |||
| </list></t> | <title>DNS RCODEs</title> | |||
| <author><organization>IANA</organization></author> | ||||
| </front> | ||||
| </reference> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-07</t> | </references> | |||
| <t><list> | </references> | |||
| <t>Updated text about use of hmac-sha1 using suggestion from | ||||
| Tony Finch.</t> | ||||
| <t>Corrected name of review policy used for new algorithms.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-08</t> | <section anchor="acks" numbered="false" toc="default"> | |||
| <t><list> | <name>Acknowledgements</name> | |||
| <t>Addressed comments from IESG review. These can be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-dnsop-rfc2845bis/ballot. | ||||
| Significant changes are: | ||||
| <list style="symbols"> | ||||
| <t>Added references to CVEs that initiated this draft.</t> | ||||
| <t>Added reference to paper describing SHA1 collisions.</t> | ||||
| <t>Modified some paragraphs to remove language that has not "aged well" | ||||
| .</t> | ||||
| <t>Mentioned that multiple keys allows for periodic key rotation.</t> | ||||
| <t>Noted that TSIG detects interruption of packet sequence but not prem | ||||
| ature termination.</t> | ||||
| <t>Added new algorithms to the algorithm list.</t> | ||||
| <t>Marked hmac-sha224 as NOT RECOMMENDED.</t> | ||||
| <t>Added recommendation that there should only be one algorithm for eac | ||||
| h key.</t> | ||||
| <t>Added some paragraphs to the security recommendations section.</t> | ||||
| </list></t> | ||||
| <t>Other changes: | <t>The security problem addressed by this document was reported by | |||
| <list style="symbols"> | <contact fullname="Clément Berthaux"/> from Synacktiv.</t> | |||
| <t>Explicitly define contents Error field in requests. State that "Oth | <t><contact fullname="Peter van Dijk"/>, <contact fullname="Benno | |||
| er Data" currently has no | Overeinder"/>, <contact fullname="Willem Toroop"/>, <contact | |||
| meaning in requests.</t> | fullname="Ondrej Sury"/>, <contact fullname="Mukund Sivaraman"/>, and | |||
| <t>Reworked the section on client processing of response to remove ambi | <contact fullname="Ralph Dolmans"/> participated in the discussions that | |||
| guity.</t> | prompted this document. <contact fullname="Mukund Sivaraman"/>, | |||
| <t>Section on TSIG over TCP now mentions zone transfer as an example, r | <contact fullname="Martin Hoffman"/>, and <contact fullname="Tony | |||
| ather than the entire section | Finch"/> made extremely helpful suggestions concerning the structure and | |||
| being about zone transfers.</t> | wording of the updated document.</t> | |||
| <t>Note that quote from RFC2845 in "What is DNSSEC?" section has been e | ||||
| dited to | ||||
| refer to the latest standards.</t> | ||||
| </list></t> | ||||
| </list></t> | ||||
| <t>draft-ietf-dnsop-rfc2845bis-09</t> | <t>Stephen Morris would like to thank Internet Systems Consortium for its | |||
| <t><list> | support of his participation in the creation of this document.</t> | |||
| <t>Change use of hmac-224 from NOT RECOMMENDED to MAY.</t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 196 change blocks. | ||||
| 1051 lines changed or deleted | 875 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||