<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     submissionType="IETF"
     category="std"
     ipr="trust200902"
     docName="draft-powers-dnsop-expire-00"
     version="3">

  <front>
    <title abbrev="DNS EXPIRE Opcode">Authenticated Cache-Expiration Opcode (EXPIRE)</title>

    <author fullname="Duane Powers" initials="D." surname="Powers">
      <organization>cnTnc LLC</organization>
      <address>
        <email>dpowers@cntnc.com</email>
      </address>
    </author>

    <date year="2025" month="November" day="20"/>

    <abstract>
      <t>
        This document defines a new DNS message opcode, EXPIRE, which
        enables an authenticated authoritative operator to request
        immediate deletion of a specific RRset from a resolver's cache.
        EXPIRE messages may be authenticated either through DNSSEC
        signatures or through resolver control-channel authentication
        (for example TSIG, mutually authenticated TLS, IPsec, or local
        trust policy). EXPIRE applies only to resolver cache and MUST
        NOT modify authoritative data.
      </t>
      <t>
        Resolvers validate authority, apply mandatory replay protection
        using SOA serials when available or equivalent replay-mitigation
        mechanisms, and flush the targeted RRset upon successful
        validation. EXPIRE provides a deterministic, authenticated
        mechanism for cache rollback and correction across both signed
        (DNSSEC) and unsigned (internal) DNS deployments.
      </t>
    </abstract>
  </front>

  <middle>

    <!-- 1. Introduction -->
    <section anchor="intro" numbered="true">
      <name>Introduction</name>

      <t>
        DNS caching improves performance but complicates rollback and
        repair when resolvers retain stale or erroneous RRsets. The DNS
        protocol includes no authenticated in-band mechanism for a
        resolver to flush a cached RRset before TTL expiration.
      </t>

      <t>
        This document defines a new DNS opcode, EXPIRE, which allows an
        authoritative operator, authenticated via DNSSEC or a resolver
        control channel, to instruct a resolver to delete a specific
        RRset from its cache. EXPIRE uses RFC 2136-style RRset deletion
        semantics (QCLASS=NONE) but applies strictly to resolver cache.
      </t>

      <t>
        EXPIRE is intended to be deployable in both DNSSEC-signed
        environments and non-DNSSEC internal environments that already
        rely on TSIG, mutually authenticated TLS, IPsec, or equivalent
        control-channel mechanisms. This dual-profile model is analogous
        to the operational deployment of RFC 2136 Dynamic Update.
      </t>

      <section anchor="terminology" numbered="true">
        <name>Terminology</name>
        <t>EXPIRE: The DNS opcode defined in this document.</t>
        <t>RRset: A set of resource records sharing owner name, type, and class.</t>
        <t>Resolver: A recursive DNS server that maintains a cache.</t>
        <t>Validating Resolver: A resolver that performs DNSSEC validation.</t>
        <t>Control Channel: An authenticated resolver interface such as TSIG,
           mutually authenticated TLS, IPsec, or an implementation-specific
           management channel.</t>
        <t>Authoritative Operator: Entity controlling publication of zone data.</t>
      </section>
    </section>

    <!-- 2. Requirements Language -->
    <section numbered="true">
      <name>Requirements Language</name>
      <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>

    <!-- 3. Motivation -->
    <section numbered="true">
      <name>Motivation</name>

      <t>
        Operators often require immediate cache correction due to
        erroneous publication, emergency failover, rollback of TLSA or
        SRV records, stale negative cache entries, or long TTLs.
        Existing mechanisms such as low TTLs, aggressive resigning, or
        manual outreach to resolver operators are operationally
        insufficient.
      </t>

      <t>
        DNSSEC already defines a cryptographic authority model for
        signed zones. For internal, unsigned zones, operators typically
        rely on authenticated control channels (TSIG, mutually
        authenticated TLS, IPsec, or local ACLs) to manage resolvers.
        EXPIRE therefore defines two authentication profiles: a DNSSEC
        profile and a control-channel profile, each providing a
        standards-aligned way to authenticate EXPIRE without introducing
        new trust assumptions.
      </t>

      <t>
        A particularly critical operational scenario involves rapid
        NS record updates during DDoS or routing incidents. When
        authoritative operators update NS records to redirect traffic
        away from attacked infrastructure, cached NS RRsets at
        resolvers may persist for the duration of their TTL -- potentially
        hours or days. EXPIRE enables authenticated, immediate cache
        invalidation of NS records, allowing traffic redirection in
        near-real-time during operational emergencies when seconds
        matter.
      </t>
    </section>

    <!-- 4. EXPIRE Opcode and Message Format -->
    <section anchor="message-format" numbered="true">
      <name>EXPIRE Opcode and Message Format</name>

      <section anchor="opcode" numbered="true">
        <name>Opcode Definition</name>
        <t>
          IANA is requested to assign a new DNS Opcode, EXPIRE (TBD),
          from the DNS OpCode registry.
        </t>
      </section>

      <section anchor="overview" numbered="true">
        <name>Message Overview</name>
        <t>
          EXPIRE uses the DNS UPDATE message structure defined in
          RFC 2136 for RRset deletion semantics (QCLASS=NONE). EXPIRE
          messages operate exclusively on resolver cache and MUST NOT
          modify authoritative data.
        </t>
      </section>

      <section anchor="question-section" numbered="true">
        <name>Question Section</name>

        <t>
          The Question Section of an EXPIRE message MUST contain:
        </t>
        <ul>
          <li>QNAME: owner of the RRset to be expired;</li>
          <li>QTYPE: RRType to be expired;</li>
          <li>QCLASS: NONE (RFC 2136 RRset deletion semantics).</li>
        </ul>

        <t>
          Resolvers receiving an EXPIRE message with QCLASS not equal to
          NONE MUST discard the message.
        </t>
      </section>

      <section anchor="answer-section" numbered="true">
        <name>Answer (Update) Section</name>

        <t>
          The content of the Answer Section depends on the
          authentication profile in use.
        </t>

        <dl>
          <dt><strong>DNSSEC Authentication Profile</strong></dt>
          <dd>
            <t>
              When DNSSEC is used, the Answer Section MUST contain:
            </t>
            <ul>
              <li>
                a synthetic RRset whose owner name, type, and class match
                the Question;
              </li>
              <li>
                a valid RRSIG covering that RRset.
              </li>
            </ul>
            <t>
              Resolvers MUST validate the RRSIG but MUST ignore the
              RDATA and TTL of the synthetic RRset. No comparison
              against cached RDATA is performed.
            </t>
          </dd>

          <dt><strong>Control-Channel Authentication Profile</strong></dt>
          <dd>
            <t>
              When control-channel authentication is used, the Answer
              Section MAY be omitted. If present, it MAY contain a
              synthetic RRset, but no RRSIG is required and no DNSSEC
              fields need to be included.
            </t>
            <t>
              A resolver implementing the control-channel profile MUST
              accept an EXPIRE message whose Question Section is the
              only populated section, assuming the control-channel
              authentication has succeeded.
            </t>
          </dd>
        </dl>

        <t>
          This distinction allows DNSSEC environments to obtain in-band
          cryptographic proof of authority, while non-DNSSEC deployments
          avoid unnecessary overhead and may treat EXPIRE as a
          remote cache-management operation.
        </t>
      </section>

      <section anchor="additional-section" numbered="true">
        <name>Additional Section - SOA for Replay Protection</name>

        <t>
          The use of the SOA RRset in the Additional Section depends on
          the authentication profile.
        </t>

        <dl>
          <dt><strong>DNSSEC Authentication Profile</strong></dt>
          <dd>
            <t>
              The Additional Section MUST contain the zone's SOA RRset
              and a valid RRSIG covering it. The resolver MUST validate
              the SOA RRSIG and use the SOA serial number as the basis
              for replay protection as described in Section 5.4.
            </t>
          </dd>

          <dt><strong>Control-Channel Authentication Profile</strong></dt>
          <dd>
            <t>
              The Additional Section MAY contain an unsigned SOA RRset.
              If present, the resolver SHOULD use the SOA serial for
              replay protection as described in Section 5.4.
            </t>
            <t>
              If no SOA is present, the resolver MAY rely on
              implementation-defined replay-protection mechanisms
              (nonces, per-sender counters, authenticated-session state,
              or other mechanisms providing equivalent or stronger
              guarantees).
            </t>
          </dd>
        </dl>
      </section>

      <section anchor="wildcard" numbered="true">
        <name>Wildcard Prohibition</name>
        <t>
          EXPIRE messages MUST NOT contain wildcard owner names in the
          Question Section. Resolvers receiving EXPIRE messages with
          wildcard QNAMEs MUST discard them.
        </t>
      </section>

      <section anchor="capability" numbered="true">
        <name>No Capability Signaling</name>

        <t>
          EXPIRE requires no explicit capability negotiation. Resolvers
          that do not implement EXPIRE SHOULD silently discard EXPIRE
          messages. Legacy resolvers MAY return NOTIMP or REFUSED in
          accordance with RFC 1035. Authoritative operators and control
          tools MUST treat NOTIMP, REFUSED, and silent discard as
          equivalent indicators of non-support. Resolvers that implement
          EXPIRE but reject it for policy reasons (e.g., rate-limiting,
          sender not authorized) SHOULD return SERVFAIL or NOTAUTH rather
          than NOTIMP.
        </t>
      </section>
    </section>

    <!-- 5. Resolver Behavior -->
    <section anchor="resolver-behavior" numbered="true">
      <name>Resolver Behavior</name>

      <section anchor="auth-profiles" numbered="true">
        <name>Authentication Profiles</name>

        <t>
          A resolver that implements EXPIRE MUST authenticate EXPIRE
          messages using at least one of the following profiles:
        </t>
        <ul>
          <li>
            the DNSSEC Authentication Profile (Section 5.2) for
            signed zones; and/or
          </li>
          <li>
            the Control-Channel Authentication Profile (Section 5.3) for
            environments that do not deploy DNSSEC or that prefer
            resolver management channels.
          </li>
        </ul>

        <t>
          Deployments MAY enable both profiles concurrently. If any
          enabled profile successfully authenticates the EXPIRE message,
          the resolver MAY proceed with EXPIRE processing.
        </t>
      </section>

      <section anchor="dnssec-profile" numbered="true">
        <name>DNSSEC Authentication Profile</name>

        <t>
          A resolver using the DNSSEC profile MUST perform DNSSEC
          validation of the EXPIRE message components as follows:
        </t>
        <ul>
          <li>
            validate the RRSIG over the synthetic RRset in the Answer
            Section;
          </li>
          <li>
            validate the RRSIG over the SOA RRset in the Additional
            Section;
          </li>
          <li>
            confirm that the signer DNSKEY is authoritative for the zone
            according to the resolver's DNSSEC validation policy;
          </li>
          <li>
            confirm that each RRSIG is within its validity interval;
          </li>
          <li>
            verify the cryptographic correctness of all signatures.
          </li>
        </ul>

        <t>
          Any DNSSEC validation failure under this profile MUST cause
          the resolver to reject the EXPIRE message.
        </t>
      </section>

      <section anchor="control-profile" numbered="true">
        <name>Control-Channel Authentication Profile</name>

        <t>
          For zones that are unsigned or environments that do not deploy
          DNSSEC, resolvers MAY authenticate EXPIRE messages using an
          authenticated control channel. This model is equivalent to the
          trust assumptions used for RFC 2136 Dynamic UPDATE, RNDC, and
          other resolver management operations.
        </t>

        <t>
          Acceptable forms of control-channel authentication include,
          but are not limited to:
        </t>
        <ul>
          <li>TSIG (RFC 8945) shared-secret authentication;</li>
          <li>DNS-over-TLS (RFC 7858) with mutual TLS authentication;</li>
          <li>DNS-over-HTTPS (RFC 8484) with client certificate authentication;</li>
          <li>IPsec-authenticated channels;</li>
          <li>
            locally configured trust anchors or resolver policy
            designating specific senders as authorized EXPIRE sources.
          </li>
        </ul>

        <t>
          When control-channel authentication is used, resolvers MAY
          bypass DNSSEC validation of the EXPIRE message, including the
          synthetic RRset and SOA, but MUST still apply replay
          protection whenever SOA data or an equivalent replay mechanism
          is available (Section 5.4).
        </t>

        <t>
          Implementations SHOULD provide configuration allowing
          administrators to specify "authorized EXPIRE senders" per zone
          or per resolver instance, using source addresses, TSIG key
          identities, TLS client identities, or other locally meaningful
          attributes.
        </t>
      </section>

      <section anchor="replay" numbered="true">
        <name>Replay Protection</name>

        <t>
          Resolvers implementing EXPIRE MUST implement replay protection
          to prevent stale EXPIRE messages from deleting more recent
          data. SOA serial numbers SHOULD be used when available.
        </t>

        <section anchor="soa-rules" numbered="true">
          <name>SOA Availability Rules</name>

          <t>
            When SOA-based replay protection is used, the resolver
            applies the following rules:
          </t>

          <ul>
            <li>
              If the targeted RRset is cached but the SOA for the
              corresponding zone is not cached, the resolver MAY perform
              a one-time SOA query in order to obtain the current SOA
              serial and apply serial-based replay protection.
            </li>

            <li>
              If neither the targeted RRset nor the SOA is cached, the
              resolver SHOULD treat the EXPIRE message as a no-op and
              MUST NOT initiate an SOA query solely due to receiving
              EXPIRE.
            </li>

            <li>
              If both the targeted RRset and the SOA are present in
              cache, the resolver MUST apply serial-based replay
              protection by comparing the EXPIRE-associated SOA serial
              (when provided) or a newly fetched SOA serial with the
              cached SOA serial, according to its policy.
            </li>
          </ul>

          <t>
            If the resolver determines, by local policy, that the
            EXPIRE-associated serial is older than the cached serial, it
            MUST reject the EXPIRE message as a replay.
          </t>
        </section>

        <section anchor="alt-replay" numbered="true">
          <name>Alternative Replay Mechanisms</name>

          <t>
            Under the control-channel profile, resolvers MAY implement
            alternative replay-protection mechanisms, such as nonces,
            per-sender monotonic counters, or authenticated session
            state, provided these mechanisms offer replay resistance at
            least as strong as SOA-serial-based checks.
          </t>
        </section>
      </section>

      <section anchor="cache-deletion" numbered="true">
        <name>Cache Deletion</name>

        <t>
          A resolver MAY check whether the targeted RRset is present in
          cache prior to performing DNSSEC validation of the synthetic
          RRset. If the RRset is not present, the resolver MAY skip
          DNSSEC validation of the synthetic RRset but MUST still apply
          any available replay protection when SOA data or other replay
          mechanisms are present.
        </t>

        <t>
          Upon successful authentication and replay protection, the
          resolver MUST:
        </t>
        <ul>
          <li>delete the cached RRset (QNAME, QTYPE);</li>
          <li>delete any negative cache entries for (QNAME, QTYPE);</li>
          <li>
            delete synthesized answers where QNAME is the target of a
            CNAME or DNAME chain, and any answers derived from DNAME
            expansions that incorporate the expired RRset.
          </li>
        </ul>

        <t>
          Resolvers MUST NOT delete unrelated RRsets, including other
          RRTypes at QNAME, CNAME/DNAME records pointing to QNAME, or
          RRsets under other owner names.
        </t>
      </section>

      <section anchor="no-rrset-matching" numbered="true">
        <name>No RRset Matching</name>

        <t>
          Resolvers MUST NOT compare EXPIRE RDATA to cached RDATA, MUST
          NOT require matching RRSIGs, and MUST NOT consider TTL or
          RRset cardinality when deciding whether to delete the cached
          RRset. EXPIRE is a cache control signal, not a replacement
          data payload.
        </t>
      </section>

      <section anchor="followup-queries" numbered="true">
        <name>Follow-Up Queries</name>

        <t>
          After processing EXPIRE, the resolver MAY immediately requery
          authoritative servers for (QNAME, QTYPE) or MAY wait until the
          next client query for that name and type. This behavior is an
          implementation choice and does not affect protocol
          correctness.
        </t>
      </section>

      <section anchor="response-behavior" numbered="true">
        <name>Response Behavior</name>

        <t>
          Responding to EXPIRE messages is OPTIONAL. If a resolver
          chooses to respond, it SHOULD use the following RCODEs for
          interoperability:
        </t>

        <dl>
          <dt>NOERROR</dt>
          <dd>
            <t>
              The EXPIRE message was successfully processed. This
              includes cases where the targeted RRset was not present in
              cache.
            </t>
          </dd>

          <dt>NOTAUTH</dt>
          <dd>
            <t>
              Authentication failed (DNSSEC validation failed, control
              channel authentication failed, or sender was not in the
              authorized-sender list for this resolver or zone).
            </t>
          </dd>

          <dt>NOTIMP / REFUSED / FORMERR</dt>
          <dd>
            <t>
              The resolver does not support EXPIRE or rejected the
              message as unsupported. Authoritative operators and
              control tools MUST treat these codes as equivalent to
              non-support.
            </t>
          </dd>
        </dl>

        <t>
          Silent discard is permitted for all failure conditions.
        </t>
      </section>
    </section>

    <!-- 6. Authoritative Behavior -->
    <section anchor="auth-behavior" numbered="true">
      <name>Authoritative Behavior</name>

      <t>
        Authoritative servers or associated front ends (such as DNS
        load balancers or policy engines) MAY originate EXPIRE messages.
        EXPIRE MUST NOT modify authoritative zone data. A valid DNSSEC
        signature or authenticated control channel proves authority,
        depending on the chosen authentication profile.
      </t>

      <t>
        In control-channel deployments, EXPIRE is conceptually similar
        to existing RNDC or management-API operations that flush cache
        entries, but uses a standardized on-the-wire format suitable for
        multi-vendor and cross-network use.
      </t>
    </section>

    <!-- 7. Transport -->
    <section anchor="transport" numbered="true">
      <name>Transport</name>

      <t>
        EXPIRE uses UDP by default. TCP MAY be used when message size,
        operational policy, or transport characteristics require it.
      </t>

      <t>
        When EXPIRE is carried over DNS-over-TLS (RFC 7858) or
        DNS-over-HTTPS (RFC 8484) with mutual TLS authentication (client
        certificate authentication), the control-channel authentication
        profile MAY rely on the TLS client identity as proof of
        authorization. Server-only TLS authentication (typical for public
        resolvers) does NOT satisfy the control-channel authentication
        requirements and MUST NOT be accepted as authorization for EXPIRE
        unless combined with another authentication mechanism such as
        TSIG or the DNSSEC authentication profile.
      </t>

      <t>
        EXPIRE does not require a persistent channel or an explicit
        acknowledgement beyond the optional DNS response described in
        Section 5.8. Standard DNS transport rules apply.
      </t>
    </section>

    <!-- 8. Security Considerations -->
    <section anchor="security" numbered="true">
      <name>Security Considerations</name>

      <t>
        EXPIRE introduces no new authority beyond DNSSEC and existing
        resolver control-channel mechanisms. Under the DNSSEC
        authentication profile, EXPIRE is limited by the same trust
        model and failure modes as DNSSEC validation. Under the
        control-channel profile, EXPIRE inherits the security properties
        of the resolver's management channel (TSIG, mutually
        authenticated TLS, IPsec, or local trust policy).
      </t>

      <section anchor="timing" numbered="true">
        <name>Timing-Based Cache Probing</name>

        <t>
          EXPIRE may enable inference of cache state through timing
          analysis if resolvers exhibit observable behavioral
          differences when an RRset is present versus absent in cache.
          However, similar probing is already possible using ordinary
          DNS queries and cache-priming techniques. Resolvers SHOULD
          avoid introducing additional timing side channels beyond those
          inherent in normal DNS operation.
        </t>
      </section>

      <section anchor="control-channel-trust" numbered="true">
        <name>Control-Channel Trust Model</name>

        <t>
          The control-channel authentication profile relies on the same
          trust relationships already used for RNDC, Dynamic Update, and
          resolver management APIs. Operators MUST ensure that these
          channels are appropriately protected (for example, with
          strong TSIG keys, mutually authenticated TLS, IPsec, or
          physically or logically isolated management networks).
        </t>
      </section>

      <section anchor="rate-limiting" numbered="true">
        <name>Rate Limiting of EXPIRE Processing</name>

        <t>
          Resolvers SHOULD apply per-zone or per-source rate limiting to
          EXPIRE processing to avoid excessive work caused by repeated
          EXPIRE messages for the same owner name. EXPIRE does not
          introduce a fundamentally new class of denial-of-service
          attack beyond those associated with DNSSEC validation and
          existing management operations, but implementers SHOULD ensure
          that EXPIRE handling remains within typical validation and
          management cost profiles.
        </t>
      </section>
    </section>

    <!-- 9. Operational Considerations -->
    <section anchor="operational" numbered="true">
      <name>Operational Considerations</name>

      <section anchor="authorized-senders" numbered="true">
        <name>Authorized Sender Lists</name>

        <t>
          For the control-channel profile, operators SHOULD explicitly
          configure which entities are authorized to send EXPIRE
          messages, using ACLs, TSIG key lists, TLS client identity
          mappings, or equivalent mechanisms. These lists SHOULD be
          maintained with the same discipline as other management
          access-control lists.
        </t>
      </section>

      <section anchor="unsigned-zones" numbered="true">
        <name>Use in Unsigned Zones</name>

        <t>
          Control-channel authentication allows EXPIRE to be safely
          deployed in internal DNS environments that do not sign their
          zones with DNSSEC. In such environments, EXPIRE behaves as a
          standardized remote cache-expiration command, authenticated by
          the same mechanisms already used for update and management.
        </t>
      </section>

      <section anchor="resolver-clusters" numbered="true">
        <name>Resolver Clusters</name>

        <t>
          In clustered resolver deployments, implementations MAY
          propagate the effects of EXPIRE across cluster members using
          any appropriate internal mechanism. This document does not
          specify intra-cluster propagation semantics and considers them
          implementation-specific.
        </t>
      </section>

      <section anchor="public-private" numbered="true">
        <name>Public vs. Private Deployment</name>

        <t>
          EXPIRE is intended to be safe for both public and private
          deployments. Resolvers and operators that do not wish to
          support EXPIRE simply ignore the opcode or return NOTIMP or
          REFUSED as described in Section 4.4, and no protocol-level
          harm results.
        </t>
      </section>
    </section>

    <!-- 10. IANA Considerations -->
    <section anchor="iana" numbered="true">
      <name>IANA Considerations</name>

      <t>
        IANA is requested to assign a new DNS OpCode value for EXPIRE in
        the "DNS OpCodes" registry. The mnemonic is:
      </t>

      <artwork><![CDATA[
   EXPIRE   (TBD)
]]></artwork>
    </section>

    <!-- 11. Relationship to Existing Mechanisms -->
    <section anchor="alternatives" numbered="true">
      <name>Relationship to Existing Mechanisms</name>

      <section anchor="notify-comparison" numbered="true">
        <name>EXPIRE vs. NOTIFY (RFC 1996)</name>

        <t>
          NOTIFY alerts secondary nameservers of zone changes but does
          not provide cache invalidation for resolvers. NOTIFY targets
          only configured secondary nameservers, whereas EXPIRE can be
          directed to arbitrary resolvers. NOTIFY and EXPIRE serve
          complementary roles and may coexist in DNS deployments.
        </t>
      </section>

      <section anchor="update-comparison" numbered="true">
        <name>EXPIRE vs. Dynamic UPDATE (RFC 2136)</name>

        <t>
          Dynamic UPDATE modifies authoritative zone data and requires
          zone transfer privileges or TSIG-based authorization for zone
          updates. EXPIRE modifies only resolver cache and requires only
          DNSSEC zone-signing authority (under the DNSSEC profile) or
          resolver management-channel access (under the control-channel
          profile). EXPIRE cannot add data or modify zone contents; it
          can only request deletion of cached RRsets.
        </t>

        <t>
          The dual-profile model used by EXPIRE follows the precedent
          established by RFC 2136, which supports both SIG(0) (DNSSEC)
          and TSIG authentication.
        </t>
      </section>

      <section anchor="ttl-comparison" numbered="true">
        <name>EXPIRE vs. Low TTLs</name>

        <t>
          Reducing TTL values increases query load on authoritative
          infrastructure and cannot retroactively affect RRsets that are
          already cached with longer TTLs. EXPIRE provides immediate,
          targeted cache invalidation independent of TTL values and
          avoids the operational overhead of maintaining artificially
          low TTLs for rollback scenarios.
        </t>
      </section>
    </section>

    <!-- 13. Examples -->
    <section anchor="examples" numbered="true">
      <name>Examples</name>

      <section anchor="example-dnssec" numbered="true">
        <name>DNSSEC-Authenticated EXPIRE</name>

        <t>
          The following example illustrates an EXPIRE message using the
          DNSSEC authentication profile. The resolver validates the
          RRSIGs over the synthetic RRset and the SOA.
        </t>

        <artwork><![CDATA[
;; HEADER
OPCODE: EXPIRE
;; QUESTION
example.com.     NONE    A
;; ANSWER
example.com.     0    IN    A      0.0.0.0
example.com.     0    IN    RRSIG  A  <dnssec-signature>
;; ADDITIONAL
example.com.     0    IN    SOA ns1.example.com. admin.example.com. (
                     2025111901 3600 600 604800 300 )
example.com.     0    IN    RRSIG SOA <dnssec-signature>
]]></artwork>
      </section>

      <section anchor="example-control" numbered="true">
        <name>Control-Channel-Authenticated EXPIRE (TSIG)</name>

        <t>
          The following example illustrates an EXPIRE message using the
          control-channel authentication profile with TSIG. The Answer
          Section is empty; the resolver relies on the TSIG-authenticated
          channel and its local policy to authorize the operation.
        </t>

        <artwork><![CDATA[
;; HEADER
OPCODE: EXPIRE
;; QUESTION
example.com.     NONE    A
;; ANSWER
;;   (empty - allowed under control-channel profile)
;; ADDITIONAL
example-key.     TSIG    hmac-sha256.  <tsig-data>
;;   (note: TSIG appears in Additional section per RFC 8945)
;;   (optional unsigned SOA MAY also be included for replay protection)
]]></artwork>
      </section>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2136.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8945.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4033.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4034.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4035.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      </references>

      <references>
        <name>Informative References</name>

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1996.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6891.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7858.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8484.xml"/>
      </references>
    </references>
  </back>

</rfc>
