| < draft-ietf-dnsext-dnssec-bis-updates-18.txt | draft-ietf-dnsext-dnssec-bis-updates-19.txt > | |||
|---|---|---|---|---|
| Network Working Group S. Weiler | Network Working Group S. Weiler | |||
| Internet-Draft SPARTA, Inc. | Internet-Draft SPARTA, Inc. | |||
| Updates: 4033, 4034, 4035, 5155 D. Blacka | Updates: 4033, 4034, 4035, 5155 D. Blacka | |||
| (if approved) Verisign, Inc. | (if approved) Verisign, Inc. | |||
| Intended status: Standards Track April 30, 2012 | Intended status: Standards Track July 13, 2012 | |||
| Expires: November 1, 2012 | Expires: January 14, 2013 | |||
| Clarifications and Implementation Notes for DNSSECbis | Clarifications and Implementation Notes for DNSSEC | |||
| draft-ietf-dnsext-dnssec-bis-updates-18 | draft-ietf-dnsext-dnssec-bis-updates-19 | |||
| Abstract | Abstract | |||
| This document is a collection of technical clarifications to the | This document is a collection of technical clarifications to the | |||
| DNSSECbis document set. It is meant to serve as a resource to | DNSSEC document set. It is meant to serve as a resource to | |||
| implementors as well as a repository of DNSSECbis errata. | implementors as well as a repository of DNSSEC errata. | |||
| This document updates the core DNSSECbis documents (RFC4033, RFC4034, | This document updates the core DNSSEC documents (RFC4033, RFC4034, | |||
| and RFC4035) as well as the NSEC3 specification (RFC5155). It also | and RFC4035) as well as the NSEC3 specification (RFC5155). It also | |||
| defines NSEC3 and SHA-2 as core parts of the DNSSECbis specification. | defines NSEC3 and SHA-2 as core parts of the DNSSEC specification. | |||
| 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 November 1, 2012. | This Internet-Draft will expire on January 14, 2013. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2012 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 3, line 10 ¶ | skipping to change at page 3, line 10 ¶ | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction and Terminology . . . . . . . . . . . . . . . . . 4 | 1. Introduction and Terminology . . . . . . . . . . . . . . . . . 4 | |||
| 1.1. Structure of this Document . . . . . . . . . . . . . . . . 4 | 1.1. Structure of this Document . . . . . . . . . . . . . . . . 4 | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Important Additions to DNSSSECbis . . . . . . . . . . . . . . 4 | 2. Important Additions to DNSSEC . . . . . . . . . . . . . . . . 4 | |||
| 2.1. NSEC3 Support . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. NSEC3 Support . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. SHA-2 Support . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. SHA-2 Support . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Scaling Concerns . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Scaling Concerns . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Implement a BAD cache . . . . . . . . . . . . . . . . . . 5 | 3.1. Implement a BAD cache . . . . . . . . . . . . . . . . . . 5 | |||
| 4. Security Concerns . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Security Concerns . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4.1. Clarifications on Non-Existence Proofs . . . . . . . . . . 5 | 4.1. Clarifications on Non-Existence Proofs . . . . . . . . . . 5 | |||
| 4.2. Validating Responses to an ANY Query . . . . . . . . . . . 6 | 4.2. Validating Responses to an ANY Query . . . . . . . . . . . 6 | |||
| 4.3. Check for CNAME . . . . . . . . . . . . . . . . . . . . . 6 | 4.3. Check for CNAME . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.4. Insecure Delegation Proofs . . . . . . . . . . . . . . . . 6 | 4.4. Insecure Delegation Proofs . . . . . . . . . . . . . . . . 7 | |||
| 5. Interoperability Concerns . . . . . . . . . . . . . . . . . . 7 | 5. Interoperability Concerns . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1. Errors in Canonical Form Type Code List . . . . . . . . . 7 | 5.1. Errors in Canonical Form Type Code List . . . . . . . . . 7 | |||
| 5.2. Unknown DS Message Digest Algorithms . . . . . . . . . . . 7 | 5.2. Unknown DS Message Digest Algorithms . . . . . . . . . . . 7 | |||
| 5.3. Private Algorithms . . . . . . . . . . . . . . . . . . . . 8 | 5.3. Private Algorithms . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.4. Caution About Local Policy and Multiple RRSIGs . . . . . . 8 | 5.4. Caution About Local Policy and Multiple RRSIGs . . . . . . 9 | |||
| 5.5. Key Tag Calculation . . . . . . . . . . . . . . . . . . . 9 | 5.5. Key Tag Calculation . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.6. Setting the DO Bit on Replies . . . . . . . . . . . . . . 9 | 5.6. Setting the DO Bit on Replies . . . . . . . . . . . . . . 9 | |||
| 5.7. Setting the AD Bit on Queries . . . . . . . . . . . . . . 9 | 5.7. Setting the AD Bit on Queries . . . . . . . . . . . . . . 9 | |||
| 5.8. Setting the AD Bit on Replies . . . . . . . . . . . . . . 9 | 5.8. Setting the AD Bit on Replies . . . . . . . . . . . . . . 10 | |||
| 5.9. Always set the CD bit on Queries . . . . . . . . . . . . . 10 | 5.9. Always set the CD bit on Queries . . . . . . . . . . . . . 10 | |||
| 5.10. Nested Trust Anchors . . . . . . . . . . . . . . . . . . . 10 | 5.10. Nested Trust Anchors . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.11. Mandatory Algorithm Rules . . . . . . . . . . . . . . . . 11 | 5.11. Mandatory Algorithm Rules . . . . . . . . . . . . . . . . 11 | |||
| 5.12. Ignore Extra Signatures From Unknown Keys . . . . . . . . 11 | 5.12. Ignore Extra Signatures From Unknown Keys . . . . . . . . 12 | |||
| 6. Minor Corrections and Clarifications . . . . . . . . . . . . . 12 | 6. Minor Corrections and Clarifications . . . . . . . . . . . . . 12 | |||
| 6.1. Finding Zone Cuts . . . . . . . . . . . . . . . . . . . . 12 | 6.1. Finding Zone Cuts . . . . . . . . . . . . . . . . . . . . 12 | |||
| 6.2. Clarifications on DNSKEY Usage . . . . . . . . . . . . . . 12 | 6.2. Clarifications on DNSKEY Usage . . . . . . . . . . . . . . 12 | |||
| 6.3. Errors in Examples . . . . . . . . . . . . . . . . . . . . 12 | 6.3. Errors in Examples . . . . . . . . . . . . . . . . . . . . 13 | |||
| 6.4. Errors in RFC 5155 . . . . . . . . . . . . . . . . . . . . 13 | 6.4. Errors in RFC 5155 . . . . . . . . . . . . . . . . . . . . 13 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . . 14 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 15 | |||
| Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 15 | Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 15 | |||
| Appendix B. Discussion of Setting the CD Bit . . . . . . . . . . 15 | Appendix B. Discussion of Setting the CD Bit . . . . . . . . . . 16 | |||
| Appendix C. Discussion of Trust Anchor Preference Options . . . . 18 | Appendix C. Discussion of Trust Anchor Preference Options . . . . 19 | |||
| C.1. Closest Encloser . . . . . . . . . . . . . . . . . . . . . 18 | C.1. Closest Encloser . . . . . . . . . . . . . . . . . . . . . 19 | |||
| C.2. Accept Any Success . . . . . . . . . . . . . . . . . . . . 19 | C.2. Accept Any Success . . . . . . . . . . . . . . . . . . . . 20 | |||
| C.3. Preference Based on Source . . . . . . . . . . . . . . . . 19 | C.3. Preference Based on Source . . . . . . . . . . . . . . . . 20 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 20 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 1. Introduction and Terminology | 1. Introduction and Terminology | |||
| This document lists some additions, clarifications and corrections to | This document lists some additions, clarifications and corrections to | |||
| the core DNSSECbis specification, as originally described in | the core DNSSEC specification, as originally described in [RFC4033], | |||
| [RFC4033], [RFC4034], and [RFC4035], and later amended by [RFC5155]. | [RFC4034], and [RFC4035], and later amended by [RFC5155]. (See | |||
| (See section Section 2 for more recent additions to that core | section Section 2 for more recent additions to that core document | |||
| document set.) | set.) | |||
| It is intended to serve as a resource for implementors and as a | It is intended to serve as a resource for implementors and as a | |||
| repository of items that need to be addressed when advancing the | repository of items that need to be addressed when advancing the | |||
| DNSSECbis documents from Proposed Standard to Draft Standard. | DNSSEC documents along the Standards Track. | |||
| 1.1. Structure of this Document | 1.1. Structure of this Document | |||
| The clarifications and changes to DNSSECbis are sorted according to | The clarifications and changes to DNSSEC are sorted according to | |||
| their importance, starting with ones which could, if ignored, lead to | their importance, starting with ones which could, if ignored, lead to | |||
| security problems and progressing down to clarifications that are | security problems and progressing down to clarifications that are | |||
| expected to have little operational impact. | expected to have little operational impact. | |||
| 1.2. Terminology | 1.2. 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", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| [RFC2119]. | [RFC2119]. | |||
| 2. Important Additions to DNSSSECbis | 2. Important Additions to DNSSEC | |||
| This section lists some documents that should be considered core | This section lists some documents that are now considered core DNSSEC | |||
| DNSSEC protocol documents in addition to those originally specified | protocol documents in addition to those originally specified in | |||
| in Section 10 of [RFC4033]. | Section 10 of [RFC4033]. | |||
| 2.1. NSEC3 Support | 2.1. NSEC3 Support | |||
| [RFC5155] describes the use and behavior of the NSEC3 and NSEC3PARAM | [RFC5155] describes the use and behavior of the NSEC3 and NSEC3PARAM | |||
| records for hashed denial of existence. Validator implementations | records for hashed denial of existence. Validator implementations | |||
| are strongly encouraged to include support for NSEC3 because a number | are strongly encouraged to include support for NSEC3 because a number | |||
| of highly visible zones use it. Validators that do not support | of highly visible zones use it. Validators that do not support | |||
| validation of responses using NSEC3 will be hampered in validating | validation of responses using NSEC3 will be hampered in validating | |||
| large portions of the DNS space. | large portions of the DNS space. | |||
| [RFC5155] should be considered part of the DNS Security Document | [RFC5155] is now considered part of the DNS Security Document Family | |||
| Family as described by [RFC4033], Section 10. | as described by [RFC4033], Section 10. | |||
| Note that the algorithm identifiers defined in RFC5155 (DSA-NSEC3- | Note that the algorithm identifiers defined in RFC5155 (DSA-NSEC3- | |||
| SHA1 and RSASHA1-NSEC3-SHA1) and RFC5702 (RSASHA256 and RSASHA512) | SHA1 and RSASHA1-NSEC3-SHA1) and RFC5702 (RSASHA256 and RSASHA512) | |||
| signal that a zone MAY be using NSEC3, rather than NSEC. The zone | signal that a zone might be using NSEC3, rather than NSEC. The zone | |||
| MAY be using either and validators supporting these algorithms MUST | may be using either and validators supporting these algorithms MUST | |||
| support both NSEC3 and NSEC responses. | support both NSEC3 and NSEC responses. | |||
| 2.2. SHA-2 Support | 2.2. SHA-2 Support | |||
| [RFC4509] describes the use of SHA-256 as a digest algorithm in | [RFC4509] describes the use of SHA-256 as a digest algorithm in | |||
| Delegation Signer (DS) RRs. [RFC5702] describes the use of the | Delegation Signer (DS) RRs. [RFC5702] describes the use of the | |||
| RSASHA256 and RSASHA512 algorithms in DNSKEY and RRSIG RRs. | RSASHA256 and RSASHA512 algorithms in DNSKEY and RRSIG RRs. | |||
| Validator implementations are strongly encouraged to include support | Validator implementations are strongly encouraged to include support | |||
| for these algorithms for DS, DNSKEY, and RRSIG records. | for these algorithms for DS, DNSKEY, and RRSIG records. | |||
| Both [RFC4509] and [RFC5702] should also be considered part of the | Both [RFC4509] and [RFC5702] are now considered part of the DNS | |||
| DNS Security Document Family as described by [RFC4033], Section 10. | Security Document Family as described by [RFC4033], Section 10. | |||
| 3. Scaling Concerns | 3. Scaling Concerns | |||
| 3.1. Implement a BAD cache | 3.1. Implement a BAD cache | |||
| Section 4.7 of RFC4035 permits security-aware resolvers to implement | Section 4.7 of RFC4035 permits security-aware resolvers to implement | |||
| a BAD cache. Because of scaling concerns not discussed in this | a BAD cache. That guidance has changed: security-aware resolvers | |||
| document, that guidance has changed: security-aware resolvers SHOULD | SHOULD implement a BAD cache as described in RFC4035. | |||
| implement a BAD cache as described in RFC4035. | ||||
| This change in guidance is based on operational experience with | ||||
| DNSSEC administrative errors leading to significant increases in DNS | ||||
| traffic, with an accompanying realization that such events are more | ||||
| likely and more damaging than originally supposed. An example of one | ||||
| such event is documented in "Roll Over and Die" [Huston]. | ||||
| 4. Security Concerns | 4. Security Concerns | |||
| This section provides clarifications that, if overlooked, could lead | This section provides clarifications that, if overlooked, could lead | |||
| to security issues. | to security issues. | |||
| 4.1. Clarifications on Non-Existence Proofs | 4.1. Clarifications on Non-Existence Proofs | |||
| [RFC4035] Section 5.4 under-specifies the algorithm for checking non- | [RFC4035] Section 5.4 under-specifies the algorithm for checking non- | |||
| existence proofs. In particular, the algorithm as presented would | existence proofs. In particular, the algorithm as presented would | |||
| skipping to change at page 6, line 30 ¶ | skipping to change at page 6, line 37 ¶ | |||
| When validating a response to QTYPE=*, all received RRsets that match | When validating a response to QTYPE=*, all received RRsets that match | |||
| QNAME and QCLASS MUST be validated. If any of those RRsets fail | QNAME and QCLASS MUST be validated. If any of those RRsets fail | |||
| validation, the answer is considered Bogus. If there are no RRsets | validation, the answer is considered Bogus. If there are no RRsets | |||
| matching QNAME and QCLASS, that fact MUST be validated according to | matching QNAME and QCLASS, that fact MUST be validated according to | |||
| the rules in [RFC4035] Section 5.4 (as clarified in this document). | the rules in [RFC4035] Section 5.4 (as clarified in this document). | |||
| To be clear, a validator must not expect to receive all records at | To be clear, a validator must not expect to receive all records at | |||
| the QNAME in response to QTYPE=*. | the QNAME in response to QTYPE=*. | |||
| 4.3. Check for CNAME | 4.3. Check for CNAME | |||
| Section 5 of [RFC4035] says little about validating responses based | Section 5 of [RFC4035] says nothing explicit about validating | |||
| on (or that should be based on) CNAMEs. When validating a NOERROR/ | responses based on (or that should be based on) CNAMEs. When | |||
| NODATA response, validators MUST check the CNAME bit in the matching | validating a NOERROR/NODATA response, validators MUST check the CNAME | |||
| NSEC or NSEC3 RR's type bitmap in addition to the bit for the query | bit in the matching NSEC or NSEC3 RR's type bitmap in addition to the | |||
| type. | bit for the query type. | |||
| Without this check, an attacker could successfully transform a | Without this check, an attacker could successfully transform a | |||
| positive CNAME response into a NOERROR/NODATA response by (e.g.) | positive CNAME response into a NOERROR/NODATA response by (e.g.) | |||
| simply stripping the CNAME RRset from the response. A naive | simply stripping the CNAME RRset from the response. A naive | |||
| validator would then note that the QTYPE was not present in the | validator would then note that the QTYPE was not present in the | |||
| matching NSEC/NSEC3 RR, but fail to notice that the CNAME bit was | matching NSEC/NSEC3 RR, but fail to notice that the CNAME bit was | |||
| set, and thus the response should have been a positive CNAME | set, and thus the response should have been a positive CNAME | |||
| response. | response. | |||
| 4.4. Insecure Delegation Proofs | 4.4. Insecure Delegation Proofs | |||
| skipping to change at page 8, line 29 ¶ | skipping to change at page 8, line 39 ¶ | |||
| If no private algorithms appear in the DS RRset, or if any supported | If no private algorithms appear in the DS RRset, or if any supported | |||
| algorithm appears in the DS RRset, no special processing is needed. | algorithm appears in the DS RRset, no special processing is needed. | |||
| Furthermore, if the validator implementation does not support any | Furthermore, if the validator implementation does not support any | |||
| private algorithms, or only supports private algorithms using an | private algorithms, or only supports private algorithms using an | |||
| algorithm number not present in the DS RRset, no special processing | algorithm number not present in the DS RRset, no special processing | |||
| is needed. | is needed. | |||
| In the remaining cases, the security status of the zone depends on | In the remaining cases, the security status of the zone depends on | |||
| whether or not the resolver supports any of the private algorithms in | whether or not the resolver supports any of the private algorithms in | |||
| use (provided that these DS records use supported hash functions, as | use (provided that these DS records use supported message digest | |||
| discussed in Section 5.2). In these cases, the resolver MUST | algorithms, as discussed in Section 5.2 of this document). In these | |||
| retrieve the corresponding DNSKEY for each private algorithm DS | cases, the resolver MUST retrieve the corresponding DNSKEY for each | |||
| record and examine the public key field to determine the algorithm in | private algorithm DS record and examine the public key field to | |||
| use. The security-aware resolver MUST ensure that the hash of the | determine the algorithm in use. The security-aware resolver MUST | |||
| DNSKEY RR's owner name and RDATA matches the digest in the DS RR as | ensure that the hash of the DNSKEY RR's owner name and RDATA matches | |||
| described in Section 5.2 of [RFC4035], authenticating the DNSKEY. If | the digest in the DS RR as described in Section 5.2 of [RFC4035], | |||
| all of the retrieved and authenticated DNSKEY RRs use unknown or | authenticating the DNSKEY. If all of the retrieved and authenticated | |||
| unsupported private algorithms, then the zone is treated as if it | DNSKEY RRs use unknown or unsupported private algorithms, then the | |||
| were unsigned. | zone is treated as if it were unsigned. | |||
| Note that if none of the private algorithm DS RRs can be securely | Note that if none of the private algorithm DS RRs can be securely | |||
| matched to DNSKEY RRs and no other DS establishes that the zone is | matched to DNSKEY RRs and no other DS establishes that the zone is | |||
| secure, the referral should be considered Bogus data as discussed in | secure, the referral should be considered Bogus data as discussed in | |||
| [RFC4035]. | [RFC4035]. | |||
| This clarification facilitates the broader use of private algorithms, | This clarification facilitates the broader use of private algorithms, | |||
| as suggested by [RFC4955]. | as suggested by [RFC4955]. | |||
| 5.4. Caution About Local Policy and Multiple RRSIGs | 5.4. Caution About Local Policy and Multiple RRSIGs | |||
| When multiple RRSIGs cover a given RRset, [RFC4035] Section 5.3.3 | When multiple RRSIGs cover a given RRset, [RFC4035] Section 5.3.3 | |||
| suggests that "the local resolver security policy determines whether | suggests that "the local resolver security policy determines whether | |||
| the resolver also has to test these RRSIG RRs and how to resolve | the resolver also has to test these RRSIG RRs and how to resolve | |||
| skipping to change at page 9, line 30 ¶ | skipping to change at page 9, line 40 ¶ | |||
| [RFC4034] Appendix B.1 incorrectly defines the Key Tag field | [RFC4034] Appendix B.1 incorrectly defines the Key Tag field | |||
| calculation for algorithm 1. It correctly says that the Key Tag is | calculation for algorithm 1. It correctly says that the Key Tag is | |||
| the most significant 16 of the least significant 24 bits of the | the most significant 16 of the least significant 24 bits of the | |||
| public key modulus. However, [RFC4034] then goes on to incorrectly | public key modulus. However, [RFC4034] then goes on to incorrectly | |||
| say that this is 4th to last and 3rd to last octets of the public key | say that this is 4th to last and 3rd to last octets of the public key | |||
| modulus. It is, in fact, the 3rd to last and 2nd to last octets. | modulus. It is, in fact, the 3rd to last and 2nd to last octets. | |||
| 5.6. Setting the DO Bit on Replies | 5.6. Setting the DO Bit on Replies | |||
| As stated in [RFC3225], the DO bit of the query MUST be copied in the | As stated in Section 3 of [RFC3225], the DO bit of the query MUST be | |||
| response. However, in order to interoperate with implementations | copied in the response. However, in order to interoperate with | |||
| that ignore this rule on sending, resolvers MUST ignore the DO bit in | implementations that ignore this rule on sending, resolvers MUST | |||
| responses. | ignore the DO bit in responses. | |||
| 5.7. Setting the AD Bit on Queries | 5.7. Setting the AD Bit on Queries | |||
| The use of the AD bit in the query was previously undefined. This | The semantics of the AD bit in the query were previously undefined. | |||
| document defines it as a signal indicating that the requester | Section 4.6 of [RFC4035] instructed resolvers to always clear the AD | |||
| understands and is interested in the value of the AD bit in the | bit when composing queries. | |||
| response. This allows a requestor to indicate that it understands | ||||
| the AD bit without also requesting DNSSEC data via the DO bit. | This document defines setting the AD bit in a query as a signal | |||
| indicating that the requester understands and is interested in the | ||||
| value of the AD bit in the response. This allows a requestor to | ||||
| indicate that it understands the AD bit without also requesting | ||||
| DNSSEC data via the DO bit. | ||||
| 5.8. Setting the AD Bit on Replies | 5.8. Setting the AD Bit on Replies | |||
| Section 3.2.3 of [RFC4035] describes under which conditions a | Section 3.2.3 of [RFC4035] describes under which conditions a | |||
| validating resolver should set or clear the AD bit in a response. In | validating resolver should set or clear the AD bit in a response. In | |||
| order to interoperate with legacy stub resolvers and middleboxes that | order to interoperate with legacy stub resolvers and middleboxes that | |||
| neither understand nor ignore the AD bit, validating resolvers SHOULD | neither understand nor ignore the AD bit, validating resolvers SHOULD | |||
| only set the AD bit when a response both meets the conditions listed | only set the AD bit when a response both meets the conditions listed | |||
| in RFC 4035, section 3.2.3, and the request contained either a set DO | in RFC 4035, section 3.2.3, and the request contained either a set DO | |||
| bit or a set AD bit. | bit or a set AD bit. | |||
| skipping to change at page 10, line 25 ¶ | skipping to change at page 10, line 38 ¶ | |||
| the CD bit was set on the incoming query or whether it has a trust | the CD bit was set on the incoming query or whether it has a trust | |||
| anchor at or above the QNAME. | anchor at or above the QNAME. | |||
| [RFC4035] is ambiguous about what to do when a cached response was | [RFC4035] is ambiguous about what to do when a cached response was | |||
| obtained with the CD bit unset, a case that only arises when the | obtained with the CD bit unset, a case that only arises when the | |||
| resolver chooses not to set the CD bit on all upstream queries, as | resolver chooses not to set the CD bit on all upstream queries, as | |||
| specified above. In the typical case, no new query is required, nor | specified above. In the typical case, no new query is required, nor | |||
| does the cache need to track the state of the CD bit used to make a | does the cache need to track the state of the CD bit used to make a | |||
| given query. The problem arises when the cached response is a server | given query. The problem arises when the cached response is a server | |||
| failure (RCODE 2), which may indicate that the requested data failed | failure (RCODE 2), which may indicate that the requested data failed | |||
| DNSSEC validation at an upstream validating resolver. (RFC2308 | DNSSEC validation at an upstream validating resolver. ([RFC2308] | |||
| permits caching of server failures for up to five minutes.) In these | permits caching of server failures for up to five minutes.) In these | |||
| cases, a new query with the CD bit set is required. | cases, a new query with the CD bit set is required. | |||
| Appendix B discusses more of the logic behind the recommendation | Appendix B discusses more of the logic behind the recommendation | |||
| presented in this section. | presented in this section. | |||
| 5.10. Nested Trust Anchors | 5.10. Nested Trust Anchors | |||
| A DNSSEC validator may be configured such that, for a given response, | A DNSSEC validator may be configured such that, for a given response, | |||
| more than one trust anchor could be used to validate the chain of | more than one trust anchor could be used to validate the chain of | |||
| skipping to change at page 11, line 33 ¶ | skipping to change at page 11, line 47 ¶ | |||
| present in the DNSKEY RRset. It is possible to add algorithms at | present in the DNSKEY RRset. It is possible to add algorithms at | |||
| the DNSKEY that aren't in the DS record, but not vice-versa. If | the DNSKEY that aren't in the DS record, but not vice-versa. If | |||
| more than one key of the same algorithm is in the DNSKEY RRset, it | more than one key of the same algorithm is in the DNSKEY RRset, it | |||
| is sufficient to sign each RRset with any subset of these DNSKEYs. | is sufficient to sign each RRset with any subset of these DNSKEYs. | |||
| It is acceptable to sign some RRsets with one subset of keys (or | It is acceptable to sign some RRsets with one subset of keys (or | |||
| key) and other RRsets with a different subset, so long as at least | key) and other RRsets with a different subset, so long as at least | |||
| one DNSKEY of each algorithm is used to sign each RRset. | one DNSKEY of each algorithm is used to sign each RRset. | |||
| Likewise, if there are DS records for multiple keys of the same | Likewise, if there are DS records for multiple keys of the same | |||
| algorithm, any subset of those may appear in the DNSKEY RRset. | algorithm, any subset of those may appear in the DNSKEY RRset. | |||
| Lastly, note that this a requirement at the server side, not the | This requirement applies to servers, not validators. Validators | |||
| client side. Validators SHOULD accept any single valid path. They | SHOULD accept any single valid path. They SHOULD NOT insist that all | |||
| SHOULD NOT insist that all algorithms signaled in the DS RRset work, | algorithms signaled in the DS RRset work, and they MUST NOT insist | |||
| and they MUST NOT insist that all algorithms signaled in the DNSKEY | that all algorithms signaled in the DNSKEY RRset work. A validator | |||
| RRset work. A validator MAY have a configuration option to perform a | MAY have a configuration option to perform a signature completeness | |||
| signature completeness test to support troubleshooting. | test to support troubleshooting. | |||
| 5.12. Ignore Extra Signatures From Unknown Keys | 5.12. Ignore Extra Signatures From Unknown Keys | |||
| Validating resolvers MUST disregard RRSIGs in a zone that do not | Validating resolvers MUST disregard RRSIGs in a zone that do not | |||
| (currently) have a corresponding DNSKEY in the zone. Similarly, a | (currently) have a corresponding DNSKEY in the zone. Similarly, a | |||
| validating resolver MUST disregard RRSIGs with algorithm types that | validating resolver MUST disregard RRSIGs with algorithm types that | |||
| don't exist in the DNSKEY RRset. | don't exist in the DNSKEY RRset. | |||
| Good key rollover and algorithm rollover practices, as discussed in | Good key rollover and algorithm rollover practices, as discussed in | |||
| RFC4641 and its successor documents and as suggested by the rules in | RFC4641 and its successor documents and as suggested by the rules in | |||
| the previous section, may require that such RRSIGs be present in a | the previous section, may require that such RRSIGs be present in a | |||
| zone. | zone. | |||
| 6. Minor Corrections and Clarifications | 6. Minor Corrections and Clarifications | |||
| 6.1. Finding Zone Cuts | 6.1. Finding Zone Cuts | |||
| Appendix C.8 of [RFC4035] discusses sending DS queries to the servers | Appendix C.8 of [RFC4035] discusses sending DS queries to the servers | |||
| for a parent zone. To do that, a resolver may first need to apply | for a parent zone but does not state how to find those servers. | |||
| special rules to discover what those servers are. | Specific instructions can be found in Section 4.2 of [RFC4035]. | |||
| As explained in Section 3.1.4.1 of [RFC4035], security-aware name | ||||
| servers need to apply special processing rules to handle the DS RR, | ||||
| and in some situations the resolver may also need to apply special | ||||
| rules to locate the name servers for the parent zone if the resolver | ||||
| does not already have the parent's NS RRset. Section 4.2 of | ||||
| [RFC4035] specifies a mechanism for doing that. | ||||
| 6.2. Clarifications on DNSKEY Usage | 6.2. Clarifications on DNSKEY Usage | |||
| It is possible to use different DNSKEYs to sign different subsets of | It is possible to use different DNSKEYs to sign different subsets of | |||
| a zone, constrained only by the rules in Section 5.11. It is even | a zone, constrained only by the rules in Section 5.11. It is even | |||
| possible to use a different DNSKEY for each RRset in a zone, subject | possible to use a different DNSKEY for each RRset in a zone, subject | |||
| only to practical limits on the size of the DNSKEY RRset and the | only to practical limits on the size of the DNSKEY RRset and the | |||
| above rules. However, be aware that there is no way to tell | above rules. However, be aware that there is no way to tell | |||
| resolvers what a particular DNSKEY is supposed to be used for -- any | resolvers what a particular DNSKEY is supposed to be used for -- any | |||
| DNSKEY in the zone's signed DNSKEY RRset may be used to authenticate | DNSKEY in the zone's signed DNSKEY RRset may be used to authenticate | |||
| skipping to change at page 14, line 43 ¶ | skipping to change at page 15, line 7 ¶ | |||
| [RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS | [RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS | |||
| Security (DNSSEC) Hashed Authenticated Denial of | Security (DNSSEC) Hashed Authenticated Denial of | |||
| Existence", RFC 5155, March 2008. | Existence", RFC 5155, March 2008. | |||
| [RFC5702] Jansen, J., "Use of SHA-2 Algorithms with RSA in DNSKEY | [RFC5702] Jansen, J., "Use of SHA-2 Algorithms with RSA in DNSKEY | |||
| and RRSIG Resource Records for DNSSEC", RFC 5702, | and RRSIG Resource Records for DNSSEC", RFC 5702, | |||
| October 2009. | October 2009. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [Huston] Michaelson, G., Wallstrom, P., Arends, R., and G. Huston, | ||||
| "Roll Over and Die?", February 2010. | ||||
| [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | ||||
| NCACHE)", RFC 2308, March 1998. | ||||
| [RFC3755] Weiler, S., "Legacy Resolver Compatibility for Delegation | [RFC3755] Weiler, S., "Legacy Resolver Compatibility for Delegation | |||
| Signer (DS)", RFC 3755, May 2004. | Signer (DS)", RFC 3755, May 2004. | |||
| [RFC4641] Kolkman, O. and R. Gieben, "DNSSEC Operational Practices", | [RFC4641] Kolkman, O. and R. Gieben, "DNSSEC Operational Practices", | |||
| RFC 4641, September 2006. | RFC 4641, September 2006. | |||
| [RFC4955] Blacka, D., "DNS Security (DNSSEC) Experiments", RFC 4955, | [RFC4955] Blacka, D., "DNS Security (DNSSEC) Experiments", RFC 4955, | |||
| July 2007. | July 2007. | |||
| [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | |||
| skipping to change at page 15, line 15 ¶ | skipping to change at page 15, line 34 ¶ | |||
| [RFC5074] Weiler, S., "DNSSEC Lookaside Validation (DLV)", RFC 5074, | [RFC5074] Weiler, S., "DNSSEC Lookaside Validation (DLV)", RFC 5074, | |||
| November 2007. | November 2007. | |||
| Appendix A. Acknowledgments | Appendix A. Acknowledgments | |||
| The editors would like the thank Rob Austein for his previous work as | The editors would like the thank Rob Austein for his previous work as | |||
| an editor of this document. | an editor of this document. | |||
| The editors are extremely grateful to those who, in addition to | The editors are extremely grateful to those who, in addition to | |||
| finding errors and omissions in the DNSSECbis document set, have | finding errors and omissions in the DNSSEC document set, have | |||
| provided text suitable for inclusion in this document. | provided text suitable for inclusion in this document. | |||
| The lack of specificity about handling private algorithms, as | The lack of specificity about handling private algorithms, as | |||
| described in Section 5.3, and the lack of specificity in handling ANY | described in Section 5.3, and the lack of specificity in handling ANY | |||
| queries, as described in Section 4.2, were discovered by David | queries, as described in Section 4.2, were discovered by David | |||
| Blacka. | Blacka. | |||
| The error in algorithm 1 key tag calculation, as described in | The error in algorithm 1 key tag calculation, as described in | |||
| Section 5.5, was found by Abhijit Hayatnagarkar. Donald Eastlake | Section 5.5, was found by Abhijit Hayatnagarkar. Donald Eastlake | |||
| contributed text for Section 5.5. | contributed text for Section 5.5. | |||
| skipping to change at page 15, line 42 ¶ | skipping to change at page 16, line 14 ¶ | |||
| Text on the mandatory algorithm rules was derived from suggestions by | Text on the mandatory algorithm rules was derived from suggestions by | |||
| Matthijs Mekking and Ed Lewis. | Matthijs Mekking and Ed Lewis. | |||
| The CD bit logic was analyzed in depth by David Blacka, Olafur | The CD bit logic was analyzed in depth by David Blacka, Olafur | |||
| Gudmundsson, Mike St. Johns, and Andrew Sullivan. | Gudmundsson, Mike St. Johns, and Andrew Sullivan. | |||
| The editors would like to thank Alfred Hoenes, Ed Lewis, Danny Mayer, | The editors would like to thank Alfred Hoenes, Ed Lewis, Danny Mayer, | |||
| Olafur Gudmundsson, Suzanne Woolf, Rickard Bellgrim, Mike St. Johns, | Olafur Gudmundsson, Suzanne Woolf, Rickard Bellgrim, Mike St. Johns, | |||
| Mark Andrews, Wouter Wijngaards, Matthijs Mekking, Andrew Sullivan, | Mark Andrews, Wouter Wijngaards, Matthijs Mekking, Andrew Sullivan, | |||
| and Scott Rose for their substantive comments on the text of this | Jeremy Reed, Paul Hoffman, Mohan Parthasarathy, Florian Weimer, | |||
| Warren Kumari and Scott Rose for their contributions to this | ||||
| document. | document. | |||
| Appendix B. Discussion of Setting the CD Bit | Appendix B. Discussion of Setting the CD Bit | |||
| RFC 4035 may be read as relying on the implicit assumption that there | [RFC4035] may be read as relying on the implicit assumption that | |||
| is at most one validating system between the stub resolver and the | there is at most one validating system between the stub resolver and | |||
| authoritative server for a given zone. It is entirely possible, | the authoritative server for a given zone. It is entirely possible, | |||
| however, for more than one validator to exist between a stub resolver | however, for more than one validator to exist between a stub resolver | |||
| and an authoritative server. If these different validators have | and an authoritative server. If these different validators have | |||
| disjoint trust anchors configured, then it is possible that each | disjoint trust anchors configured, then it is possible that each | |||
| would be able to validate some portion of the DNS tree but neither is | would be able to validate some portion of the DNS tree but neither is | |||
| able to validate all of it. Accordingly, it might be argued that it | able to validate all of it. Accordingly, it might be argued that it | |||
| is desirable not to set the CD bit on upstream queries, because that | is desirable not to set the CD bit on upstream queries, because that | |||
| allows for maximal validation. | allows for maximal validation. | |||
| In section Section 5.9 of this document, it is recommended to set the | In section Section 5.9 of this document, it is recommended to set the | |||
| CD bit on an upstream query even when the incoming query arrives with | CD bit on an upstream query even when the incoming query arrives with | |||
| skipping to change at page 16, line 40 ¶ | skipping to change at page 17, line 11 ¶ | |||
| as local policy or from the API in the case of a stub). The second | as local policy or from the API in the case of a stub). The second | |||
| column indicates whether the query needs to be forwarded for | column indicates whether the query needs to be forwarded for | |||
| resolution (F) or can be satisfied from a local cache (C). The third | resolution (F) or can be satisfied from a local cache (C). The third | |||
| column is a line number, so that it can be referred to later in the | column is a line number, so that it can be referred to later in the | |||
| table. The fourth column indicates any relevant conditions at the | table. The fourth column indicates any relevant conditions at the | |||
| resolver: whether the resolver has a covering trust anchor and so on. | resolver: whether the resolver has a covering trust anchor and so on. | |||
| If there are no parameters here, the column is empty. The fifth and | If there are no parameters here, the column is empty. The fifth and | |||
| final column indicates what action the resolver takes. | final column indicates what action the resolver takes. | |||
| The tables differentiate between "cached data" and "cached RCODE=2". | The tables differentiate between "cached data" and "cached RCODE=2". | |||
| This is a shorthand; the point is that one has to treat RCODE=2 as | This is a shorthand; the point is that one has to treat RCODE=2 | |||
| special, because it might indicate a validation failure somewhere | (server failure) as special, because it might indicate a validation | |||
| upstream. The distinction is really between "cached RCODE=2" and | failure somewhere upstream. The distinction is really between | |||
| "cached everything else". | "cached RCODE=2" and "cached everything else". | |||
| The tables are probably easiest to think of in terms of describing | The tables are probably easiest to think of in terms of describing | |||
| what happens when a stub resolver sends a query to an intermediate | what happens when a stub resolver sends a query to an intermediate | |||
| resolver, but they are perfectly general and can be applied to any | resolver, but they are perfectly general and can be applied to any | |||
| validating resolver. | validating resolver. | |||
| Model 1: "always set" | Model 1: "always set" | |||
| This model is so named because the validating resolver sets the CD | This model is so named because the validating resolver sets the CD | |||
| bit on queries it makes regardless of whether it has a covering trust | bit on queries it makes regardless of whether it has a covering trust | |||
| End of changes. 36 change blocks. | ||||
| 90 lines changed or deleted | 100 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/ | ||||