Network Working Group B. Laurie Internet-Draft G. Sission Expires: April 1, 2005 Nominet October 2004 DNSSEC NSEC2 Owner and RDATA Format draft-laurie-dnsext-nsec2v2-00 Status of this Memo This document is an Internet-Draft and is subject to all provisions of section 3 of RFC 3667. By submitting this Internet-Draft, each author represents that any applicable patent or other IPR claims of which he or she is aware have been or will be disclosed, and any of which he or she become aware will be disclosed, in accordance with RFC 3668. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire on April 1, 2005. Copyright Notice Copyright (C) The Internet Society (2004). Abstract The DNS Security (DNSSEC) NSEC resource record (RR) is intended to be used to provide authenticated denial of existence of DNS owner names and types; however, it also permits any user to obtain a listing of all DNS owner names in a zone. This can accomplished via successive DNS queries for all NSEC RRs in that zone. A complete zone file can be used either directly as a source of Laurie & Sission Expires April 1, 2005 [Page 1] Internet-Draft nsec2 October 2004 probable e-mail addresses for spam, or indirectly as a key for multiple WHOIS queries to reveal registrant data which many registries (particularly in Europe) may be under strict legal obligations to protect. Many registries therefore prohibit copying of their zone file; however the use of NSEC RRs makes renders policies unenforceable. This document proposes an alternate scheme which hides owner names while permitting authenticated denial of existence of non-existent names. The scheme uses two new RR types: NSEC2 and EXIST. Table of Contents 1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. The NSEC2 Resource Record . . . . . . . . . . . . . . . . . . 3 2.1 NSEC2 RDATA Wire Format . . . . . . . . . . . . . . . . . 3 2.1.1 The Hash Field . . . . . . . . . . . . . . . . . . . . 3 2.1.2 The Iterations field . . . . . . . . . . . . . . . . . 4 2.1.3 The Salt field . . . . . . . . . . . . . . . . . . . . 4 2.1.4 The Hash of Next Domain Name Field . . . . . . . . . . 4 2.1.5 The list of Type Bit Map(s) Field . . . . . . . . . . 4 2.2 Owner Name Wire Format . . . . . . . . . . . . . . . . . . 5 2.3 The NSEC2 RR Presentation Format . . . . . . . . . . . . . 5 3. The EXIST Resource Record . . . . . . . . . . . . . . . . . . 5 4. Calculation of the Hash . . . . . . . . . . . . . . . . . . . 6 4.1 Test Vectors . . . . . . . . . . . . . . . . . . . . . . . 6 5. Complications Caused by Wildcards . . . . . . . . . . . . . . 6 6. Performance Considerations . . . . . . . . . . . . . . . . . . 7 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 8. Security Considerations . . . . . . . . . . . . . . . . . . . 7 9. Requirements notation . . . . . . . . . . . . . . . . . . . . 8 10. Security Considerations . . . . . . . . . . . . . . . . . . 8 A. Example Zone . . . . . . . . . . . . . . . . . . . . . . . . . 8 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 11.1 Normative References . . . . . . . . . . . . . . . . . . . . 9 11.2 Informative References . . . . . . . . . . . . . . . . . . . 9 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 10 Intellectual Property and Copyright Statements . . . . . . . . 11 Laurie & Sission Expires April 1, 2005 [Page 2] Internet-Draft nsec2 October 2004 1. Terminology Because the owner name must be modified (by hashing), the unmodified owner name is referred to as the "actual owner name" in this draft. 2. The NSEC2 Resource Record The NSEC2 resource record lists two separate things: the SHA-1 hash of the owner name of the next RRset in the canonical ordering of the zone, and the set of RR types present at the NSEC2 RR's actual owner name. The complete set of NSEC2 RRs in a zone both indicate which RRsets exist in a zone and also form a chain of hashed owner names in the zone. This information is used to provide authenticated denial of existence for DNS data, as described in RFC 2535 [RFC2535], except that the range covered by the returned RR will span consist of two hashed owner names between which the hash of the queried record would lie in canonical order. The type value for the NSEC2 RR is ??. The NSEC2 RR RDATA format is class independent and defined for all classes. The NSEC2 RR SHOULD have the same TTL value as the SOA minimum TTL field. This is in the spirit of negative caching [RFC2308]. 2.1 NSEC2 RDATA Wire Format The RDATA of the NSEC2 RR is as shown below: 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hash | Iterations | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Salt | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Hash of Next Domain Name / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / List of Type Bit Map(s) / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2.1.1 The Hash Field The Hash Type field identifies the hash algorithm used to hash the owner name. Currently only one value is defined, 1, for the SHA-1 algorithm. All other values are reserved. Laurie & Sission Expires April 1, 2005 [Page 3] Internet-Draft nsec2 October 2004 2.1.2 The Iterations field The Iterations field defines the number of times the hash has been iterated. More iterations results in greater resiliency of the hash value to dictionary attacks, but at a higher cost. 2.1.3 The Salt field The salt is prepended to the value to be hashed in order to defend against precalculated dictionary attacks. 2.1.4 The Hash of Next Domain Name Field The Hash of Next Domain Name field contains the hash of the owner name of the next RR in the canonical ordering of the hashed names of the zone. The value of the Hash of Next Domain Name field in the last NSEC2 record in the zone is the hash of the owner of the first NSEC2 RR in the zone. A sender MUST NOT use DNS name compression on the Next Domain Name field when transmitting an NSEC2 RR. [Not sure if this is still required] Hashed owner names of RRsets not authoritative for the given zone (such as glue records) MUST NOT be listed in the Hash of Next Domain Name unless at least one authoritative RRset exists at the same owner name. 2.1.5 The list of Type Bit Map(s) Field The RR type space is split into 256 window blocks, each representing the low-order 8 bits of the 16-bit RR type space. Each block that has at least one active RR type is encoded using a single octet window number (from 0 to 255), a single octet bitmap length (from 1 to 32) indicating the number of octets used for the window block's bitmap, and up to 32 octets (256 bits) of bitmap. Blocks are present in the NSEC2 RR RDATA in increasing numerical order. "|" denotes concatenation Type Bit Map(s) Field = ( Window Block # | Bitmap Length | Bitmap ) + Each bitmap encodes the low-order 8 bits of RR types within the window block, in network bit order. The first bit is bit 0. For window block 0, bit 1 corresponds to RR type 1 (A), bit 2 corresponds to RR type 2 (NS), and so forth. For window block 1, bit 1 Laurie & Sission Expires April 1, 2005 [Page 4] Internet-Draft nsec2 October 2004 corresponds to RR type 257, bit 2 to RR type 258. If a bit is set to 1, it indicates that an RRset of that type is present for the NSEC2 RR's owner name. If a bit is set to 0, it indicates that no RRset of that type is present for the NSEC2 RR's owner name. Since bit 0 in window block 0 refers to the non-existing RR type 0, it MUST be set to 0. After verification, the validator MUST ignore the value of bit 0 in window block 0. Bits representing Meta-TYPEs or QTYPEs as specified in RFC 2929 [4] (section 3.1) or within the range reserved for assignment only to QTYPEs and Meta-TYPEs MUST be set to 0, since they do not appear in zone data. If encountered, they must be ignored upon reading. Blocks with no types present MUST NOT be included. Trailing zero octets in the bitmap MUST be omitted. The length of each block's bitmap is determined by the type code with the largest numerical value, within that block, among the set of RR types present at the NSEC2 RR's actual owner name. Trailing zero octets not specified MUST be interpretted as zero octets. 2.2 Owner Name Wire Format The owner name of the NSEC2 RR will be the SHA-1 hash represented in hexadecimal of the owner's full domain name instead of the name itself. There is no conflict if this happens to coincide with a real domain name, since these hashed names will only appear in NSEC2 RRs. 2.3 The NSEC2 RR Presentation Format The presentation format of the RDATA portion is as follows: The Hash field is presented as the name of the hash. The Iterations field is presented as a decimal number. The Salt field is presented as a hexadecimal number. The Hash of Next Domain Name field is represented as a hexadecimal number. The List of Type Bit Map(s) Field is represented as a sequence of RR type mnemonics. When the mnemonic is not known, the TYPE representation as described in RFC 3597 [5] (section 5) MUST be used. 3. The EXIST Resource Record In order to prove the nonexistence of a record that might be covered Laurie & Sission Expires April 1, 2005 [Page 5] Internet-Draft nsec2 October 2004 by a wildcard, it is necessary to prove the existence of its closest encloser. This record does that. Its owner is the closest encloser. It has no RDATA. If there is another RR that proves the existence of the closest encloser, this SHOULD be used instead of an EXIST record. EXIST records SHOULD NOT be returned in response to ANY queries (but note that returning them does not do any real harm, since a query for a domain within the existing domain will reveal it in any case). 4. Calculation of the Hash Define H(x) to be the hash of x using the hash function selected by the NSEC2 record and || to indicate concatenation. Then define: IH(salt,x,0)=H(x || salt) IH(salt,x,k)=H(IH(salt,x,k-1) || salt) if k > 0 Then the calculated hash of a name is IH(salt,name,iterations-1). 4.1 Test Vectors TBD 5. Complications Caused by Wildcards If a wildcard owner name appears in a zone, the wildcard label ("*") is treated as a literal symbol and is treated in the same way as any other owner name for purposes of generating NSEC2 RRs. RFC 2535 [RFC2525] describes the impact of wildcards on authenticated denial of existence. In order to prove there are no wildcards for a domain, as well as no RRs that match directly, an RR must be shown for the closest encloser, and nonexistence must be shown for all enclosers that could be closer. If there is no other RR for the closest encloser, the EXIST RR MUST be used. To illustrate, suppose a.b.c.d.e. does not exist in the d.e. zone, and c.d.e. is the closest encloser, the proof would consist of: a) Nonexistence of a.b.c.d.e (NSEC2) b) Nonexistence of b.c.d.e (NSEC2) c) Existence of c.d.e (EXIST or other RR) d) Nonexistence of *.c.d.e (NSEC2) Laurie & Sission Expires April 1, 2005 [Page 6] Internet-Draft nsec2 October 2004 6. Performance Considerations Iterated hashes will obviously impose a performance penalty on both servers and clients. However, servers already have to do public key signatures for every record, which is far more costly than an iterated hash (unless impractically large values are chosen for iterations). Although checking a public key signature is significantly cheaper than signing, at least for RSA, individual clients should not be frequently required to check nonexistence of RRs, and in any case values for iterations can still be chosen to make the cost small compared to the cost of the signature checking. [Note: clients may want limit the number of iterations (and fail if too high) to avoid apparently hanging] [Example: on a Pentium using OpenSSL, at least 1000 iterations of SHA-1 can be done in the time it takes to check a 2048 bit RSA signature] 7. IANA Considerations Type values for NSEC2 and EXIST will have to be assigned. Value(s) for hash algorithm(s) will have to be assigned. 8. Security Considerations The NSEC2 records are still susceptible to dictionary attacks (i.e. the attacker retrieves all the NSEC2 records, then calculates the hashes of all likely domain names, comparing against the hashes found in the NSEC2 records, and thus enumerating the zone). These are substantially more expensive than traversing the original NSEC2 records would have been, and in any case, such an attack could also be used directly against the name server itself by performing queries for all likely names. The expense of this attack can be chosen by setting the iterations in the NSEC2 RR. High-value domains are also susceptible to a precalculated dictionary attack - that is, a list of hashes for all likely names is computed once, then NSEC2 is scanned periodically and compared against the precomputed hashes. This attack is prevented by changing the salt on a regular basis. EXIST records may leak information. If a.b.c.d.e exists and f.b.c.d.e does not, then a query for f.b.c.d.e will reveal the fact that b.c.d.e exists, even if there is no RR for it. In practice, this rarely matters, since usually b.c.d.e will be a delegated domain and hence have at least an SOA record. Laurie & Sission Expires April 1, 2005 [Page 7] Internet-Draft nsec2 October 2004 Walking the NSEC2 RRs will reveal the total number of records in the zone, and also what types they are. This could be mitigated by adding dummy entries, but certainly an upper limit can always be found. Hash collisions may occur. If they do, it will be impossible to prove the nonexistence of the colliding domain - however, this is fantastically unlikely, and, in any case, DNSSEC already relies on SHA-1 to not collide. 9. Requirements notation The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. 10. Security Considerations Appendix A. Example Zone This is a zone showing its NSEC2 records. They can also be used as test vectors for the hash algorithm. RRSIG records have been elided. Laurie & Sission Expires April 1, 2005 [Page 8] Internet-Draft nsec2 October 2004 example.com. 1000 IN SOA localhost. postmaster.localhost.example.com. ( 1 ; serial 3600 ; refresh (1 hour) 1800 ; retry (30 minutes) 604800 ; expire (1 week) 3600 ; minimum (1 hour) ) 1000 NS ns1.example.com. 1000 NS ns2.example.com. f519593e82969842a136e0f47814c881fa163833.example.com. 3600 IN NSEC2 \ SHA-1 200 31323334 4EF8239D95C18403A509D7C336A5D0FA48FD1107 \ NS SOA RRSIG DNSKEY NSEC2 a.example.com. 1000 IN A 1.2.3.4 1000 IN A 1.2.3.5 1000 TXT "An example" bfe6ea21dee9d228889ae11fa58c4bd551d15801.example.com. 3600 IN NSEC2 \ SHA-1 200 31323334 F519593E82969842A136E0F47814C881FA163833 \ A TXT RRSIG NSEC2 b.example.com. 1000 IN A 1.2.3.7 83c06d3b7d01fbc9576c71af2bec1a1163435153.example.com. 3600 IN NSEC2 \ SHA-1 200 31323334 A33559360EECB02F36B5C1B72C109126CA4F5A0D \ A RRSIG NSEC2 a.b.c.example.com. 1000 IN A 1.2.3.6 a33559360eecb02f36b5c1b72c109126ca4f5a0d.example.com. 3600 IN NSEC2 \ SHA-1 200 31323334 BFE6EA21DEE9D228889AE11FA58C4BD551D15801 \ A RRSIG NSEC2 ns1.example.com. 1000 IN A 1.2.3.8 4ef8239d95c18403a509d7c336a5d0fa48fd1107.example.com. 3600 IN NSEC2 \ SHA-1 200 31323334 50016B56FD2F0FFC7B563C50FAF0E34259763BBB \ A RRSIG NSEC2 ns2.example.com. 1000 IN A 1.2.3.9 50016b56fd2f0ffc7b563c50faf0e34259763bbb.example.com. 3600 IN NSEC2 \ SHA-1 200 31323334 83C06D3B7D01FBC9576C71AF2BEC1A1163435153 \ A RRSIG NSEC2 11. References 11.1 Normative References [dnssecbis-protocol] "DNSSECbis Protocol Definitions", BCP XX, RFC XXXX, Some Month 2004. 11.2 Informative References [RFC2026] Bradner, S., "The Internet Standards Process -- Revision Laurie & Sission Expires April 1, 2005 [Page 9] Internet-Draft nsec2 October 2004 3", BCP 9, RFC 2026, October 1996. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2418] Bradner, S., "IETF Working Group Guidelines and Procedures", BCP 25, RFC 2418, September 1998. [rollover] Ihren, J., Kolkman, O. and B. Manning, "An In-Band Rollover Algorithm and a Out-Of-Band Priming Method for DNS Trust Anchors.", July 2004. Authors' Addresses Ben Laurie Nominet 17 Perryn Road London W3 7LR England Phone: +44 (20) 8735 0686 EMail: ben@algroup.co.uk Geoffrey Sisson Nominet Laurie & Sission Expires April 1, 2005 [Page 10] Internet-Draft nsec2 October 2004 Intellectual Property Statement The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org. Disclaimer of Validity This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Copyright Statement Copyright (C) The Internet Society (2004). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. Acknowledgment Funding for the RFC Editor function is currently provided by the Internet Society. Laurie & Sission Expires April 1, 2005 [Page 11]