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 July 2, 2005.
Copyright (C) The Internet Society (2005).
The DNS Security (DNSSEC) NSEC resource record (RR) is intended to be used to provide authenticated denial of existence of DNS ownernames and types; however, it permits any user to traverse a zone and obtain a listing of all ownernames.
A complete zone file can be used either directly as a source of 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 a scheme which obscures original ownernames while permitting authenticated denial of existence of non-existent names. Non-authoritative delegation point NS RR types may be excluded.
1.2 Reserved Words
2. The NSEC3 Resource Record
2.1 NSEC3 RDATA Wire Format
2.1.1 The Authoritative Only Flag Field
2.1.2 The Hash Function Field
2.1.3 The Iterations Field
2.1.4 The Salt Length Field
2.1.5 The Salt Field
2.1.6 The Next Hashed Ownername Field
2.1.7 The list of Type Bit Map(s) Field
2.2 The NSEC3 RR Presentation Format
3. Creating Additional NSEC3 RR for Empty Non Terminals
4. Calculation of the Hash
5. Special Considerations
5.1 delegation points
5.1.1 Unsigned Delegations
5.2 Additional Complexity Caused by Wildcards
5.4 Hash Collision
5.4.1 Avoiding Hash Collisions during generation
5.4.2 Second Preimage Requirement Analysis
5.4.3 Possible Hash Value Truncation Method
6. Performance Considerations
7. IANA Considerations
8. Security Considerations
9. Requirements notation
10. Security Considerations
A. Example Zone
11.1 Normative References
11.2 Informative References
§ Authors' Addresses
§ Intellectual Property and Copyright Statements
The DNS Security Extensions (DNSSEC) introduced the NSEC Resource Record (RR) for Authenticated Denial of Existence. This document introduces a new RR as an alternative to NSEC that provides measures against zone traversal and allows for gradual expansion of delegation-centric zones.
The DNS Security Extensions included the NSEC RR to provide authenticated denial of existence. Though the NSEC RR meets the requirements for authenticated denial of Existence, it introduced a side-effect in that the contents of a zone can be enumerated. This property introduces undesired policy issues.
A second requirement was that the existence of all record types in a zone -including delegation point NS record types- can be accounted for, despite the fact that delegation point NS RRsets are not authoritative and not signed. This requirement has a side-effect that the overhead of delegation centric signed zones is not related to the increase in security of subzones. This requirement does not allow delegation centric zones size to grow in relation to the growth of signed subzones.
In the past, solutions have been proposed as a measure against these side effects but at the time were regarded as secondary over the need to have a stable DNSSEC specification. With (draft-vixie-dnssec-ter) a graceful transition path to future enhancements is introduced, while current DNSSEC deployment can continue. This document accumulates measures against the side effects introduced by NSEC, and presents the NSEC3 Resource Record.
The reader is assumed to be familiar with the basic DNS concepts described in RFC1034 [RFC1034]Mockapetris, P., Domain names - concepts and facilities, November 1987., RFC1035 [RFC1035]Mockapetris, P., Domain names - implementation and specification, November 1987. and subsequent RFCs that update them: RFC2136 [RFC2136]Vixie, P., Thomson, S., Rekhter, Y. and J. Bound, Dynamic Updates in the Domain Name System (DNS UPDATE), April 1997., RFC2181 [RFC2181]Elz, R. and R. Bush, Clarifications to the DNS Specification, July 1997. and RFC2308 [RFC2308]Andrews, M., Negative Caching of DNS Queries (DNS NCACHE), March 1998..
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 RFC 2119 [RFC2119]Bradner, S., Key words for use in RFCs to Indicate Requirement Levels, March 1997..
In this document the term "original ownername" refers to a standard ownername. Because this proposal uses the result of a hash function over the original (unmodified) ownername, this result is refered to as "hashed ownername".
The NSEC3 RR provides Authenticated Denial of Existence for DNS Resource Record Sets.
The NSEC3 Resource Record lists RR types present at the NSEC3 RR's original ownername. It includes the next hashed ownername in the canonical ordering of the zone. The complete set of NSEC3 RRs in a zone indicates which RRsets exist for the original ownername of the RRset and form a chain of hashed ownernames in the zone. This information is used to provide authenticated denial of existence for DNS data, as described in RFC 2535 [RFC2535]. Unsigned delegation point NS RR sets can optionally be excluded. To provide protection against zone traversal, the ownernames used in the NSEC3 RR are cryptographic hash-value prepended to the name of the zone. The NSEC3 RR record indicates which Hash Function is used to construct to hash, which Salt is used, and how many iterations of the Hash Function are performed over the original ownername.
The type value for the NSEC3 RR is XX.
The NSEC3 RR RDATA format is class independent.
The NSEC3 RR SHOULD have the same TTL value as the SOA minimum TTL field. This is in the spirit of negative caching [RFC2308].
The RDATA of the NSEC3 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |A|Hash Function| Iterations | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Salt Length | Salt / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Next Hashed Ownername / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Type Bit Maps / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The Authoritative Only Flag field indicates whether the Type Bit Maps include delegation point NS record types.
If the flag is set to 1, the NS RR type bit for a delegation point ownername SHOULD be clear when the NSEC3 RR is generated. The NS RR type bit MUST be ignored during processing of the NSEC3 RR. The NS RR type bit has no meaning in this context (it is not authoritative), hence the NSEC3 does not contest the existence of a NS RR type record for this ownername. When a delegation is not secured, there exist no DS RR type nor any other authoritative types for this delegation, hence the unsecured delegation has no NSEC3 record associated. Please see the Special Consideration section for implications for unsigned delegations.
If the flag is set to 0, the NS RR type bit for a delegation point ownername MUST be set if the NSEC3 covers a delegation, even though the NS RR itself is not authoritative. This implies that all delegations, signed or unsigned, have an NSEC3 record associated. This behavior is identical to NSEC behavior.
The Hash Function field identifies the cryptographic hash function used to construct the hash-value.
This document defines Value 1 for SHA-1 and Value 127 for Experimental. All other values are reserved.
On reception, a resolver MUST discard an NSEC3 RR with an unknown Hash Function value.
The Iterations field defines the number of times the hash has been iterated. More iterations results in greater resiliency of the hash value against dictionary attacks, but at a higher cost for both the server and resolver.
The Salt Length Field defines the length of the salt in octets.
The salt field is not present when the Salt Length Field has a value of 0.
The salt field is prepended to the original ownername before hashing in order to defend against precalculated dictionary attacks.
The salt is not prepended during iterations of the hash function.
The Salt field value MUST be identical for all NSEC3 RRs generated for the zone. If the salt were different for each NSEC3 RR, collisions could occur where an NSEC3 denies the existence of existing RRs due to the application of different salt values.
The Next Hashed Ownername Field contains the hash of the ownername of the next RR in the canonical ordering of the hashed ownernames of the zone. The value of the Next Hashed Ownername Field in the last NSEC3 record in the zone is the same as the ownername of the first NSEC3 RR in the zone in canonical order.
A sender MUST NOT use DNS name compression on the Next Hashed Ownername field when transmitting an NSEC3 RR.
Hashed ownernames 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.
The Type Bit Maps field identifies the RRset types which exist at the NSEC3 RR's ownername.
The Type bit for the NSEC3 and RRSIG MUST be set during generation, and MUST be ignored during processing.
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 NSEC3 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 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 NSEC3 RR's ownername. If a bit is set to 0, it indicates that no RRset of that type is present for the NSEC3 RR's ownername.
The RR type 2 (NS) is authoritative at the apex of a zone and is not authoritative at delegation points. If the Authoritative Only Flag is set to 1, the delegation point NS RR type MUST NOT be included in the type bit maps. If the Authoritative Only Flag is set to 0, the NS RR type at a delegation point MUST be included in the type bit maps.
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  (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 NSEC3 RR's actual ownername. Trailing zero octets not specified MUST be interpretted as zero octets.
The presentation format of the RDATA portion is as follows:
The Authoritative Only Field is represented as an unsigned decimal integer. The value are either 0 or 1.
The Hash field is presented as the name of the hash or as an unsigned decimal integer. The value has a maximum of 127.
The Iterations field is presented as an unsigned decimal integer.
The Salt Length field is not presented.
The Salt field is represented as a sequence of case-insensitive hexadecimal digits. Whitespace is not allowed within the sequence. The Salt Field is represented as 00 when the Salt Length field has value 0.
The Hash of Next Domain Name field is represented as a sequence of case-insensitive base32 digits. Whitespace is allowed within the sequence.
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  (section 5) MUST be used.
In order to prove the nonexistence of a record that might be covered by a wildcard, it is necessary to prove the existence of its closest encloser. A closest encloser might be an Empty Non Terminal.
Additional NSEC3 RRs cover every existing intermediate label level. Additional NSEC3 RRs are identical in format to NSEC3 RRs that cover existing RRs in the zone. The difference is that the type-bit-maps only indicate the existence of an NSEC3 RR and a RRSIG type.
Define H(x) to be the hash of x using the hash function selected by the NSEC3 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 an ownername is IH(salt,ownername,iterations-1), where the ownername is the canonical form.
The canonical form of the ownername is the wire format of the ownername where:
The following paragraphs clarify specific behavior explain special considerations for implementations.
This proposal introduces the Authoritative Only Flag which indicates whether non authoritative delegation point NS records are included in the type bit Maps. As discussed in paragraph 2.1.1, a flag value of 0 indicates that the interpretation of the type bit maps is identical to NSEC records.
The following subsections describe behavior when the flag value is 1.
Delegation point NS records are not authoritative. They are authoritative in the delegated zone. No other data exists at the ownername of an unsigned delegation point.
Since no authoritative data exist at this ownername, it is excluded from the NSEC3 chain. This is an optimization since it relieves the zone of including an NSEC3 record and its associated signature for this name.
An NSEC3 that denies existence of ownernames between X and X' with the Authoritative Only Flag set to 1 can not be used to proof presence nor absence of the delegation point NS records for unsigned delegations in the interval X, X'. The Authoritative Only Flag effectively states No Contest on the presence of delegation point NS resource records.
Since proof is absent, there exists a new attack vector. Unsigned delegation point NS records can be deleted during a man in the middle attack, effectively denying existence of the delegation. This is a form of Denial of Service, where the victim has no information it is under attack, since all signatures are valid and the fabricated response form is a known type of response.
The only possible mitigation is to either not use this method, hence proving existence or absence of unsigned delegations, or signing the delegated zone, changing the unsigned delegation into a signed delegation.
A second attack vector exists in that an adversary is able to successfully fabricate a response claiming a not existent delegation to exist, though unsigned.
The only possible mitigation is to either not use this method, hence proving absence of unsigned delegations.
If a wildcard ownername appears in a zone, the wildcard label ("*") is treated as a literal symbol and is treated in the same way as any other ownername for purposes of generating NSEC3 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.
Augmenting original ownernames with salt before hashing increases the cost of a dictionary of pre-generated hash-values. For every bit of salt, the cost of the dictionary doubles. The NSEC3 RR can use maximum 2040 bits of salt, multiplying the cost by 2^2040.
The salt value for each NSEC3 RR MUST be equal for a single version of the zone.
Hash collisions occur when different messages have the same hash value. The expected number of domain names needed to give a 1 in 2 chance of a single collision is about 2^80. Though this probability is extremely low, the following paragraphs deal with avoiding collisions and assessing possible damage in the event of an attack using Hash collisions.
During generation of NSEC3 RRs, hash values are supposedly unique. In the (academic) case of a collision occuring, an alternative salt SHOULD be chosen and all hash values SHOULD be regenerated.
If hash values are not regenerated on collision, the NSEC3 RR MUST list all authoritative RR types that exist for both owners, to avoid a replay attack, spoofing an existing type as non-existent.
A collision resistant hash function has a second-preimage resistance property. The second-preimage resistance property means that it is computationally infeasible to find another message with the same hash value as a given message, i.e. given preimage X, to find a second preimage X' <> X such that hash(X) = hash(X'). The probability of finding a second preimage is 1 in 2^160 for SHA-1 on average. To mount an attack using an existing NSEC3 RR, an adversary needs to find a second preimage.
Assuming an adversary is capable of mounting such an extreme attack, the actual damage is that a response message can be generated which claims that a certain QNAME (i.e. the second pre-image) does exist, while in reality QNAME does not exist (a false positive), which will either cause a security aware resolver to re-query for the non-existent name, or to fail the initial query. Note that the adversary can't mount this attack on an existing name but only on a name that the adversary can't choose and does not yet exist.
The previous sections outlined the low probability and low impact of a second-preimage attack. When impact and probability are low, while space in a DNS message is costly, truncation is tempting. Truncation might be considered to allow for shorter ownernames and rdata for hashed labels. In general, if a cryptographic hash is truncated to n bits, then the expected number of domains required to give a 1 in 2 probability of a single collision is approximately 2^(n/2) and the work factor to produce a second preimage resistance is 2^n.
An extreme hash value truncation would be truncating to the shortest possible unique label value. Considering that hash values are presented in base32, which represents 5 bits per label character, truncation must be done on a 5 bit boundary. This would be unwise, since the work factor to produce collisions would then approximate the size of the zone.
Though the mentioned truncation can be maximized to a certain extreme, the probability of collision increases exponentially for every truncated bit. Given the low impact of hash value collisions and limited space in DNS messages, the balance between truncation profit and collision damage may be determined by local policy.
Iterated hashes will obviously impose a performance penalty on both authoritative servers and resolvers. Therefore, the number of iterations should be carefully chosen.
IANA has to create a new registry for NSEC3 Hash Functions. The range for this registry is 0-127. Value 1 is marked as SHA-1. Values 0, 2-126 are marked as Reserved For Future Use. Value 127 is marked as Experimental.
The NSEC3 records are still susceptible to dictionary attacks (i.e. the attacker retrieves all the NSEC3 records, then calculates the hashes of all likely domain names, comparing against the hashes found in the NSEC3 records, and thus enumerating the zone). These are substantially more expensive than traversing the original NSEC 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 NSEC3 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 NSEC3 is scanned periodically and compared against the precomputed hashes. This attack is prevented by changing the salt on a regular basis.
Walking the NSEC3 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.
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]Bradner, S., Key words for use in RFCs to Indicate Requirement Levels, March 1997..
This is a zone showing its NSEC3 records. They can also be used as test vectors for the hash algorithm. RRSIG records have been elided.
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 NSEC3 \ SHA-1 200 31323334 4EF8239D95C18403A509D7C336A5D0FA48FD1107 \ NS SOA RRSIG DNSKEY NSEC3 a.example.com. 1000 IN A 220.127.116.11 1000 IN A 18.104.22.168 1000 TXT "An example" bfe6ea21dee9d228889ae11fa58c4bd551d15801.example.com. 3600 IN NSEC3 \ SHA-1 200 31323334 F519593E82969842A136E0F47814C881FA163833 \ A TXT RRSIG NSEC3 b.example.com. 1000 IN A 22.214.171.124 83c06d3b7d01fbc9576c71af2bec1a1163435153.example.com. 3600 IN NSEC3 \ SHA-1 200 31323334 A33559360EECB02F36B5C1B72C109126CA4F5A0D \ A RRSIG NSEC3 a.b.c.example.com. 1000 IN A 126.96.36.199 a33559360eecb02f36b5c1b72c109126ca4f5a0d.example.com. 3600 IN NSEC3 \ SHA-1 200 31323334 BFE6EA21DEE9D228889AE11FA58C4BD551D15801 \ A RRSIG NSEC3 ns1.example.com. 1000 IN A 188.8.131.52 4ef8239d95c18403a509d7c336a5d0fa48fd1107.example.com. 3600 IN NSEC3 \ SHA-1 200 31323334 50016B56FD2F0FFC7B563C50FAF0E34259763BBB \ A RRSIG NSEC3 ns2.example.com. 1000 IN A 184.108.40.206 50016b56fd2f0ffc7b563c50faf0e34259763bbb.example.com. 3600 IN NSEC3 \ SHA-1 200 31323334 83C06D3B7D01FBC9576C71AF2BEC1A1163435153 \ A RRSIG NSEC3
|[RFC1034]||Mockapetris, P., "Domain names - concepts and facilities", STD 13, RFC 1034, November 1987.|
|[RFC1035]||Mockapetris, P., "Domain names - implementation and specification", STD 13, RFC 1035, November 1987.|
|[RFC2119]||Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.|
|[RFC2136]||Vixie, P., Thomson, S., Rekhter, Y. and J. Bound, "Dynamic Updates in the Domain Name System (DNS UPDATE)", RFC 2136, April 1997 (TXT, HTML, XML).|
|[RFC2181]||Elz, R. and R. Bush, "Clarifications to the DNS Specification", RFC 2181, July 1997.|
|[RFC2308]||Andrews, M., "Negative Caching of DNS Queries (DNS NCACHE)", RFC 2308, March 1998 (TXT, HTML, XML).|
|[RFC2535]||Eastlake, D., "Domain Name System Security Extensions", RFC 2535, March 1999.|
|[RFC2026]||Bradner, S., "The Internet Standards Process -- Revision 3", BCP 9, RFC 2026, October 1996.|
|[RFC2418]||Bradner, S., "IETF Working Group Guidelines and Procedures", BCP 25, RFC 2418, September 1998 (HTML, XML).|
|[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.|
|17 Perryn Road|
|London W3 7LR|
|Phone:||+44 (20) 8735 0686|
|7523 XC Enschede|
|Phone:||+31 (53) 485 0485|
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 firstname.lastname@example.org.
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 (C) The Internet Society (2005). 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.
Funding for the RFC Editor function is currently provided by the Internet Society.