<?xml version="1.0" ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">

<!-- $Id: common.xml,v 1.2 2004/05/12 21:07:48 sra Exp $ -->	
<!-- Common xml2rfc settings for the whole doc set. --> 

<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc compact="no" ?>
<?rfc sortrefs="yes" ?>

<!-- Setting strict="yes" does not work; I suspect a DTD problem. -->


<rfc ipr="full3667">
                         
                                     
<!-- $Id: dnssec-rr.front.xml,v 1.18 2004/10/10 07:57:24 sra Exp $ -->

<front>
   <title abbrev="DNSSEC Resource Records">
      Resource Records for the DNS Security Extensions
   </title>
                        
                                      

<author initials="R." surname="Arends" fullname="Roy Arends">
   <organization abbrev="Telematica Instituut">
      Telematica Instituut
   </organization>
   <address>
      <postal>
         <street>
            Drienerlolaan 5
         </street>
         <city>
            7522 NB  Enschede
         </city>
         <phone>
            +31534850485
         </phone>
         <country>
            NL
         </country>
      </postal>
      <email>
         roy.arends@telin.nl
      </email>
   </address>
</author>

                        
                                      

<author initials="R." surname="Austein" fullname="Rob Austein">
   <organization abbrev="ISC">
      Internet Systems Consortium
   </organization>
   <address>
      <postal>
         <street>
            950 Charter Street
         </street>
         <city>
            Redwood City
         </city> 
         <region>
            CA
         </region> 
         <code>
            94063
         </code>
         <country>
            USA
         </country>
      </postal>
      <email>
         sra@isc.org
      </email>
   </address>
</author>

                        
                                      

<author initials="M." surname="Larson" fullname="Matt Larson">
   <organization abbrev="VeriSign">
      VeriSign, Inc.
   </organization>
   <address>
      <postal>
         <street>
            21345 Ridgetop Circle
         </street>
         <city>
            Dulles
         </city> 
         <region>
            VA
         </region> 
         <code>
            20166-6503
         </code>
         <country>
            USA
         </country>
      </postal>
      <email>
         mlarson@verisign.com
      </email>
   </address>
</author>

                        
                                      

<author initials="D." surname="Massey" fullname="Dan Massey">
   <organization abbrev="USC/ISI">
      USC Information Sciences Institute
   </organization>
   <address>
      <postal>
         <street>
            3811 N. Fairfax Drive
         </street>
         <city>
            Arlington
         </city> 
         <region>
            VA
         </region> 
         <code>
            22203
         </code>
         <country>
            USA
         </country>
      </postal>
      <email>
         masseyd@isi.edu
      </email>
   </address>
</author>

                        
                                      

<author initials="S." surname="Rose" fullname="Scott Rose">
   <organization abbrev="NIST">National Institute for Standards and Technology
   </organization>
   <address>
      <postal>
         <street>
            100 Bureau Drive
         </street>
         <city>
            Gaithersburg
         </city> 
         <region>
            MD
         </region> 
         <code>
            20899-8920
         </code>
         <country>
            USA
         </country>
      </postal>
      <email>
         scott.rose@nist.gov
      </email>
   </address>
</author>

   <date month="October" year="2004" />
                         
                                        
<!-- $Id: dnssec-rr.abstract.xml,v 1.12 2003/09/26 11:42:42 roy Exp $ -->

<abstract>
   <t>
      This document is part of a family of documents that describes
      the DNS Security Extensions (DNSSEC).  The DNS Security
      Extensions are a collection of resource records and protocol
      modifications that provide source authentication for the DNS.
      This document defines the public key (DNSKEY), delegation signer
      (DS), resource record digital signature (RRSIG), and
      authenticated denial of existence (NSEC) resource records.  The
      purpose and format of each resource record is described in
      detail, and an example of each resource record is given.
   </t>
   <t>
      This document obsoletes RFC 2535 and incorporates changes from all
      updates to RFC 2535.
   </t>
</abstract>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

   <area>
      Internet
   </area>
   <workgroup>
      DNS Extensions
   </workgroup>
</front>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                         
                                      
<!-- $Id: dnssec-rr.middle.xml,v 1.10 2003/09/13 05:59:44 sra Exp $ -->

<middle>
                         
                                       
<!-- $Id: dnssec-rr.section.intro.xml,v 1.31 2004/09/28 14:20:25 scottr Exp $ -->

<section title="Introduction">
   <t>
      The DNS Security Extensions (DNSSEC) introduce four new DNS
      resource record types: DNS Public Key (DNSKEY), Resource Record
      Signature (RRSIG), Next Secure (NSEC), and Delegation Signer (DS).  
      This document defines the purpose of each resource record (RR), 
      the RR's RDATA format, and its presentation format (ASCII representation).
   </t>
   <section title="Background and Related Documents">
      <t>
         This document is part of a family of documents that define
         DNSSEC, which should be read together as a set.
      </t>
      <t>
         <xref target="I-D.ietf-dnsext-dnssec-intro"/> contains an
         introduction to DNSSEC and definition of common terms; the
         reader is assumed to be familiar with this document.
         <xref target="I-D.ietf-dnsext-dnssec-intro"/> also contains a
         list of other documents updated by and obsoleted by this
         document set.
      </t>
      <t>
         <xref target="I-D.ietf-dnsext-dnssec-protocol"/> defines the
         DNSSEC protocol operations.
      </t> 
      <t>
         The reader is also assumed to be familiar with the basic DNS
         concepts described in <xref target="RFC1034"/>, <xref
         target="RFC1035"/>, and the subsequent documents that update
         them, particularly <xref target="RFC2181"/> and
         <xref target="RFC2308"/>.
      </t>
      <t>
         This document defines the DNSSEC resource records.
      </t>
      <t>
         All numeric DNS type codes given in this document are decimal
         integers.
      </t>
   </section>
   <section title="Reserved Words">
      <t>
         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
         <xref target="RFC2119"/>.
      </t>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                         
                                       
<!-- $Id: dnssec-rr.section.key.xml,v 1.45 2004/09/28 04:15:32 sra Exp $ -->

<section title="The DNSKEY Resource Record">
   <t>
      DNSSEC uses public key cryptography to sign and authenticate
      DNS resource record sets (RRsets).  The public keys are stored in
      DNSKEY resource records and are used in the DNSSEC authentication
      process described in <xref target="I-D.ietf-dnsext-dnssec-protocol"/>:  
      A zone signs its authoritative RRsets using a private key and
      stores the corresponding public key in a DNSKEY RR.  A resolver
      can then use the public key to validate signatures 
      covering the RRsets in the zone, and thus authenticate them.
   </t>
   <t>
      The DNSKEY RR is not intended as a record for storing arbitrary
      public keys and MUST NOT be used to store certificates or
      public keys that do not directly relate to the DNS
      infrastructure.
   </t>
   <t>
      The Type value for the DNSKEY RR type is 48.
   </t>
   <t>
      The DNSKEY RR is class independent.
   </t>
   <t>
      The DNSKEY RR has no special TTL requirements.
   </t>

   <section title="DNSKEY RDATA Wire Format">
      <t>
         The RDATA for a DNSKEY RR consists of a 2 octet Flags Field,
         a 1 octet Protocol Field, a 1 octet Algorithm Field, and the
         Public Key Field.
      </t>
      <artwork>
                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Flags            |    Protocol   |   Algorithm   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
/                            Public Key                         /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      </artwork>
      <section title="The Flags Field">
         <t>
            Bit 7 of the Flags field is the Zone Key flag.  If bit 7
            has value 1, then the DNSKEY record holds a DNS zone key
            and the DNSKEY RR's owner name MUST be the name of a zone.
            If bit 7 has value 0, then the DNSKEY record holds some
            other type of DNS public key and MUST NOT be used to
            verify RRSIGs that cover RRsets.
         </t>
         <t>
            Bit 15 of the Flags field is the Secure Entry Point flag,
            described in
            <xref target="RFC3757"/>.
            If bit 15 has value 1, then the DNSKEY record holds a key
            intended for use as a secure entry point.  This flag is
            only intended to be to a hint to zone signing or debugging
            software as to the intended use of this DNSKEY record;
            validators MUST NOT alter their behavior
            during the signature validation process in any way based
            on the setting of this bit.  This also means a DNSKEY RR 
            with the SEP bit set would also need the Zone Key flag set 
            in order to legally be able to generate signatures.  A DNSKEY
            RR with the SEP set and the Zone Key flag not set MUST NOT be 
            used to verify RRSIGs that cover RRsets.
         </t>
         <t>
            Bits 0-6 and 8-14 are reserved: these bits MUST have value 0 upon
            creation of the DNSKEY RR, and MUST be ignored upon reception.  
         </t>
      </section>
      <section title="The Protocol Field">
         <t>
            The Protocol Field MUST have value 3 and the DNSKEY RR MUST be treated
            as invalid during signature verification if found to be
            some value other than 3.
         </t>
      </section>
      <section title="The Algorithm Field">
         <t>
            The Algorithm field identifies the public key's
            cryptographic algorithm and determines the format of
            the Public Key field.  A list of DNSSEC algorithm
            types can be found in <xref target="algo"/>
         </t>
      </section>
      <section title="The Public Key Field">
         <t>
            The Public Key Field holds the public key material.  The format 
            depends on the algorithm of the key being stored and are described
            in separate documents.
         </t>
      </section>
      <section title="Notes on DNSKEY RDATA Design">
         <t>
            Although the Protocol Field always has value 3, it
            is retained for backward compatibility with early versions
            of the KEY record.
         </t>
      </section>
   </section>
   <section title="The DNSKEY RR Presentation Format" anchor="dnskey-ascii">
      <t>
         The presentation format of the RDATA portion is as follows:
      </t>
      <t>
         The Flag field MUST be represented as an unsigned decimal integer.  
         Given the currently defined flags, the possible values are: 0, 256, or 257.
      </t>
      <t>
         The Protocol Field MUST be represented as an unsigned decimal
         integer with a value of 3.
      </t>
      <t>
         The Algorithm field MUST be represented either as an unsigned
         decimal integer or as an algorithm mnemonic as specified in
         <xref target="algo"/>.
      </t>
      <t>
         The Public Key field MUST be represented as a Base64 encoding of
         the Public Key.  Whitespace is allowed within the Base64
         text.  For a definition of Base64 encoding, see
         <xref target="RFC3548"/>.
      </t>
   </section>
   <section title="DNSKEY RR Example">
      <t>
         The following DNSKEY RR stores a DNS zone key for example.com.
      </t>
         <artwork>
example.com. 86400 IN DNSKEY 256 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3
                                       Cbl+BBZH4b/0PY1kxkmvHjcZc8no
                                       kfzj31GajIQKY+5CptLr3buXA10h
                                       WqTkF7H6RfoRqXQeogmMHfpftf6z
                                       Mv1LyBUgia7za6ZEzOJBOztyvhjL
                                       742iU/TpPSEDhm2SNKLijfUppn1U
                                       aNvv4w==  )
         </artwork>
      <t>
         The first four text fields specify the owner name, TTL,
         Class, and RR type (DNSKEY).  Value 256 indicates that the Zone
         Key bit (bit 7) in the Flags field has value 1.  Value 3 is
         the fixed Protocol value. Value 5 indicates the public key
         algorithm.  <xref target="algo"/> identifies algorithm type 5
         as RSA/SHA1 and indicates that the format of the RSA/SHA1
         public key field is defined in <xref target="RFC3110"/>.  The
         remaining text is a Base64 encoding of the public key.
      </t>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                         
                                       
<!-- $Id: dnssec-rr.section.sig.xml,v 1.58 2004/09/27 23:08:38 sra Exp $ -->

<section title="The RRSIG Resource Record" anchor="rrsig-rr">
   <t>
      DNSSEC uses public key cryptography to sign and authenticate
      DNS resource record sets (RRsets).  Digital signatures are
      stored in RRSIG resource records and are used in the DNSSEC
      authentication process described in
      <xref target="I-D.ietf-dnsext-dnssec-protocol"/>.
      A validator can use these RRSIG RRs to authenticate
      RRsets from the zone.  The RRSIG RR MUST only be used to carry
      verification material (digital signatures) used to secure DNS
      operations.
   </t>
   <t>
      An RRSIG record contains the signature for an RRset with a
      particular name, class, and type.  The RRSIG RR specifies a
      validity interval for the signature and uses the Algorithm, the
      Signer's Name, and the Key Tag to identify the DNSKEY
      RR containing the public key that a validator can use to verify
      the signature.
   </t>
   <t>
      Because every authoritative RRset in a zone must be protected by a 
      digital signature, RRSIG RRs must be present for names containing 
      a CNAME RR.  This is a change to the traditional DNS specification 
      <xref target="RFC1034" /> that stated that if a CNAME is present for 
      a name, it is the only type allowed at that name.  A RRSIG and NSEC 
      (see <xref target="nsec-rr" />) MUST exist for the same name as a CNAME 
      resource record in a signed zone.
   </t>
   <t>
      The Type value for the RRSIG RR type is 46.
   </t>
   <t>
      The RRSIG RR is class independent.
   </t>
   <t>
      An RRSIG RR MUST have the same class as the RRset it covers.
   </t>
   <t>
      The TTL value of an RRSIG RR MUST match the TTL value of the
      RRset it covers.  This is an exception to the <xref
      target="RFC2181"/> rules for TTL values of individual RRs
      within a RRset: individual RRSIG with the same owner name will
      have different TTL values if the RRsets they cover have different
      TTL values.
   </t>

   <section title="RRSIG RDATA Wire Format">
      <t>
         The RDATA for an RRSIG RR consists of a 2 octet Type Covered
         field, a 1 octet Algorithm field, a 1 octet Labels field, a 4
         octet Original TTL field, a 4 octet Signature Expiration
         field, a 4 octet Signature Inception field, a 2 octet Key
         tag, the Signer's Name field, and the Signature field.
      </t>
      <?rfc needLines="19"?>
      <artwork>
                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type Covered           |  Algorithm    |     Labels    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Original TTL                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Signature Expiration                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Signature Inception                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Key Tag            |                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+         Signer's Name         /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
/                            Signature                          /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      </artwork>
      <section title="The Type Covered Field">
         <t>
            The Type Covered field identifies the type of the RRset
            that is covered by this RRSIG record.
         </t>
      </section>
      <section title="The Algorithm Number Field">
         <t>
            The Algorithm Number field identifies the cryptographic
            algorithm used to create the signature.  A list of
            DNSSEC algorithm types can be found in <xref target="algo"/>
         </t>
      </section>
      <section title="The Labels Field">
         <t>
            The Labels field specifies the number of labels in the
            original RRSIG RR owner name. The significance of this field is
            that a validator uses it to determine if the answer was synthesized
            from a wildcard.  If so, it can be used to determine what
            owner name was used in generating the signature.
         </t>
         <t>
            To validate a signature, the validator needs the
            original owner name that was used to create the signature.
            If the original owner name contains a wildcard
            label ("*"), the owner name may have been expanded by the
            server during the response process, in which case the
            validator will need to reconstruct the original owner name
            in order to validate the signature.  <xref
            target="I-D.ietf-dnsext-dnssec-protocol"/> describes how
            to use the Labels field to reconstruct the original owner
            name.
         </t>
         <t>
            The value of the Labels field MUST NOT count either the
            null (root) label that terminates the owner name or the
            wildcard label (if present).  The value of the Labels field
            MUST be less than or equal to the number of labels in the
            RRSIG owner name.  For example, "www.example.com." has a
            Labels field value of 3, and "*.example.com." has a Labels
            field value of 2.  Root (".") has a Labels field value of
            0.
         </t>
         <t>
            Although the wildcard label is not included in
            the count stored in the Labels field of the RRSIG RR, the
            wildcard label is part of the RRset's owner name when
            generating or verifying the signature.
         </t>
      </section>
      <section title="Original TTL Field">
         <t>
            The Original TTL field specifies the TTL of
            the covered RRset as it appears in the authoritative zone.
         </t>
         <t>
            The Original TTL field is necessary because a caching
            resolver decrements the TTL value of a cached RRset.
            In order to validate a signature, a validator requires the
            original TTL.  <xref
            target="I-D.ietf-dnsext-dnssec-protocol"/> describes how
            to use the Original TTL field value to reconstruct the
            original TTL.
         </t>
      </section>
      <section title="Signature Expiration and Inception Fields"
               anchor="expiration-and-inception">
         <t>
            The Signature Expiration and Inception fields specify
            a validity period for the signature.  The RRSIG record
            MUST NOT be used for authentication prior to the inception
            date and MUST NOT be used for authentication after the
            expiration date.
         </t>
         <t>
            The Signature Expiration and Inception field values
            specify a date and time in the form of a 32-bit unsigned
            number of seconds elapsed since 1 January 1970 00:00:00
            UTC, ignoring leap seconds, in network byte order.  The
            longest interval which can be expressed by this format
            without wrapping is approximately 136 years.  An RRSIG RR
            can have an Expiration field value which is numerically
            smaller than the Inception field value if the expiration
            field value is near the 32-bit wrap-around point or if the
            signature is long lived.  Because of this, all comparisons
            involving these fields MUST use "Serial number arithmetic"
            as defined in <xref target="RFC1982"/>.  As a direct
            consequence, the values contained in these fields cannot
            refer to dates more than 68 years in either the past or
            the future.
         </t>
      </section>
      <section title="The Key Tag Field">
         <t>
            The Key Tag field contains the key tag value of the DNSKEY
            RR that validates this signature, in network byte order.
            <xref target="keytag"/> explains how to calculate Key Tag
            values.
         </t>
      </section>
      <section title="The Signer's Name Field">
         <t>
            The Signer's Name field value identifies the owner name of
            the DNSKEY RR which a validator is supposed to use to validate this 
            signature.  The Signer's Name field MUST contain the name 
            of the zone of the covered RRset.  A sender MUST NOT use DNS name
            compression on the Signer's Name field when transmitting a
            RRSIG RR.  
         </t>
      </section>
      <section title="The Signature Field">
         <t>
            The Signature field contains the cryptographic
            signature that covers the RRSIG RDATA (excluding the
            Signature field) and the RRset specified by the RRSIG
            owner name, RRSIG class, and RRSIG Type Covered field.  The format 
            of this field depends on the algorithm in use and these 
            formats are described in separate companion documents.
         </t>
   <section title="Signature Calculation">
         <t>
            A signature covers the RRSIG RDATA (excluding the Signature
            Field) and covers the data RRset specified by the RRSIG owner
            name, RRSIG class, and RRSIG Type Covered fields.  The RRset is
            in canonical form (see <xref target="canonicalform"/>) and the
            set RR(1),...RR(n) is signed as follows:
         </t>
         <artwork>
      signature = sign(RRSIG_RDATA | RR(1) | RR(2)... ) where

         "|" denotes concatenation;

         RRSIG_RDATA is the wire format of the RRSIG RDATA fields
            with the Signer's Name field in canonical form and
            the Signature field excluded;

         RR(i) = owner | type | class | TTL | RDATA length | RDATA

            "owner" is the fully qualified owner name of the RRset in
            canonical form (for RRs with wildcard owner names, the
            wildcard label is included in the owner name);

            Each RR MUST have the same owner name as the RRSIG RR;

            Each RR MUST have the same class as the RRSIG RR;

            Each RR in the RRset MUST have the RR type listed in the
            RRSIG RR's Type Covered field;

            Each RR in the RRset MUST have the TTL listed in the
            RRSIG Original TTL Field;

            Any DNS names in the RDATA field of each RR MUST be in
            canonical form; and

            The RRset MUST be sorted in canonical order.
         </artwork>
         <t>
            See <xref target="canonical_rr_form"/> and <xref
            target="canonical_rrset_order"/> for details on canonical
            form and ordering of RRsets.
         </t>
       </section>
      </section>
     </section>
   <section title="The RRSIG RR Presentation Format">
      <t>
         The presentation format of the RDATA portion is as follows:
      </t>
      <t>
         The Type Covered field is represented as a RR type
         mnemonic.  When the mnemonic is not known, the TYPE
         representation as described in <xref target="RFC3597"/>
         (section 5) MUST be used. 
      </t>
      <t>
         The Algorithm field value MUST be represented either as an
         unsigned decimal integer or as an algorithm mnemonic as
         specified in <xref target="algo"/>.
      </t>
      <t>
         The Labels field value MUST be represented as an unsigned decimal integer.
      </t>
      <t>
         The Original TTL field value MUST be represented as an unsigned
         decimal integer.
      </t>
      <t>
         The Signature Expiration Time and Inception Time field values
         MUST be represented either as an unsigned decimal integer
         indicating seconds since 1 January 1970 00:00:00 UTC, or in
         the form YYYYMMDDHHmmSS in UTC, where:
         <list>
            <t> YYYY is the year (0001-9999, but see
                <xref target="expiration-and-inception"/>); </t>
            <t> MM is the month number (01-12); </t>
            <t> DD is the day of the month (01-31); </t>
            <t> HH is the hour in 24 hours notation (00-23); </t>
            <t> mm is the minute (00-59); and </t>
            <t> SS is the second (00-59). </t>
         </list>
         Note that it is always be possible to distinguish between
         these two formats, because the YYYYMMDDHHmmSS format will
         always be exactly 14 digits, while the decimal representation
         of a 32-bit unsigned integer can never be longer than 10
         digits.
      </t>
      <t>
         The Key Tag field MUST be represented as an unsigned decimal integer.
      </t>
      <t>
         The Signer's Name field value MUST be represented as a domain name.
      </t>
      <t>
         The Signature field is represented as a Base64 encoding of the
         signature.  Whitespace is allowed within the Base64 text.  See
         <xref target="dnskey-ascii"/>.
      </t>
   </section>
   <section title="RRSIG RR Example">
      <t>
         The following RRSIG RR stores the signature for the
         A RRset of host.example.com:
      </t>
      <artwork>
host.example.com. 86400 IN RRSIG A 5 3 86400 20030322173103 (
                               20030220173103 2642 example.com.
                               oJB1W6WNGv+ldvQ3WDG0MQkg5IEhjRip8WTr
                               PYGv07h108dUKGMeDPKijVCHX3DDKdfb+v6o
                               B9wfuh3DTJXUAfI/M0zmO/zz8bW0Rznl8O3t
                               GNazPwQKkRN20XPXV6nwwfoXmJQbsLNrLfkG
                               J5D6fwFm8nN+6pBzeDQfsS3Ap3o= )
      </artwork>
      <t>
         The first four fields specify the owner name, TTL, Class, and
         RR type (RRSIG).  The "A" represents the Type Covered field.
         The value 5 identifies the algorithm used (RSA/SHA1) to
         create the signature.  The value 3 is the number of Labels in
         the original owner name.  The value 86400 in the RRSIG RDATA is
         the Original TTL for the covered A RRset.  20030322173103 and
         20030220173103 are the expiration and inception dates,
         respectively.  2642 is the Key Tag, and example.com.  is the
         Signer's Name.  The remaining text is a Base64 encoding of
         the signature.
      </t>
      <t>
         Note that combination of RRSIG RR owner name, class, and Type
         Covered indicate that this RRSIG covers the "host.example.com"
         A RRset.  The Label value of 3 indicates that no wildcard
         expansion was used.  The Algorithm, Signer's Name, and Key
         Tag indicate this signature can be authenticated using an
         example.com zone DNSKEY RR whose algorithm is 5 and key tag is
         2642.
      </t>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                         
                                       
<!-- $Id: dnssec-rr.section.nxt.xml,v 1.53 2004/09/29 04:58:20 sra Exp $ -->

<section title="The NSEC Resource Record" anchor="nsec-rr">
   <t>
      The NSEC resource record lists two separate things: the next owner
      name (in the canonical ordering of the zone) which contains authoritative
      data or a delegation point NS RRset, and the set of RR types present
      at the NSEC RR's owner name.  The complete set of NSEC RRs in a zone 
      both indicate which authoritative RRsets exist in a zone and also form a chain
      of authoritative owner names in the zone.  This information is
      used to provide authenticated denial of existence for DNS data,
      as described in <xref target="I-D.ietf-dnsext-dnssec-protocol"/>.
   </t>
   <t>
      Because every authoritative name in a zone must be part of the
      NSEC chain, NSEC RRs must be present for names containing
      a CNAME RR.  This is a change to the traditional DNS specification
      <xref target="RFC1034" /> that stated that if a CNAME is present for
      a name, it is the only type allowed at that name.  An RRSIG (see
      <xref target="rrsig-rr" />)
      and NSEC MUST exist for the same name as a CNAME resource record
      in a signed zone.
   </t>
   <t>
      See <xref target="I-D.ietf-dnsext-dnssec-protocol"/> for
      discussion of how a zone signer determines precisely which NSEC
      RRs it needs to include in a zone.
   </t>
   <t>
      The type value for the NSEC RR is 47.
   </t>
   <t>
      The NSEC RR is class independent.
   </t>
   <t>
      The NSEC RR SHOULD have the same TTL value as the SOA minimum TTL field.  
      This is in the spirit of negative caching (<xref target="RFC2308"/>).  
   </t>
   <section title="NSEC RDATA Wire Format">
      <t>
         The RDATA of the NSEC RR is as shown below:
      </t>
      <artwork>
                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                      Next Domain Name                         /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                       Type Bit Maps                           /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      </artwork>
      <section title="The Next Domain Name Field">
         <t>
            The Next Domain field contains the next owner name (in the 
            canonical ordering of the zone) which has authoritative 
            data or contains a delegation point NS RRset; 
            see <xref target="canonical_name_order"/> for an
            explanation of canonical ordering.  The value of the Next
            Domain Name field in the last NSEC record in the zone is
            the name of the zone apex (the owner name of the zone's
            SOA RR).  This indicates that the owner name of the NSEC
            RR is the last name in the canonical ordering of the zone.
         </t>
         <t>
            A sender MUST NOT use DNS name compression on the
            Next Domain Name field when transmitting an NSEC RR.  
         </t>
         <t>
            Owner names of RRsets not authoritative for the given zone
            (such as glue records) MUST NOT be listed in the Next
            Domain Name unless at least one authoritative RRset exists
            at the same owner name.
         </t>
      </section>
      <section title="The Type Bit Maps Field">
         <t>
            The Type Bit Maps field identifies the RRset types
            which exist at the NSEC RR's owner name.
         </t>
         <t>
            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.
         </t>
         <t>
            Blocks are present in the NSEC RR RDATA in increasing
            numerical order.
         </t>
         <figure>
         <artwork>
   Type Bit Maps Field = ( Window Block # | Bitmap Length | Bitmap )+

   where "|" denotes concatenation.
         </artwork>
         </figure>
         <t>
            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, it indicates
            that an RRset of that type is present for the NSEC RR's
            owner name.  If a bit is clear, it indicates that no RRset
            of that type is present for the NSEC RR's owner name.
         </t>
         <t>
            Bits representing pseudo-types MUST be clear, since they
            do not appear in zone data.  If encountered, they MUST be
            ignored upon reading.
         </t>
         <t>
            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 NSEC RR's owner
            name.  Trailing zero octets not specified MUST be
            interpreted as zero octets.
         </t>
         <t>
            The bitmap for the NSEC RR at a delegation point requires
            special attention.  Bits corresponding to the delegation
            NS RRset and the RR types for which the parent zone has
            authoritative data MUST be set; bits corresponding to any
            non-NS RRset for which the parent is not authoritative
            MUST be clear.
         </t>
         <t>
            A zone MUST NOT include an NSEC RR for any domain name
            that only holds glue records.
         </t>
      </section>
      <section title="Inclusion of Wildcard Names in NSEC RDATA">
         <t>
            If a wildcard owner name appears in a zone, the wildcard
            label ("*") is treated as a literal symbol and is treated
            the same as any other owner name for purposes of
            generating NSEC RRs.  Wildcard owner names appear in the
            Next Domain Name field without any wildcard expansion.
            <xref target="I-D.ietf-dnsext-dnssec-protocol"/> describes
            the impact of wildcards on authenticated denial of
            existence.
         </t>
      </section>
   </section>
   <section title="The NSEC RR Presentation Format">
      <t>
         The presentation format of the RDATA portion is as follows:
      </t>
      <t>
         The Next Domain Name field is represented as a domain name.
      </t>
      <t>
         The Type Bit Maps field is represented as a sequence of RR type
         mnemonics.  When the mnemonic is not known, the TYPE
         representation as described in <xref target="RFC3597"/>
         (section 5) MUST be used. 
      </t>
   </section>
   <section title="NSEC RR Example">
      <t>
         The following NSEC RR identifies the RRsets associated with
         alfa.example.com. and identifies the next authoritative name after
         alfa.example.com.
      </t>
      <figure>
         <artwork>
alfa.example.com. 86400 IN NSEC host.example.com. (
                                A MX RRSIG NSEC TYPE1234 )
         </artwork>
      </figure>
      <t>
         The first four text fields specify the name, TTL, Class, and
         RR type (NSEC).  The entry host.example.com. is the next
         authoritative name after alfa.example.com. in canonical
         order.  The A, MX, RRSIG, NSEC, and TYPE1234 mnemonics
         indicate there are A, MX, RRSIG, NSEC, and TYPE1234 RRsets
         associated with the name alfa.example.com.
      </t>
      <t>
         The RDATA section of the NSEC RR above would be encoded as:
      </t>
      <figure>
      <artwork>
         0x04 'h'  'o'  's'  't'
         0x07 'e'  'x'  'a'  'm'  'p'  'l'  'e'
         0x03 'c'  'o'  'm'  0x00
         0x00 0x06 0x40 0x01 0x00 0x00 0x00 0x03
         0x04 0x1b 0x00 0x00 0x00 0x00 0x00 0x00
         0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
         0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
         0x00 0x00 0x00 0x00 0x20
      </artwork>
      </figure>
      <t>
         Assuming that the validator can authenticate this NSEC record, it
         could be used to prove that beta.example.com does not exist,
         or could be used to prove there is no AAAA record associated
         with alfa.example.com.  Authenticated denial of existence is
         discussed in <xref target="I-D.ietf-dnsext-dnssec-protocol"/>.
      </t>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                         
                                       
<!-- $Id: dnssec-rr.section.ds.xml,v 1.30 2004/07/15 22:19:02 sra Exp $ -->

<section title="The DS Resource Record">
   <t>
      The DS Resource Record refers to a DNSKEY RR and is used in the DNS
      DNSKEY authentication process. A DS RR refers to a DNSKEY RR by
      storing the key tag, algorithm number, and a digest of the DNSKEY RR.
      Note that while the digest should be sufficient to identify the
      public key, storing the key tag and key algorithm helps make the
      identification process more efficient.  By authenticating the DS
      record, a resolver can authenticate the DNSKEY RR to which the DS
      record points.  The key authentication process is described in <xref
      target="I-D.ietf-dnsext-dnssec-protocol"/>.
   </t>
   <t>
      The DS RR and its corresponding DNSKEY RR have the same owner name,
      but they are stored in different locations.  The DS RR appears
      only on the upper (parental) side of a delegation, and is
      authoritative data in the parent zone.  For example, the DS RR
      for "example.com" is stored in the "com" zone (the parent zone)
      rather than in the "example.com" zone (the child zone).  The
      corresponding DNSKEY RR is stored in the "example.com" zone (the
      child zone).  This simplifies DNS zone management and zone
      signing, but introduces special response processing requirements
      for the DS RR; these are described in <xref
      target="I-D.ietf-dnsext-dnssec-protocol"/>.
   </t>
   <t>
      The type number for the DS record is 43.
   </t>
   <t>
      The DS resource record is class independent.
   </t>
   <t>
      The DS RR has no special TTL requirements.
   </t>
   <section title="DS RDATA Wire Format">
      <t>
         The RDATA for a DS RR consists of a 2 octet Key Tag field, a
         one octet Algorithm field, a one octet Digest Type field, and
         a Digest field.
      </t>
      <artwork>
                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Key Tag             |  Algorithm    |  Digest Type  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               /
/                            Digest                             /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      </artwork>
      <section title="The Key Tag Field">
         <t>
             The Key Tag field lists the key tag of the DNSKEY RR
             referred to by the DS record, in network byte order.
         </t>
         <t> The Key Tag used by the DS RR is identical to the Key Tag
             used by RRSIG RRs.  <xref target="keytag"/> describes
             how to compute a Key Tag.
         </t>
      </section>
      <section title="The Algorithm Field">
         <t>
             The Algorithm field lists the algorithm number of
             the DNSKEY RR referred to by the DS record.
         </t>
         <t>
             The algorithm number used by the DS RR is identical
             to the algorithm number used by RRSIG and DNSKEY RRs.
             <xref target="algo"/> lists the algorithm number types.
         </t>
      </section>
      <section title="The Digest Type Field">
         <t>
            The DS RR refers to a DNSKEY RR by including a
            digest of that DNSKEY RR. The Digest Type field
            identifies the algorithm used to construct the
            digest.  <xref target="digests"/> lists the possible
            digest algorithm types.
         </t>
      </section>
      <section title="The Digest Field">
         <t>
            The DS record refers to a DNSKEY RR by including a
            digest of that DNSKEY RR.  
         </t>
         <t>
            The digest is calculated by concatenating the canonical
            form of the fully qualified owner name of the DNSKEY RR
            with the DNSKEY RDATA, and then applying the digest algorithm.
         </t>
         <artwork>
  digest = digest_algorithm( DNSKEY owner name | DNSKEY RDATA);

   "|" denotes concatenation

  DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key.

         </artwork>
         <t>
            The size of the digest may vary depending on the digest
            algorithm and DNSKEY RR size.  As of the time of writing, 
            the only defined digest algorithm is SHA-1, which 
            produces a 20 octet digest.
         </t>
      </section>
   </section>
   <section title="Processing of DS RRs When Validating Responses">
   <t>
        The DS RR links the authentication chain across zone boundaries, so the DS
        RR requires extra care in processing.  The DNSKEY RR referred to in the DS RR
        MUST be a DNSSEC zone key. The DNSKEY RR Flags MUST have Flags bit 7 set.
        If the DNSKEY flags do not indicate a DNSSEC zone key, the DS RR (and DNSKEY RR it
        references) MUST NOT be used in the validation process.
   </t>
   </section>
   <section title="The DS RR Presentation Format">
      <t>
         The presentation format of the RDATA portion is as follows:
      </t>
      <t>
         The Key Tag field MUST be represented as an unsigned decimal integer.
      </t>
      <t>
         The Algorithm field MUST be represented either as an unsigned
         decimal integer or as an algorithm mnemonic specified in
         <xref target="algo"/>.
      </t>
      <t>
         The Digest Type field MUST be represented as an unsigned decimal
         integer.
      </t>
      <t>
         The Digest MUST be represented as a sequence of case-insensitive
         hexadecimal digits.  Whitespace is allowed within the
         hexadecimal text.
      </t>
   </section>
   <section title="DS RR Example">
      <t>
         The following example shows a DNSKEY RR and its corresponding DS RR.
      </t>
      <artwork>
dskey.example.com. 86400 IN DNSKEY 256 3 5 ( AQOeiiR0GOMYkDshWoSKz9Xz
                                          fwJr1AYtsmx3TGkJaNXVbfi/
                                          2pHm822aJ5iI9BMzNXxeYCmZ
                                          DRD99WYwYqUSdjMmmAphXdvx
                                          egXd/M5+X7OrzKBaMbCVdFLU
                                          Uh6DhweJBjEVv5f2wwjM9Xzc
                                          nOf+EPbtG9DMBmADjFDc2w/r
                                          ljwvFw==
                                          ) ;  key id = 60485

dskey.example.com. 86400 IN DS 60485 5 1 ( 2BB183AF5F22588179A53B0A
                                           98631FAD1A292118 )

      </artwork>
      <t>
         The first four text fields specify the name, TTL, Class, and
         RR type (DS). Value 60485 is the key tag for the
         corresponding "dskey.example.com." DNSKEY RR, and value 5
         denotes the algorithm used by this "dskey.example.com." DNSKEY
         RR.  The value 1 is the algorithm used to construct the
         digest, and the rest of the RDATA text is the digest in
         hexadecimal.
      </t>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                        
                                       
<!-- $Id: dnssec-rr.section.canonical.xml,v 1.20 2004/06/18 21:28:53 sra Exp $ -->

<section anchor="canonicalform" title="Canonical Form and Order of Resource Records">

   <t>
       This section defines a canonical form for resource records, a
       canonical ordering of DNS names, and a canonical ordering of
       resource records within an RRset.  A canonical name order is
       required to construct the NSEC name chain.  A canonical RR form
       and ordering within an RRset are required to construct and
       verify RRSIG RRs.
   </t>

   <section anchor="canonical_name_order" title="Canonical DNS Name Order">
      <t>
         For purposes of DNS security, owner names are ordered by
         treating individual labels as unsigned left-justified octet
         strings.  The absence of a octet sorts before a zero value
         octet, and upper case US-ASCII letters are treated as if they
         were lower case US-ASCII letters.
      </t>
      <t>
         To compute the canonical ordering of a set of DNS names,
         start by sorting the names according to their most
         significant (rightmost) labels.  For names in which the most
         significant label is identical, continue sorting according to
         their next most significant label, and so forth.
      </t>
      <t>
          For example, the following names are sorted in canonical DNS
          name order.  The most significant label is "example".  At this
          level, "example" sorts first, followed by names ending in
          "a.example", then names ending "z.example".  The names within
          each level are sorted in the same way.
      </t>
      <artwork>
          example
          a.example
          yljkjljk.a.example
          Z.a.example
          zABC.a.EXAMPLE
          z.example
          \001.z.example
          *.z.example
          \200.z.example
      </artwork>
   </section>

   <section anchor="canonical_rr_form" title="Canonical RR Form">
      <t>
         For purposes of DNS security, the canonical form of an RR is
         the wire format of the RR where:
      </t>
      <list style="numbers">
        <t>
          Every domain name in the RR is fully expanded
          (no DNS name compression) and fully qualified;
        </t>
        <t>
          All uppercase US-ASCII letters in the owner name of the RR
          are replaced by the corresponding lowercase US-ASCII
          letters;
        </t>
        <t>
          If the type of the RR is NS, MD, MF, CNAME, SOA, MB, MG, MR,
          PTR, HINFO, MINFO, MX, HINFO, RP, AFSDB, RT, SIG, PX, NXT,
          NAPTR, KX, SRV, DNAME, A6, RRSIG or NSEC, all uppercase US-ASCII letters
          in the DNS names contained within the RDATA are replaced by
          the corresponding lowercase US-ASCII letters;
        </t>
        <t>
          If the owner name of the RR is a wildcard name, the owner
          name is in its original unexpanded form, including the "*"
          label (no wildcard substitution); and
        </t>
        <t>
          The RR's TTL is set to its original value as it appears in
          the originating authoritative zone or the Original TTL
          field of the covering RRSIG RR.
        </t>
      </list>
   </section>

   <section anchor="canonical_rrset_order" title="Canonical RR Ordering Within An RRset">
      <t>
         For purposes of DNS security, RRs with the same owner name,
         class, and type are sorted by treating the RDATA portion of
         the canonical form of each RR as a left-justified unsigned
         octet sequence where the absence of an octet sorts before a
         zero octet.
      </t>
	<t>
 	  <xref target="RFC2181"/> specifies that an RRset is not
          allowed to contain duplicate records (multiple RRs with the
          same owner name, class, type, and RDATA).  Therefore, if an
          implementation detects duplicate RRs when putting the
          RRset in canonical form, the implementation MUST treat this as a
          protocol error.  If the implementation chooses to handle this
          protocol error in the spirit of the robustness principle
          (being liberal in what it accepts), the implementation MUST
          remove all but one of the duplicate RR(s) for purposes of
          calculating the canonical form of the RRset.
        </t>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                         
                                       
<!-- $Id: dnssec-rr.section.iana-secu-ackn.xml,v 1.42 2004/09/29 04:58:19 sra Exp $ -->

<section title="IANA Considerations" anchor="iana-considerations">
   <t>
      This document introduces no new IANA considerations, because all
      of the protocol parameters used in this document have already
      been assigned by previous specifications.  However, since the
      evolution of DNSSEC has been long and somewhat convoluted, this
      section attempts to describe the current state of the IANA
      registries and other protocol parameters which are (or once
      were) related to DNSSEC.
   </t>
   <t>
      Please refer to <xref target="I-D.ietf-dnsext-dnssec-protocol" /> for 
      additional IANA considerations.
   </t>
   <list style="hanging">
 
      <vspace blankLines="1"/>
      <t hangText="DNS Resource Record Types:">
         <xref target="RFC2535"/> assigned types 24, 25, and
         30 to the SIG, KEY, and NXT RRs, respectively.
         <xref target="RFC3658"/> assigned DNS
         Resource Record Type 43 to DS.
         <xref target="RFC3755"/>
         assigned types 46, 47, and 48 to the RRSIG, NSEC, and DNSKEY
         RRs, respectively.  
         <xref target="RFC3755"/>
         also marked type 30 (NXT) as Obsolete, and restricted use of
         types 24 (SIG) and 25 (KEY) to the "SIG(0)" transaction
         security protocol described in <xref target="RFC2931"/> and the 
         transaction KEY Resource Record described in <xref target="RFC2930" />.
      </t>
 
      <vspace blankLines="1"/>
      <t hangText="DNS Security Algorithm Numbers:">
         <xref target="RFC2535"/> created an IANA registry for DNSSEC
         Resource Record Algorithm field numbers, and assigned values
         1-4 and 252-255.  <xref target="RFC3110"/> assigned value 5.
         <xref target="RFC3755"/>
         altered this registry to include flags for each entry regarding 
         its use with the DNS security extensions.  Each algorithm entry 
         could refer to an algorithm that can be used for zone signing, 
         transaction security (see <xref target="RFC2931"/>) or both.  
         Values 6-251 are available for assignment by IETF standards action 
         (<xref target="RFC3755"/>).  
         See <xref target="cryptoalgo" /> for a full listing of the 
         DNS Security Algorithm Numbers entries at the time of writing and
         their status of use in DNSSEC.
      </t>
 
      <vspace blankLines="1"/>
      <t>
         <xref target="RFC3658"/> created an IANA registry for DNSSEC
         DS Digest Types, and assigned value 0 to reserved and value 1
         to SHA-1.
      </t>
 
      <vspace blankLines="1"/>
      <t hangText="KEY Protocol Values:">
         <xref target="RFC2535"/> created an IANA Registry for KEY
         Protocol Values, but <xref target="RFC3445"/> re-assigned all
         values other than 3 to reserved and closed this IANA
         registry.  The registry remains closed, and all KEY and DNSKEY
         records are required to have Protocol Octet value of 3.
      </t>
 
      <vspace blankLines="1"/>
      <t hangText="Flag bits in the KEY and DNSKEY RRs:">
         <xref target="RFC3755" /> created an IANA registry for the
         DNSSEC KEY and DNSKEY RR flag bits.  Initially, this registry
         only contains assignments for bit 7 (the ZONE bit) and bit 15
         (the Secure Entry Point flag (SEP) bit, see <xref
         target="RFC3757" />).  As also stated in <xref
         target="RFC3755"/>, bits 0-6 and 8-14 are available for
         assignment by IETF Standards Action.
      </t>
   </list>

</section>

<section title="Security Considerations">
   <t>
      This document describes the format of four DNS resource
      records used by the DNS security extensions, and presents
      an algorithm for calculating a key tag for a public key.
      Other than the items described below, the resource records
      themselves introduce no security considerations.  Please see
      <xref target="I-D.ietf-dnsext-dnssec-intro"/> and
      <xref target="I-D.ietf-dnsext-dnssec-protocol"/> for additional 
      security considerations related to the use of these records.
   </t>
   <t>
      The DS record points to a DNSKEY RR using a cryptographic digest,
      the key algorithm type and a key tag.  The DS record is intended
      to identify an existing DNSKEY RR, but it is theoretically possible
      for an attacker to generate a DNSKEY that matches all the DS
      fields.  The probability of constructing such a matching DNSKEY
      depends on the type of digest algorithm in use.  The only
      currently defined digest algorithm is SHA-1, and the working
      group believes that constructing a public key which would match
      the algorithm, key tag, and SHA-1 digest given in a DS record
      would be a sufficiently difficult problem that such an attack is
      not a serious threat at this time.
   </t>
   <t>
      The key tag is used to help select DNSKEY resource records
      efficiently, but it does not uniquely identify a single DNSKEY
      resource record.  It is possible for two distinct DNSKEY RRs to
      have the same owner name, the same algorithm type, and the same
      key tag.  An implementation which uses only the key tag to select
      a DNSKEY RR might select the wrong public key in some circumstances.
      Please see <xref target="keytag"/> for further details.
   </t>
   <t>
      The table of algorithms in <xref target="cryptoalgo"/> and the
      key tag calculation algorithms in <xref target="keytag"/>
      include the RSA/MD5 algorithm for completeness, but the RSA/MD5
      algorithm is NOT RECOMMENDED, as explained in <xref
      target="RFC3110"/>.
   </t>
</section>

<section title="Acknowledgments">
   <t>
      This document was created from the input and ideas of the
      members of the DNS Extensions Working Group and working group
      mailing list.  The editors would like to express their thanks
      for the comments and suggestions received during the revision of
      these security extension specifications.  While explicitly
      listing everyone who has contributed during the decade during
      which DNSSEC has been under development would be an impossible
      task, <xref target="I-D.ietf-dnsext-dnssec-intro"/> includes a
      list of some of the participants who were kind enough to comment
      on these documents.
   </t>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

</middle>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                         
                                    
<!-- $Id: dnssec-rr.back.xml,v 1.28 2004/09/11 18:17:26 sra Exp $ -->

<back> 
   <references title="Normative References">
                           
                                         

<reference anchor="RFC1034">
   
   <front>
      <title abbrev="Domain Concepts and Facilities">Domain names - concepts and facilities</title>
      <author initials="P." surname="Mockapetris" fullname="P. Mockapetris">
      <organization>Information Sciences Institute (ISI)</organization></author>
   <date month="November" year="1987"></date></front>
   
   <seriesInfo name="STD" value="13" />
   <seriesInfo name="RFC" value="1034" />
</reference>

                           
                                         

<reference anchor="RFC1035">
   
   <front>
      <title abbrev="Domain Implementation and Specification">Domain names - implementation and specification</title>
      <author initials="P." surname="Mockapetris" fullname="P. Mockapetris">
         <organization>USC/ISI</organization>
         <address>
            <postal>
               <street>4676 Admiralty Way</street>
               <city>Marina del Rey</city>
               <region>CA</region>
               <code>90291</code>
            <country>US</country></postal>
            <phone>+1 213 822 1511</phone>
      <email></email></address></author>
   <date month="November" year="1987"></date></front>
   
   <seriesInfo name="STD" value="13" />
   <seriesInfo name="RFC" value="1035" />
</reference>

                           
                                         

<reference anchor="RFC1982">
   
   <front>
      <title>Serial Number Arithmetic</title>
      <author initials="R." surname="Elz" fullname="Robert Elz">
         <organization>University of Melbourne, Computer Science</organization>
         <address>
            <postal>
               <street></street>
               <city>Parkville</city>
               <region>Victoria</region>
               <code>3052</code>
            <country>AU</country></postal>
            <phone></phone>
      <email>kre@munnari.OZ.AU</email></address></author>
      <author initials="R." surname="Bush" fullname="Randy Bush">
         <organization>RGnet, Inc.</organization>
         <address>
            <postal>
               <street>10361 NE Sasquatch Lane</street>
               <city>Bainbridge Island</city>
               <region>WA</region>
               <code>98110</code>
            <country>US</country></postal>
            <phone></phone>
      <email>randy@psg.com</email></address></author>
      <date month="August" year="1996"></date>
   </front>
   
   <seriesInfo name="RFC" value="1982" />
</reference>

                           
                                         

<reference anchor="RFC2119">
   
   <front>
      <title abbrev="RFC Key Words">Key words for use in RFCs to Indicate Requirement Levels</title>
      <author initials="S." surname="Bradner" fullname="Scott Bradner">
         <organization>Harvard University</organization>
         <address>
            <postal>
               <street>1350 Mass. Ave.</street>
               <street>Cambridge</street>
            <street>MA 02138</street></postal>
            <phone>- +1 617 495 3864</phone>
      <email>-</email></address></author>
      <date month="March" year="1997"></date>
      <area>General</area>
      <keyword>keyword</keyword>
   </front>
   
   <seriesInfo name="BCP" value="14" />
   <seriesInfo name="RFC" value="2119" />
</reference>

                           

<reference anchor="RFC2136">
   
   <front>
      <title abbrev="DNS Update">Dynamic Updates in the Domain Name System (DNS UPDATE)</title>
      <author initials="P." surname="Vixie" fullname="Paul Vixie">
         <organization>Internet Software Consortium</organization>
         <address>
            <postal>
               <street>Star Route Box 159A</street>
               <street>Woodside</street>
            <street>CA 94062</street></postal>
            <phone>+1 415 747 0204</phone>
      <email>paul@vix.com</email></address></author>
      <author initials="S." surname="Thomson" fullname="Susan Thomson">
         <organization>Bellcore</organization>
         <address>
            <postal>
               <street>445 South Street</street>
               <street>Morristown</street>
            <street>NJ 07960</street></postal>
            <phone>+1 201 829 4514</phone>
      <email>set@thumper.bellcore.com</email></address></author>
      <author initials="Y." surname="Rekhter" fullname="Yakov Rekhter">
         <organization>Cisco Systems</organization>
         <address>
            <postal>
               <street>170 West Tasman Drive</street>
               <street>San Jose</street>
            <street>CA 95134-1706</street></postal>
            <phone>+1 914 528 0090</phone>
      <email>yakov@cisco.com</email></address></author>
      <author initials="J." surname="Bound" fullname="Jim Bound">
         <organization>Digital Equipment Corp.</organization>
         <address>
            <postal>
               <street>110 Spitbrook Rd ZK3-3/U14</street>
               <street>Nashua</street>
            <street>NH 03062-2698</street></postal>
            <phone>+1 603 881 0400</phone>
      <email>bound@zk3.dec.com</email></address></author>
      <date month="April" year="1997" />
      <area>Applications</area>
      <keyword>domain name</keyword>
      <keyword>domain name system</keyword>
   </front>
   
   <seriesInfo name="RFC" value="2136" />
   <format type="TXT" octets="56354" target="ftp://ftp.isi.edu/in-notes/rfc2136.txt" />
   <format type="HTML" octets="69409" target="http://xml.resource.org/public/rfc/html/rfc2136.html" />
   <format type="XML" octets="54818" target="http://xml.resource.org/public/rfc/xml/rfc2136.xml" />
</reference>

                           
                                         

<reference anchor="RFC2181">
   
   <front>
      <title abbrev="DNS Clarifications">Clarifications to the DNS Specification</title>
      <author initials="R." surname="Elz" fullname="Robert Elz">
         <organization>Computer Science</organization>
         <address>
            <postal>
               <street>Parkville</street>
               <street>Victoria</street>
               <street>3052</street>
            <street>Australia.</street></postal>
            <email>kre@munnari.OZ.AU</email>
      <uri>e</uri></address></author>
      <author initials="R." surname="Bush" fullname="Randy Bush">
         <organization>RGnet, Inc.</organization>
         <address>
            <postal>
               <street>5147 Crystal Springs Drive</street>
               <street>Bainbridge Island</street>
               <street>Washington</street>
               <street>98110</street>
               <street>United States.</street>
            <country>NE</country></postal>
      <email>randy@psg.com</email></address></author>
      <date month="July" year="1997"></date>
      <area>Applications</area>
      <keyword>DNS</keyword>
   <keyword>domain name system</keyword></front>
   
   <seriesInfo name="RFC" value="2181" />
</reference>

                           

<reference anchor="RFC2308">
   
   <front>
      <title abbrev="DNS NCACHE">Negative Caching of DNS Queries (DNS NCACHE)</title>
      <author initials="M." surname="Andrews" fullname="Mark Andrews">
         <organization>CSIRO - Mathematical and Information Sciences</organization>
         <address>
            <postal>
               <street>Locked Bag 17</street>
               <street>North Ryde NSW 2113</street>
            <country>AUSTRALIA</country></postal>
            <phone>+61 2 9325 3148</phone>
      <email>Mark.Andrews@cmis.csiro.au</email></address></author>
      <date month="March" year="1998" />
      <area>Applications</area>
      <keyword>domain name system</keyword>
      <keyword>DNS</keyword>
   </front>
   
   <seriesInfo name="RFC" value="2308" />
   <format type="TXT" octets="41428" target="ftp://ftp.isi.edu/in-notes/rfc2308.txt" />
   <format type="HTML" octets="49159" target="http://xml.resource.org/public/rfc/html/rfc2308.html" />
   <format type="XML" octets="41355" target="http://xml.resource.org/public/rfc/xml/rfc2308.xml" />
</reference>

                           
                                         

<reference anchor="RFC2536">
   
   <front>
      <title abbrev="DSA in the DNS">DSA KEYs and SIGs in the Domain Name System (DNS)</title>
      <author initials="D.E." surname="Eastlake" fullname="Donald E. Eastlake 3rd">
         <organization>IBM</organization>
         <address>
            <postal>
               <street>65 Shindegan Hill Road</street>
               <street>RR #1</street>
               <city>Carmel</city>
               <region>NY</region>
               <code>10512</code>
            <country>US</country></postal>
            <phone>+1 914 276 2668</phone>
            <facsimile>+1 914 784 3833</facsimile>
      <email>dee3@us.ibm.com</email></address></author>
      <date month="March" year="1999"></date>
   </front>
   
   <seriesInfo name="RFC" value="2536" />
</reference>

                           
                                         

<reference anchor="RFC2671">
   
   <front>
      <title>Extension Mechanisms for DNS (EDNS0)</title>
      <author initials="P." surname="Vixie" fullname="Paul Vixie">
         <organization>Internet Software Consortium</organization>
         <address>
            <postal>
               <street>950 Charter Street</street>
               <city>Redwood City</city>
               <region>CA</region>
               <code>94063</code>
            <country>US</country></postal>
            <phone>+1 650 779 7001</phone>
      <email>vixie@isc.org</email></address></author>
      <date month="August" year="1999"></date>
   </front>
   
   <seriesInfo name="RFC" value="2671" />
</reference>

                           
                                         

<reference anchor="RFC2931">
   
   <front>
      <title>DNS Request and Transaction Signatures ( SIG(0)s)</title>
      <author initials="D." surname="Eastlake" fullname="D. Eastlake">
      <organization></organization></author>
   <date month="September" year="2000"></date></front>
   
   <seriesInfo name="RFC" value="2931" />
</reference>

                           
                                         

<reference anchor="RFC3110">
   
   <front>
      <title>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</title>
      <author initials="D." surname="Eastlake" fullname="D. Eastlake">
      <organization></organization></author>
   <date month="May" year="2001"></date></front>
   
   <seriesInfo name="RFC" value="3110" />
</reference>

                           
                                         

<reference anchor="RFC3445">
   <front>
      <title>Limiting the Scope of the KEY Resource Record (RR)</title>
      
      <author initials="D" surname="Massey" fullname="D Massey">
         <organization />
      </author>
      
      <author initials="S" surname="Rose" fullname="Scott Rose">
         <organization />
      </author>
      
      <date month="December" year="2002" />
   </front>
   
   <seriesInfo name="RFC" value="3445" />
</reference>

                                            

<reference anchor="RFC3548">
   
   <front>
      <title>The Base16, Base32, and Base64 Data Encodings</title>
      <author initials="S." surname="Josefsson" fullname="S. Josefsson">
         <organization />
      </author>
      <date year="2003" month="July" />
   </front>
   
   <seriesInfo name="RFC" value="3548" />
   <format type="TXT" octets="26363" target="ftp://ftp.isi.edu/in-notes/rfc3548.txt" />
</reference>

                           

<reference anchor="RFC3597">

<front>
<title>Handling of Unknown DNS Resource Record (RR) Types</title>
<author initials="A." surname="Gustafsson" fullname="A. Gustafsson">
<organization /></author>
<date month="September" year="2003" /></front>

<seriesInfo name="RFC" value="3597" />
<format type="TXT" octets="17559" target="ftp://ftp.isi.edu/in-notes/rfc3597.txt" />
</reference>

                           

<reference anchor="RFC3658">

<front>
<title>Delegation Signer (DS) Resource Record (RR)</title>
<author initials="O." surname="Gudmundsson" fullname="O. Gudmundsson">
<organization /></author>
<date month="December" year="2003" /></front>

<seriesInfo name="RFC" value="3658" />
<format type="TXT" octets="42120" target="ftp://ftp.isi.edu/in-notes/rfc3658.txt" />
</reference>

                           

<reference anchor="RFC3755">

<front>
<title>Legacy Resolver Compatibility for Delegation Signer</title>

<author initials="S" surname="Weiler" fullname="Samuel Weiler">
    <organization />
</author>
<date month="April" year="2004" /></front>

<seriesInfo name="RFC" value="3755" />
<format type="TXT" octets="16547" target="ftp://ftp.isi.edu/in-notes/rfc3755.txt" />
</reference>
                           

<reference anchor="RFC3757">

<front>
<title>KEY RR Secure Entry Point Flag</title>
<author initials="O" surname="Kolkman" fullname="Olaf Kolkman">
    <organization />
</author>
<author initials="J" surname="Schlyter" fullname="Jacob Schlyter">
    <organization />
</author>
<author initials="E" surname="Lewis" fullname="Edward  Lewis">
    <organization />
</author>
<date month="April" year="2004" /></front>

<seriesInfo name="RFC" value="3757" />
<format type="TXT" octets="18493" target="ftp://ftp.isi.edu/in-notes/rfc3757.txt" />
</reference>
                           
<!-- DOCTYPE reference SYSTEM "rfc2629.dtd" -->

<reference anchor="I-D.ietf-dnsext-dnssec-intro">
   <front>
      <title>DNS Security Introduction and Requirements</title>
      <author initials="R" surname="Arends" fullname="Roy Arends">
         <organization />
      </author>
      <author initials="R" surname="Austein" fullname="Rob Austein">
         <organization />
      </author>
      <author initials="M" surname="Larson" fullname="Matt Larson">
         <organization />
      </author>
      <author initials="D" surname="Massey" fullname="Dan Massey">
         <organization />
      </author>
      <author initials="S" surname="Rose" fullname="Scott Rose">
         <organization />
      </author>
      <date month="May" year="2004" />
   </front>
   
   <seriesInfo name="Internet-Draft" value="draft-ietf-dnsext-dnssec-intro-10" />
   <format type="TXT"
        target="http://www.ietf.org/internet-drafts/draft-ietf-dnsext-dnssec-intro-10.txt" />
</reference>

                           
<!-- DOCTYPE reference SYSTEM "rfc2629.dtd" -->

<reference anchor="I-D.ietf-dnsext-dnssec-protocol">
   <front>
      <title>Protocol Modifications for the DNS Security Extensions</title>
      <author initials="R" surname="Arends" fullname="Roy Arends">
         <organization />
      </author>
      <author initials="R" surname="Austein" fullname="Rob Austein">
         <organization />
      </author>
      <author initials="M" surname="Larson" fullname="Matt Larson">
         <organization />
      </author>
      <author initials="D" surname="Massey" fullname="Dan Massey">
         <organization />
      </author>
      <author initials="S" surname="Rose" fullname="Scott Rose">
         <organization />
      </author>
      <date month="May" year="2004" />
   </front>
   
   <seriesInfo name="Internet-Draft" value="draft-ietf-dnsext-dnssec-protocol-06" />
   <format type="TXT"
        target="http://www.ietf.org/internet-drafts/draft-ietf-dnsext-dnssec-protocol-06.txt" />
</reference>

   </references>
   <references title="Informative References">
                           
                                         

<reference anchor="RFC2535">
   
   <front>
      <title abbrev="DNS Security Extensions">Domain Name System Security Extensions</title>
      <author initials="D." surname="Eastlake" fullname="Donald E. Eastlake 3rd">
         <organization>IBM</organization>
         <address>
            <postal>
               <street>65 Shindegan Hill Road</street>
               <street>RR #1</street>
               <city>Carmel</city>
               <region>NY</region>
               <code>10512</code>
            <country>US</country></postal>
            <phone>+1 914 784 7913</phone>
            <facsimile>+1 914 784 3833</facsimile>
      <email>dee3@us.ibm.com</email></address></author>
      <date month="March" year="1999"></date>
   </front>
   
   <seriesInfo name="RFC" value="2535" />
</reference>

                                            

<reference anchor="RFC2537">

<front>
<title abbrev="RSA/MD5 KEYs and SIGs in the DNS">RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</title>
<author initials="D.E." surname="Eastlake" fullname="Donald E. Eastlake 3rd">
<organization>IBM</organization>
<address>
<postal>
<street>65 Shindegan Hill Road</street>
<street>RR #1</street>
<city>Carmel</city>
<region>NY</region>
<code>10512</code>
<country>US</country></postal>
<phone>+1 914 276 2668</phone>
<facsimile>+1 914 784 3833</facsimile>
<email>dee3@us.ibm.com</email></address></author>
<date year="1999" month="March" />
<abstract>
<t>A standard method for storing RSA keys and and RSA/MD5 based signatures in the Domain Name System is described which utilizes DNS KEY and SIG resource records.</t></abstract></front>

<seriesInfo name="RFC" value="2537" />
<format type="TXT" octets="10810" target="ftp://ftp.isi.edu/in-notes/rfc2537.txt" />
</reference>

                                            

<reference anchor="RFC2539">

<front>
<title abbrev="Diffie-Hellman Keys in the DNS">Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</title>
<author initials="D.E." surname="Eastlake" fullname="Donald E. Eastlake 3rd">
<organization>IBM</organization>
<address>
<postal>
<street>65 Shindegan Hill Road</street>
<street>RR #1</street>
<city>Carmel</city>
<region>NY</region>
<code>10512</code>
<country>US</country></postal>
<phone>+1 914 276 2668</phone>
<facsimile>+1 914 784 3833</facsimile>
<email>dee3@us.ibm.com</email></address></author>
<date year="1999" month="March" />
<abstract>
<t>A standard method for storing Diffie-Hellman keys in the Domain Name System is described which utilizes DNS KEY resource records.</t></abstract></front>

<seriesInfo name="RFC" value="2539" />
<format type="TXT" octets="21049" target="ftp://ftp.isi.edu/in-notes/rfc2539.txt" />
</reference>

                           
                                         

<reference anchor="RFC2930">
   
   <front>
      <title>Secret Key Establishment for DNS (TKEY RR)</title>
      <author initials="D." surname="Eastlake" fullname="D. Eastlake">
      <organization></organization></author>
   <date month="September" year="2000"></date></front>
   
   <seriesInfo name="RFC" value="2930" />
</reference>

                                            

<reference anchor="RFC3845">

<front>
<title>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</title>
<author initials="J." surname="Schlyter" fullname="J. Schlyter">
<organization /></author>
<date year="2004" month="August" /></front>

<seriesInfo name="RFC" value="3845" />
<format type="TXT" octets="14793" target="ftp://ftp.isi.edu/in-notes/rfc3845.txt" />
</reference>

   </references>
                        
                                       
<!-- $Id: dnssec-rr.section.algorithm.xml,v 1.17 2004/09/11 18:17:26 sra Exp $ -->

<section anchor="cryptoalgo" title="DNSSEC Algorithm and Digest Types">

   <t> The DNS security extensions are designed to be
       independent of the underlying cryptographic algorithms.
       The DNSKEY, RRSIG, and DS resource records all use a DNSSEC
       Algorithm Number to identify the cryptographic algorithm
       in use by the resource record.   The DS resource record
       also specifies a Digest Algorithm Number to identify
       the digest algorithm used to construct the DS record.
       The currently defined Algorithm and Digest Types are
       listed below.  Additional Algorithm or Digest Types
       could be added as advances in cryptography warrant.
   </t>
   <t>
      A DNSSEC aware resolver or name server MUST implement
      all MANDATORY algorithms.
   </t>
   <section anchor="algo" title="DNSSEC Algorithm Types">
     <t>
         The DNSKEY, RRSIG, and DS RRs use an 8-bit number used to
         identify the security algorithm being used.  These values are 
         stored in the "Algorithm number" field in the resource record
         RDATA.
     </t>
     <t>
         Some algorithms are usable only for zone signing (DNSSEC), some 
         only for transaction security mechanisms (SIG(0) and TSIG), and 
         some for both.  Those usable for zone signing may appear in 
         DNSKEY, RRSIG, and DS RRs.  Those usable for transaction security 
         would be present in SIG(0) and KEY RRs as described in 
         <xref target="RFC2931" />
     </t>
     <artwork>
                             Zone   
Value Algorithm [Mnemonic]  Signing  References   Status
----- -------------------- --------- ----------  ---------
  0   reserved
  1   RSA/MD5 [RSAMD5]         n      [RFC2537]  NOT RECOMMENDED
  2   Diffie-Hellman [DH]      n      [RFC2539]   -  
  3   DSA/SHA-1 [DSA]          y      [RFC2536]  OPTIONAL
  4   Elliptic Curve [ECC]              TBA       -
  5   RSA/SHA-1 [RSASHA1]      y      [RFC3110]  MANDATORY
252   Indirect [INDIRECT]      n                  -
253   Private [PRIVATEDNS]     y      see below  OPTIONAL
254   Private [PRIVATEOID]     y      see below  OPTIONAL
255   reserved
     </artwork>
     <t>
        6 - 251  Available for assignment by IETF Standards Action.
     </t>

      <section title="Private Algorithm Types">
         <t>
            Algorithm number 253 is reserved for private use
            and will never be assigned to a specific algorithm.  The
            public key area in the DNSKEY RR and the signature area
            in the RRSIG RR begin with a wire encoded domain name,
            which MUST NOT be compressed.
            The domain name indicates the private algorithm to use and
            the remainder of the public key area is determined by that
            algorithm.  Entities should only use domain names they
            control to designate their private algorithms.
         </t>
         <t>
            Algorithm number 254 is reserved for private use
            and will never be assigned to a specific algorithm.
            The public key area in the DNSKEY RR and the signature
            area in the RRSIG RR begin with an unsigned length byte
            followed by a BER encoded Object Identifier (ISO OID)
            of that length.  The OID indicates the private
            algorithm in use and the remainder of the area is whatever
            is required by that algorithm.  Entities should only use
            OIDs they control to designate their private algorithms.
         </t>
      </section>
   </section>
   <section anchor="digests" title="DNSSEC Digest Types">
      <t>
         A "Digest Type" field in the DS resource record types
         identifies the cryptographic digest algorithm used by
         the resource record.   The following table lists the
         currently defined digest algorithm types.
      </t>
      <artwork>
           VALUE   Algorithm                 STATUS
             0      Reserved                   -
             1      SHA-1                   MANDATORY
           2-255    Unassigned                 -
      </artwork>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

                        
                                       
<!-- $Id: dnssec-rr.section.keytag.xml,v 1.19 2004/09/03 21:28:15 sra Exp $ -->

<section anchor="keytag" title="Key Tag Calculation">
   <t>
      The Key Tag field in the RRSIG and DS resource record types
      provides a mechanism for selecting a public key efficiently. In
      most cases, a combination of owner name, algorithm, and key tag
      can efficiently identify a DNSKEY record.  Both the RRSIG and DS
      resource records have corresponding DNSKEY records.  The Key Tag
      field in the RRSIG and DS records can be used to help select the
      corresponding DNSKEY RR efficiently when more than one candidate
      DNSKEY RR is available.
   </t>
   <t>
      However, it is essential to note that the key tag is not a
      unique identifier. It is theoretically possible for two distinct
      DNSKEY RRs to have the same owner name, the same algorithm, and the
      same key tag. The key tag is used to limit the possible
      candidate keys, but it does not uniquely identify a DNSKEY record.
      Implementations MUST NOT assume that the key tag uniquely
      identifies a DNSKEY RR.
   </t>
   <t>
      The key tag is the same for all DNSKEY algorithm types except
      algorithm 1 (please see <xref target="rsatag"/> for the
      definition of the key tag for algorithm 1).  The key tag 
      algorithm is the sum of the wire format of the DNSKEY RDATA broken 
      into 2 octet groups.  First the RDATA (in wire format) is treated
      as a series of 2 octet groups, these groups are then added together 
      ignoring any carry bits.
   </t>
   <t>
      A reference implementation of the key tag algorithm is as an ANSI C 
      function is given below with the RDATA portion of the DNSKEY RR is used
      as input.  It is not necessary to use the following reference code verbatim, 
      but the numerical value of the Key Tag MUST be identical to what
      the reference implementation would generate for the same input.
   </t>
   <t>
      Please note that the algorithm for calculating the Key Tag is
      almost but not completely identical to the familiar
      ones-complement
      checksum used in many other Internet protocols.  Key
      Tags MUST be calculated using the algorithm described here
      rather than the ones complement checksum.
   </t>
   <t>
      The following ANSI C reference implementation calculates the
      value of a Key Tag.  This reference implementation applies to
      all algorithm types except algorithm 1 (see <xref
      target="rsatag"/>).  The input is the wire format of the RDATA
      portion of the DNSKEY RR.  The code is written for clarity, not
      efficiency.
   </t>
<figure>
<artwork>
/*
 * Assumes that int is at least 16 bits.
 * First octet of the key tag is the most significant 8 bits of the
 * return value;
 * Second octet of the key tag is the least significant 8 bits of the
 * return value.
 */

unsigned int 
keytag (
        unsigned char key[],  /* the RDATA part of the DNSKEY RR */
        unsigned int keysize  /* the RDLENGTH */
       )
{
        unsigned long ac;     /* assumed to be 32 bits or larger */
        int i;                /* loop index */

        for ( ac = 0, i = 0; i &lt; keysize; ++i )
                ac += (i &amp; 1) ? key[i] : key[i] &lt;&lt; 8;
        ac += (ac >> 16) &amp; 0xFFFF;
        return ac &amp; 0xFFFF;
}
</artwork>
</figure>

   <section anchor="rsatag" title="Key Tag for Algorithm 1 (RSA/MD5)">
      <t>
         The key tag for algorithm 1 (RSA/MD5) is defined differently
         than the key tag for all other algorithms, for historical
         reasons.  For a DNSKEY RR with algorithm 1, the key tag is
         defined to be the most significant 16 bits of the least
         significant 24 bits in the public key modulus (in other
         words, the 4th to last and 3rd to last octets of the public
         key modulus).
      </t>
      <t>
	 Please note that Algorithm 1 is NOT RECOMMENDED.
      </t>
   </section>
</section>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

</back>

<!--
 ;; Local Variables:
 ;; indent-tabs-mode: nil
 ;; End:
 -->

</rfc>
