| < draft-ietf-dnsop-kskroll-sentinel-03.txt | draft-ietf-dnsop-kskroll-sentinel-04.txt > | |||
|---|---|---|---|---|
| DNSOP G. Huston | DNSOP G. Huston | |||
| Internet-Draft J. Damas | Internet-Draft J. Damas | |||
| Intended status: Standards Track APNIC | Intended status: Standards Track APNIC | |||
| Expires: September 1, 2018 W. Kumari | Expires: September 1, 2018 W. Kumari | |||
| February 28, 2018 | February 28, 2018 | |||
| A Sentinel for Detecting Trusted Keys in DNSSEC | A Sentinel for Detecting Trusted Keys in DNSSEC | |||
| draft-ietf-dnsop-kskroll-sentinel-03 | draft-ietf-dnsop-kskroll-sentinel-04 | |||
| Abstract | Abstract | |||
| The DNS Security Extensions (DNSSEC) were developed to provide origin | The DNS Security Extensions (DNSSEC) were developed to provide origin | |||
| authentication and integrity protection for DNS data by using digital | authentication and integrity protection for DNS data by using digital | |||
| signatures. These digital signatures can be verified by building a | signatures. These digital signatures can be verified by building a | |||
| chain of trust starting from a trust anchor and proceeding down to a | chain of trust starting from a trust anchor and proceeding down to a | |||
| particular node in the DNS. This document specifies a mechanism that | particular node in the DNS. This document specifies a mechanism that | |||
| will allow an end user to determine the trusted key state for the | will allow an end user and third parties to determine the trusted key | |||
| root key of the resolvers that handle that user's DNS queries. Note | state for the root key of the resolvers that handle that user's DNS | |||
| that this method is only applicable for determing which keys are in | queries. Note that this method is only applicable for determing | |||
| the trust store for the root key. | which keys are in the trust store for the root key. | |||
| There is an example / toy implementation of this at http://www.ksk- | There is an example / toy implementation of this at http://www.ksk- | |||
| test.net . | test.net . | |||
| [ This document is being collaborated on in Github at: | [ This document is being collaborated on in Github at: | |||
| https://github.com/APNIC-Labs/draft-kskroll-sentinel. The most | https://github.com/APNIC-Labs/draft-kskroll-sentinel. The most | |||
| recent version of the document, open issues, etc should all be | recent version of the document, open issues, etc should all be | |||
| available here. The authors (gratefully) accept pull requests. Text | available here. The authors (gratefully) accept pull requests. Text | |||
| in square brackets will be removed before publication. ] | in square brackets will be removed before publication. ] | |||
| [ NOTE: This version uses the labels "kskroll-sentinel-is-ta-<tag- | [ NOTE: This version uses the labels "kskroll-sentinel-is-ta-<key- | |||
| index>", "kskroll-sentinel-not-ta-<tag-index>"; older versions of | tag>", "kskroll-sentinel-not-ta-<key-tag>"; older versions of this | |||
| this document used "_is-ta-<tag-index>", "_not-ta-<tag-index>". Also | document used "_is-ta-<key-tag>", "_not-ta-<key-tag>". Also note | |||
| note that the format of the tag-index is now decimal. Apolgies to | that the format of the tag-index is now zero-filled decimal. | |||
| those who have began implmenting.] | Apolgies to those who have began implmenting.] | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| skipping to change at page 2, line 31 ¶ | skipping to change at page 2, line 31 ¶ | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Use Case . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Protocol Walkthrough Example . . . . . . . . . . . . . . . . 3 | |||
| 3. Sentinel Mechanism in Resolvers . . . . . . . . . . . . . . . 6 | 3. Sentinel Mechanism in Resolvers . . . . . . . . . . . . . . . 6 | |||
| 4. Processing Sentinel Results . . . . . . . . . . . . . . . . . 7 | 4. Processing Sentinel Results . . . . . . . . . . . . . . . . . 8 | |||
| 5. Sentinel Test Result Considerations . . . . . . . . . . . . . 9 | 5. Sentinel Test Result Considerations . . . . . . . . . . . . . 9 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 9. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 10. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 13 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 13 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 13 | 11.2. Informative References . . . . . . . . . . . . . . . . . 13 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
| 1. Introduction | 1. Introduction | |||
| The DNS Security Extensions (DNSSEC) [RFC4033], [RFC4034] and | The DNS Security Extensions (DNSSEC) [RFC4033], [RFC4034] and | |||
| [RFC4035] were developed to provide origin authentication and | [RFC4035] were developed to provide origin authentication and | |||
| integrity protection for DNS data by using digital signatures. | integrity protection for DNS data by using digital signatures. | |||
| DNSSEC uses Key Tags to efficiently match signatures to the keys from | DNSSEC uses Key Tags to efficiently match signatures to the keys from | |||
| which they are generated. The Key Tag is a 16-bit value computed | which they are generated. The Key Tag is a 16-bit value computed | |||
| from the RDATA portion of a DNSKEY RR using a formula similar to a | from the RDATA portion of a DNSKEY RR using a formula similar to a | |||
| ones-complement checksum. RRSIG RRs contain a Key Tag field whose | ones-complement checksum. RRSIG RRs contain a Key Tag field whose | |||
| value is equal to the Key Tag of the DNSKEY RR that validates the | value is equal to the Key Tag of the DNSKEY RR that validates the | |||
| signature. | signature. | |||
| This document specifies how validating resolvers can respond to | This document specifies how validating resolvers can respond to | |||
| certain queries in a manner that allows a querier to deduce whether a | certain queries in a manner that allows a querier to deduce whether a | |||
| particular key for the root has been loaded into that resolver's | particular key for the root has been loaded into that resolver's | |||
| trusted key store. In particular, this response mechanism can be | trusted key store. In particular, this response mechanism can be | |||
| used to determine whether a certain root zone KSK is ready to be used | used to determine whether a certain root zone KSK is ready to be used | |||
| as a trusted key within the context of a key roll by this resolver. | as a trusted key within the context of a key roll by this resolver. | |||
| This new mechanism is OPTIONAL to implement and use, although for | There are two primary use cases for this mechanism: | |||
| reasons of supporting broad-based measurement techniques, it is | ||||
| o Users want to know whether the resolvers they use are ready for an | ||||
| upcoming root KSK rollover | ||||
| o Researchers want to perform Internet-wide studies about the | ||||
| percentage of users who will be ready for an upcoming root KSK | ||||
| rollover | ||||
| The mechanism described in this document meets both of these use | ||||
| cases. This new mechanism is OPTIONAL to implement and use, although | ||||
| for reasons of supporting broad-based measurement techniques, it is | ||||
| strongly preferred that configurations of DNSSEC-validating resolvers | strongly preferred that configurations of DNSSEC-validating resolvers | |||
| enabled this mechanism by default, allowing for local configuration | enabled this mechanism by default, allowing for local configuration | |||
| directives to disable this mechanism if desired. | directives to disable this mechanism if desired. | |||
| 1.1. Terminology | 1.1. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119. | document are to be interpreted as described in RFC 2119. | |||
| Note that example.com, AAAA records and the IPv6 documentation prefix | 2. Protocol Walkthrough Example | |||
| (2001:db8::/32) are only examples - A records (or CNAMES), other IPs, | ||||
| other domains work just as well. | ||||
| 2. Use Case | ||||
| [Ed note: This is currently towards the front of the document; we | [Ed note: This is currently towards the front of the document; we | |||
| will make it an appendix at publication time, but until then it is | will make it an appendix at publication time, but until then it is | |||
| worth having up front, as it makes the rest of the document much | worth having up front, as it makes the rest of the document much | |||
| easier to understand ] | easier to understand ] | |||
| This section provides a non-normative example of how the sentinel | This section provides a non-normative example of how the sentinel | |||
| mechanism could be used, and what each participant does. It is | mechanism could be used, and what each participant does. It is | |||
| provided in a conversational tone to be easier to follow. | provided in a conversational tone to be easier to follow. | |||
| Alice is in charge of the DNS root KSK (Key Signing Key), and would | Alice is in charge of the DNS root KSK (Key Signing Key), and would | |||
| like to roll / replace the key with a new one. She publishes the new | like to roll / replace the key with a new one. She publishes the new | |||
| KSK, but would like to be able to predict / measure what the impact | KSK, but would like to be able to predict / measure what the impact | |||
| will be before removing/revoking the old key. The current KSK has a | will be before removing/revoking the old key. The current KSK has a | |||
| key ID of 1111, the new KSK has a key ID of 2222. Users want to | key ID of 11112, the new KSK has a key ID of 02323. Users want to | |||
| verify that their resolver will not break after Alice rolls the root | verify that their resolver will not break after Alice rolls the root | |||
| KSK key (that is, starts signing with just the KSK whose key ID is | KSK key (that is, starts signing with just the KSK whose key ID is | |||
| 2222). | 02323). | |||
| Bob, Charlie, Dave, Ed are all users. They use the DNS recursive | Bob, Charlie, Dave, Ed are all users. They use the DNS recursive | |||
| resolvers supplied by their ISPs. They would like to confirm that | resolvers supplied by their ISPs. They would like to confirm that | |||
| their ISPs have picked up the new KSK. Bob's ISP does not perform | their ISPs have picked up the new KSK. Bob's ISP does not perform | |||
| validation. Charlie's ISP does validate, but the resolvers have not | validation. Charlie's ISP does validate, but the resolvers have not | |||
| yet been upgraded to support this mechanism. Dave and Ed's resolvers | yet been upgraded to support this mechanism. Dave and Ed's resolvers | |||
| have been upgraded to support this mechanism; Dave's resolver has the | have been upgraded to support this mechanism; Dave's resolver has the | |||
| new KSK, Ed's resolver hasn't managed to install the 2222 KSK in its | new KSK, Ed's resolver hasn't managed to install the 02323 KSK in its | |||
| trust store yet. | trust store yet. | |||
| Geoff is a researcher, and would like to both provide a means for | Geoff is a researcher, and would like to both provide a means for | |||
| Bob, Charlie, Dave and Ed to be able to perform tests, and also would | Bob, Charlie, Dave and Ed to be able to perform tests, and also would | |||
| like to be able to perform Internet-wide measurements of what the | like to be able to perform Internet-wide measurements of what the | |||
| impact will be (and report this back to Alice). | impact will be (and report this back to Alice). | |||
| Geoff sets an authoritative DNS server for example.com, and also a | Geoff sets an authoritative DNS server for example.com, and also a | |||
| webserver (www.example.com). He adds 3 AAAA records to example.com: | webserver (www.example.com). He adds three address records to | |||
| example.com: | ||||
| invalid.example.com. IN AAAA 2001:db8::1 | invalid.example.com. IN AAAA 2001:db8::1 | |||
| kskroll-sentinel-is-ta-2222.example.com. IN AAAA 2001:db8::1 | kskroll-sentinel-is-ta-02323.example.com. IN AAAA 2001:db8::1 | |||
| kskroll-sentinel-not-ta-2222.example.com. IN AAAA 2001:db8::1 | kskroll-sentinel-not-ta-02323.example.com. IN AAAA 2001:db8::1 | |||
| Note that the use of "example.com" names and the addresses here are | ||||
| examples. In a real deployment, the domain names need to be under | ||||
| control of the researcher, and the addresses much be real, reachable | ||||
| addresses. | ||||
| Geoff then DNSSEC signs the example.com zone, and intentionally makes | Geoff then DNSSEC signs the example.com zone, and intentionally makes | |||
| the invalid.example.com record invalid/bogus (for example, by editing | the invalid.example.com record invalid/bogus (for example, by editing | |||
| the signed zone and entering garbage for the signature). Geoff also | the signed zone and entering garbage for the signature). Geoff also | |||
| configures his webserver to listen on 2001:db8::1 and serve a | configures his webserver to listen on 2001:db8::1 and serve a | |||
| resource (for example, a 1x1 GIF, 1x1.gif) for all of these names. | resource (for example, a 1x1 GIF, 1x1.gif) for all of these names. | |||
| The webserver also serves a webpage (www.example.com) which contains | The webserver also serves a webpage (www.example.com) which contains | |||
| links to these 3 resources (http://invalid.example.com/1x1.gif, | links to these 3 resources (http://invalid.example.com/1x1.gif, | |||
| http://kskroll-sentinel-is-ta-2222.example.com/1x1.gif, | http://kskroll-sentinel-is-ta-02323.example.com/1x1.gif, | |||
| http://kskroll-sentinel-not-ta-2222.example.com/1x1.gif). | http://kskroll-sentinel-not-ta-02323.example.com/1x1.gif). | |||
| Geoff then asks Bob, Charlie, Dave and Ed to browse to | Geoff then asks Bob, Charlie, Dave and Ed to browse to | |||
| www.example.com. Using the methods described in this document, the | www.example.com. Using the methods described in this document, the | |||
| users can figure out what their fate will be when the 1111 KSK is | users can figure out what their fate will be when the 11112 KSK is | |||
| removed. | removed. | |||
| Bob is not using a validating resolver. This means that he will be | Bob is not using a validating resolver. This means that he will be | |||
| able to resolve invalid.example.com (and fetch the 1x1 GIF) - this | able to resolve invalid.example.com (and fetch the 1x1 GIF) - this | |||
| tells him that the KSK roll does not affect him, and so he will be | tells him that the KSK roll does not affect him, and so he will be | |||
| OK. | OK. | |||
| Charlie's resolvers are validating, but they have not been upgraded | Charlie's resolvers are validating, but they have not been upgraded | |||
| to support the KSK sentinel mechanism. Charlie will not be able to | to support the KSK sentinel mechanism. Charlie will not be able to | |||
| fetch the http://invalid.example.com/1x1.gif resource (the | fetch the http://invalid.example.com/1x1.gif resource (the | |||
| invalid.example.com record is bogus, and none of his resolvers will | invalid.example.com record is bogus, and none of his resolvers will | |||
| resolve it). He is able to fetch both of the other resources - from | resolve it). He is able to fetch both of the other resources - from | |||
| this he knows (see the logic below) that he is using legacy, | this he knows (see the logic below) that he is using legacy, | |||
| validating resolvers. The KSK sentinel method cannot provided him | validating resolvers. The KSK sentinel method cannot provided him | |||
| with a definitive answer to the question of what root trust anchors | with a definitive answer to the question of what root trust anchors | |||
| this resolver is using. | this resolver is using. | |||
| Dave's resolvers implement the sentinel method, and have picked up | Dave's resolvers implement the sentinel method, and have picked up | |||
| the new KSK. For the same reason as Charlie, he cannot fetch the | the new KSK. For the same reason as Charlie, he cannot fetch the | |||
| "invalid" resource. His resolver resolves the kskroll-sentinel-is- | "invalid" resource. His resolver resolves the kskroll-sentinel-is- | |||
| ta-2222.example.com name normally (it contacts the example.com | ta-02323.example.com name normally (it contacts the example.com | |||
| authoritative servers, etc); as it supports the sentinel mechanism, | authoritative servers, etc); as it supports the sentinel mechanism, | |||
| just before Dave's recursive server send the reply to Dave's stub, it | just before Dave's recursive server send the reply to Dave's stub, it | |||
| performs the KSK Sentinel check (see below). The QNAME starts with | performs the KSK Sentinel check (see below). The QNAME starts with | |||
| "kskroll-sentinel-is-ta-", and the recursive resolver does indeed | "kskroll-sentinel-is-ta-", and the recursive resolver does indeed | |||
| have a key with the Key ID of 2222 in its root trust store. This | have a key with the Key ID of 02323 in its root trust store. This | |||
| means that that this part of the KSK Sentinel check passes (it is | means that that this part of the KSK Sentinel check passes (it is | |||
| true that 2222 is in the trust anchor store), and the recursive | true that Key ID 02323 is in the trust anchor store), and the | |||
| resolver replies normally (with the answer provided by the | recursive resolver replies normally (with the answer provided by the | |||
| authoritative server). Dave's recursive resolver then resolves the | authoritative server). Dave's recursive resolver then resolves the | |||
| kskroll-sentinel-not-ta-2222.example.com name. Once again, it | kskroll-sentinel-not-ta-02323.example.com name. Once again, it | |||
| performs the normal resolution process, but because it implements KSK | performs the normal resolution process, but because it implements KSK | |||
| Sentinel (and the QNAME starts with "kskroll-sentinel-not-ta-"), just | Sentinel (and the QNAME starts with "kskroll-sentinel-not-ta-"), just | |||
| before sending the reply, it performs the KSK Sentinel check. As it | before sending the reply, it performs the KSK Sentinel check. As it | |||
| has 2222 in it's trust anchor store, the answer to "is this *not* a | has 02323 in it's trust anchor store, the answer to "is this *not* a | |||
| trust anchor" is false, and so the recursive resolver does not reply | trust anchor" is false, and so the recursive resolver does not reply | |||
| with the answer from the authoritative server - instead, it replies | with the answer from the authoritative server - instead, it replies | |||
| with a SERVFAIL (note that replying with SERVFAIL instead of the | with a SERVFAIL (note that replying with SERVFAIL instead of the | |||
| original answer is the only mechanism that KSK Sentinel uses). This | original answer is the only mechanism that KSK Sentinel uses). This | |||
| means that Dave cannot fetch "invalid", he can fetch "kskroll- | means that Dave cannot fetch "invalid", he can fetch "kskroll- | |||
| sentinel-is-ta-2222", but he cannot fetch "kskroll-sentinel-not-ta- | sentinel-is-ta-02323", but he cannot fetch "kskroll-sentinel-not-ta- | |||
| 2222". From this, Dave knows that he is behind an upgraded, | 02323". From this, Dave knows that he is behind an upgraded, | |||
| validating resolver, which has successfully installed the new, 2222 | validating resolver, which has successfully installed the new, 02323 | |||
| KSK. | KSK. | |||
| Just like Charlie and Dave, Ed cannot fetch the "invalid" record. | Just like Charlie and Dave, Ed cannot fetch the "invalid" record. | |||
| This tells him that his resolvers are validating. When his | This tells him that his resolvers are validating. When his | |||
| (upgraded) resolver performs the KSK Sentinel check for "kskroll- | (upgraded) resolver performs the KSK Sentinel check for "kskroll- | |||
| sentinel-is-ta-2222", it does *not* have the (new, 2222) KSK in it's | sentinel-is-ta-02323", it does *not* have the (new, 02323) KSK in | |||
| trust anchor store. This means check fails, and Ed's recursive | it's trust anchor store. This means check fails, and Ed's recursive | |||
| resolver converts the (valid) answer into a SERVFAIL error response. | resolver converts the (valid) answer into a SERVFAIL error response. | |||
| It performs the same check for kskroll-sentinel-not-ta- | It performs the same check for kskroll-sentinel-not-ta- | |||
| 2222.example.com; as it does not have the 2222 KSK, it is true that | 02323.example.com; as it does not have the 02323 KSK, it is true that | |||
| this is not a trust anchor for it, and so it replies normally. This | this is not a trust anchor for it, and so it replies normally. This | |||
| means that Ed cannot fetch the "invalid" resource, he also cannot | means that Ed cannot fetch the "invalid" resource, he also cannot | |||
| fetch the "kskroll-sentinel-is-ta-2222" resource, but he can fetch | fetch the "kskroll-sentinel-is-ta-02323" resource, but he can fetch | |||
| the "kskroll-sentinel-not-ta-2222" resource. This tells Ed that his | the "kskroll-sentinel-not-ta-02323" resource. This tells Ed that his | |||
| resolvers have not installed the new KSK. | resolvers have not installed the new KSK. | |||
| Geoff would like to do a large scale test and provide the information | Geoff would like to do a large scale test and provide the information | |||
| back to Alice. He uses some mechanism such as causing users to go to | back to Alice. He uses some mechanism such as causing users to go to | |||
| a web page to cause a large number of users to attempt to resolve the | a web page to cause a large number of users to attempt to resolve the | |||
| three resources, and then analyzes the results of the tests to | three resources, and then analyzes the results of the tests to | |||
| determine what percentage of users will be affected by the KSK | determine what percentage of users will be affected by the KSK | |||
| rollover event. | rollover event. | |||
| The above description is a simplified example - it is not anticipated | The above description is a simplified example - it is not anticipated | |||
| skipping to change at page 6, line 30 ¶ | skipping to change at page 6, line 42 ¶ | |||
| servers. That reflects on how many resolvers will be impacted by a | servers. That reflects on how many resolvers will be impacted by a | |||
| KSK roll, but not what the user impact of the KSK roll will be. | KSK roll, but not what the user impact of the KSK roll will be. | |||
| 3. Sentinel Mechanism in Resolvers | 3. Sentinel Mechanism in Resolvers | |||
| DNSSEC-Validating resolvers that implement this mechanism MUST be | DNSSEC-Validating resolvers that implement this mechanism MUST be | |||
| performing validation of responses in accordance with the DNSSEC | performing validation of responses in accordance with the DNSSEC | |||
| response validation specification [RFC4035]. | response validation specification [RFC4035]. | |||
| This sentinel mechanism makes use of two special labels. The | This sentinel mechanism makes use of two special labels. The | |||
| "kskroll-sentinel-is-ta-<tag-index>" label is used in a query where | "kskroll-sentinel-is-ta-<key-tag>" label is used in a query where the | |||
| the response can answer whether this is the key tag of a trust anchor | response can answer whether this the Key Tag of a trust anchor which | |||
| which the validating DNS resolver is currently trusting. The | the validating DNS resolver is currently trusting. The "kskroll- | |||
| "kskroll-sentinel-not-ta-<tag-index>" label is used in a query where | sentinel-not-ta-<key-tag>" label is used in a query where the | |||
| the response can answer whether this is the key tag of a trust anchor | response can answer whether this the Key Tag of a trust anchor that | |||
| which the validating DNS resolver is NOT currently trusting. | is NOT in currently trusting. | |||
| The use of the positive question and its inverse allows for queries | The use of the positive question and its inverse allows for queries | |||
| to detect whether resolvers support this sentinel mechanism. Note | to detect whether resolvers support this sentinel mechanism. Note | |||
| that the test is "Is there an active key with this KeyID in the | that the test is "Is there an active key with this KeyID in the | |||
| resolver's current trust store for the DNS root?", not "Is there any | resolver's current trust store for the DNS root?", not "Is there any | |||
| key with this KeyID in the trust store", nor "Was a key with this | key with this KeyID in the trust store", nor "Was a key with this | |||
| KeyID used to validate this query?". An active key is one which | KeyID used to validate this query?". An active key is one which | |||
| could currently be used for validation (that is, a key that is not in | could currently be used for validation (that is, a key that is not in | |||
| either the AddPend or Revoked state as described in [RFC5011]). | either the AddPend or Revoked state as described in [RFC5011]). | |||
| If the outcome of the DNSSEC validation process on the response | If the outcome of the DNSSEC validation process on the response | |||
| indicates that the response is authentic, and if the left-most label | indicates that the response is authentic, and if the left-most label | |||
| of the original query name matches the template "kskroll-sentinel-is- | of the original query name matches the template "kskroll-sentinel-is- | |||
| ta-<tag-index>.", then the following rule should be applied to the | ta-<key-tag>.", then the following rule should be applied to the | |||
| response: If the resolver has placed a root zone KSK with tag index | response: If the resolver has placed a root zone KSK with Key Tag | |||
| value matching the value specified in the query into the local | value matching the value specified in the query into the local | |||
| resolver's store of trusted keys, then the resolver should return a | resolver's store of trusted keys, then the resolver should return a | |||
| response indicating that the response contains authenticated data | response indicating that the response contains authenticated data | |||
| according to section 5.8 of [RFC6840]. Otherwise, the resolver MUST | according to section 5.8 of [RFC6840]. Otherwise, the resolver MUST | |||
| return RCODE 2 (server failure). Note that the <tag-index> is | return RCODE 2 (server failure). Note that the <tag-index> is | |||
| specified in the DNS label using decimal notation (as described in | specified in the DNS label using decimal notation (as described in | |||
| [RFC4034], section 5.3), zero padded to 5 digits. | [RFC4034], section 5.3), zero-padded to five digits. | |||
| If the outcome of the DNSSEC validation process applied to the | If the outcome of the DNSSEC validation process applied to the | |||
| response indicates that the response is authentic, and if the left- | response indicates that the response is authentic, and if the left- | |||
| most label of the original query name matches the template "kskroll- | most label of the original query name matches the template "kskroll- | |||
| sentinel-not-ta-<tag-index>.", then the following rule should be | sentinel-not-ta-<key-tag>.", then the following rule should be | |||
| applied to the response: If the resolver has not placed a root zone | applied to the response: If the resolver has not placed a root zone | |||
| KSK with tag index value matching the value specified in the query | KSK with Key Tag value matching the value specified in the query into | |||
| into the local resolver's store of trusted keys, then the resolver | the local resolver's store of trusted keys, then the resolver should | |||
| should return a response indicating that the response contains | return a response indicating that the response contains authenticated | |||
| authenticated data according to section 5.8 of [RFC6840]. Otherwise, | data according to section 5.8 of [RFC6840]. Otherwise, the resolver | |||
| the resolver MUST return RCODE 2 (server failure). Note that the | MUST return RCODE 2 (server failure). Note that the <key-tag> is | |||
| <tag-index> is specified in the DNS label using decimal notation. | specified in the DNS label using decimal notation. | |||
| In all other cases the resolver MUST NOT alter the outcome of the DNS | In all other cases the resolver MUST NOT alter the outcome of the DNS | |||
| response validation process. | response validation process. | |||
| This mechanism is to be applied only by resolvers that are performing | This mechanism is to be applied only by resolvers that are performing | |||
| DNSSEC validation, and applies only to responses to an A or AAAA | DNSSEC validation, and applies only to responses to queries for A or | |||
| query (Query Type value 1 or 28) where the resolver has authenticated | AAAA records (Query Type value 1 or 28) where the resolver has | |||
| the response according to the DNSSEC validation process and where the | authenticated the response according to the DNSSEC validation process | |||
| query name contains either of the labels described in this section as | and where the query name contains either of the labels described in | |||
| its left-most label. In this case, the resolver is to perform an | this section as its left-most label. In this case, the resolver is | |||
| additional test following the conventional validation function, as | to perform an additional test following the conventional validation | |||
| described in this section. The result of this additional test | function, as described in this section. The result of this | |||
| determines whether the resolver will alter its response that would | additional test determines whether the resolver will alter its | |||
| have indicated that the RRset is authentic to a response that | response that would have indicated that the RRset is authentic to a | |||
| indicates DNSSEC validation failure via the use of RCODE 2. | response that indicates DNSSEC validation failure via the use of | |||
| RCODE 2. | ||||
| 4. Processing Sentinel Results | 4. Processing Sentinel Results | |||
| This proposed test that uses the sentinel detection mechanism | This proposed test that uses the sentinel detection mechanism | |||
| described in this document is based on the use of three DNS names | described in this document is based on the use of three DNS names | |||
| that have three distinct DNS resolution behaviours. The test is | that have three distinct DNS resolution behaviours. The test is | |||
| intended to allow a user to determine the state of their DNS | intended to allow a user or a third party to determine the state of | |||
| resolution system, and, in particular, whether or not they are using | their DNS resolution system, and, in particular, whether or not they | |||
| validating DNS resolvers that use a particular trust anchor for the | are using validating DNS resolvers that use a particular trust anchor | |||
| root zone. | for the root zone. | |||
| The critical aspect of the DNS names used in this mechanism is that | The critical aspect of the DNS names used in this mechanism is that | |||
| they contain the specified label for either the positive and negative | they contain the specified label for either the positive and negative | |||
| test as the left-most label in the query name. | test as the left-most label in the query name. | |||
| The sentinel detection process uses a test with three query names: | The sentinel detection process uses a test with three query names: | |||
| o A query name containing the left-most label "kskroll-sentinel-is- | o A query name containing the left-most label "kskroll-sentinel-is- | |||
| ta-<tag-index>.". This corresponds to a a validly-signed RRset in | ta-<key-tag>.". This corresponds to a a validly-signed RRset in | |||
| the zone, so that responses associated with queried names in this | the zone, so that responses associated with queried names in this | |||
| zone can be authenticated by a DNSSEC-validating resolver. Any | zone can be authenticated by a DNSSEC-validating resolver. Any | |||
| validly-signed DNS zone can be used for this test. | validly-signed DNS zone can be used for this test. | |||
| o A query name containing the left-most label "kskroll-sentinel-not- | o A query name containing the left-most label "kskroll-sentinel-not- | |||
| ta-<tag-index>.". This is also a validly-signed name. Any | ta-<key-tag>.". This is also a validly-signed name. Any validly- | |||
| validly-signed DNS zone can be used for this test. | signed DNS zone can be used for this test. | |||
| o A query name that is signed with a DNSSEC signature that cannot be | o A query name that is signed with a DNSSEC signature that cannot be | |||
| validated (such as if the corresponding RRset is not signed with a | validated (such as if the corresponding RRset is not signed with a | |||
| valid RRSIG record). | valid RRSIG record). | |||
| The responses received from queries to resolve each of these names | The responses received from queries to resolve each of these names | |||
| would allow us to infer a trust key state of the resolution | would allow us to infer a trust key state of the resolution | |||
| environment. The techniques describes in this document rely on | environment. The techniques describes in this document rely on | |||
| (DNSSEC validating) resolvers responding with SERVFAIL (RCODE 2) to | (DNSSEC validating) resolvers responding with SERVFAIL (RCODE 2) to | |||
| valid answers. Note that a slew of other issues can also cause | valid answers. Note that a slew of other issues can also cause | |||
| skipping to change at page 8, line 50 ¶ | skipping to change at page 9, line 16 ¶ | |||
| Vold: A DNSSEC-Validating resolver that is configured to implement | Vold: A DNSSEC-Validating resolver that is configured to implement | |||
| this mechanism that has not loaded the nominated key into its | this mechanism that has not loaded the nominated key into its | |||
| local trusted key store will respond with an SERVFAIL for | local trusted key store will respond with an SERVFAIL for | |||
| "kskroll-sentinel-is-ta" queries, an A or AAAA RRset response for | "kskroll-sentinel-is-ta" queries, an A or AAAA RRset response for | |||
| "kskroll-sentinel-not-ta" queries and SERVFAIL for the invalidly | "kskroll-sentinel-not-ta" queries and SERVFAIL for the invalidly | |||
| signed name queries. | signed name queries. | |||
| Vleg: A DNSSEC-Validating resolver that does not implement this | Vleg: A DNSSEC-Validating resolver that does not implement this | |||
| mechanism will respond with an A or AAAA RRset response for | mechanism will respond with an A or AAAA RRset response for | |||
| "kskroll-sentinel-is-ta", an A record response for "kskroll- | "kskroll-sentinel-is-ta", an A or AAAA RRset response for | |||
| sentinel-not-ta" and SERVFAIL for the invalid name. | "kskroll-sentinel-not-ta" and SERVFAIL for the invalid name. | |||
| nonV: A non-DNSSEC-Validating resolver will respond with an A or | nonV: A non-DNSSEC-Validating resolver will respond with an A or | |||
| AAAA record response for "kskroll-sentinel-is-ta", an A record | AAAA record response for "kskroll-sentinel-is-ta", an A record | |||
| response for "kskroll-sentinel-not-ta" and an A record response | response for "kskroll-sentinel-not-ta" and an A or AAAA RRset | |||
| for the invalid name. | response for the invalid name. | |||
| Given the clear delineation amongst these three cases, if a client | Given the clear delineation amongst these three cases, if a client | |||
| directs these three queries to a simple resolver, the variation in | directs these three queries to a simple resolver, the variation in | |||
| response to the three queries should allow the client to determine | response to the three queries should allow the client to determine | |||
| the category of the resolver, and if it supports this mechanism, | the category of the resolver, and if it supports this mechanism, | |||
| whether or not it has a particular key in its trust anchor store. | whether or not it has a particular key in its trust anchor store. | |||
| Query | Query | |||
| +----------+-----------+------------+ | +----------+-----------+------------+ | |||
| | is-ta | not-ta | invalid | | | is-ta | not-ta | invalid | | |||
| +-------+----------+-----------+------------+ | +-------+----------+-----------+------------+ | |||
| | Vnew | A | SERVFAIL | SERVFAIL | | | Vnew | A | SERVFAIL | SERVFAIL | | |||
| | Vold | SERVFAIL | A | SERVFAIL | | | Vold | SERVFAIL | A | SERVFAIL | | |||
| Type | Vleg | A | A | SERVFAIL | | Type | Vleg | A | A | SERVFAIL | | |||
| | nonV | A | A | A | | | nonV | A | A | A | | |||
| +-------+----------+-----------+------------+ | +-------+----------+-----------+------------+ | |||
| A "Vnew" type says that the nominated key is trusted by the resolver | A "Vnew" type says that the nominated key is trusted by the resolver | |||
| and has been loaded into its local trusted key stash. A "Vold" type | and has been loaded into its local trusted key stash. A "Vold" type | |||
| says that the nominated key is not yet trusted by the resolver in its | says that the nominated key is not yet trusted by the resolver in its | |||
| own right. A "Vleg" type does not give the user any information | own right. A "Vleg" type does not give any information about the | |||
| about the trust anchors, and a "nonV" type indicates that the | trust anchors, and a "nonV" type indicates that the resolver does not | |||
| resolver does not perform DNSSEC validation. | perform DNSSEC validation. | |||
| 5. Sentinel Test Result Considerations | 5. Sentinel Test Result Considerations | |||
| The description in the previous section describes a simple situation | The description in the previous section describes a simple situation | |||
| where the test queries were being passed to a single recursive | where the test queries were being passed to a single recursive | |||
| resolver that directly queried authoritative name servers, including | resolver that directly queried authoritative name servers, including | |||
| the root servers. | the root servers. | |||
| There is also the common case where the end client is configured to | There is also the common case where the end client is configured to | |||
| use multiple resolvers. In these cases the SERVFAIL responses from | use multiple resolvers. In these cases the SERVFAIL responses from | |||
| skipping to change at page 10, line 40 ¶ | skipping to change at page 11, line 9 ¶ | |||
| o The trusted key state differs between the forwarding resolver and | o The trusted key state differs between the forwarding resolver and | |||
| the forwarder target resolver | the forwarder target resolver | |||
| In such a case, either the outcome is indeterminate validating | In such a case, either the outcome is indeterminate validating | |||
| ("Vleg"), or a case of mixed signals (SERVFAIL in all three | ("Vleg"), or a case of mixed signals (SERVFAIL in all three | |||
| responses), which is similarly an indeterminate response with respect | responses), which is similarly an indeterminate response with respect | |||
| to the trusted key state. | to the trusted key state. | |||
| 6. Security Considerations | 6. Security Considerations | |||
| This document describes a mechanism to allow users to determine the | This document describes a mechanism to allow users and third parties | |||
| trust state of root zone key signing keys in the DNS resolution | to determine the trust state of root zone key signing keys in the DNS | |||
| system that they use. | resolution system that they use. | |||
| The mechanism does not require resolvers to set otherwise | The mechanism does not require resolvers to set otherwise | |||
| unauthenticated responses to be marked as authenticated, and does not | unauthenticated responses to be marked as authenticated, and does not | |||
| alter the security properties of DNSSEC with respect to the | alter the security properties of DNSSEC with respect to the | |||
| interpretation of the authenticity of responses that are so marked. | interpretation of the authenticity of responses that are so marked. | |||
| The mechanism does not require any further significant processing of | The mechanism does not require any further significant processing of | |||
| DNS responses, and queries of the form described in this document do | DNS responses, and queries of the form described in this document do | |||
| not impose any additional load that could be exploited in an attack | not impose any additional load that could be exploited in an attack | |||
| over the the normal DNSSEC validation processing load. | over the the normal DNSSEC validation processing load. | |||
| 7. IANA Considerations | 7. Privacy Considerations | |||
| The mechansim in this document enables third parties (with either | ||||
| good or bad intentions) to learn something about the security | ||||
| configuration of recursive name servers. That is, someone who can | ||||
| cause an Internet user to open a web page can then determine whether | ||||
| the resolver that that user has configured might fail during a root | ||||
| key rollover. | ||||
| 8. IANA Considerations | ||||
| [Note to IANA, to be removed prior to publication: there are no IANA | [Note to IANA, to be removed prior to publication: there are no IANA | |||
| considerations stated in this version of the document.] | considerations stated in this version of the document.] | |||
| 8. Acknowledgements | 9. Acknowledgements | |||
| This document has borrowed extensively from [RFC8145] for the | This document has borrowed extensively from [RFC8145] for the | |||
| introductory text, and the authors would like to acknowledge and | introductory text, and the authors would like to acknowledge and | |||
| thank the authors of that document both for some text excerpts and | thank the authors of that document both for some text excerpts and | |||
| for the more general stimulation of thoughts about monitoring the | for the more general stimulation of thoughts about monitoring the | |||
| progress of a roll of the KSK of the root zone of the DNS. | progress of a roll of the KSK of the root zone of the DNS. | |||
| The authors would like to thank Joe Abley, Mehmet Akcin, Mark | The authors would like to thank Joe Abley, Mehmet Akcin, Mark | |||
| Andrews, Richard Barnes, Ray Bellis, Stephane Bortzmeyer, David | Andrews, Richard Barnes, Ray Bellis, Stephane Bortzmeyer, David | |||
| Conrad, Ralph Dolmans, John Dickinson, Steinar Haug, Bob Harold, Wes | Conrad, Ralph Dolmans, John Dickinson, Steinar Haug, Bob Harold, Wes | |||
| Hardaker, Paul Hoffman, Matt Larson, Jinmei Tatuya, Edward Lewis, | Hardaker, Paul Hoffman, Matt Larson, Jinmei Tatuya, Edward Lewis, | |||
| George Michaelson, Benno Overeinder, Matthew Pounsett, Andreas | George Michaelson, Benno Overeinder, Matthew Pounsett, Andreas | |||
| Schulze, Mukund Sivaraman, Petr Spacek, Andrew Sullivan, Paul Vixie, | Schulze, Mukund Sivaraman, Petr Spacek, Andrew Sullivan, Paul Vixie, | |||
| Duane Wessels and Paul Wouters for their helpful feedback. | Duane Wessels and Paul Wouters for their helpful feedback. | |||
| The authors would like to especially call out Paul Hoffman for | The authors would like to especially call out Paul Hoffman for | |||
| providing comments in the form of a pull request. | providing comments in the form of a pull request. | |||
| 9. Change Log | 10. Change Log | |||
| Note that this document is being worked on in GitHub - see Abstract. | Note that this document is being worked on in GitHub - see Abstract. | |||
| The below is mainly large changes, and is not authoritative. | The below is mainly large changes, and is not authoritative. | |||
| From -03 to -04: | ||||
| o Addressed GitHub pull requests #4, #5, #6, #7 #8. | ||||
| o Added Duane's privacy concerns | ||||
| o Makes the use cases clearer | ||||
| o Fixed some A/AAAA stuff | ||||
| o Changed the example numbers | ||||
| o Made it clear that names and addresses must be real | ||||
| From -02 to -03: | From -02 to -03: | |||
| o Integrated / published comments from Paul in GitHub PR #2 - | o Integrated / published comments from Paul in GitHub PR #2 - | |||
| https://github.com/APNIC-Labs/draft-kskroll-sentinel/pull/2 | https://github.com/APNIC-Labs/draft-kskroll-sentinel/pull/2 | |||
| o Made the keytab be decimal, not hex (thread / consensus in | o Made the keytab be decimal, not hex (thread / consensus in | |||
| https://mailarchive.ietf.org/arch/msg/dnsop/ | https://mailarchive.ietf.org/arch/msg/dnsop/ | |||
| Kg7AtDhFRNw31He8n0_bMr9hBuE ) | Kg7AtDhFRNw31He8n0_bMr9hBuE ) | |||
| From -01 to 02: | From -01 to 02: | |||
| skipping to change at page 12, line 14 ¶ | skipping to change at page 13, line 4 ¶ | |||
| o Fixed a number of typos. | o Fixed a number of typos. | |||
| o Had accidentally said that Charlie was using a non-validating | o Had accidentally said that Charlie was using a non-validating | |||
| resolver in example. | resolver in example. | |||
| o [ TODO(WK): Doc says keytags are hex, is this really what the WG | o [ TODO(WK): Doc says keytags are hex, is this really what the WG | |||
| wants? ] | wants? ] | |||
| o And active key is one that can be used *now* (not e.g AddPend) | o And active key is one that can be used *now* (not e.g AddPend) | |||
| From -00 to 01: | From -00 to 01: | |||
| o Added a conversational description of how the system is intended | o Added a conversational description of how the system is intended | |||
| to work. | to work. | |||
| o Clarification that this is for the root. | o Clarification that this is for the root. | |||
| o Changed the label template from _is-ta-<tag> to kskroll-sentinel- | o Changed the label template from _is-ta-<key-tag> to kskroll- | |||
| is-ta-<tag-index>. This is because BIND (at least) will not allow | sentinel-is-ta-<key-tag>. This is because BIND (at least) will | |||
| records which start with an underscore to have address records | not allow records which start with an underscore to have address | |||
| (CNAMEs, yes, A/AAAA no). Some browsers / operating systems also | records (CNAMEs, yes, A/AAAA no). Some browsers / operating | |||
| will not fetch resources from names which start with an | systems also will not fetch resources from names which start with | |||
| underscore. | an underscore. | |||
| 10. References | 11. References | |||
| 10.1. Normative References | 11.1. Normative References | |||
| [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "DNS Security Introduction and Requirements", RFC | Rose, "DNS Security Introduction and Requirements", RFC | |||
| 4033, DOI 10.17487/RFC4033, March 2005, <https://www.rfc- | 4033, DOI 10.17487/RFC4033, March 2005, <https://www.rfc- | |||
| editor.org/info/rfc4033>. | editor.org/info/rfc4033>. | |||
| [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "Resource Records for the DNS Security Extensions", | Rose, "Resource Records for the DNS Security Extensions", | |||
| RFC 4034, DOI 10.17487/RFC4034, March 2005, | RFC 4034, DOI 10.17487/RFC4034, March 2005, | |||
| <https://www.rfc-editor.org/info/rfc4034>. | <https://www.rfc-editor.org/info/rfc4034>. | |||
| skipping to change at page 13, line 10 ¶ | skipping to change at page 13, line 46 ¶ | |||
| [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | |||
| Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011, | Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011, | |||
| September 2007, <https://www.rfc-editor.org/info/rfc5011>. | September 2007, <https://www.rfc-editor.org/info/rfc5011>. | |||
| [RFC6840] Weiler, S., Ed. and D. Blacka, Ed., "Clarifications and | [RFC6840] Weiler, S., Ed. and D. Blacka, Ed., "Clarifications and | |||
| Implementation Notes for DNS Security (DNSSEC)", RFC 6840, | Implementation Notes for DNS Security (DNSSEC)", RFC 6840, | |||
| DOI 10.17487/RFC6840, February 2013, <https://www.rfc- | DOI 10.17487/RFC6840, February 2013, <https://www.rfc- | |||
| editor.org/info/rfc6840>. | editor.org/info/rfc6840>. | |||
| 10.2. Informative References | 11.2. Informative References | |||
| [RFC8145] Wessels, D., Kumari, W., and P. Hoffman, "Signaling Trust | [RFC8145] Wessels, D., Kumari, W., and P. Hoffman, "Signaling Trust | |||
| Anchor Knowledge in DNS Security Extensions (DNSSEC)", RFC | Anchor Knowledge in DNS Security Extensions (DNSSEC)", RFC | |||
| 8145, DOI 10.17487/RFC8145, April 2017, <https://www.rfc- | 8145, DOI 10.17487/RFC8145, April 2017, <https://www.rfc- | |||
| editor.org/info/rfc8145>. | editor.org/info/rfc8145>. | |||
| Authors' Addresses | Authors' Addresses | |||
| Geoff Huston | Geoff Huston | |||
| End of changes. 47 change blocks. | ||||
| 106 lines changed or deleted | 142 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/ | ||||