<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
There has to be one entity for each item to be referenced. 
An alternate method (rfc include) is described in the references. --><!ENTITY RFC5966 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5966.xml">
<!ENTITY I-D.ietf-tcpm-fastopen SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tcpm-fastopen">
<!ENTITY I-D.draft-ietf-dnsop-edns-tcp-keepalive SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-dnsop-edns-tcp-keepalive-00.xml">
<!ENTITY RFC1034 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1034.xml">
<!ENTITY RFC1035 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml">
<!ENTITY RFC1995 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1995.xml">
<!ENTITY RFC2119 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2136 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2136.xml">
<!ENTITY RFC2629 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC2845 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2845.xml">
<!ENTITY RFC2065 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2065.xml">
<!ENTITY RFC2535 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2535.xml">
<!ENTITY RFC2931 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2931.xml">
<!ENTITY RFC3851 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3851.xml">
<!ENTITY RFC4033 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4033.xml">
<!ENTITY RFC4034 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4034.xml">
<!ENTITY RFC4035 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4035.xml">
<!ENTITY RFC4880 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4880.xml">
<!ENTITY RFC5936 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5936.xml">
<!ENTITY RFC7706 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7706.xml">
<!ENTITY RFC7719 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7719.xml">
<!ENTITY RFC7858 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7858.xml">
<!ENTITY RFC3658 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3658.xml">
<!ENTITY RFC4509 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4509.xml">
<!ENTITY RFC5933 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5933.xml">
<!ENTITY RFC6605 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6605.xml">
<!ENTITY RFC8174 PUBLIC "" "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RRNAME "ZONEMD">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="exp" docName="draft-wessels-dns-zone-digest-04" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
  ipr values: full3667, noModification3667, noDerivatives3667
  you can add the attributes updates="NNNN" and obsoletes="NNNN" 
  they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
    full title is longer than 39 characters -->

    <title abbrev="DNS Zone Digest">Message Digest for DNS Zones</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Duane Wessels" initials="D." surname="Wessels">
      <organization>Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
        </postal>
        <phone>+1 703 948-3200</phone>
        <email>dwessels@verisign.com</email>
        <uri>http://verisign.com</uri>
      </address>
    </author>

    <author fullname="Piet Barber" initials="P." surname="Barber">
      <organization>Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
        </postal>
        <phone>+1 703 948-3200</phone>
        <email>pbarber@verisign.com</email>
        <uri>http://verisign.com</uri>
      </address>
    </author>

    <author fullname="Matt Weinberg" initials="M." surname="Weinberg">
      <organization>Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
        </postal>
        <phone>+1 703 948-3200</phone>
        <email>mweinberg@verisign.com</email>
        <uri>http://verisign.com</uri>
      </address>
    </author>

    <author fullname="Warren Kumari" initials="W." surname="Kumari">
      <organization>Google</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
        </postal>
        <email>warren@kumari.net</email>
      </address>
    </author>

    <author fullname="Wes Hardaker" initials="W." surname="Hardaker">
      <organization>USC/ISI</organization>
      <address>
        <postal>
          <street>P.O. Box 382</street>
          <city>Davis</city>
          <region>CA</region>
          <code>95617</code>
        </postal>
        <email>ietf@hardakers.net</email>
      </address>
    </author>

    <date day="22" month="October" year="2018"/>

    <area>General</area>

    <workgroup>Internet Engineering Task Force</workgroup>

    <keyword>DNS</keyword>
    <keyword>DNSSEC</keyword>
    <keyword>Checksum</keyword>
    <keyword>Hash</keyword>
    <keyword>Zone Transfer</keyword>

    <abstract>
      <t>
        This document describes an experimental protocol and new DNS Resource Record
        that can be used to provide an message digest over DNS zone data.
        The &RRNAME; Resource Record conveys the message digest data in
        the zone itself.
        When a zone publisher includes an &RRNAME; record, recipients
        can verify the zone contents for accuracy and completeness.
        This provides assurance that received zone data matches
        published data, regardless of how the zone data has been
        transmitted and received.
      </t>
      <t>
        &RRNAME; is not designed to replace DNSSEC.
        Whereas DNSSEC is designed to protect recursive name servers
        and their caches, &RRNAME; protects applications that
        consume zone files, whether they be authoritative name
        servers, recursive name servers, or uses of zone file data.
      </t>
      <t>
        As specified at this time, &RRNAME; is not designed for use
        in large, dynamic zones due to the time and resources
        required for digest calculation.
        The &RRNAME; record described in this document includes
        fields reserved for future work to support large, dynamic
        zones.
      </t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction">
      <t>
        In the DNS, a zone is the collection of authoritative resource
        records (RRs) sharing a common origin (<xref target="RFC7719"/>).
        Zones are often stored as files on disk in the so-called
        master file format <xref target="RFC1034"/>.
        Zones are generally distributed between name servers using 
        the AXFR <xref target="RFC5936"/>, and IXFR <xref target="RFC1995"/>
        protocols.
        Zone files can also be distributed outside of the DNS, with
        such protocols as FTP, HTTP, rsync, and even via email.
        Currently there is no standard way to verify the authenticity
        of a stand-alone zone file.
      </t>
      <t>
        This document introduces a new RR type that serves as a
        cryptographic message digest of the data in a zone file.
        It allows a receiver of the zone file to verify the zone file's
        authenticity, especially when used in combination with DNSSEC.
        This technique makes the message
        digest a part of the zone file itself, allowing
        verification the zone file as a whole, no matter how it is
        transmitted.
        Furthermore, the digest is based on the wire format of zone data.
        Thus, it independent of presentation format, such as changes in
        whitespace, capitalization, and comments.
      </t>
      <t>
        DNSSEC provides three strong security guarantees relevant
        to this protocol:
        <list style="numbers">
        <t>whether or not to expect DNSSEC records in the zone,</t>
        <t>whether or not to expect a &RRNAME; record in a signed zone, and</t>
        <t>whether or not the &RRNAME; record has been altered since it was signed.</t>
        </list>
      </t>
      <t>
        This specification is OPTIONAL to implement by both publishers
        and consumers of zone file data.
      </t>
      <section title="Motivation">
        <t>
          The motivation for this protocol enhancement is the desire for
          the ability to verify the authenticity of a stand-alone zone file,
          regardless of how it is transmitted.  A consumer of zone file data
          should be able to verify that the data is as-published by the
          zone operator.
        </t>
        <t>
          One approach to preventing data tampering and corruption is
          to secure the distribution channel.  The DNS has a number
          of features that can already be used for channel security.
          Perhaps the most widely used is DNS transaction signatures
          (TSIG <xref target="RFC2845"/>).  TSIG uses shared secret keys
          and a message digest to protect individual query and response
          messages. It is generally used to authenticate and validate
          UPDATE <xref target="RFC2136"/>, AXFR <xref target="RFC5936"/>,
          and IXFR <xref target="RFC1995"/> messages.
        </t>
        <t>
          DNS Request and Transaction Signatures (SIG(0) <xref
          target="RFC2931"/>) is another protocol extension designed to
          authenticate individual DNS transactions.  Whereas SIG records
          were originally designed to cover specific RR types, SIG(0)
          is used to sign an entire DNS message.  Unlike TSIG, SIG(0)
          uses public key cryptography rather than shared secrets.
        </t>
        <t>
          The Transport Layer Security protocol suite is also designed
          to provide channel security.  It is entirely possible, for
          example, to perform zone transfers using DNS-over-TLS (<xref
          target="RFC7858"/>).  Furthermore, one can easily imagine
          the distribution of zone files over HTTPS-enabled web servers,
          as well as DNS-over-HTTPS <xref target="dns-over-https"/>.
        </t>
        <t>
          Unfortunately, the protections provided by these channel
          security techniques are ephemeral and are not retained after the
          data transfer is complete.  They can ensure that the client
          receives the data from the expected server, and that the
          data sent by the server is not modified during transmission.
          However, they do not guarantee that the server transmits the
          data as originally published, and do not provide any methods
          to verify data that is read after transmission is complete.
          For example, a name server loading saved zone data upon restart
          cannot guarantee that the on-disk data has not been modified.
          For these reasons, it is preferable to secure the data itself.
        </t>

        <t>
          Why not simply rely on DNSSEC, which provides certain data security guarantees?
          Certainly for zones that are signed, a recipient could
          validate all of the signed RRsets.  Additionally, denial-of-existence
          records can prove that RRsets have not been added or
          removed.  However, not all RRsets
          in a zone are signed.  The design of DNSSEC stipulates that delegations (non-apex NS records) are not signed,
          and neither are any glue records.  Thus, changes to delegation
          and glue records cannot be detected by DNSSEC alone. Furthermore, zones
          that employ NSEC3 with opt-out are susceptible to the
          removal or addition of names between the signed nodes.
          Whereas DNSSEC is primarily designed to protect consumers
          of DNS response messages, this protocol is designed to
          protect consumers of zone files.
        </t>
        <t>
          There are existing tools and protocols that provide data
          security, such as OpenPGP <xref target="RFC4880"/> and S/MIME
          <xref target="RFC3851"/>.  In fact, the internic.net site
          publishes PGP signatures along side the root zone and other
          files available there.  However, this is a detached signature
          with no strong association to the corresponding zone file other
          than its timestamp.  Non-detached signatures are, of course,
          possible, but these necessarily change the format of the file
          being distributed.  That is, a zone file signed with OpenPGP or
          S/MIME no longer looks like a zone file and could not directly
          be loaded into a name server.  Once loaded the signature data
          is lost, so it does not survive further propagation.
        </t>
        <t>
          It seems the desire for data security in DNS zones was envisioned
          as far back as 1997.
          <xref target="RFC2065"/> is an obsoleted specification
          of the first generation DNSSEC Security Extensions.  It
          describes a zone transfer signature, aka AXFR SIG, which
          is similar to the technique proposed by this document.
          That is, it proposes ordering all (signed) RRsets in a zone,
          hashing their contents, and then signing the zone hash.
          The AXFR SIG is described only for use during zone
          transfers.  It did not postulate the need to validate
          zone data distributed outside of the DNS.  Furthermore,
          its successor, <xref target="RFC2535"/>, omits the AXFR
          SIG, while at the same time introducing an IXFR SIG.
        </t>
      </section>

      <section title="Design Overview">
        <t>
          This document introduces a new Resource Record type designed
          to convey a message digest of the content of a zone file.
          The digest is calculated at the time of zone publication.
          Ideally the zone is signed with DNSSEC to guarantee that any
          modifications of the digest can be detected.  The procedures for
          digest calculation and DNSSEC signing are similar (i.e., both
          require the same ordering of RRs) and can be done in parallel.
        </t>
        <t>
          The zone digest is designed to be used on zones that are
          relatively stable and have infrequent updates.  As currently
          specified, the digest is re-calculated over the entire zone
          content each time.  This specification does not provide
          an efficient mechanism for incremental updates of zone
          data.  It does, however, reserve a field in the &RRNAME; record
          for future work to support incremental
          zone digest algorithms (e.g. using Merkle trees).
        </t>
        <!-- t>
          The cryptographic algorithms available for zone digest are
          exactly the same as for DS records.  This avoids the need
          for a separate digest algorithm registry.  Any updates to the
          DS algorithms automatically updates the algorithm status for
          zone digests.
        </t -->
        <t>
          It is expected that verification of a zone digest would be
          implemented in name server software.  That is, a name server
          can verify the zone data it was given and refuse to serve a
          zone which fails verification.  For signed zones, the name
          server needs a trust anchor to perform DNSSEC validation.
          For signed non-root zones, the name server may need to send
          queries to validate a chain-of-trust.  Digest verification
          could also be performed externally.
        </t>
      </section>

      <section title="Use Cases">
        <section title="Root Zone">
          <t>
            The root zone <xref target="InterNIC"/>
            is perhaps the most widely distributed DNS zone on the Internet,
            served by 930 separate instances <xref target="RootServers"/>
            at the time of this writing.  Additionally, many organizations
            configure their own name servers to serve the root zone locally.
            Reasons for doing so include privacy and reduced access time.
            <xref target="RFC7706"/> describes one, but not the only, way
            to do this.  As the root zone spreads beyond its traditional
            deployment boundaries, the need for verification of the
            completeness of the zone contents becomes increasingly
            important.
          </t>
        </section>
        <section title="Providers, Secondaries, and Anycast">
          <t>
            Since its very early days, the developers of the DNS
            recognized the importance of secondary name servers and
            service diversity.  However, they may not have anticipated
            the complexity of modern DNS service provisioning which
            can include  multiple third-party providers and hundreds
            of anycast instances.  Instead of a simple primary-to-secondary
            zone distribution system, today it is possible to have
            multiple levels, multiple parties, and multiple protocols
            involved in the distribution of zone data.  This complexity
            introduces new places for problems to arise.  The zone digest
            protects the integrity of data that flows through such systems.
          </t>
        </section>
        <section title="Response Policy Zones">
          <t>
            DNS Response Policy Zones is "a method of expressing
            DNS response policy information inside specially
            constructed DNS zones..." <xref target="RPZ"/>.  A
            number of companies provide RPZ feeds, which can be
            consumed by name server and firewall products.  Since
            these are zone files, AXFR is often, but not necessarily
            used for transmission.  While RPZ zones can certainly
            be signed with DNSSEC, the data is not queried directly,
            and would not be subject to DNSSEC validation.
          </t>
        </section>
        <section title="Centralized Zone Data Service">
          <t>
            ICANN operates the Centralized Zone Data Service <xref
            target="CZDS"/>, which is a repository of top-level
            domain zone files.  Users request access to the system,
            and to individual zones, and are then able to download
            zone data for certain uses.  Adding a zone digest to
            these would provide CZDS users with assurances that the
            data has not been modified.  Note that &RRNAME; could
            be added to CZDS zone data independently of the zone
            served by production name servers.
          </t>
        </section>
        <section title="General Purpose Comparison Check">
          <t>
            Since the zone digest does not depend on presentation
            format, it could be used to compare multiple copies of
            a zone received from different sources, or copies
            generated by different processes.
          </t>
        </section>
      </section>

      <section title="Requirements Language">
        <t>
          The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
          "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
          "OPTIONAL" in this document are to be interpreted as described in
          BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
          capitals, as shown here.
        </t>
      </section>
    </section>

    <section title="The &RRNAME; Resource Record" anchor="rrtype">
      <t>
        This section describes the &RRNAME; Resource Record, including its fields, wire format, and presentation format.
        The Type value for the &RRNAME; RR is TBD.
        The &RRNAME; RR is class independent.
        The RDATA of the resource record consists of three fields: Serial, Digest Type, and Digest.
      </t>
      <t>
        FOR DISCUSSION: This document is currently written as though
        a zone MUST NOT contain more than one &RRNAME; RR.
        Having exactly one &RRNAME; record per zone simplifies this
        protocol and eliminates confusion around downgrade attacks, at
        the expense of algorithm agility.
      </t>

      <section title="&RRNAME; RDATA Wire Format">
        <t>The &RRNAME; RDATA wire format is encoded as follows:</t>
        <figure><artwork align="left"><![CDATA[
                     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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Serial                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Digest Type  |   Reserved    |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
|                             Digest                            |
/                                                               /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

        <section title="The Serial Field">
          <t>
            The Serial field is a 32-bit unsigned integer in network
            order. It is equal to the serial number from the zone's
            SOA record (<xref target="RFC1035"/> section 3.3.13) for
            which the message digest was generated.
          </t>
        </section>

        <section title="The Digest Type Field">
          <t>
            The Digest Type field is an 8-bit unsigned integer, with
            meaning equivalent to the Digest Type of the DS resource record,
            as defined in section 5.1.3 of <xref target="RFC4034"/> and
            values found in the IANA protocol registry for DS digest types
            <xref target="iana-ds-digest-types"/>.
          </t>
          <t>
            The status of &RRNAME; digest types (e.g., mandatory,
            optional, deprecated), however, are independent of
            those for DS digest types.
          </t>
          <t>
            At the time of this writing the following digest types are defined:
          </t>
            <texttable anchor="digest-type-table" title="&RRNAME; Digest Types">
            <ttcol align="left">Value</ttcol>
            <ttcol align="left">Description</ttcol>
            <ttcol align="left">Status</ttcol>
            <ttcol align="left">Reference</ttcol>
            <c>1</c>
            <c>SHA1</c>
            <c>Deprecated</c>
            <c><xref target="RFC3658"/></c>
            <c>2</c>
            <c>SHA256</c>
            <c>Mandatory</c>
            <c><xref target="RFC4509"/></c>
            <c>3</c>
            <c>GOST R 34.11-94</c>
            <c>Deprecated</c>
            <c><xref target="RFC5933"/></c>
            <c>4</c>
            <c>SHA384</c>
            <c>Optional</c>
            <c><xref target="RFC6605"/></c>
            </texttable>
        </section>

        <section title="The Reserved Field">
          <t>
            The Reserved field is an 8-bit unsigned integer, which is always set to zero.  This
            field is reserved for future work to support efficient incremental updates.
          </t>
        </section>

        <section title="The Digest Field">
          <t>
            The Digest field is a variable-length sequence of octets
            containing the message digest.  <xref target="calculating"/>
            describes how to calculate the digest for a zone.
            <xref target="verifying"/> describes how to use the digest to
            verify the contents of a zone.
          </t>
        </section>
      </section>

      <section title="&RRNAME; Presentation Format">
        <t>
          The presentation format of the RDATA portion is as follows:
        </t>
        <t>
          The Serial field MUST be represented as an unsigned decimal integer.
        </t>
        <t>
          The Reserved field MUST be represented as an unsigned decimal integer set to zero.
        </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="&RRNAME; Example">
        <t>
          The following example shows a &RRNAME; RR.
        </t>
        <figure><artwork>
example.com. 86400 IN &RRNAME; 2018031500 4 0 (
    FEBE3D4CE2EC2FFA4BA99D46CD69D6D29711E55217057BEE
    7EB1A7B641A47BA7FED2DD5B97AE499FAFA4F22C6BD647DE )
        </artwork></figure>
      </section>

    </section>

    <section title="Calculating the Digest" anchor="calculating">
      <section title="Canonical Format and Ordering">
        <t>
          Calculation of the zone digest REQUIRES the RRs in a zone
          to be processed in a consistent format and ordering.  Correct ordering
          of the zone depends on (1) ordering of owner names in the zone, (2)
          ordering of RRsets with the same owner name, and (3) ordering of
          RRs within an RRset.
        </t>
        <t>
          This specification adopts DNSSEC's canonical ordering for names
          (Section 6.1 of <xref target="RFC4034"/>),
          and canonical ordering for RRs within an RRset
          (Section 6.3 of <xref target="RFC4034"/>).
          It also adopts DNSSEC's canonical RR form
          (Section 6.2 of <xref target="RFC4034"/>).
          However, since DNSSEC does not define a canonical ordering for RRsets
          having the same owner name, that ordering is defined here.
        </t>
        <section title="Order of RRsets Having the Same Owner Name">
          <t>
            For the purposes of calculating the zone digest, RRsets having
            the same owner name MUST be numerically ordered by their numeric RR TYPE.
          </t>
        </section>
        <section title="Special Considerations for SOA RRs">
          <t>
            When AXFR is used to transfer zone data, the first and last
            records are always the SOA RR (<xref target="RFC5936"/>
            Section 2.2).  Because of this, zone files on disk often
            contain two SOA RRs.  When calculating the zone digest, the first
            SOA RR MUST be included and any subsequent SOA RRs MUST NOT be included.
          </t>
          <t>
            Additionally, per established practices, the SOA record
            is generally the first record in a zone file.  However,
            according to the requirement to sort RRsets with the
            same owner name by type, the SOA RR (type value 6) will not
            be first in the digest calculation.  The zone's 
            NS RRset (type value 2) at the apex MUST be processed before
            the SOA RR.
          </t>
        </section>
      </section>
      <section title="Add &RRNAME; Placeholder">
        <t>
          In preparation for calculating the zone digest, any existing &RRNAME; record
          at the zone apex
          MUST first be deleted.
        </t>
        <t>
          FOR DISCUSSION: Should non-apex &RRNAME; records be allowed in a zone?  Or forbidden?
        </t>
        <t>
          Prior to calculation of the digest, and prior to signing with
          DNSSEC, a placeholder &RRNAME; record MUST be added to the
          zone apex.  This serves two purposes: (1) it allows the digest to cover
          the Serial, Reserved, and Digest Type field values, and (2) ensures that 
          appropriate denial-of-existence (NSEC, NSEC3) records are created
          if the zone is signed with DNSSEC.
        </t>
        <t>
          It is RECOMMENDED that the TTL of the &RRNAME; record match the TTL of the SOA.
        </t>
        <t>
          In the placeholder record, the Serial field MUST be
          set to the current SOA Serial.  The Digest Type field MUST be set
          to the value for the chosen digest algorithm. The Digest
          field MUST be set to all zeroes and of length appropriate
          for the chosen digest algorithm.
        </t>
      </section>
      <section title="Optionally Sign the Zone">
        <t>
          Following addition of the placeholder record, the zone MAY be signed with DNSSEC.
          Note that when the digest calculation is complete, and the &RRNAME; record is updated,
          the signature(s) for that record MUST be recalculated and
          updated as well.
          Therefore, the signer is not required to calculate a signature over the placeholder record at
          this step in the process, but it is harmless to do so.
        </t>
      </section>
      <section title="Calculate the Digest" anchor="calculating-calculating">
        <t>
          The zone digest is calculated by concatenating the canonical on-the-wire
          form (without name compression) of all RRs in the zone, in the order described
          above, subject to the inclusion/exclusion rules described
          below, and then applying the digest algorithm:
        </t>
        <figure><artwork>
digest = digest_algorithm( RR(1) | RR(2) | RR(3) | ... )

where "|" denotes concatenation, and

RR(i) = owner | type | class | TTL | RDATA length | RDATA
        </artwork></figure>
        <section title="Inclusion/Exclusion Rules">
          <t>
            When calculating the digest, the following inclusion/exclusion rules apply:
            <list style="symbols">
            <t>All records in the zone including glue records MUST be included.</t>
            <t>More than one SOA MUST NOT be included.</t>
            <t>The placeholder &RRNAME; RR MUST be included.</t>
            <t>If the zone is signed, DNSSEC RRs MUST be included, except:</t>
            <t>The RRSIG covering &RRNAME; MUST NOT be included.</t>
            </list>
          </t>
          <t>
            FOR DISCUSSION: How should the protocol handle occluded
            data?  A DNAME/NS record can occlude existing data,
            technically making it out-of-zone.  However, BIND (and
            others) will load and AXFR such occluded data.
          </t>
        </section>
      </section>
      <section title="Update &RRNAME; RR">
        <t>
          Once the zone digest has been calculated, its value is then copied to the Digest field of the &RRNAME; record.
        </t>
        <t>
          If the zone is signed with DNSSEC, the appropriate RRSIG records covering the &RRNAME;
          record MUST then be added or updated.  Because the &RRNAME; placeholder was added prior to signing,
          the zone will already have the appropriate denial-of-existence (NSEC, NSEC3) records.
        </t>
        <t>
          Some implementations of incremental DNSSEC signing might
          update the zone's serial number for each resigning.
          However, to preserve the calculated digest, generation
          of the &RRNAME; signature at this time MUST NOT also
          result in a change of the SOA serial number.
        </t>
      </section>
    </section>

    <section title="Verifying Zone Message Digest" anchor="verifying">
      <t>
        The recipient of a zone that has a message digest record can verify the zone
        by calculating the digest as follows:
      </t>
      <t>
        <list style="numbers">
          <t anchor="verify-check-dnssec">
            The verifier SHOULD first determine
            whether or not to expect DNSSEC records in the zone.
            This can be done by examining locally configured trust
            anchors, or querying for (and validating) DS RRs in the
            parent zone.  For zones that are provably unsigned,
            digest validation continues at step <xref target="verify-check-digest-count" format="counter"/> below.
          </t>
          <t anchor="verify-check-existence">
            For zones that are provably signed, the existence of
            the apex &RRNAME; record MUST be verified.  If the &RRNAME;
            record provably does not exist, digest verification
            cannot be done.  If the &RRNAME; record does provably
            exist, but is not found in the zone, digest verification
            MUST NOT be considered successful.
          </t>
          <t>
            For zones that are provably signed, the SOA RR and
            &RRNAME; RR(set) MUST have valid signatures, chaining
            up to a trust anchor.  If DNSSEC validation of the SOA
            or &RRNAME; records fails, digest verification MUST NOT
            be considered successful.
          </t>
          <t anchor="verify-check-digest-count">
            If the zone contains more than one apex &RRNAME; RR, digest verification
            MUST NOT be considered successful.
          </t>
          <t anchor="verify-check-serials">
            The SOA Serial field MUST exactly match the &RRNAME;
            Serial field.  If the fields to not match, digest
            verification MUST NOT be considered successful.
          </t>
          <t>
            The &RRNAME; Digest Type field MUST be checked.  If the
            verifier does not support the given digest type, it
            SHOULD report that the zone digest could not be verified
            due to an unsupported algorithm.
          </t>
          <t>
            The zone digest is calculated using the algorithm
            described in <xref target="calculating-calculating"/>.
            Note in particular that the digested &RRNAME;
            RR MUST be a placeholder and
            its RRSIGs MUST NOT be included in the digest.
          </t>
          <t>
            The calculated digest is compared to the received digest.
            If the two digest values match, verification is considered
            successful.  Otherwise, verification MUST NOT be
            considered successful.
          </t>
          <t>
            If the zone is to be served and transferred, the original
            (not placeholder) &RRNAME; RR MUST be sent to recipients
            so that downstream clients can verify the zone.
          </t>
        </list>
      </t>
    </section>

    <section title="Scope of Experimentation">
      <t>
        This memo is published as an Experimental RFC.  The purpose
        of the experimental period is to provide the community time
        to analyze and evaluate to the methods defined in this
        document, particularly with regard to the wide variety of
        DNS zones in use on the Internet.
      </t>
      <t>
        Additionally, the &RRNAME; record defined in this document
        includes a Reserved field.  The authors have a particular
        future use in mind for this field, namely to support efficient
        digests in large, dynamic zones.  We intend to conduct
        future experiments using Merkle trees of varying depth.  The
        choice of tree depth can be encoded in this reserved
        field.
      </t>
      <t>
        FOR DISCUSSION: The authors are willing to remove the
        Reserved field from this specification if the working group
        would prefer it.  It would mean, however, that a future
        version of this protocol designed to efficiently support
        large, dynamic zones would most likely require a new RR
        type.
      </t>
      <t>
        The duration of the experiment is expected to be no less
        than two years from the publication of this document.  If
        the experiment is successful, it is expected that the
        findings of the experiment will result in an updated document
        for Standards Track approval.
      </t>

    </section>

    <section title="IANA Considerations" anchor="iana">
      <section title="&RRNAME; RRtype">
        <t>
          This document uses a new DNS RR type, &RRNAME;, whose
          value TBD has been allocated by IANA from the "Resource
          Record (RR) TYPEs" subregistry of the "Domain Name System
          (DNS) Parameters" registry.
        </t>
      </section>
      <section title="&RRNAME; Digest Type">
        <t>
          The &RRNAME; Digest Type field has the same values as the DS RR Digest Type field, but
          with independent implementation status.
          Therefore, this document expects IANA will create a new
          "&RRNAME; Digest Types" registry.
        </t>
      </section>
    </section>

    <section title="Security Considerations" anchor="security">
      <section title="Attacks Against the Zone Digest">
        <t>
          The zone digest allows the receiver to verify that the zone
          contents haven't been modified since the zone was
          generated/published.  Verification is strongest when the
          zone is also signed with DNSSEC.
          An attacker, whose goal is to modify zone content before
          it is used by the victim, may consider a number of different
          approaches.
        </t>
        <t>
          The attacker might perform a downgrade attack to an unsigned
          zone.  This is why <xref target="verifying"/> RECOMMENDS
          that the verifier determine whether or not to expect DNSSEC
          signatures for the zone in step <xref target="verify-check-dnssec" format="counter"/>.
        </t>
        <t>
          The attacker might perform a downgrade attack by removing
          the &RRNAME; record.  This is why <xref target="verifying"/>
          REQUIRES that the verifier checks DNSSEC denial-of-existence
          proofs in step <xref target="verify-check-existence" format="counter"/>.
        </t>
        <t>
          The attacker might alter the Digest Type or Digest fields
          of the &RRNAME; record.  Such modifications are detectable
          only with DNSSEC validation.
        </t>
      </section>
      <section title="Attacks Utilizing the Zone Digest">
        <t>
          Nothing in this specification prevents clients from making,
          and servers from responding to, &RRNAME; queries.  One might
          consider how well &RRNAME; responses could be used in
          a distributed denial-of-service amplification attack.
        </t>
        <t>
          The &RRNAME; RR is moderately sized, much like the DS RR.
          A single &RRNAME; RR contributes approximately 40 to 65
          octets to a DNS response, for currently defined digest
          types.  Certainly other query types result in larger
          amplification effects (i.e., DNSKEY).
        </t>
      </section>
    </section>

    <section title="Privacy Considerations" anchor="privacy">
      <t>This specification has no impacts on user privacy.</t>
    </section>

    <section title="Acknowledgments" anchor="acknowledgments">
      <t>
        The authors wish to thank David Blacka, Scott Hollenbeck, and Rick Wilhelm
        for providing feedback on early drafts of this document.  Additionally, they
	thank
	Joe Abley,
        Mark Andrews,
	Olafur Gudmundsson,
	Paul Hoffman,
	Evan Hunt,
	Shumon Huque,
        Tatuya Jinmei,
	Burt Kaliski,
        Shane Kerr,
	Matt Larson,
	John Levine,
	Ed Lewis,
	Mukund Sivaraman,
	Petr Spacek,
	Ondrej Sury,
	Florian Weimer,
	Tim Wicinksi,
	Paul Wouters,
        and other members of
        the dnsop working group
        for their input.
      </t>
    </section>

    <section anchor="Implementation" title="Implementation Status">
      <section title="Authors' Implementation">
        <t>
          The authors have an open source implementation in
          C, using the ldns library <xref target="ldns-zone-digest"/>.  This implementation is able to
          perform the following functions:
          <list style="symbols">
          <t>Read an input zone file and output a zone file with the &RRNAME; placeholder.</t>
          <t>Compute zone digest over signed zone file and update the &RRNAME; record.</t>
          <t>Re-compute DNSSEC signature over the &RRNAME; record.</t>
          <t>Verify the zone digest from an input zone file.</t>
          </list>
          This implementation does not:
          <list style="symbols">
          <t>Perform DNSSEC validation of the &RRNAME; record.</t>
          <t>Support the Gost digest algorithm.</t>
          <t>Output the &RRNAME; record in its defined presentation format.</t>
          </list>
        </t>
      </section>
      <section title="Shane Kerr's Implementation">
        <t> Shane Kerr wrote an implementation of this specification during the IETF 102 hackathon
          <xref target="ZoneDigestHackathon"/>.  This implementation is in Python and is able to
          perform the following functions:
          <list style="symbols">
          <t>Read an input zone file and a output zone file with &RRNAME; record.</t>
          <t>Verify the zone digest from an input zone file.</t>
          <t>Output the &RRNAME; record in its defined presentation format.</t>
          <t>Generate Gost digests.</t>
          </list>
          This implementation does not:
          <list style="symbols">
          <t>Re-compute DNSSEC signature over the &RRNAME; record.</t>
          <t>Perform DNSSEC validation of the &RRNAME; record.</t>
          </list>
        </t>
      </section>
    </section>

    <section anchor="Changes" title="Change Log">
      <t>RFC Editor: Please remove this section.</t>
      <t>This section lists substantial changes to the document as it is being worked on.</t>
      <t>From -00 to -01:
      <list style="symbols">
        <t>Removed requirement to sort by RR CLASS.</t>
        <t>Added Kumari and Hardaker as coauthors.</t>
        <t>Added Change Log section.</t>
        <t>Minor clarifications and grammatical edits.</t>
      </list></t>
      <t>From -01 to -02:
      <list style="symbols">
        <t>Emphasize desire for data security over channel security.</t>
        <t>Expanded motivation into its own subsection.</t>
        <t>Removed discussion topic whether or not to include serial in &RRNAME;.</t>
        <t>Clarified that a zone's NS records always sort before the SOA record.</t>
        <t>Clarified that all records in the zone must are digested, except as specified in
        the exclusion rules.</t>
        <t>Added for discussion out-of-zone and occluded records.</t>
        <t>Clarified that update of &RRNAME; signature must not cause a serial number change.</t>
        <t>Added persons to acknowledgments.</t>
      </list></t>
      <t>From -02 to -03:
      <list style="symbols">
        <t>Added recommendation to set &RRNAME; TTL to SOA TTL.</t>
        <t>Clarified that digest input uses uncompressed names.</t>
        <t>Updated Implementations section.</t>
        <t>Changed intended status from Standards Track to Experimental and added Scope of Experiment section.</t>
        <t>Updated Motivation, Introduction, and Design Overview sections in response to working group discussion.</t>
        <t>Gave &RRNAME; digest types their own status, separate from DS digest types.  Request IANA to create a registry.</t>
        <t>Added Reserved field for future work supporting dynamic updates.</t>
        <t>Be more rigorous about having just ONE &RRNAME; record in the zone.</t>
        <t>Expanded use cases.</t>
      </list></t>
      <t>From -03 to -04:
      <list style="symbols">
       <t>Added an appendix with example zones and digests.</t>
       <t>Clarified that only apex &RRNAME; RRs shall be processed.</t>
      </list></t>
    </section>

  </middle>
  <back>

    <references title="Normative References">
    &RFC2119;
    &RFC1034;
    &RFC1035;
    &RFC4034;
    &RFC3658;
    &RFC4509;
    &RFC5933;
    &RFC6605;
    &RFC8174;

     <reference anchor="iana-ds-digest-types" target="https://www.iana.org/assignments/ds-rr-types/ds-rr-types.xhtml">
        <front>
          <title>Delegation Signer (DS) Resource Record (RR) Type Digest Algorithms</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date year="2012" month="April" day="3"/>
        </front>
     </reference>

    </references>

    <references title="Informative References">
    &RFC1995;
    &RFC2065;
    &RFC2136;
    &RFC2535;
    &RFC2845;
    &RFC2931;
    &RFC3851;
    &RFC4880;
    &RFC5936;
    &RFC7706;
    &RFC7719;
    &RFC7858;

     <reference anchor="InterNIC" target="ftp://ftp.internic.net/domain/">
        <front>
          <title>InterNIC FTP site</title>
          <author>
            <organization>ICANN</organization>
          </author>
          <date year="2018" month="May" day="31"/>
        </front>
     </reference>

     <reference anchor="RootServers" target="https://www.root-servers.org/">
        <front>
          <title>Root Server Technical Operations</title>
          <author>
            <organization>Root Server Operators</organization>
          </author>
          <date year="2018" month="July" day="2"/>
        </front>
     </reference>

     <reference anchor="dns-over-https" target="https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-12">
        <front>
          <title>DNS Queries over HTTPS (DoH)</title>
          <author initials="P." surname="Hoffman" fullname="Paul Hoffman">
            <organization>ICANN</organization>
          </author>
          <author initials="P." surname="McManus" fullname="Patrick McManus">
            <organization>Mozilla</organization>
          </author>
          <date year="2018" month="June" day="27"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-doh-dns-over-https-12" />
     </reference>

     <reference anchor="ldns-zone-digest" target="https://github.com/verisign/ldns-zone-digest">
        <front>
          <title>Implementation of Message Digests for DNS Zones using the ldns library</title>
          <author>
            <organization>Verisign</organization>
          </author>
          <date year="2018" month="July" day="20"/>
        </front>
     </reference>

     <reference anchor="ZoneDigestHackathon" target="https://github.com/shane-kerr/ZoneDigestHackathon">
        <front>
          <title>Prototype implementation of &RRNAME; for the IETF 102 hackathon in Python</title>
          <author initials="S." surname="Kerr" fullname="Shane Kerr">
          </author>
          <date year="2018" month="July" day="14"/>
        </front>
     </reference>

     <reference anchor="CZDS" target="https://czds.icann.org/">
        <front>
          <title>Centralized Zone Data Service</title>
          <author>
            <organization>Internet Corporation for Assigned Names and Numbers</organization>
          </author>
          <date year="2018" month="October" day="5"/>
        </front>
     </reference>

     <reference anchor="RPZ" target="https://tools.ietf.org/html/draft-vixie-dnsop-dns-rpz-00">
        <front>
          <title>DNS Response Policy Zones (RPZ)</title>
          <author initials="P." surname="Vixie" fullname="Paul Vixie">
            <organization>Farsight Security, Inc.</organization>
          </author>
          <author initials="V." surname="Schryver" fullname="Vernon Schryver">
            <organization>Rhyolite Software, LLC</organization>
          </author>
          <date year="2018" month="June" day="21"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-vixie-dnsop-dns-rpz-00" />
     </reference>

    </references>

    <section title="Example Zones With Digests">
      <t>
        This appendex contains example zone files with accurate &RRNAME; records.  These can be used to
        verify an implementation of the zone digest protocol.
      </t>

      <section title="Simple EXAMPLE Zone">
        <t>
          Here, the EXAMPLE zone contains an SOA record, NS and glue records, and a &RRNAME; record for digest type 2 (SHA256).
        </t>
        <figure><artwork align="left"><![CDATA[
example.        86400   IN      SOA     ns1 admin 2018031900 (
                                        1800 900 604800 86400 )
                86400   IN      NS      ns1
                86400   IN      NS      ns2
                86400   IN      ZONEMD  2018031900 2 0 (
                                        2d1dc6806312e79b
                                        a86e64bad290e1c1
                                        61f4ee8cb9d490e9
                                        5a00d1e686b12826 )
ns1     3600    IN      A       127.0.0.1
ns2     3600    IN      AAAA    ::1
]]></artwork></figure>
      </section>

      <section title="The uri.arpa Zone">
        <t>
          The URI.ARPA zone retreived 2018-10-21.
        </t>
        <figure><artwork align="left"><![CDATA[
; <<>> DiG 9.9.4 <<>> @lax.xfr.dns.icann.org uri.arpa axfr
; (2 servers found)
;; global options: +cmd
uri.arpa.         3600    IN      SOA     sns.dns.icann.org. (
    noc.dns.icann.org. 2018100702 10800 3600 1209600 3600 )
uri.arpa.         3600    IN      RRSIG   NSEC 8 2 3600 (
    20181028142623 20181007205525 47155 uri.arpa. 
    eEC4w/oXLR1Epwgv4MBiDtSBsXhqrJVvJWUpbX8XpetAvD35bxwNCUTi 
    /pAJVUXefegWeiriD2rkTgCBCMmn7YQIm3gdR+HjY/+o3BXNQnz97f+e 
    HAE9EDDzoNVfL1PyV/2fde9tDeUuAGVVwmD399NGq9jWYMRpyri2kysr q/g= )
uri.arpa.         86400   IN      RRSIG   NS 8 2 86400 (
    20181028172020 20181007175821 47155 uri.arpa. 
    ATyV2A2A8ZoggC+68u4GuP5MOUuR+2rr3eWOkEU55zAHld/7FiBxl4ln 
    4byJYy7NudUwlMOEXajqFZE7DVl8PpcvrP3HeeGaVzKqaWj+aus0jbKF 
    Bsvs2b1qDZemBfkz/IfAhUTJKnto0vSUicJKfItu0GjyYNJCz2CqEuGD Wxc= )
uri.arpa.         600     IN      RRSIG   MX 8 2 600 (
    20181028170556 20181007175821 47155 uri.arpa. 
    e7/r3KXDohX1lyVavetFFObp8fB8aXT76HnN9KCQDxSnSghNM83UQV0t 
    lTtD8JVeN1mCvcNFZpagwIgB7XhTtm6Beur/m5ES+4uSnVeS6Q66HBZK 
    A3mR95IpevuVIZvvJ+GcCAQpBo6KRODYvJ/c/ZG6sfYWkZ7qg/Em5/+3 4UI= )
uri.arpa.         3600    IN      RRSIG   DNSKEY 8 2 3600 (
    20181028152832 20181007175821 15796 uri.arpa. 
    nzpbnh0OqsgBBP8St28pLvPEQ3wZAUdEBuUwil+rtjjWlYYiqjPxZ286 
    XF4Rq1usfV5x71jZz5IqswOaQgia91ylodFpLuXD6FTGs2nXGhNKkg1V 
    chHgtwj70mXU72GefVgo8TxrFYzxuEFP5ZTP92t97FVWVVyyFd86sbbR 
    6DZj3uA2wEvqBVLECgJLrMQ9Yy7MueJl3UA4h4E6zO2JY9Yp0W9woq0B 
    dqkkwYTwzogyYffPmGAJG91RJ2h6cHtFjEZe2MnaY2glqniZ0WT9vXXd 
    uFPm0KD9U77Ac+ZtctAF9tsZwSdAoL365E2L1usZbA+K0BnPPqGFJRJk 
    5R0A1w== )
uri.arpa.         3600    IN      RRSIG   DNSKEY 8 2 3600 (
    20181028152832 20181007175821 55480 uri.arpa. 
    lWtQV/5szQjkXmbcD47/+rOW8kJPksRFHlzxxmzt906+DBYyfrH6uq5X 
    nHvrUlQO6M12uhqDeL+bDFVgqSpNy+42/OaZvaK3J8EzPZVBHPJykKMV 
    63T83aAiJrAyHzOaEdmzLCpalqcEE2ImzlLHSafManRfJL8Yuv+JDZFj 
    2WDWfEcUuwkmIZWX11zxp+DxwzyUlRl7x4+ok5iKZWIg5UnBAf6B8T75 
    WnXzlhCw3F2pXI0a5LYg71L3Tp/xhjN6Yy9jGlIRf5BjB59X2zra3a2R 
    PkI09SSnuEwHyF1mDaV5BmQrLGRnCjvwXA7ho2m+vv4SP5dUdXf+GTeA 
    1HeBfw== )
uri.arpa.         3600    IN      RRSIG   SOA 8 2 3600 (
    20181029114753 20181008222815 47155 uri.arpa. 
    qn8yBNoHDjGdT79U2Wu9IIahoS0YPOgYP8lG+qwPcrZ1BwGiHywuoUa2 
    Mx6BWZlg+HDyaxj2iOmox+IIqoUHhXUbO7IUkJFlgrOKCgAR2twDHrXu 
    9BUQHy9SoV16wYm3kBTEPyxW5FFm8vcdnKAF7sxSY8BbaYNpRIEjDx4A JUc= )
uri.arpa.         3600    IN      NSEC    ftp.uri.arpa. NS SOA (
    MX RRSIG NSEC DNSKEY )
uri.arpa.         86400   IN      NS      a.iana-servers.net. 
uri.arpa.         86400   IN      NS      b.iana-servers.net. 
uri.arpa.         86400   IN      NS      c.iana-servers.net. 
uri.arpa.         86400   IN      NS      ns2.lacnic.net. 
uri.arpa.         86400   IN      NS      sec3.apnic.net. 
uri.arpa.         600     IN      MX      10 pechora.icann.org. 
uri.arpa.         3600    IN      DNSKEY  256 3 8 (
    AwEAAcBi7tSart2J599zbYWspMNGN70IBWb4ziqyQYH9MTB/VCz6WyUK 
    uXunwiJJbbQ3bcLqTLWEw134B6cTMHrZpjTAb5WAwg4XcWUu8mdcPTiL 
    Bl6qVRlRD0WiFCTzuYUfkwsh1Rbr7rvrxSQhF5rh71zSpwV5jjjp65Wx 
    SdJjlH0B )
uri.arpa.         3600    IN      DNSKEY  257 3 8 (
    AwEAAbNVv6ulgRdO31MtAehz7j3ALRjwZglWesnzvllQl/+hBRZr9QoY 
    cO2I+DkO4Q1NKxox4DUIxj8SxPO3GwDuOFR9q2/CFi2O0mZjafbdYtWc 
    3zSdBbi3q0cwCIx7GuG9eqlL+pg7mdk9dgdNZfHwB0LnqTD8ebLPsrO/ 
    Id7kBaiqYOfMlZnh2fp+2h6OOJZHtY0DK1UlssyB5PKsE0tVzo5s6zo9 
    iXKe5u+8WTMaGDY49vG80JPAKE7ezMiH/NZcUMiE0PRZ8D3foq2dYuS5 
    ym+vA83Z7v8A+Rwh4UGnjxKB8zmr803V0ASAmHz/gwH5Vb0nH+LObwFt 
    l3wpbp+Wpm8= )
uri.arpa.         3600    IN      DNSKEY  257 3 8 (
    AwEAAbwnFTakCvaUKsXji4mgmxZUJi1IygbnGahbkmFEa0L16J+TchKR 
    wcgzVfsxUGa2MmeA4hgkAooC3uy+tTmoMsgy8uq/JAj24DjiHzd46LfD 
    FK/qMidVqFpYSHeq2Vv5ojkuIsx4oe4KsafGWYNOczKZgH5loGjN2aJG 
    mrIm++XCphOskgCsQYl65MIzuXffzJyxlAuts+ecAIiVeqRaqQfr8LRU 
    7wIsLxinXirprtQrbor+EtvlHp9qXE6ARTZDzf4jvsNpKvLFZtmxzFf3 
    e/UJz5eHjpwDSiZL7xE8aE1o1nGfPtJx9ZnB3bapltaJ5wY+5XOCKgY0 
    xmJVvNQlwdE= )
ftp.uri.arpa.     3600    IN      RRSIG   NSEC 8 3 3600 (
    20181028080856 20181007175821 47155 uri.arpa. 
    HClGAqPxzkYkAT7Q/QNtQeB6YrkP6EPOef+9Qo5/2zngwAewXEAQiyF9 
    jD1USJiroM11QqBS3v3aIdW/LXORs4Ez3hLcKNO1cKHsOuWAqzmE+BPP 
    Arfh8N95jqh/q6vpaB9UtMkQ53tM2fYU1GszOLN0knxbHgDHAh2axMGH lqM= )
ftp.uri.arpa.     604800  IN      RRSIG   NAPTR 8 3 604800 (
    20181028103644 20181007205525 47155 uri.arpa. 
    WoLi+vZzkxaoLr2IGZnwkRvcDf6KxiWQd1WZP/U+AWnV+7MiqsWPZaf0 
    9toRErerGoFOiOASNxZjBGJrRgjmavOM9U+LZSconP9zrNFd4dIu6kp5 
    YxlQJ0uHOvx1ZHFCj6lAt1ACUIw04ZhMydTmi27c8MzEOMepvn7iH7r7 k7k= )
ftp.uri.arpa.     3600    IN      NSEC    http.uri.arpa. NAPTR (
    RRSIG NSEC )
ftp.uri.arpa.     604800  IN      NAPTR   0 0 "" "" (
    "!^ftp://([^:/?#]*).*$!\\1!i" . )
http.uri.arpa.    3600    IN      RRSIG   NSEC 8 3 3600 (
    20181029010647 20181007175821 47155 uri.arpa. 
    U03NntQ73LHWpfLmUK8nMsqkwVsOGW2KdsyuHYAjqQSZvKbtmbv7HBmE 
    H1+Ii3Z+wtfdMZBy5aC/6sHdx69BfZJs16xumycMlAy6325DKTQbIMN+ 
    ift9GrKBC7cgCd2msF/uzSrYxxg4MJQzBPvlkwXnY3b7eJSlIXisBIn7 3b8= )
http.uri.arpa.    604800  IN      RRSIG   NAPTR 8 3 604800 (
    20181029011815 20181007205525 47155 uri.arpa. 
    T7mRrdag+WSmG+n22mtBSQ/0Y3v+rdDnfQV90LN5Fq32N5K2iYFajF7F 
    Tp56oOznytfcL4fHrqOE0wRc9NWOCCUec9C7Wa1gJQcllEvgoAM+L6f0 
    RsEjWq6+9jvlLKMXQv0xQuMX17338uoD/xiAFQSnDbiQKxwWMqVAimv5 7Zs= )
http.uri.arpa.    3600    IN      NSEC    mailto.uri.arpa. NAPTR (
    RRSIG NSEC )
http.uri.arpa.    604800  IN      NAPTR   0 0 "" "" (
    "!^http://([^:/?#]*).*$!\\1!i" . )
mailto.uri.arpa.  3600    IN      RRSIG   NSEC 8 3 3600 (
    20181028110727 20181007175821 47155 uri.arpa. 
    GvxzVL85rEukwGqtuLxek9ipwjBMfTOFIEyJ7afC8HxVMs6mfFa/nEM/ 
    IdFvvFg+lcYoJSQYuSAVYFl3xPbgrxVSLK125QutCFMdC/YjuZEnq5cl 
    fQciMRD7R3+znZfm8d8u/snLV9w4D+lTBZrJJUBe1Efc8vum5vvV7819 ZoY= )
mailto.uri.arpa.  604800  IN      RRSIG   NAPTR 8 3 604800 (
    20181028141825 20181007205525 47155 uri.arpa. 
    MaADUgc3fc5v++M0YmqjGk3jBdfIA5RuP62hUSlPsFZO4k37erjIGCfF 
    j+g84yc+QgbSde0PQHszl9fE/+SU5ZXiS9YdcbzSZxp2erFpZOTchrpg 
    916T4vx6i59scodjb0l6bDyZ+mtIPrc1w6b4hUyOUTsDQoAJYxdfEuMg Vy4= )
mailto.uri.arpa.  3600    IN      NSEC    urn.uri.arpa. NAPTR (
    RRSIG NSEC )
mailto.uri.arpa.  604800  IN      NAPTR   0 0 "" "" (
    "!^mailto:(.*)@(.*)$!\\2!i" . )
urn.uri.arpa.     3600    IN      RRSIG   NSEC 8 3 3600 (
    20181028123243 20181007175821 47155 uri.arpa. 
    Hgsw4Deops1O8uWyELGe6hpR/OEqCnTHvahlwiQkHhO5CSEQrbhmFAWe 
    UOkmGAdTEYrSz+skLRQuITRMwzyFf4oUkZihGyhZyzHbcxWfuDc/Pd/9 
    DSl56gdeBwy1evn5wBTms8yWQVkNtphbJH395gRqZuaJs3LD/qTyJ5Dp LvA= )
urn.uri.arpa.     604800  IN      RRSIG   NAPTR 8 3 604800 (
    20181029071816 20181007205525 47155 uri.arpa. 
    ALIZD0vBqAQQt40GQ0Efaj8OCyE9xSRJRdyvyn/H/wZVXFRFKrQYrLAS 
    D/K7q6CMTOxTRCu2J8yes63WJiaJEdnh+dscXzZkmOg4n5PsgZbkvUSW 
    BiGtxvz5jNncM0xVbkjbtByrvJQAO1cU1mnlDKe1FmVB1uLpVdA9Ib4J hMU= )
urn.uri.arpa.     3600    IN      NSEC    uri.arpa. NAPTR RRSIG (
    NSEC )
urn.uri.arpa.     604800  IN      NAPTR   0 0 "" "" (
    "/urn:([^:]+)/\\1/i" . )
uri.arpa.         3600    IN      SOA     sns.dns.icann.org. (
    noc.dns.icann.org. 2018100702 10800 3600 1209600 3600 )
;; Query time: 66 msec
;; SERVER: 192.0.32.132#53(192.0.32.132)
;; WHEN: Sun Oct 21 20:39:28 UTC 2018
;; XFR size: 34 records (messages 1, bytes 3941)
uri.arpa.       3600    IN      ZONEMD  2018100702 2 0 (
    a921ef5658f31bc6ac3e72a000f8d60a1a933153cf1df8be8153925
    60c665b14 )
]]></artwork></figure>
      </section>

      <section title="The ROOT-SERVERS.NET Zone with SHA384">
        <t>
          The ROOT-SERVERS.NET zone retreived 2018-10-21.
        </t>
        <figure><artwork align="left"><![CDATA[
root-servers.net.     3600000 IN  SOA     a.root-servers.net. (
    nstld.verisign-grs.com. 2018091100 14400 7200 1209600 3600000 )
root-servers.net.     3600000 IN  NS      a.root-servers.net.
root-servers.net.     3600000 IN  NS      b.root-servers.net.
root-servers.net.     3600000 IN  NS      c.root-servers.net.
root-servers.net.     3600000 IN  NS      d.root-servers.net.
root-servers.net.     3600000 IN  NS      e.root-servers.net.
root-servers.net.     3600000 IN  NS      f.root-servers.net.
root-servers.net.     3600000 IN  NS      g.root-servers.net.
root-servers.net.     3600000 IN  NS      h.root-servers.net.
root-servers.net.     3600000 IN  NS      i.root-servers.net.
root-servers.net.     3600000 IN  NS      j.root-servers.net.
root-servers.net.     3600000 IN  NS      k.root-servers.net.
root-servers.net.     3600000 IN  NS      l.root-servers.net.
root-servers.net.     3600000 IN  NS      m.root-servers.net.
a.root-servers.net.   3600000 IN  AAAA    2001:503:ba3e::2:30
a.root-servers.net.   3600000 IN  A       198.41.0.4
b.root-servers.net.   3600000 IN  MX      20 mail.isi.edu.
b.root-servers.net.   3600000 IN  AAAA    2001:500:200::b
b.root-servers.net.   3600000 IN  A       199.9.14.201
c.root-servers.net.   3600000 IN  AAAA    2001:500:2::c
c.root-servers.net.   3600000 IN  A       192.33.4.12
d.root-servers.net.   3600000 IN  AAAA    2001:500:2d::d
d.root-servers.net.   3600000 IN  A       199.7.91.13
e.root-servers.net.   3600000 IN  AAAA    2001:500:a8::e
e.root-servers.net.   3600000 IN  A       192.203.230.10
f.root-servers.net.   3600000 IN  AAAA    2001:500:2f::f
f.root-servers.net.   3600000 IN  A       192.5.5.241
g.root-servers.net.   3600000 IN  AAAA    2001:500:12::d0d
g.root-servers.net.   3600000 IN  A       192.112.36.4
h.root-servers.net.   3600000 IN  AAAA    2001:500:1::53
h.root-servers.net.   3600000 IN  A       198.97.190.53
i.root-servers.net.   3600000 IN  MX      10 mx.i.root-servers.org.
i.root-servers.net.   3600000 IN  AAAA    2001:7fe::53
i.root-servers.net.   3600000 IN  A       192.36.148.17
j.root-servers.net.   3600000 IN  AAAA    2001:503:c27::2:30
j.root-servers.net.   3600000 IN  A       192.58.128.30
k.root-servers.net.   3600000 IN  AAAA    2001:7fd::1
k.root-servers.net.   3600000 IN  A       193.0.14.129
l.root-servers.net.   3600000 IN  AAAA    2001:500:9f::42
l.root-servers.net.   3600000 IN  A       199.7.83.42
m.root-servers.net.   3600000 IN  AAAA    2001:dc3::35
m.root-servers.net.   3600000 IN  A       202.12.27.33
root-servers.net.     3600000 IN  SOA     a.root-servers.net. (
    nstld.verisign-grs.com. 2018091100 14400 7200 1209600 3600000 )
root-servers.net.     3600000 IN  ZONEMD  2018091100 4 0 (
    327b45e1f70a95eb83e1b9aaaa0642b9e1d0f007db5ce45858cd336a79
    78a0239f4517edfd11445f2b9f70900816fdfd )
]]></artwork></figure>
      </section>
    </section>

  </back>
</rfc>
