| < draft-ietf-dnsop-kskroll-sentinel-02.txt | draft-ietf-dnsop-kskroll-sentinel-03.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: August 25, 2018 W. Kumari | Expires: September 1, 2018 W. Kumari | |||
| February 21, 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-02 | draft-ietf-dnsop-kskroll-sentinel-03 | |||
| 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 to determine the trusted key state for the | |||
| root key of the resolvers that handle that user's DNS queries. Note | root key of the resolvers that handle that user's DNS queries. Note | |||
| skipping to change at page 1, line 36 ¶ | skipping to change at page 1, line 36 ¶ | |||
| 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-<tag- | |||
| index>", "kskroll-sentinel-not-ta-<tag-index>"; older versions of | index>", "kskroll-sentinel-not-ta-<tag-index>"; older versions of | |||
| this document used "_is-ta-<tag-index>", "_not-ta-<tag-index>". ] | this document used "_is-ta-<tag-index>", "_not-ta-<tag-index>". Also | |||
| note that the format of the tag-index is now decimal. 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/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on August 25, 2018. | This Internet-Draft will expire on September 1, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 29 ¶ | skipping to change at page 2, line 32 ¶ | |||
| 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. Use Case . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Sentinel Mechanism . . . . . . . . . . . . . . . . . . . . . 6 | 3. Sentinel Mechanism in Resolvers . . . . . . . . . . . . . . . 6 | |||
| 4. Sentinel Processing . . . . . . . . . . . . . . . . . . . . . 7 | 4. Processing Sentinel Results . . . . . . . . . . . . . . . . . 7 | |||
| 5. Sentinel Test Result Considerations . . . . . . . . . . . . . 9 | 5. Sentinel Test Result Considerations . . . . . . . . . . . . . 9 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 9. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 9. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 12 | 10.2. Informative References . . . . . . . . . . . . . . . . . 13 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 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 not unlike 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 | This new mechanism is OPTIONAL to implement and use, although for | |||
| reasons of supporting broad-based measurement techniques, it is | reasons of supporting broad-based measurement techniques, it is | |||
| strongly preferred if 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 | Note that example.com, AAAA records and the IPv6 documentation prefix | |||
| skipping to change at page 3, line 43 ¶ | skipping to change at page 3, line 45 ¶ | |||
| 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 | key ID of 1111, the new KSK has a key ID of 2222. Users want to | |||
| 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 | ||||
| 2222). | ||||
| 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 and will not break. Bob's ISP | their ISPs have picked up the new KSK. Bob's ISP does not perform | |||
| does not perform validation. Charlie's ISP does validate, but the | validation. Charlie's ISP does validate, but the resolvers have not | |||
| resolvers have not yet been upgraded to support sentinel. Dave and | yet been upgraded to support this mechanism. Dave and Ed's resolvers | |||
| Ed's resolvers have been upgraded to support sentinel; Dave's | have been upgraded to support this mechanism; Dave's resolver has the | |||
| resolver has the new KSK, Ed's resolver hasn't managed to install the | new KSK, Ed's resolver hasn't managed to install the 2222 KSK in its | |||
| 2222 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 3 AAAA 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-2222.example.com. IN AAAA 2001:db8::1 | |||
| kskroll-sentinel-not-ta-2222.example.com. IN AAAA 2001:db8::1 | kskroll-sentinel-not-ta-2222.example.com. IN AAAA 2001:db8::1 | |||
| skipping to change at page 4, line 46 ¶ | skipping to change at page 5, line 4 ¶ | |||
| 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. | with a definitive answer to the question of what root trust anchors | |||
| 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-2222.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 2222 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 2222 is in the trust anchor store), and the recursive | |||
| resolver replies normally (with the answer provided by the | 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-2222.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 "Is this *not* a trust | has 2222 in it's trust anchor store, the answer to "is this *not* a | |||
| anchor" is false, and so the recursive resolver does not reply with | trust anchor" is false, and so the recursive resolver does not reply | |||
| the answer from the authoritative server - instead, it replies with a | with the answer from the authoritative server - instead, it replies | |||
| SERVFAIL (note that replying with SERVFAIL instead of the original | with a SERVFAIL (note that replying with SERVFAIL instead of the | |||
| answer is the only mechanism that KSK Sentinel uses). This means | original answer is the only mechanism that KSK Sentinel uses). This | |||
| that Dave cannot fetch "invalid", he can fetch "kskroll-sentinel-is- | means that Dave cannot fetch "invalid", he can fetch "kskroll- | |||
| ta-2222", but he cannot fetch "kskroll-sentinel-not-ta-2222". From | sentinel-is-ta-2222", but he cannot fetch "kskroll-sentinel-not-ta- | |||
| this, Dave knows that he is behind an upgraded, validating resolver, | 2222". From this, Dave knows that he is behind an upgraded, | |||
| which has successfully installed the new, 2222 KSK. Dave has nothing | validating resolver, which has successfully installed the new, 2222 | |||
| to worry about - he will be fine with the old (1111) KSK is removed. | KSK. | |||
| Now for Ed. Just like Charlie and Dave, Ed cannot fetch the | Just like Charlie and Dave, Ed cannot fetch the "invalid" record. | |||
| "invalid" record. This tells him that his resolvers are validating. | This tells him that his resolvers are validating. When his | |||
| When his (upgraded) resolver performs the KSK Sentinel check for | (upgraded) resolver performs the KSK Sentinel check for "kskroll- | |||
| "kskroll-sentinel-is-ta-2222", it does *not* have the (new, 2222) KSK | sentinel-is-ta-2222", it does *not* have the (new, 2222) KSK in it's | |||
| in it's trust anchor store. This means check fails, and Ed's | trust anchor store. This means check fails, and Ed's recursive | |||
| recursive resolver converts the (valid) 2001:db8::1 answer into a | resolver converts the (valid) answer into a SERVFAIL error response. | |||
| SERVFAIL error response. It performs the same check for kskroll- | It performs the same check for kskroll-sentinel-not-ta- | |||
| sentinel-not-ta-2222.example.com; as it does not have the 2222 KSK, | 2222.example.com; as it does not have the 2222 KSK, it is true that | |||
| it is true that this is not a trust anchor for it, and so it replies | this is not a trust anchor for it, and so it replies normally. This | |||
| normally. This means that Ed cannot fetch the "invalid" resource, he | means that Ed cannot fetch the "invalid" resource, he also cannot | |||
| also cannot fetch the "kskroll-sentinel-is-ta-2222" resource, but he | fetch the "kskroll-sentinel-is-ta-2222" resource, but he can fetch | |||
| can fetch the "kskroll-sentinel-not-ta-2222" resource. This tells Ed | the "kskroll-sentinel-not-ta-2222" resource. This tells Ed that his | |||
| that his resolvers have not installed the new KSK, and, when the old | resolvers have not installed the new KSK. | |||
| KSK is removed, his DNS will break. | ||||
| 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 an advertising | back to Alice. He uses some mechanism such as causing users to go to | |||
| network) to cause a large number of users to attempt to resolve the 3 | a web page to cause a large number of users to attempt to resolve the | |||
| resources, and then analyzes the results of the tests to determine | three resources, and then analyzes the results of the tests to | |||
| what percentage of users will be affected by the KSK rollover event. | determine what percentage of users will be affected by the KSK | |||
| rollover event. | ||||
| The above description is a simplified example - it is not anticipated | The above description is a simplified example - it is not anticipated | |||
| that Bob, Charlie, Dave and Ed will actually look for the absence or | that Bob, Charlie, Dave and Ed will actually look for the absence or | |||
| presence of web resources; instead, the webpage that they load would | presence of web resources; instead, the webpage that they load would | |||
| likely contain JavaScript (or similar) which displays the result of | likely contain JavaScript (or similar) which displays the result of | |||
| the tests. An example of this is at http://www.ksk-test.net. This | the tests, sends the results to Geoff, or both. This sentinel | |||
| KSK mechanism does not rely on the web - this method can equally be | mechanism does not rely on the web: it can equally be used by trying | |||
| used by trying to resolve the names (for example, using 'dig') and | to resolve the names (for example, using the common "dig" command) | |||
| checking which result in a SERVFAIL. | and checking which result in a SERVFAIL. | |||
| [ Note that the KSK Sentinel mechanism measures a very different | Note that the sentinel mechanism described here measures a very | |||
| (and, in our opinion, much more useful!) metric than RFC8145 -- | different (and likely more useful) metric than [RFC8145]. RFC 8145 | |||
| RFC8145 relied on resolvers reporting the list of keys that they have | relies on resolvers reporting the list of keys that they have to root | |||
| -- this doesn't reflect what the *user* impact of the KSK roll will | servers. That reflects on how many resolvers will be impacted by a | |||
| be. As we cannot get perfect visibility into all resolvers, we will | KSK roll, but not what the user impact of the KSK roll will be. | |||
| have to aim for "do the least harm", not "do no harm" ] | ||||
| 3. Sentinel Mechanism | 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 2 special labels, "kskroll- | This sentinel mechanism makes use of two special labels. The | |||
| sentinel-is-ta-<tag-index>." (intended to be used in a query where | "kskroll-sentinel-is-ta-<tag-index>" label is used in a query where | |||
| the response can answer the question: Is this the key tag a trust | the response can answer whether this is the key tag of a trust anchor | |||
| anchor which the validating DNS resolver is currently trusting?) and | which the validating DNS resolver is currently trusting. The | |||
| "kskroll-sentinel-not-ta-<tag-index>." (intended to be used in a | "kskroll-sentinel-not-ta-<tag-index>" label is used in a query where | |||
| query where the response can answer the question: Is this the key tag | the response can answer whether this is the key tag of a trust anchor | |||
| of a key that is NOT in the resolver's current trust store?). The | which the validating DNS resolver is NOT currently trusting. | |||
| use of the positive question and its inverse allows for queries to | ||||
| detect whether resolvers support this sentinel mechanism. Note that | The use of the positive question and its inverse allows for queries | |||
| the test is "Is there an active key with this KeyID in the resolver's | to detect whether resolvers support this sentinel mechanism. Note | |||
| current trust store for the DNS root?", not "Is there any key with | that the test is "Is there an active key with this KeyID in the | |||
| this KeyID in the trust store", nor "Was a key with this KeyID used | resolver's current trust store for the DNS root?", not "Is there any | |||
| to validate this query?". An active key is one which could currently | key with this KeyID in the trust store", nor "Was a key with this | |||
| be used for validation (ie not in AddPend or Revoked state | KeyID used to validate this query?". An active key is one which | |||
| ([RFC5011])). | could currently be used for validation (that is, a key that is not in | |||
| 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-<tag-index>.", then the following rule should be applied to the | |||
| response: If the resolver has placed a Root Zone Key Signing Key with | response: If the resolver has placed a root zone KSK with tag index | |||
| tag index value matching the value specified in the query into the | value matching the value specified in the query into the local | |||
| local resolver's store of trusted keys, then the resolver should | resolver's store of trusted keys, then the resolver should return a | |||
| return a response indicating that the response contains authenticated | response indicating that the response contains authenticated data | |||
| data according to section 5.8 of [RFC6840]. Otherwise, the resolver | according to section 5.8 of [RFC6840]. Otherwise, the resolver MUST | |||
| 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 hexadecimal notation. | specified in the DNS label using decimal notation (as described in | |||
| [RFC4034], section 5.3), zero padded to 5 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-<tag-index>.", 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 | |||
| Key Signing Key with tag index value matching the value specified in | KSK with tag index value matching the value specified in the query | |||
| the query into the local resolver's store of trusted keys, then the | into the local resolver's store of trusted keys, then the resolver | |||
| resolver should return a response indicating that the response | should return a response indicating that the response contains | |||
| contains authenticated data according to section 5.8 of [RFC6840]. | authenticated data according to section 5.8 of [RFC6840]. Otherwise, | |||
| Otherwise, the resolver MUST return RCODE 2 (server failure). Note | the resolver MUST return RCODE 2 (server failure). Note that the | |||
| that the <tag-index> is specified in the DNS label using hexadecimal | <tag-index> is specified in the DNS label using decimal notation. | |||
| 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 an A or AAAA | |||
| query (Query Type value 1 or 28) where the resolver has authenticated | query (Query Type value 1 or 28) where the resolver has authenticated | |||
| the response according to the DNSSEC validation process and where the | the response according to the DNSSEC validation process and where the | |||
| query name contains either of the labels described in this section as | query name contains either of the labels described in this section as | |||
| its left-most label. In this case, the resolver is to perform an | its left-most label. In this case, the resolver is to perform an | |||
| additional test following the conventional validation function, as | additional test following the conventional validation function, as | |||
| described in this section. The result of this additional test | described in this section. The result of this additional test | |||
| determines whether the resolver will alter its response that would | determines whether the resolver will alter its response that would | |||
| have indicated that the RRset is authentic to a response that | have indicated that the RRset is authentic to a response that | |||
| indicates DNSSEC validation failure via the use of RCODE 2. | indicates DNSSEC validation failure via the use of RCODE 2. | |||
| 4. Sentinel Processing | 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 to determine the state of their DNS | |||
| resolution system, and, in particular, whether or not they are using | resolution system, and, in particular, whether or not they are using | |||
| validating DNS resolvers that have picked up an incoming trust anchor | validating DNS resolvers that use a particular trust anchor for the | |||
| as a trusted key in a root zone KSK roll scenario. | root zone. | |||
| The name format can be defined in a number of ways, and no name form | The critical aspect of the DNS names used in this mechanism is that | |||
| is intrinsically better than any other in terms of the test itself. | ||||
| The critical aspect of the DNS names used in any such test 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 is envisaged to use a test with three | The sentinel detection process uses a test with three query names: | |||
| query names: | ||||
| a. 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 | ta-<tag-index>.". This corresponds to a a validly-signed RRset in | |||
| in the zone, so that responses associated with queried names in | the zone, so that responses associated with queried names in this | |||
| this zone can be authenticated by a DNSSEC-validating resolver. | zone can be authenticated by a DNSSEC-validating resolver. Any | |||
| Any validly-signed DNS zone can be used for this test. | validly-signed DNS zone can be used for this test. | |||
| b. a query name containing the left-most label "kskroll-sentinel- | o A query name containing the left-most label "kskroll-sentinel-not- | |||
| not-ta-<tag-index>.". This is also a validly-signed name. Any | ta-<tag-index>.". This is also a validly-signed name. Any | |||
| validly-signed DNS zone can be used for this test. | validly-signed DNS zone can be used for this test. | |||
| c. a third query name that is signed with a DNSSEC signature that | o A query name that is signed with a DNSSEC signature that cannot be | |||
| cannot be validated (i.e. the corresponding RRset is not signed | validated (such as if the corresponding RRset is not signed with a | |||
| 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 | |||
| SERVFAIL responses, so false positive or negative results may | SERVFAIL responses, and so the sentinel processing may sometimes | |||
| sometimes occur. To describe this process of classification, we can | result in incorrect conclusions. | |||
| classify resolvers into four distinct behavior types, for which we | ||||
| will use the labels: "Vnew", "Vold", "Vleg", and "nonV". These | ||||
| labels correspond to resolver behaviour types as follows: | ||||
| o Vnew: A DNSSEC-Validating resolver that is configured to implement | To describe this process of classification, we can classify resolvers | |||
| into four distinct behavior types, for which we will use the labels: | ||||
| "Vnew", "Vold", "Vleg", and "nonV". These labels correspond to | ||||
| resolver behaviour types as follows: | ||||
| Vnew: A DNSSEC-Validating resolver that is configured to implement | ||||
| this mechanism has loaded the nominated key into its local trusted | this mechanism has loaded the nominated key into its local trusted | |||
| key store will respond with an A or AAAA RRset response for | key store will respond with an A or AAAA RRset response for | |||
| "kskroll-sentinel-is-ta" queries, SERVFAIL for "kskroll-sentinel- | "kskroll-sentinel-is-ta" queries, SERVFAIL for "kskroll-sentinel- | |||
| not-ta" queries and SERVFAIL for the invalidly signed name | not-ta" queries and SERVFAIL for the invalidly signed name | |||
| queries. | queries. | |||
| o 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. | |||
| o 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 record response for "kskroll- | |||
| sentinel-not-ta" and SERVFAIL for the invalid name. | sentinel-not-ta" and SERVFAIL for the invalid name. | |||
| o 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 record response | |||
| for the invalid name. | 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 loaded a particular key into its local trusted | whether or not it has a particular key in its trust anchor store. | |||
| key stash. | ||||
| +-------------+----------+-----------+------------+ | Query | |||
| | Type\Query | is-ta | not-ta | invalid | | +----------+-----------+------------+ | |||
| +-------------+----------+-----------+------------+ | | is-ta | not-ta | invalid | | |||
| | Vnew | A | SERVFAIL | SERVFAIL | | +-------+----------+-----------+------------+ | |||
| | Vold | SERVFAIL | A | SERVFAIL | | | Vnew | A | SERVFAIL | SERVFAIL | | |||
| | Vleg | A | A | SERVFAIL | | | Vold | SERVFAIL | A | SERVFAIL | | |||
| | nonV | A | A | A | | Type | Vleg | A | A | SERVFAIL | | |||
| +-------------+----------+-----------+------------+ | | nonV | A | A | A | | |||
| +-------+----------+-----------+------------+ | ||||
| A "Vnew" response pattern says that the nominated key is trusted by | A "Vnew" type says that the nominated key is trusted by the resolver | |||
| the resolver and has been loaded into its local trusted key stash. A | and has been loaded into its local trusted key stash. A "Vold" type | |||
| "Vold" response pattern says that the nominated key is not yet | says that the nominated key is not yet trusted by the resolver in its | |||
| trusted by the resolver in its own right. A "Vleg" response pattern | own right. A "Vleg" type does not give the user any information | |||
| is indeterminate, and a "nonV" response pattern indicates that the | about the trust anchors, and a "nonV" type indicates that the | |||
| resolver does not perform DNSSEC validation. | resolver does not 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 | |||
| skipping to change at page 10, line 17 ¶ | skipping to change at page 10, line 22 ¶ | |||
| the forwarder target resolver. If this non-validating resolver it | the forwarder target resolver. If this non-validating resolver it | |||
| has multiple forwarders, then the above considerations will apply. | has multiple forwarders, then the above considerations will apply. | |||
| If the validating resolver has a forwarding configuration, and uses | If the validating resolver has a forwarding configuration, and uses | |||
| the CD flag on all forwarded queries, then this resolver is acting in | the CD flag on all forwarded queries, then this resolver is acting in | |||
| a manner that is identical to a standalone resolver. The same | a manner that is identical to a standalone resolver. The same | |||
| consideration applies if any one one of the forwarder targets is a | consideration applies if any one one of the forwarder targets is a | |||
| non-validating resolver. Similarly, if all the forwarder targets do | non-validating resolver. Similarly, if all the forwarder targets do | |||
| not apply this trusted key mechanism, the same considerations apply. | not apply this trusted key mechanism, the same considerations apply. | |||
| A more complex case is where the following conditions all hold: | A more complex case is where all of the following conditions all | |||
| hold: | ||||
| o both the validating resolver and the forwarder target resolver | o Both the validating resolver and the forwarder target resolver | |||
| support this trusted key sentinel mechanism, and | support this trusted key sentinel mechanism | |||
| o the local resolver's queries do not have the CD bit set, and | o The local resolver's queries do not have the CD bit set | |||
| 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 | |||
| then either the outcome is indeterminate validating ("Vleg"), or a | In such a case, either the outcome is indeterminate validating | |||
| case of mixed signals (SERVFAIL in all three responses), which is | ("Vleg"), or a case of mixed signals (SERVFAIL in all three | |||
| similarly an indeterminate response with respect to the trusted key | responses), which is similarly an indeterminate response with respect | |||
| 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 to determine the | |||
| trust state of root zone key signing keys in the DNS resolution | trust state of root zone key signing keys in the DNS resolution | |||
| system that they use. | 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 | |||
| skipping to change at page 11, line 11 ¶ | skipping to change at page 11, line 18 ¶ | |||
| [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 | 8. 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 Key Signing Key of the Root Zone of the | progress of a roll of the KSK of the root zone of the DNS. | |||
| DNS. | ||||
| The authors would like the especially thank Joe Abley, Mehmet Akcin, | The authors would like to thank Joe Abley, Mehmet Akcin, Mark | |||
| 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. | |||
| [TODO: Add people who have contributed!] | The authors would like to especially call out Paul Hoffman for | |||
| providing comments in the form of a pull request. | ||||
| 9. Change Log | 9. 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 -02 to -03: | ||||
| o Integrated / published comments from Paul in GitHub PR #2 - | ||||
| https://github.com/APNIC-Labs/draft-kskroll-sentinel/pull/2 | ||||
| o Made the keytab be decimal, not hex (thread / consensus in | ||||
| https://mailarchive.ietf.org/arch/msg/dnsop/ | ||||
| Kg7AtDhFRNw31He8n0_bMr9hBuE ) | ||||
| From -01 to 02: | From -01 to 02: | |||
| Removed Address Record definition. | o Removed Address Record definition. | |||
| Clarified that many things can cause SERVFAIL. | o Clarified that many things can cause SERVFAIL. | |||
| Made examples FQDN. | o Made examples FQDN. | |||
| Fixed a number of typos. | o Fixed a number of typos. | |||
| 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. | |||
| [ 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? ] | |||
| 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-<tag> to kskroll-sentinel- | |||
| is-ta-<tag-index>. This is because BIND (at least) will not allow | is-ta-<tag-index>. This is because BIND (at least) will not allow | |||
| End of changes. 57 change blocks. | ||||
| 157 lines changed or deleted | 172 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/ | ||||