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]