954 lines
33 KiB
Plaintext
954 lines
33 KiB
Plaintext
|
||
|
||
Network Working Group S. Josefsson
|
||
Internet-Draft RSA Security
|
||
Expires: May 25, 2001 November 24, 2000
|
||
|
||
|
||
Authenticating denial of existence in DNS with minimum disclosure
|
||
(or; An alternative to DNSSEC NXT records)
|
||
draft-ietf-dnsext-not-existing-rr-01
|
||
|
||
Status of this Memo
|
||
|
||
This document is an Internet-Draft and is in full conformance with
|
||
all provisions of Section 10 of RFC2026.
|
||
|
||
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 May 25, 2001.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||
|
||
Abstract
|
||
|
||
This draft present an alternative to NXT records, used to achieve
|
||
authenticated denial of existence of a domain name, class and type.
|
||
Problems with NXT records, as specified in RFC 2535, are identified.
|
||
One solution, the NO record, is presented.
|
||
|
||
The NO record differ from the NXT record by using a cryptographic
|
||
hash value instead of the domain name. This prevent an adversery
|
||
from collecting information by "chaining" through a zone. It also
|
||
remove delegation point concerns that was a side effect of NXT
|
||
records. The document also describe hash truncation and record
|
||
merging that reduces storage/network load.
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 1]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 3
|
||
2. Context . . . . . . . . . . . . . . . . . . . . . . . . . 3
|
||
3. The NO Resource Record . . . . . . . . . . . . . . . . . . 4
|
||
3.1 Idea . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
3.2 NO RDATA Format . . . . . . . . . . . . . . . . . . . . . 4
|
||
3.3 NO RDATA on-the-wire format example . . . . . . . . . . . 6
|
||
3.4 Owner Names . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
3.5 Additional Complexity Due To Wildcards . . . . . . . . . . 7
|
||
3.6 No Considerations at Delegation Points . . . . . . . . . . 7
|
||
3.7 Hash Truncation and Dynamic Updates . . . . . . . . . . . 8
|
||
3.8 Reducing Number of Records . . . . . . . . . . . . . . . . 9
|
||
3.9 Hash Collisions . . . . . . . . . . . . . . . . . . . . . 9
|
||
3.10 Authenticating Denial of NO Records . . . . . . . . . . . 9
|
||
3.11 Case Considerations . . . . . . . . . . . . . . . . . . . 10
|
||
3.12 Presentation Format . . . . . . . . . . . . . . . . . . . 10
|
||
3.13 Examples . . . . . . . . . . . . . . . . . . . . . . . . . 10
|
||
3.13.1 Adding NO Records to a Zone . . . . . . . . . . . . . . . 10
|
||
3.13.2 Simple NO creating entity . . . . . . . . . . . . . . . . 11
|
||
3.13.3 Advanced NO creating entity . . . . . . . . . . . . . . . 11
|
||
3.13.4 Resolver Query for Non-existing Domain . . . . . . . . . . 11
|
||
3.13.5 Resolver Query for Non-existing Type At Existing Domain . 12
|
||
4. Comparing NO and NXT . . . . . . . . . . . . . . . . . . . 13
|
||
4.1 Denial Of Existence Of Non-Existing Names . . . . . . . . 13
|
||
4.2 Denial Of Types Of Existing Names . . . . . . . . . . . . 13
|
||
4.3 Information disclosure (chain problem) . . . . . . . . . . 13
|
||
4.4 Delegation problem . . . . . . . . . . . . . . . . . . . . 13
|
||
4.5 Zone size (Bytes) . . . . . . . . . . . . . . . . . . . . 13
|
||
4.6 Zone size (Number Of Records) . . . . . . . . . . . . . . 13
|
||
4.7 Zone size (Number Of Owner names) . . . . . . . . . . . . 14
|
||
4.8 SIG Labels field and Wildcard records . . . . . . . . . . 14
|
||
4.9 Dynamic Updates . . . . . . . . . . . . . . . . . . . . . 14
|
||
5. Security Considerations . . . . . . . . . . . . . . . . . 15
|
||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . 15
|
||
References . . . . . . . . . . . . . . . . . . . . . . . . 16
|
||
Author's Address . . . . . . . . . . . . . . . . . . . . . 16
|
||
Full Copyright Statement . . . . . . . . . . . . . . . . . 17
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 2]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
1. Introduction
|
||
|
||
"Domain Name Security Extensions", RFC 2535 [1], specifies several
|
||
extensions to DNS that provides data integrity and authentication.
|
||
Among them is the NXT record, used to achieve authenticated denial
|
||
of existence of domains, and authenticated denial of existence on
|
||
certain class/types on existing domains.
|
||
|
||
As a consequence of NXT records it is possible to "chain" through a
|
||
zone secured by DNS security extensions, collecting all names and/or
|
||
records in the zone. NXT records also introduce a complication at
|
||
delegation points. These are the main problems that motivated this
|
||
draft.
|
||
|
||
2. Context
|
||
|
||
There have been arguments that the "chain" problem of NXT records is
|
||
a non-issue. Often used is the argument that information in DNS is
|
||
public, and if you wish to keep information private, you shouldn't
|
||
publish it in DNS. This might be true, but nonetheless major
|
||
service providers and companies are restricting access to zone
|
||
transfers. Also, people have debated whether NXT records should be
|
||
part of DNSSEC at all because of this problem [5].
|
||
|
||
Another aspect exist. When DNS is used to store certificates, as
|
||
described in RFC 2538 [2], certificates can identify individuals
|
||
and/or carry authentication information for special purposes. This
|
||
context has been the motivation for developing this draft.
|
||
|
||
The "chain" problem is not the only concern with NXT records. The
|
||
delegation considerations for NXT records (different RRsets in the
|
||
parent and child for the same domain) has also been regarded as a
|
||
flaw of the NXT records.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 3]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
3. The NO Resource Record
|
||
|
||
This section describe the NO Resource Record.
|
||
|
||
3.1 Idea
|
||
|
||
A straight-forward extension to the NXT record that minimize
|
||
disclosure of information is to store a one-way function value
|
||
instead of the actual domain name. This is similar to NXT records;
|
||
where NXT records secure a interval where no existing domain names
|
||
are to be found, NO records secure a interval where no one-way value
|
||
of existing domain names are to be found.
|
||
|
||
The benefit, of course, is that an adversary does not yield any
|
||
useful information from the record. Specifically, "chaining"
|
||
through a zone to collect all records is no longer possible.
|
||
|
||
This idea has been extended in this document into allowing (but not
|
||
requiring) one record to deny existence of several records, and
|
||
truncating the hash value to the shortest unique prefix to preserve
|
||
space.
|
||
|
||
3.2 NO RDATA Format
|
||
|
||
The RDATA for a NO RR consists of one or more fields with the
|
||
following structure. The structure have the following elements: a
|
||
zero-terminated list of RR types, a hash length specifier, and a
|
||
hash value, as shown below. Both the "RR type" list and the "next
|
||
hash value" fields are of variable width.
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| /
|
||
/ owner RR type list /
|
||
/ |
|
||
+---------------+-----------------------------------------------+
|
||
| # hash octets | SHA-1 hash value /
|
||
+---------------+ /
|
||
/ /
|
||
+---------------------------------------------------------------+
|
||
|
||
Replacing the NXT RR "type bit map" field is a variable length list
|
||
of RR types. Each RR type is 16 bits. As the list is of variable
|
||
length, a end-of-list indicator is require. End of the list is
|
||
signalled by a all-zero RR type. Each element is a 2 byte RR type.
|
||
The list MUST be sorted in RR type order. The change from NXT's
|
||
bitmap field removes the limit of authenticating only the first 127
|
||
RR types.
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 4]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
The RR type list indicates what types exist at the previous hash
|
||
value -- i.e. the first RR type list in the RRdata of a NO record
|
||
indicate what RR types exist at the domain name that hashes to the
|
||
owner name of that NO record. The second RR type list, if any, in
|
||
the RRdata of a NO record indicate what RR types exist at the domain
|
||
name that hashes the first SHA-1 value in the RRdata. And so on.
|
||
See below for a complete example of the on-the-wire-format of a NO
|
||
record with hash truncation and record merging and its
|
||
interpretation.
|
||
|
||
Length of the hash value field is denoted by the # hash octets
|
||
fields, it is a unsigned integer ranging from 0 to 255. The meaning
|
||
of a zero length integer is reserved.
|
||
|
||
The SHA-1 hash value field is a variable length field containing the
|
||
actual hash value.
|
||
|
||
The NO RRs for a zone SHOULD be automatically calculated and added
|
||
to the zone when SIGs are added. The NO RR's TTL SHOULD NOT exceed
|
||
the zone minimum TTL.
|
||
|
||
The type number for the NO RR is TBD.
|
||
|
||
NO RR's MUST only be signed by zone level keys [7].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 5]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
3.3 NO RDATA on-the-wire format example
|
||
|
||
The following is a example of the on-the-wire-format of a complete
|
||
NO resource record were hash truncation and record merging is used.
|
||
It is the on-the-wire format of the NO record in section 3.13.1.2.
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| RR type 1 (A) | RR type 0 (end-of-list) |
|
||
+---------------+-----------------------------------------------+
|
||
| 1 hash octet | Hash 0x22 | RR type 2 (NS) |
|
||
+---------------+---------------+-------------------------------+
|
||
| RR type 6 (SOA) | RR type 15 (MX) |
|
||
+-------------------------------+---------------+---------------+
|
||
| RR type 0 (end-of-list) | 1 hash octet | Hash 0x83 |
|
||
+-------------------------------+---------------+---------------+
|
||
| RR type 1 (A) | RR type 0 (end-of-list) |
|
||
+---------------+-----------------------------------------------+
|
||
| 1 hash octet | Hash 0x90 | RR type 1 (A) |
|
||
+---------------+---------------+-------------------------------+
|
||
| RR type 16 (TXT) | RR type 0 (end-of-list) |
|
||
+---------------+---------------+-------------------------------+
|
||
| 1 hash octet | Hash 0x1b |
|
||
+-------------------------------+
|
||
|
||
The intepretation here is that the domain that corresponds with the
|
||
NO owner name ("1b._no.example.org.", not shown above) have a A
|
||
record, that the domain that hash to 0x22 (truncated to one octet)
|
||
have a NS, SOA and MX record, that the domain that hash to 0x83
|
||
(truncated to 1 octet) have a A record etc. Note that the last hash
|
||
value of NO RRdata does not have a RR type list in the same record.
|
||
|
||
3.4 Owner Names
|
||
|
||
As the previous NO RR format describe, the "next domain name" of NXT
|
||
records is replaced by its hash value. This removes the possibility
|
||
of chaining both backwards and forwards through a zone.
|
||
|
||
But without also modifying the owner names of NO records it is still
|
||
not difficult to chain through a zone. Consider querying a server
|
||
for (say) "m._no.example.org", the reply could contain a NO record
|
||
for "g._no.example.org", now an adversary can lookup records for
|
||
"g._no.example.org", and then issue a query for a domain that would
|
||
sort (in "the canonical order" described in RFC 2535) just before
|
||
"g._no.example.org". Applying the technique over and over again, all
|
||
records in the zone can still be collected.
|
||
|
||
To prevent this, the owner names of NO records is replaced by its
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 6]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
hash value. As DNS places limits on what characters can be used in
|
||
owner names, the owner name uses a base 16 "hex" encoding [6].
|
||
|
||
In order to remove the (very small) chance of generated NO record
|
||
names colliding with existing, "real", domains, all NO records MUST
|
||
be stored directly in the "_no" domain of the zone. I.e., a zone
|
||
"example.org." store its NO records as, say,
|
||
"35a4d1._no.example.org.".
|
||
|
||
This change in owner names also make sure that the delegation point
|
||
concerns of NXT records does not occur in NO records.
|
||
|
||
3.5 Additional Complexity Due To Wildcards
|
||
|
||
Proving that a non-existent name response is correct, or that a
|
||
wildcard expansion response is correct, makes things a little more
|
||
complex.
|
||
|
||
In particular, when a non-existent name response is returned, an NO
|
||
must be returned showing that the exact name did not exist and, in
|
||
general, one or more additional NO need to be returned to also prove
|
||
that there wasn't a wildcard whose expansion should have been
|
||
returned. (There is no need to return multiple copies of the same
|
||
NO.) These NOs, if any, are returned in the authority section of the
|
||
response.
|
||
|
||
Furthermore, if a wildcard expansion is returned in a response, in
|
||
general one or more NOs needs to also be returned in the authority
|
||
section to prove that no more specific name (including possibly more
|
||
specific wildcards in the zone) existed on which the response should
|
||
have been based.
|
||
|
||
3.6 No Considerations at Delegation Points
|
||
|
||
When NXT records are used to deny existance, there exists a special
|
||
case at delegation points. Namely, that two distinct RRsets exist
|
||
for the same owner name, one in the parent zone and one in the child
|
||
zone.
|
||
|
||
$ORIGIN parent.example.org.
|
||
@ SOA
|
||
NS
|
||
NXT child SOA NS SIG NXT
|
||
child NS foo
|
||
NXT next NS SIG NXT
|
||
next A 127.0.0.2
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 7]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
$ORIGIN child.parent.example.org.
|
||
@ SOA
|
||
NS
|
||
NXT name SOA NS SIG NXT
|
||
name A 127.0.2.1
|
||
NXT child.parent.example.org.
|
||
|
||
With NO records, the parent would deny existance of domains in
|
||
"_no.parent.example" and the child in
|
||
"_no.child.parent.example.org". Thus no NO RRset collision occur.
|
||
|
||
3.7 Hash Truncation and Dynamic Updates
|
||
|
||
Entities that create NO records MAY truncate the hash field. It
|
||
MUST NOT truncate hash fields so they are no longer unique
|
||
throughout a zone. Hash truncations MUST only be done to octet
|
||
offsets. Truncation MUST be such that less significant bits are
|
||
truncated, i.e. higher-order bits are preserved (see the examples).
|
||
|
||
Zones that are dynamically updated will have to calculate and add NO
|
||
records on-the-fly. If hash truncation is used, adding a new name
|
||
to the zone will require updating (and signing) NO records for the
|
||
conflicting name(s).
|
||
|
||
Since truncation (and also "compression" described in the next
|
||
section) make it impossible to predict the corresponding NO record
|
||
given a domain name, resolvers should not ask for a hashed NO record
|
||
(aaaa._no.example.org. IN NO) for a known domain name if they want
|
||
to find out what types exist at the domain. Instead, a resolver
|
||
might ask for NO records on the original name (www.example.org. IN
|
||
NO). Such records will never exist, and the correct NO record will
|
||
be returned by the server.
|
||
|
||
To summarize, the behaviour of hash truncation should be
|
||
configurable in the entity that creates NO records, to accomodate
|
||
different usage-patterns. If the zone is intended to be dynamicly
|
||
updated, hash truncation may be considered not worth the extra
|
||
on-the-fly processing required.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 8]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
3.8 Reducing Number of Records
|
||
|
||
Entitities that create NO records MAY deny existence for several
|
||
records per NO record. Entities that create NO records should take
|
||
care so that each resulting NO record is not "too large". [Comments
|
||
on this? Should there be a specific limit? It might be left as a
|
||
DNS Operational consideration]
|
||
|
||
Merging several NO records into one record also place more work on
|
||
the resolver. Instead of parsing two hash values for each NO record
|
||
to determine if it's applicaple, a resolver will have to parse
|
||
several hash values and compare each.
|
||
|
||
The NO RR record consist of one or more RR type list / hash values,
|
||
described above, and a resolver need to parse the entire record to
|
||
collect each individual field. I.e., a NO parse algorithm could
|
||
looke like: read RRs, stop when you read a zero RR type, read hash
|
||
length indicator, read hash size, if the entire record is read stop,
|
||
otherwise read RRs, stop when you read a zero RR type, etc..
|
||
|
||
3.9 Hash Collisions
|
||
|
||
Hash value collisions are expected not to occur. For SHA-1, the
|
||
probability that this should happen is 1 out of 2^80 on average.
|
||
|
||
However, collisions are actually only a problem if the domain names
|
||
producing the same hash value have different sets of existing types.
|
||
|
||
Consider the following records
|
||
|
||
; SHA-1(one.example.org) = SHA-1(two.example.org)
|
||
|
||
one.example.org. IN A 1.2.3.4
|
||
two.example.org. IN A 5.6.7.8
|
||
|
||
Given that no other RR types exist for neither domain, both
|
||
"one.example.org" and "two.example.org" would be authenticated not
|
||
to exist by the same NO record.
|
||
|
||
3.10 Authenticating Denial of NO Records
|
||
|
||
NO records (together with SIG records) authenticate denial for other
|
||
types in a zone. Unlike NXT records that re-use the namespace in
|
||
the zone, NO records are not intended to authenticate denial of
|
||
other NO records.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 9]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
3.11 Case Considerations
|
||
|
||
Before calculating SHA-1 hash values, domain names MUST be converted
|
||
into canonical format as described in RFC 2535. This is to make hash
|
||
comparisons possible.
|
||
|
||
3.12 Presentation Format
|
||
|
||
NO RRs do not appear in original unsigned zone master files since
|
||
they should be derived from the zone as it is being signed.
|
||
|
||
If a signed file with NO records is printed or NO records are
|
||
printed by debugging code, they appear as a list of unsigned
|
||
integers or RR mnemonics, and the hash value in base 16 hex
|
||
representation [6] with "0x" prepended (to distinguish it from
|
||
integer RR codes). The zero RR that terminate the list of RR types,
|
||
and the hash value length indicator, does not appear.
|
||
|
||
See the next section for examples of printed NO RRs.
|
||
|
||
3.13 Examples
|
||
|
||
This section contain examples of NO records, using the reserved
|
||
domain exmaple.org [3].
|
||
|
||
3.13.1 Adding NO Records to a Zone
|
||
|
||
Consider the following zone file.
|
||
|
||
$ORIGIN example.org.
|
||
@ IN SOA ...
|
||
@ IN NS ns
|
||
@ IN MX 0 server
|
||
ns IN A ...
|
||
www IN A ...
|
||
sERVEr IN A ...
|
||
sERVEr IN TXT "text"
|
||
|
||
; SHA1(example.org.) = 0x222c7a74bc40e818aa53b3eb0b15cd2350fbb3a1
|
||
; SHA1(ns.example.org.) = 0x1b7838c69a66eb50cc215f66ee4554d0c4c940a5
|
||
; SHA1(www.example.org.) = 0x839ebd4386c0b26d81f147421b5b7036e61438cf
|
||
; SHA1(server.example.org.) = 0x906a0ad5e604b1905828499dc8672ecb8de73e2f
|
||
|
||
Note that hash values are calculcated on the canonical form.
|
||
|
||
The following two sections describe two valid ways of adding NO
|
||
records to a zone.
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 10]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
3.13.2 Simple NO creating entity
|
||
|
||
A simple NO creator entity might not implement truncation or provide
|
||
the possibility to deny more than one records per NO record. In
|
||
this case, the following would be added to the zone file.
|
||
|
||
$ORIGIN _no.example.org.
|
||
1b7838c69a66eb50cc215f66ee4554d0c4c940a5
|
||
IN NO A 0x222c7a74bc40e818aa53b3eb0b15cd2350fbb3a1
|
||
222c7a74bc40e818aa53b3eb0b15cd2350fbb3a1
|
||
IN NO NS SOA MX 0x839ebd4386c0b26d81f147421b5b7036e61438cf
|
||
839ebd4386c0b26d81f147421b5b7036e61438cf
|
||
IN NO A 0x906a0ad5e604b1905828499dc8672ecb8de73e2f
|
||
906a0ad5e604b1905828499dc8672ecb8de73e2f
|
||
IN NO A TXT 0x1b7838c69a66eb50cc215f66ee4554d0c4c940a5
|
||
|
||
3.13.3 Advanced NO creating entity
|
||
|
||
A more advanced NO creator entity might append the following
|
||
instead, using both truncation and "compression".
|
||
|
||
$ORIGIN _no.example.org
|
||
1b IN NO A 0x22 NS SOA MX 0x83 A 0x90 A TXT 0x1b A
|
||
|
||
Note that this contain 5 hash values while the zone only contain 4
|
||
records, the last value in the line above is in fact the first hash
|
||
value in the zone, closing the circular NO chain.
|
||
|
||
3.13.4 Resolver Query for Non-existing Domain
|
||
|
||
Consider a client looking up the non-existant domain name
|
||
"baz.example.org.", using the zone file from the previous section.
|
||
First, we note the following calculations.
|
||
|
||
SHA-1(baz.example.org.) = 0xd5d0f98783eec6e9943750f35904304bd1a4090e
|
||
SHA-1(*.example.org.) = 0x7ab3776e3b529eb42467cc5d279c88ec951cf021
|
||
|
||
A server would reply with an RCODE of NXDOMAIN and the authority
|
||
section data including the following:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 11]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
; backwards compatibility
|
||
example.org. IN SOA
|
||
|
||
; prove no baz.example.org
|
||
906a0ad5e604b1905828499dc8672ecb8de73e2f._no.example.org.
|
||
IN NO A TXT 0x1b7838c69a66eb50cc215f66ee4554d0c4c940a5
|
||
906a0ad5e604b1905828499dc8672ecb8de73e2f._no.example.org. IN SIG NO
|
||
|
||
; prove no *.example.org:
|
||
222c7a74bc40e818aa53b3eb0b15cd2350fbb3a1._no.example.org.
|
||
IN NO NS SOA MX 0x839ebd4386c0b26d81f147421b5b7036e61438cf
|
||
222c7a74bc40e818aa53b3eb0b15cd2350fbb3a1._no.example.org. IN SIG NO
|
||
|
||
In order for a client to verify the authenticity of this reply, in
|
||
addition of verifying the SIG record, it will also need to calculate
|
||
the one-way hash of "baz.example.org." and verify it is contained
|
||
inside the interval of any NO record in the authority section.
|
||
Also, to prove there are no wildcard records for baz.example.org.,
|
||
NO records for possible wildcard expansions are returned. A client
|
||
should similarily calculate hash values of possible wildcards and
|
||
compare them to the authority section.
|
||
|
||
Of course, if the zone was generated with the more advanced NO
|
||
creating entity, only the NO record from the previous section would
|
||
have to be returned.
|
||
|
||
3.13.5 Resolver Query for Non-existing Type At Existing Domain
|
||
|
||
Consider a client looking up TXT records for the existing domain
|
||
"www.example.org.", again, using the same zone file as previous. A
|
||
server would reply with an authority section like the following:
|
||
|
||
839ebd4386c0b26d81f147421b5b7036e61438cf._no.example.org.
|
||
IN NO A 0x906a0ad5e604b1905828499dc8672ecb8de73e2f
|
||
839ebd4386c0b26d81f147421b5b7036e61438cf._no.example.org. IN SIG NO
|
||
|
||
The resolver verifies the signature and make sure
|
||
SHA-1("bar.example.org.") hashes correctly.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 12]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
4. Comparing NO and NXT
|
||
|
||
To ease comparison between NXT and NO records, this section
|
||
summarize (mis-)features of the NXT and the NO record formats. The
|
||
intent here is to address all operational differences between NO and
|
||
NXT records.
|
||
|
||
4.1 Denial Of Existence Of Non-Existing Names
|
||
|
||
Both NXT and NO provide strong data non-existance for non-existing
|
||
names.
|
||
|
||
NXT records authenticate data non-existance up to the probability of
|
||
finding a collision in the signature algorithm (1 in 2^64 for
|
||
RSA/MD5). NO records authenticate data non-existance up to the
|
||
probability of finding a collision in the signature algorithm (1 in
|
||
2^64 for RSA/MD5) and the NO record hash value (varies due to
|
||
truncation). If the RSA/MD5 scheme is used, hash values in NO
|
||
records may be truncated to 64 bits.
|
||
|
||
4.2 Denial Of Types Of Existing Names
|
||
|
||
Both NXT and NO provide strong data non-existance of types for
|
||
existing names. The previous discussion also apply here.
|
||
|
||
4.3 Information disclosure (chain problem)
|
||
|
||
NXT records make it possible to collect all names (and records) in a
|
||
zone. NO records prohibit this.
|
||
|
||
4.4 Delegation problem
|
||
|
||
NXT records require a special case where two different RRsets exist
|
||
at the same owner name, class and type. NO records does not have
|
||
this problem.
|
||
|
||
4.5 Zone size (Bytes)
|
||
|
||
The size difference is due to changing complete domain names with
|
||
hash values (SHA1 20 bytes). Without truncation, NO records are
|
||
probably larger than most NXT records. With truncation, NO records
|
||
uses a few byte per hash value instead of the (possibly compressed)
|
||
complete owner name.
|
||
|
||
4.6 Zone size (Number Of Records)
|
||
|
||
When NO compression is not used, NXT and NO uses the same number of
|
||
records.
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 13]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
However, NO compression can greatly reduce the number of records.
|
||
As an example, considering a zone with records of 100.000 different
|
||
names. NXT uses 200.000 records (NXT+SIG). Using NO compression
|
||
with 10 hash values on each reduce this number to 20.000 records
|
||
(NO+SIG).
|
||
|
||
4.7 Zone size (Number Of Owner names)
|
||
|
||
NO uses twice the amount of owner names as NXT.
|
||
|
||
However, NO compression can be used to reduce this to a fraction of
|
||
the normal amount. From the previous example with 10 hash values
|
||
per NO record, it will uses 10.000 additional owner names in a zone
|
||
with 100.000 names
|
||
|
||
4.8 SIG Labels field and Wildcard records
|
||
|
||
It is marginally faster to verify signatures for NXT records when
|
||
wildcard records are involved -- the SIG "Label fields" hints can be
|
||
used to determine the canonical name. With NO records this hint
|
||
cannot be used, because it relies on knowing the full name whereas
|
||
only the hash is available. One need to try a few SHA1 hashes to
|
||
find the correct canonical name. The number of hashes required to
|
||
try depend on the number of labels in the name, and scale linearly.
|
||
|
||
N.B. This penalty only apply to wildcard records.
|
||
|
||
4.9 Dynamic Updates
|
||
|
||
Resigning dynamically updated records is required both with NXT and
|
||
NO records.
|
||
|
||
However, when NO truncation and compression is used, the additional
|
||
penalty of re-hashing might also be required.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 14]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
5. Security Considerations
|
||
|
||
Chaining through all NO records is still technically possible,
|
||
altough it cannot be used to collect names and/or records in the
|
||
zone (other than NO records themself).
|
||
|
||
The security of NO record hash values is dependent on the security
|
||
of the SHA-1 hash functions used. Truncation may affect this, but
|
||
the birthday-paradox argument does not apply. One must find a hash
|
||
collision given an existing hash value -- not simply find any hash
|
||
collision. It is thus reasonably to truncate NO records to half the
|
||
hash length used in the signature scheme (this would mean 64 bits in
|
||
the RSA/MD5 case).
|
||
|
||
It should be pointed out that given this scheme, it is easy to
|
||
estimate the number of records within a zone, considering hash
|
||
values are supposed to be equally distributed. This can be foiled
|
||
by adding any number of bogus records in the zone.
|
||
|
||
The authentication of NO records is provided by DNS SIG records, as
|
||
specified in RFC 2535. The security considerations of RFC 2535 is
|
||
not affected by this document, and should also be considered.
|
||
|
||
6. IANA Considerations
|
||
|
||
The NO RR type number should be selected by the IANA from the normal
|
||
RR type space.
|
||
|
||
The meaning of a zero hash length value can only be assigned by a
|
||
standards action.
|
||
|
||
Acknowledgement
|
||
|
||
The idea of encrypting names, that later evolved into just hashing
|
||
them, was originally proposed by Jonas Holmerin in private
|
||
discussions about DNS Security. Magnus Nystr<74>m proposed truncating
|
||
the hash values.
|
||
|
||
Thanks to John Linn and Magnus Nystr<74>m for comments on a early
|
||
version of this draft.
|
||
|
||
Olafur Gudmundsson pointed out delegation point issues, suggested
|
||
the use of a "_no" subdomain, and suggested replacing the type bit
|
||
map field with a sorted list. From the namedroppers mailing list,
|
||
I'd like to thank Alan Barrett, Andrew Draper, Andreas Gustafsson,
|
||
Peter Koch and Brian Wellington for comments and suggestions. Ed
|
||
Lewis noted that truncation to shortest unique prefix would not work.
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 15]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
References
|
||
|
||
[1] Eastlake, D., "Domain Name System Security Extensions", RFC
|
||
2535, March 1999.
|
||
|
||
[2] Eastlake, D. and O. Gudmundsson, "Storing Certificates in the
|
||
Domain Name System (DNS)", RFC 2538, March 1999.
|
||
|
||
[3] Eastlake, D. and A. Panitz, "Reserved Top Level DNS Names", RFC
|
||
2606, June 1999.
|
||
|
||
[4] NIST, , "Secure Hash Standard", FIPS PUB 180-1, April 1995.
|
||
|
||
[5] Massey, D., Lehman, T. and E. Lewis, "DNSSEC Implementation in
|
||
the CAIRN Testbed.", I.D. draft-ietf-dnsop-dnsseccairn-00.txt,
|
||
October 1999.
|
||
|
||
[6] Josefsson, S.A. (editor), "Base 64, 32 and 16 Encodings", I.D.
|
||
draft-josefsson-base-encoding-00.txt, August 2000.
|
||
|
||
[7] Wellington, B, "Domain Name System Security (DNSSEC) Signing
|
||
Authority", I.D. draft-ietf-dnsext-signing-auth-01.txt, May
|
||
2000.
|
||
|
||
|
||
Author's Address
|
||
|
||
Simon Josefsson
|
||
RSA Security
|
||
Arenav<61>gen 29
|
||
Stockholm 121 29
|
||
Sweden
|
||
|
||
Phone: +46 8 7250914
|
||
EMail: sjosefsson@rsasecurity.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 16]
|
||
|
||
Internet-Draft The NO Record November 2000
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
||
|
||
This document and translations of it may be copied and furnished to
|
||
others, and derivative works that comment on or otherwise explain it
|
||
or assist in its implementation may be prepared, copied, published
|
||
and distributed, in whole or in part, without restriction of any
|
||
kind, provided that the above copyright notice and this paragraph
|
||
are included on all such copies and derivative works. However, this
|
||
document itself may not be modified in any way, such as by removing
|
||
the copyright notice or references to the Internet Society or other
|
||
Internet organizations, except as needed for the purpose of
|
||
developing Internet standards in which case the procedures for
|
||
copyrights defined in the Internet Standards process must be
|
||
followed, or as required to translate it into languages other than
|
||
English.
|
||
|
||
The limited permissions granted above are perpetual and will not be
|
||
revoked by the Internet Society or its successors or assigns.
|
||
|
||
This document and the information contained herein is provided on an
|
||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
||
TASK FORCE DISCLAIMS 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.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Josefsson Expires May 25, 2001 [Page 17]
|
||
|
||
|