<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-dnsop-nsec-ttl-05" indexInclude="true" ipr="trust200902" number="9077" prepTime="2021-07-22T22:10:32" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" updates="4034, 4035, 5155, 8198" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-dnsop-nsec-ttl-05" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9077" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="NSEC TTL">NSEC and NSEC3: TTLs and Aggressive Use</title>
    <seriesInfo name="RFC" value="9077" stream="IETF"/>
    <author initials="P." surname="van Dijk" fullname="Peter van Dijk">
      <organization showOnFrontPage="true">PowerDNS</organization>
      <address>
        <postal>
          <street/>
          <city>Den Haag</city>
          <country>Netherlands</country>
        </postal>
        <email>peter.van.dijk@powerdns.com</email>
      </address>
    </author>
    <date month="07" year="2021"/>
    <area>General</area>
    <workgroup>dnsop</workgroup>
    <keyword>DNSSEC</keyword>
    <keyword>negative cache</keyword>
    <keyword>Denial of Existence</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">Due to a combination of unfortunate wording in earlier documents, aggressive use of NSEC and NSEC3 records may deny the existence of names far beyond the intended lifetime of a denial.
 This document changes the definition of the NSEC and NSEC3 TTL to correct that situation.
 This document updates RFCs 4034, 4035, 5155, and 8198.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9077" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2021 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-conventions-and-definitions">Conventions and Definitions</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-nsec-and-nsec3-ttl-changes">NSEC and NSEC3 TTL Changes</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-updates-to-rfc-4034">Updates to RFC 4034</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-updates-to-rfc-4035">Updates to RFC 4035</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-updates-to-rfc-5155">Updates to RFC 5155</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-updates-to-rfc-8198">Updates to RFC 8198</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-zone-operator-consideration">Zone Operator Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-a-note-on-wildcards">A Note on Wildcards</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1"><xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/> defines the TTL of the Start of Authority (SOA) record that must be returned in negative answers (NXDOMAIN or NODATA):</t>
      <blockquote pn="section-1-2">
        <t indent="0" pn="section-1-2.1">The TTL of this record is set from the minimum of the MINIMUM field of the SOA record and the TTL of the SOA itself, and indicates how long a resolver may cache the negative answer.</t>
      </blockquote>
      <t indent="0" pn="section-1-3">Thus, if the TTL of the SOA in the zone is lower than the SOA MINIMUM value (the last number in the SOA record),
 the authoritative server sends that lower value as the TTL of the returned SOA record.
 The resolver always uses the TTL of the returned SOA record when setting the negative TTL in its cache.</t>
      <t indent="0" pn="section-1-4">However, <xref target="RFC4034" sectionFormat="comma" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4034#section-4" derivedContent="RFC4034"/> has this unfortunate text:</t>
      <blockquote pn="section-1-5">
        <t indent="0" pn="section-1-5.1">The NSEC RR <bcp14>SHOULD</bcp14> have the same TTL value as the SOA minimum TTL field. This is in the spirit of negative caching (<xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/>).</t>
      </blockquote>
      <t indent="0" pn="section-1-6">This text, while referring to <xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/>, can cause NSEC records to have much higher TTLs than the appropriate negative TTL for a zone.
 <xref target="RFC5155" format="default" sectionFormat="of" derivedContent="RFC5155"/> contains equivalent text.</t>
      <t indent="0" pn="section-1-7"><xref target="RFC8198" sectionFormat="comma" section="5.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8198#section-5.4" derivedContent="RFC8198"/> tries to correct this:</t>
      <blockquote pn="section-1-8">
        <t indent="0" pn="section-1-8.1"><xref target="RFC2308" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2308#section-5" derivedContent="RFC2308"/> also states that a negative cache entry TTL is taken from the minimum of the SOA.MINIMUM field and SOA's TTL.  This can be less than the TTL of an NSEC or NSEC3 record, since their TTL is equal to the SOA.MINIMUM field (see <xref target="RFC4035" sectionFormat="comma" section="2.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4035#section-2.3" derivedContent="RFC4035"/> and <xref target="RFC5155" sectionFormat="comma" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5155#section-3" derivedContent="RFC5155"/>).</t>
        <t indent="0" pn="section-1-8.2">A resolver that supports aggressive use of NSEC and NSEC3 <bcp14>SHOULD</bcp14> reduce the TTL of NSEC and NSEC3 records to match the SOA.MINIMUM field in the authority section of a negative response, if SOA.MINIMUM is smaller.</t>
      </blockquote>
      <t indent="0" pn="section-1-9">But the NSEC and NSEC3 RRs should, according to <xref target="RFC4034" format="default" sectionFormat="of" derivedContent="RFC4034"/> and  <xref target="RFC5155" format="default" sectionFormat="of" derivedContent="RFC5155"/>, already be at the value of the MINIMUM field in the SOA. Thus, the advice from  <xref target="RFC8198" format="default" sectionFormat="of" derivedContent="RFC8198"/> would not actually change the TTL used for the NSEC and NSEC3 RRs for authoritative servers that follow the RFCs.</t>
      <t indent="0" pn="section-1-10">As a theoretical exercise, consider a top-level domain (TLD) named .example with an SOA record like this:</t>
      <artwork name="" type="" align="left" alt="" pn="section-1-11">
example.    900 IN  SOA primary.example. dnsadmin.example. ( 
                                         1 1800 900 604800 86400 )
</artwork>
      <t indent="0" pn="section-1-12">The SOA record has a 900-second TTL and an 86400-second MINIMUM TTL.
 Negative responses from this zone have a 900-second TTL, but the NSEC or NSEC3 records in those negative responses have an 86400-second TTL.
 If a resolver were to use those NSEC or NSEC3 records aggressively, they would be considered valid for a day instead of the intended 15 minutes.</t>
    </section>
    <section anchor="conventions-and-definitions" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-conventions-and-definitions">Conventions and Definitions</name>
      <t indent="0" pn="section-2-1">
     The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
     "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
     described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
     when, and only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <section anchor="nsec-and-nsec3-ttl-changes" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-nsec-and-nsec3-ttl-changes">NSEC and NSEC3 TTL Changes</name>
      <t indent="0" pn="section-3-1"><xref target="RFC4034" format="default" sectionFormat="of" derivedContent="RFC4034"/>, <xref target="RFC4035" format="default" sectionFormat="of" derivedContent="RFC4035"/>, and <xref target="RFC5155" format="default" sectionFormat="of" derivedContent="RFC5155"/> use the <bcp14>SHOULD</bcp14> requirement level, but they were written prior to the publication of <xref target="RFC8198" format="default" sectionFormat="of" derivedContent="RFC8198"/> when <xref target="RFC4035" format="default" sectionFormat="of" derivedContent="RFC4035"/> still said: </t>
      <blockquote pn="section-3-2">
        <t indent="0" pn="section-3-2.1">However, it seems prudent for resolvers to avoid blocking new authoritative data or synthesizing new data on their own.</t>
      </blockquote>
      <t indent="0" pn="section-3-3">
  
<xref target="RFC8198" format="default" sectionFormat="of" derivedContent="RFC8198"/> updated that text to contain:</t>
      <blockquote pn="section-3-4">
        <t indent="0" pn="section-3-4.1">...DNSSEC-enabled validating resolvers <bcp14>SHOULD</bcp14> use wildcards and NSEC/NSEC3 resource records to generate positive and negative responses until the effective TTLs or signatures for those records expire.</t>
      </blockquote>
      <t indent="0" pn="section-3-5">

This means that the correctness of NSEC and NSEC3 records and their TTLs has become much more important.

Because of that, the updates in this document upgrade the requirement level to <bcp14>MUST</bcp14>.</t>
      <section anchor="updates-to-rfc4034" numbered="true" removeInRFC="false" toc="include" pn="section-3.1">
        <name slugifiedName="name-updates-to-rfc-4034">Updates to RFC 4034</name>
        <t indent="0" pn="section-3.1-1"><xref target="RFC4034" format="default" sectionFormat="of" derivedContent="RFC4034"/> says:</t>
        <blockquote pn="section-3.1-2">
          <t indent="0" pn="section-3.1-2.1">The NSEC RR <bcp14>SHOULD</bcp14> have the same TTL value as the SOA minimum TTL field.  This is in the spirit of negative caching (<xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/>).</t>
        </blockquote>
        <t indent="0" pn="section-3.1-3">This is updated to say:</t>
        <blockquote pn="section-3.1-4">
          <t indent="0" pn="section-3.1-4.1">The TTL of the NSEC RR that is returned <bcp14>MUST</bcp14> be the lesser of the MINIMUM field of the SOA record and the TTL of the SOA itself.  This matches the definition of the TTL for negative responses in <xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/>. Because some signers incrementally update the NSEC chain, a transient inconsistency between the observed and expected TTL <bcp14>MAY</bcp14> exist.</t>
        </blockquote>
      </section>
      <section anchor="updates-to-rfc4035" numbered="true" removeInRFC="false" toc="include" pn="section-3.2">
        <name slugifiedName="name-updates-to-rfc-4035">Updates to RFC 4035</name>
        <t indent="0" pn="section-3.2-1"><xref target="RFC4035" format="default" sectionFormat="of" derivedContent="RFC4035"/> says:</t>
        <blockquote pn="section-3.2-2">
          <t indent="0" pn="section-3.2-2.1">The TTL value for any NSEC RR <bcp14>SHOULD</bcp14> be the same as the minimum TTL value field in the zone SOA RR.</t>
        </blockquote>
        <t indent="0" pn="section-3.2-3">This is updated to say:</t>
        <blockquote pn="section-3.2-4">
          <t indent="0" pn="section-3.2-4.1">The TTL of the NSEC RR that is returned <bcp14>MUST</bcp14> be the lesser of the MINIMUM field of the SOA record and the TTL of the SOA itself.  This matches the definition of the TTL for negative responses in <xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/>. Because some signers incrementally update the NSEC chain, a transient inconsistency between the observed and expected TTL <bcp14>MAY</bcp14> exist.</t>
        </blockquote>
      </section>
      <section anchor="updates-to-rfc5155" numbered="true" removeInRFC="false" toc="include" pn="section-3.3">
        <name slugifiedName="name-updates-to-rfc-5155">Updates to RFC 5155</name>
        <t indent="0" pn="section-3.3-1"><xref target="RFC5155" format="default" sectionFormat="of" derivedContent="RFC5155"/> says:</t>
        <blockquote pn="section-3.3-2">
          <t indent="0" pn="section-3.3-2.1">The NSEC3 RR <bcp14>SHOULD</bcp14> have the same TTL value as the SOA minimum TTL field.  This is in the spirit of negative caching <xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/>.</t>
        </blockquote>
        <t indent="0" pn="section-3.3-3">This is updated to say:</t>
        <blockquote pn="section-3.3-4">
          <t indent="0" pn="section-3.3-4.1">The TTL of the NSEC3 RR that is returned <bcp14>MUST</bcp14> be the lesser of the MINIMUM field of the SOA record and the TTL of the SOA itself.  This matches the definition of the TTL for negative responses in <xref target="RFC2308" format="default" sectionFormat="of" derivedContent="RFC2308"/>. Because some signers incrementally update the NSEC3 chain, a transient inconsistency between the observed and expected TTL <bcp14>MAY</bcp14> exist.</t>
        </blockquote>
        <t indent="0" pn="section-3.3-5">Where <xref target="RFC5155" format="default" sectionFormat="of" derivedContent="RFC5155"/> says:</t>
        <blockquote pn="section-3.3-6">
          <ul empty="false" bare="false" indent="3" spacing="normal" pn="section-3.3-6.1">
            <li pn="section-3.3-6.1.1">The TTL value for any NSEC3 RR <bcp14>SHOULD</bcp14> be the same as the minimum TTL value field in the zone SOA RR.</li>
          </ul>
        </blockquote>
        <t indent="0" pn="section-3.3-7">This is updated to say:</t>
        <blockquote pn="section-3.3-8">
          <ul empty="false" bare="false" indent="3" spacing="normal" pn="section-3.3-8.1">
            <li pn="section-3.3-8.1.1">The TTL value for each NSEC3 RR <bcp14>MUST</bcp14> be the lesser of the MINIMUM field of the zone SOA RR and the TTL of the zone SOA RR itself. Because some signers incrementally update the NSEC3 chain, a transient inconsistency between the observed and expected TTL <bcp14>MAY</bcp14> exist.</li>
          </ul>
        </blockquote>
      </section>
      <section anchor="updates-to-rfc8198" numbered="true" removeInRFC="false" toc="include" pn="section-3.4">
        <name slugifiedName="name-updates-to-rfc-8198">Updates to RFC 8198</name>
        <t indent="0" pn="section-3.4-1"><xref target="RFC8198" sectionFormat="comma" section="5.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8198#section-5.4" derivedContent="RFC8198"/> ("Consideration on TTL") is completely replaced by the following text:</t>
        <blockquote pn="section-3.4-2">
          <t indent="0" pn="section-3.4-2.1">The TTL value of negative information is especially important,
   because newly added domain names cannot be used while the negative
   information is effective.</t>
          <t indent="0" pn="section-3.4-2.2"><xref target="RFC2308" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2308#section-5" derivedContent="RFC2308"/> suggests a maximum default negative cache TTL
   value of 3 hours (10800).  It is <bcp14>RECOMMENDED</bcp14> that validating
   resolvers limit the maximum effective TTL value of negative responses
   (NSEC/NSEC3 RRs) to this same value.</t>
          <t indent="0" pn="section-3.4-2.3">A resolver that supports aggressive use of NSEC and NSEC3 <bcp14>MAY</bcp14>
   limit the TTL of NSEC and NSEC3 records to the lesser of the SOA.MINIMUM
   field and the TTL of the SOA in a response, if present.
   It <bcp14>MAY</bcp14> also use a previously cached SOA for a zone to find these values.</t>
        </blockquote>
        <t indent="0" pn="section-3.4-3">(The third paragraph of the original is removed, and the fourth paragraph is updated to allow resolvers to also take the lesser of the SOA TTL and SOA MINIMUM.)</t>
      </section>
    </section>
    <section anchor="zone-operator-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-zone-operator-consideration">Zone Operator Considerations</name>
      <t indent="0" pn="section-4-1">If signers and DNS servers for a zone cannot immediately be updated to conform to this document, zone operators are encouraged to consider setting their SOA record TTL and the SOA MINIMUM field to the same value.
That way, the TTL used for aggressive NSEC and NSEC3 use matches the SOA TTL for negative responses.</t>
      <t indent="0" pn="section-4-2">Note that some signers might use the SOA TTL or MINIMUM as a default for other values, such as the TTL for DNSKEY records.
Operators should consult documentation before changing values.</t>
      <section anchor="a-note-on-wildcards" numbered="true" removeInRFC="false" toc="include" pn="section-4.1">
        <name slugifiedName="name-a-note-on-wildcards">A Note on Wildcards</name>
        <t indent="0" pn="section-4.1-1">Validating resolvers consider an expanded wildcard valid for the wildcard's TTL, capped by the TTLs of the NSEC or NSEC3 proof that shows that the wildcard expansion is legal.
Thus, changing the TTL of NSEC or NSEC3 records (explicitly, or by implementation of this document implicitly) might affect (shorten) the lifetime of wildcards.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">An attacker can delay future records from appearing in a cache by seeding the cache with queries that cause NSEC or NSEC3 responses to be cached for aggressive use purposes.
This document reduces the impact of that attack in cases where the NSEC or NSEC3 TTL is higher than the zone operator intended.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">IANA has added a reference to this document in the "Resource Record (RR) TYPEs" subregistry of the "Domain Name System (DNS) Parameters" registry for the NSEC and NSEC3 types.</t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-normative-references">Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1997" month="March"/>
          <abstract>
            <t indent="0">In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC2308" target="https://www.rfc-editor.org/info/rfc2308" quoteTitle="true" derivedAnchor="RFC2308">
        <front>
          <title>Negative Caching of DNS Queries (DNS NCACHE)</title>
          <author initials="M." surname="Andrews" fullname="M. Andrews">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1998" month="March"/>
          <abstract>
            <t indent="0">RFC1034 provided a description of how to cache negative responses.  It however had a fundamental flaw in that it did not allow a name server to hand out those cached responses to other resolvers, thereby greatly reducing the effect of the caching.  This document addresses issues raise in the light of experience and replaces RFC1034 Section 4.3.4. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2308"/>
        <seriesInfo name="DOI" value="10.17487/RFC2308"/>
      </reference>
      <reference anchor="RFC4034" target="https://www.rfc-editor.org/info/rfc4034" quoteTitle="true" derivedAnchor="RFC4034">
        <front>
          <title>Resource Records for the DNS Security Extensions</title>
          <author initials="R." surname="Arends" fullname="R. Arends">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="R." surname="Austein" fullname="R. Austein">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Larson" fullname="M. Larson">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="D." surname="Massey" fullname="D. Massey">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="S." surname="Rose" fullname="S. Rose">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2005" month="March"/>
          <abstract>
            <t indent="0">This document is part of a family of documents that describe 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 indent="0"> This document obsoletes RFC 2535 and incorporates changes from all updates to RFC 2535.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4034"/>
        <seriesInfo name="DOI" value="10.17487/RFC4034"/>
      </reference>
      <reference anchor="RFC4035" target="https://www.rfc-editor.org/info/rfc4035" quoteTitle="true" derivedAnchor="RFC4035">
        <front>
          <title>Protocol Modifications for the DNS Security Extensions</title>
          <author initials="R." surname="Arends" fullname="R. Arends">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="R." surname="Austein" fullname="R. Austein">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Larson" fullname="M. Larson">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="D." surname="Massey" fullname="D. Massey">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="S." surname="Rose" fullname="S. Rose">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2005" month="March"/>
          <abstract>
            <t indent="0">This document is part of a family of documents that describe the DNS Security Extensions (DNSSEC).  The DNS Security Extensions are a collection of new resource records and protocol modifications that add data origin authentication and data integrity to the DNS.  This document describes the DNSSEC protocol modifications.  This document defines the concept of a signed zone, along with the requirements for serving and resolving by using DNSSEC.  These techniques allow a security-aware resolver to authenticate both DNS resource records and authoritative DNS error indications. </t>
            <t indent="0"> This document obsoletes RFC 2535 and incorporates changes from all updates to RFC 2535.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4035"/>
        <seriesInfo name="DOI" value="10.17487/RFC4035"/>
      </reference>
      <reference anchor="RFC5155" target="https://www.rfc-editor.org/info/rfc5155" quoteTitle="true" derivedAnchor="RFC5155">
        <front>
          <title>DNS Security (DNSSEC) Hashed Authenticated Denial of Existence</title>
          <author initials="B." surname="Laurie" fullname="B. Laurie">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="G." surname="Sisson" fullname="G. Sisson">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="R." surname="Arends" fullname="R. Arends">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="D." surname="Blacka" fullname="D. Blacka">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2008" month="March"/>
          <abstract>
            <t indent="0">The Domain Name System Security (DNSSEC) Extensions introduced the NSEC resource record (RR) for authenticated denial of existence. This document introduces an alternative resource record, NSEC3, which similarly provides authenticated denial of existence.  However, it also provides measures against zone enumeration and permits gradual expansion of delegation-centric zones.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5155"/>
        <seriesInfo name="DOI" value="10.17487/RFC5155"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="B. Leiba">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2017" month="May"/>
          <abstract>
            <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8198" target="https://www.rfc-editor.org/info/rfc8198" quoteTitle="true" derivedAnchor="RFC8198">
        <front>
          <title>Aggressive Use of DNSSEC-Validated Cache</title>
          <author initials="K." surname="Fujiwara" fullname="K. Fujiwara">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Kato" fullname="A. Kato">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="W." surname="Kumari" fullname="W. Kumari">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2017" month="July"/>
          <abstract>
            <t indent="0">The DNS relies upon caching to scale; however, the cache lookup generally requires an exact match.  This document specifies the use of NSEC/NSEC3 resource records to allow DNSSEC-validating resolvers to generate negative answers within a range and positive answers from wildcards.  This increases performance, decreases latency, decreases resource utilization on both authoritative and recursive servers, and increases privacy.  Also, it may help increase resilience to certain DoS attacks in some circumstances.</t>
            <t indent="0">This document updates RFC 4035 by allowing validating resolvers to generate negative answers based upon NSEC/NSEC3 records and positive answers in the presence of wildcards.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8198"/>
        <seriesInfo name="DOI" value="10.17487/RFC8198"/>
      </reference>
    </references>
    <section anchor="acknowledgements" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">This document was made possible with the help of the following people:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a-2">
        <li pn="section-appendix.a-2.1">
          <t indent="0" pn="section-appendix.a-2.1.1"><contact fullname="Ralph Dolmans"/></t>
        </li>
        <li pn="section-appendix.a-2.2">
          <t indent="0" pn="section-appendix.a-2.2.1"><contact fullname="Warren Kumari"/></t>
        </li>
        <li pn="section-appendix.a-2.3">
          <t indent="0" pn="section-appendix.a-2.3.1"><contact fullname="Matthijs Mekking"/></t>
        </li>
        <li pn="section-appendix.a-2.4">
          <t indent="0" pn="section-appendix.a-2.4.1"><contact fullname="Vladimir Cunat"/></t>
        </li>
        <li pn="section-appendix.a-2.5">
          <t indent="0" pn="section-appendix.a-2.5.1"><contact fullname="Matt Nordhoff"/></t>
        </li>
        <li pn="section-appendix.a-2.6">
          <t indent="0" pn="section-appendix.a-2.6.1"><contact fullname="Josh Soref"/></t>
        </li>
        <li pn="section-appendix.a-2.7">
          <t indent="0" pn="section-appendix.a-2.7.1"><contact fullname="Tim Wicinski"/></t>
        </li>
      </ul>
      <t indent="0" pn="section-appendix.a-3">The author would like to explicitly thank <contact fullname="Paul Hoffman"/> for the extensive reviews, text contributions, and help in navigating WG comments.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="P." surname="van Dijk" fullname="Peter van Dijk">
        <organization showOnFrontPage="true">PowerDNS</organization>
        <address>
          <postal>
            <street/>
            <city>Den Haag</city>
            <country>Netherlands</country>
          </postal>
          <email>peter.van.dijk@powerdns.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
