<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-yorgos-dnsop-dry-run-dnssec-03" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true">

<front>
<title abbrev="dry-run-dnssec">dry-run DNSSEC</title><seriesInfo value="draft-yorgos-dnsop-dry-run-dnssec-03" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="Y." surname="Thessalonikefs" fullname="Yorgos Thessalonikefs"><organization>NLnet Labs</organization><address><postal><street>Science Park 400</street>
<city>Amsterdam</city>
<code>1098 XH</code>
<country>Netherlands</country>
</postal><email>yorgos@nlnetlabs.nl</email>
</address></author><author initials="W." surname="Toorop" fullname="Willem Toorop"><organization>NLnet Labs</organization><address><postal><street>Science Park 400</street>
<city>Amsterdam</city>
<code>1098 XH</code>
<country>Netherlands</country>
</postal><email>willem@nlnetlabs.nl</email>
</address></author><author initials="R." surname="Arends" fullname="Roy Arends"><organization>ICANN</organization><address><postal><street></street>
</postal><email>roy.arends@icann.org</email>
</address></author><date year="2025" month="March" day="3"></date>
<area>Internet</area>
<workgroup>DNSOP Working Group</workgroup>

<abstract>
<t>This document describes a method called &quot;dry-run DNSSEC&quot; that allows for
testing DNSSEC deployments without affecting the DNS service in case of DNSSEC
errors.
It accomplishes that by introducing new DS Type Digest Algorithms that when
used in a DS record,  referred to as dry-run DS, signal to validating resolvers
that dry-run DNSSEC is used for the zone.
DNSSEC errors are then reported with DNS Error Reporting, but any bogus
responses to clients are withheld.
Instead, validating resolvers fallback from dry-run DNSSEC and provide the
response that would have been answered without the presence of a dry-run DS.
A further EDNS option is presented for clients to opt-in for dry-run DNSSEC
errors and allow for end-to-end DNSSEC testing.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>DNSSEC was introduced to provide DNS with data origin authentication and data
integrity.
This brought quite an amount of complexity and fragility to the DNS which in
turn still hinders general adoption.
When an operator decides to publish a newly signed zone there is no way to
realistically check that DNS resolution will not break for the zone.</t>
<t>Recent efforts that improve troubleshooting DNS and DNSSEC include Extended DNS
Errors <xref target="RFC8914"></xref> and DNS Error Reporting <xref target="RFC9567"></xref>.
The former defines error codes that can be attached to a response as EDNS
options.
The latter introduces a way for resolvers to report those error codes to the
zone operators.</t>
<t>This document describes a method called &quot;dry-run DNSSEC&quot; that builds upon the
two aforementioned efforts and gives confidence to operators to adopt DNSSEC by
enabling production testing of a DNSSEC zone.
This is accomplished by introducing new DS Type Digest Algorithms.
The zone operator signs the zone and makes sure that the DS record published on
the parent side uses the specific DS Type Digest Algorithm.
Validating resolvers that don't support the DS Type Digest algorithms ignore it
as per <xref target="RFC6840" sectionFormat="comma" section="5.2"></xref>.
Validating resolvers that do support dry-run DNSSEC make use of <xref target="RFC8914"></xref> and
<xref target="RFC9567"></xref> to report any DNSSEC errors to the zone operator.
If a DNSSEC validation error was due to dry-run DNSSEC, validation restarts by
ignoring the dry-run DS in order to give the real DNS/DNSSEC response to the
client.</t>
<t>This allows real world testing with resolvers that support dry-run DNSSEC
by reporting DNSSEC feedback, without breaking DNS resolution for the domain
under test.</t>
</section>

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

<dl spacing="compact">
<dt>real DS</dt>
<dd>The actual DS record for the delegation.</dd>
<dt>dry-run DS</dt>
<dd>The DS record with the special DS type digest algorithm that signals dry-run
DNSSEC for the delegation.</dd>
<dt>dry-run zone</dt>
<dd>A zone that is DNSSEC signed but uses a dry-run DS to signal the use of the
dry-run DNSSEC method.</dd>
<dt>dry-run parent zone</dt>
<dd>A zone that supports dry-run DNSSEC for its delegation, that is support for
publishing the dry-run DS.</dd>
<dt>dry-run resolver</dt>
<dd>A validating resolver that supports dry-run DNSSEC.</dd>
<dt>wet-run client</dt>
<dd>A client that has opted-in to receive the actual DNSSEC errors from the
upstream validating resolver instead of the insecure answers.</dd>
</dl>
</section>

<section anchor="overview"><name>Overview</name>
<t>Dry-run DNSSEC builds upon three previous experiences namely DMARC <xref target="RFC7489"></xref>,
Root Key Trust Anchor Sentinel <xref target="RFC8509"></xref> and Signaling Trust Anchor Knowledge
<xref target="RFC8145"></xref>.
The former enabled email operators to verify their configuration with real
email servers by getting DMARC reports and understanding the impact on email
delivery their configuration would have before committing to enable DMARC.
Experience with the latter two showed that with only a small, up to date
resolver population, the signaling is already quite substantial.</t>
<t>Dry-run DNSSEC offers zone operators the means to test newly signed zones and
a turn-key action to conclude testing and commit to the tested DNSSEC records.
Operators that want to use dry-run DNSSEC SHOULD support <xref target="RFC9567"></xref> and have a
reporting agent in place to receive the error reports.</t>
<t>The only change from normal operations when signing a zone with dry-run
DNSSEC is to not publish the real DS record on the parent but publish the
dry-run DS record instead.
See <xref target="signaling"></xref> for more information on the dry-run DS record itself, and
<xref target="provisioning"></xref> on the parent-child communication for the dry-run DS record.</t>
<t>Validating resolvers that don't support the DS Type Digest algorithm ignore it
as per <xref target="RFC6840" sectionFormat="comma" section="5.2"></xref>.
Validating resolvers that support dry-run DNSSEC are signaled to treat the
zone as a dry-run zone.
Validating resolvers that support dry-run DNSSEC SHOULD support <xref target="RFC9567"></xref> in
order to report possible errors back to the operators.</t>
<t>Valid answers as a result of dry-run validation yield authentic data (AD)
responses and clients that expect the AD flag can already benefit from the
transition.</t>
<t>Invalid answers yield the response that would have been answered when no
dry-run DS would have been present in the parent instead of SERVFAIL.
For zones that had only dry-run DS RRs in the parent, an invalid answer yields
an insecure response.
This is not proper data integrity but the delegation SHOULD NOT be considered
DNSSEC signed at this point.
For zones that had other non dry-run DS RRs in the parent, validation MUST
restart by using those RRs instead.</t>
<t><xref target="RFC9567"></xref> is used for invalid answers and it can generate reports
for errors in dry-run DNSSEC zones.
This helps with monitoring potential DNS breakage when testing a DNSSEC
configuration for a zone.
This is also the main purpose of dry-run DNSSEC.</t>
<t>The newly signed zone is publicly deployed but DNSSEC configuration errors
cannot break DNS resolution yet.
DNS Error Reports can pinpoint potential issues back to the operator.
When the operator is confident that the DNSSEC configuration under test does
not introduce DNS breakage, the turn-key action to conclude testing and commit
to the singed zone is to replace the dry-run DS with the real DS record on the
parent zone.</t>

<section anchor="use-cases"><name>Use cases</name>
<t>Dry-run DNSSEC can be used to test different DNSSEC scenarios.
From adopting DNSSEC for a zone, which is the main goal of this document, to
testing experimental DNSSEC configurations and key rollovers.
Dry-run resolvers generate error reports in case of validation errors in
dry-run zones and they fallback to the non-dry-run part of the zones to
complete validation.</t>

<section anchor="dnssec-adoption"><name>DNSSEC adoption</name>
<t>This use case tests DNSSEC adoption for an insecure zone.
The zone is signed and a single dry-run DS record is published on the parent.
Validation errors yield error reports but invalid answers do not result in
SERVFAIL responses to clients.</t>
</section>

<section anchor="experimental-dnssec-configuration"><name>Experimental DNSSEC configuration</name>
<t>This use case can test a completely different DNSSEC configuration for an
already signed zone.
The zone is doubly signed and there are at least two DS RRs in the parent zone.
Dry-run resolvers try to use the dry-run part of the zone.</t>
</section>

<section anchor="key-rollover"><name>Key rollover</name>
<t>As with the experimental case above, but for the benefit of testing a key
rollover before actually committing to it.
The rollover test can be initiated from the zone operator by introducing the
real DS also as a dry-run DS as the first step of the test.
Normal key rollover procedures can continue by introducing the new key as
another dry-run DS record.
Dry-run resolvers try to use the dry-run part of the zone which now resembles
a key rollover.
When testing was successful, the key rollover procedure can be repeated in the
real DS space with the same keys.</t>
<t>A special key rollover case could be for the root.
This can be made possible by specifying the dry-run DS Digest Type in the
&lt;DigestType&gt; element in <eref target="http://data.iana.org/root-anchors/root-anchors.xml">http://data.iana.org/root-anchors/root-anchors.xml</eref> or a
different way of indicating in the xml file.</t>
</section>
</section>

<section anchor="fallback"><name>Fallback behavior</name>
<t>In case of validation errors with the dry-run DSes, dry-run resolvers fallback
to the real DSes and restart validation.</t>
<t>If there are no real DSes, as in the DNSSEC adoption use case, the zone
is resolved as insecure.</t>
<t>If there are real DSes, as in the experimental DNSSEC configuration and key
rollover use cases, the zone is validated based on them which may or may not
lead to further validation errors depending on the real DNSSEC status of the
zone.</t>
<t>Note that dry-run fallback validation can lead to increased workload which is
discussed further in <xref target="security-workload"></xref>.</t>
</section>

<section anchor="no-error"><name>NOERROR report</name>
<t>Dry-run DNSSEC relies on DNS Error Reporting <xref target="RFC9567"></xref> to report resolution
errors back to the zone operators.
DNS Error Reporting solely addresses the reporting of DNS errors but it does
not give any guarantees that DNS Error Reporting aware resolvers are resolving
the zone.
This raises a concern especially for dry-run DNSSEC where absence of error
reports needs to translate to a positive signal that no DNSSEC errors were
encountered.</t>
<t>To solve this, dry-run DNSSEC introduces the NOERROR report.
The NOERROR report is sent from the resolver when no error was encountered
during dry-run DNSSEC validation and notifies the reporting agent of the
resolver's presence.</t>
<t>As with <xref target="RFC9567" sectionFormat="comma" section="4"></xref> the resolver will cache the reporting agent
reply and dampen the number of NOERROR report queries.</t>
<t>The NOERROR report is using the Extended DNS Error code TBD_no.</t>

<section anchor="no-error-query"><name>Constructing the NOERROR Query</name>
<t>The QNAME for the NOERROR report query follows the same semantics as with
<xref target="RFC9567" sectionFormat="comma" section="6.1.1"></xref> and is constructed by concatenating the
following elements:</t>

<ul>
<li><t>A label containing the string &quot;_er&quot;.</t>
</li>
<li><t>The decimal value &quot;0&quot; in a single DNS label as the QTYPE is not relevant for
the NOERROR report.</t>
</li>
<li><t>The list of non-null labels representing the apex of the query name that
triggered this report.</t>
</li>
<li><t>The decimal value of TBD_no in a single DNS label as the Extended DNS Error.</t>
</li>
<li><t>A label containing the string &quot;_er&quot;.</t>
</li>
<li><t>The agent domain. The agent domain as received in the EDNS0 Report-Channel
option set by the authoritative server.</t>
</li>
</ul>
<t>As with <xref target="RFC9567" sectionFormat="comma" section="6.1.1"></xref> if the QNAME of the report query
exceeds 255 octets, it MUST NOT be sent.</t>
<t>The apex is specifically used as the query name for resolvers to only send one
NOERROR report (if applicable) per zone and for the monitoring agents to
differentiate between different zones they are configured with.</t>
</section>
</section>

<section anchor="opt-in"><name>Opt-in end-to-end DNSSEC testing</name>
<t>For further end-to-end DNS testing, a new EDNS0 option code TBD_w (Wet-Run
DNSSEC) is introduced that a client can send along with a query to a validating
resolver.
This signals dry-run resolvers that the client has opted-in to DNSSEC errors
for dry-run zones.
Dry-run resolvers that support opt-in MUST respond with the dry-run DNSSEC
error if any and MUST attach the same EDNS0 option code TBD_w in the response
to mark the error response as coming from a dry-run zone.</t>
<t>Dry-run resolvers that support opt-in MUST cache the DNSSEC status of the
dry-run validation next to the actual DNSSEC status.
This enables cached answers to both regular and opt-in clients, similar to
cached answers to clients with and without the CD flag set.</t>
<t>Additional Extended DNS Errors can still be attached in the error response by
the validating resolver as per <xref target="RFC8914"></xref>.</t>
<t>Dry-run resolvers that do not support opt-in MUST ignore the TBD_w EDNS0
option and MUST NOT attach the TBD_w EDNS0 option code in their replies.</t>
</section>
</section>

<section anchor="signaling"><name>Signaling</name>
<t>Signaling to dry-run resolvers that a delegation uses dry-run DNSSEC happens
naturally with the DS record returned from the parent zone by specifying new
DS Digest Type Algorithm(s).</t>
<t>Each algorithm has a potential dry-run equivalent.
This can be realised by either burning a bit in the DS Digest Type Algorithm
(the most significant bit) so that all current and future algorithms have a
dry-run DNSSEC equivalent, or by explicitly specifying algorithms for select
current and future algorithms.
The convention for this document is to only specify a new one for SHA-256 at
the moment; this will likely change in a future version.</t>
<t>Resolvers that do not support dry-run DNSSEC and have no knowledge of the
introduced DS Digest Type Algorithms ignore them as per
<xref target="RFC6840" sectionFormat="comma" section="5.2"></xref>.</t>

<section anchor="discussion-from-ietf-114"><name>Discussion from IETF 114</name>
<t><strong>Note to the RFC Editor</strong>: please remove this entire section before publication.</t>
<t>This is addressed feedback as a result of IETF 114. We keep it here for future
reference while the document is advancing.</t>

<section anchor="burn-a-bit-for-dry-run-ds-digest-type-algorithms"><name>Burn a bit for dry-run DS Digest Type Algorithms</name>

<ul>
<li><t>Viktor Dukhovni:</t>

<ul spacing="compact">
<li>Saner than variable variant.</li>
<li>Hash algorithms are introduced exceedingly rarely, symmetric hashes are
very stable.</li>
<li>No evidence that SHA2 will be compromised in the next 100 years; we may
have SHA3 at some point but little demand.</li>
</ul></li>
<li><t>Peter Thomassen:</t>

<ul spacing="compact">
<li>Better to sacrifice a bit than variable length. Also for post quantum
crypto, in response to Paul Hoffman below, even if keys are large the hash
value will have a constant length.</li>
</ul></li>
<li><t>Libor Peltan: (mailing list)</t>

<ul spacing="compact">
<li>Only a few code points in use now, it seems viable.</li>
</ul></li>
</ul>
</section>

<section anchor="use-a-single-ds-digest-type-algorithm-for-dry-run"><name>Use a single DS Digest Type Algorithm for dry-run</name>

<ul>
<li><t>Need to encode the actual algorithm and data in the DS record; results in
variable length DS record for a single algorithm.</t>
</li>
<li><t>May hinder adoption due to EPP checks/requirements (known record length for
each algorithm).</t>
</li>
<li><t>Mark Andrews:</t>

<ul spacing="compact">
<li>Variable length will be needed for private algorithm types so we may as
well support it here.</li>
</ul></li>
<li><t>Paul Hoffman:</t>

<ul spacing="compact">
<li>Recommends going to variable length to pave the way for post quantum crypto
and the surprising length it may need.</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="provisioning"><name>Provisioning</name>
<t>This section discusses the communication between a dry-run DNSSEC zone and the
parent domain and the procedures that need to be in place in order for the
parent to publish a dry-run DS record for the delegation.
Most of the burden falls with the parent zone since they have to understand the
delegation's intent for use of dry-run DNSSEC.
If the parent does not accept DS records, they need to provide a means so that
the child can mark the provided DNSKEY(s) as dry-run DNSSEC.
This can be achieved either by a flag on the parent's interface, or their
willingness to accept and inspect DS records that accompany DNSKEYs for use of
the DRY-RUN DS Type Digest Algorithm.
The case of CDS/CDNSKEY is discussed below.</t>

<section anchor="parent-zone-records"><name>Parent zone records</name>
<t>The only change that needs to happen for dry-run DNSSEC is for the parent to be
able to publish the dry-run DS record.
If the parent accepts DS records from the child, the child needs to provide the
dry-run DS record.
If the parent does not accept DS records and generates the DS records from the
DNSKEY, support for generating the dry-run DS record, when needed, should be
added to the parent if dry-run DNSSEC is a desirable feature.</t>
<t>When the child zone operator wants to complete the DNSSEC deployment, the
parent needs to be notified for the real DS record publication.</t>

<section anchor="cds-cdnskey-consideration"><name>CDS and CDNSKEY Consideration</name>
<t>CDS works as expected by providing the dry-run DS content for the CDS record.
CDNSKEY cannot work by itself; it needs to be accompanied by the aforementioned
CDS to signal dry-run DNSSEC for the delegation.
Thus, parents that rely only on CDNSKEY need to add support for checking the
accompanying CDS record for the DRY-RUN DS Type Digest Algorithm and generating
a dry-run DS record if such a record is encountered.</t>
<t>Operators of a dry-run child zone are advised to publish both CDS and CDNSKEY
so that both cases above are covered.</t>
</section>
</section>
</section>

<section anchor="security"><name>Security Considerations</name>

<section anchor="security-dnssec"><name>DNSSEC status</name>
<t>For the use case of DNSSEC adoption, dry-run DNSSEC disables one of the
fundamental guarantees of DNSSEC, data integrity.
Bogus answers for expired/invalid data will become insecure answers providing
the potentially wrong information back to the requester.
This is a feature of this proposal but it also allows forged answers by third
parties to affect the zone.</t>
<t>This should be treated as a warning that dry-run DNSSEC is not an end solution
but rather a temporarily intermediate test step of a zone going secure.</t>
<t>Thus, a dry-run only zone (only dry-run DSes on the parent) SHOULD NOT be
considered as DNSSEC signed since it does not offer all the DNSSEC guarantees.</t>
</section>

<section anchor="security-error-report"><name>Error reporting</name>
<t>Since dry-run DNSSEC relies heavily on DNS Error Reporting <xref target="RFC9567"></xref>, the
same security considerations about the generated error reports apply here as
well.
Especially the use of TCP or DNS Cookies for the reports, which can be enforced
by the monitoring agent to make it harder to falsify the source address of
error reports.</t>
</section>

<section anchor="security-workload"><name>Workload increase</name>
<t>Dry-run resolvers need to do some extra work when encountered with a validation
failure in a dry-run zone.
They would need to send a DNS Error Report out and restart validation ignoring
the dry-run DSes of the zone.</t>
<t>Restarting the validation can lead to double the validation effort for use
cases where the zone was already using DNSSEC, i.e., real DSes next to dry-run
DSes.
Dry-run resolver implementations need to consider this and allow for the same
validation limits regardless if the validation is for a real DNSSEC or a
dry-run DNSSEC zone, or a zone combining both.</t>
<t>Keeping (and resetting) the same validation limits is crucial for failure
reporting as it will realistically reflect the same behavior (and fail for the
same reasons) as with non-dry-run resolvers.
Furthermore, not imposing different limits on a dry-run resolver will not
hamper the real DNSSEC part of the zone when fallback from dry-run needs to
happen.
The real DNSSEC part of the zone will have the chance to validate under the
same workload limits and any previous dry-run validation workload will not
result in manifested DNSSEC errors due to premature exhaustion of validation
limits for example.</t>
<t>Thus, on dry-run validation failures the validation workload limits MUST be
reset and allow for the same workload limits when restarting validation.</t>
</section>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="dry-run-ds-type-digest-algorithm"><name>DRY-RUN DS Type Digest Algorithm</name>
<t>This document defines a new entry in the &quot;Delegation Signer (DS) Resource
Record (RR) Type Digest Algorithms&quot; registry:</t>
<table>
<thead>
<tr>
<th align="right">Value</th>
<th>Digest Type</th>
<th>Status</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td align="right">TBD_ds</td>
<td>SHA-256 DRY-RUN</td>
<td>OPTIONAL</td>
<td>[this document]</td>
</tr>
</tbody>
</table></section>

<section anchor="noerror-extended-dns-error"><name>NOERROR Extended DNS Error</name>
<t>This document defines a new entry in the &quot;Extended DNS Error Codes&quot;
registry on the &quot;Domain Name System (DNS) Parameters&quot; page:</t>
<table>
<thead>
<tr>
<th align="right">INFO-CODE</th>
<th>Purspose</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td align="right">TBD_no</td>
<td>NOERROR reporting</td>
<td>[this document]</td>
</tr>
</tbody>
</table></section>

<section anchor="wet-run-edns0-option"><name>Wet-Run EDNS0 Option</name>
<t>This document defines a new entry in the &quot;DNS EDNS0 Option Codes (OPT)&quot;
registry on the &quot;Domain Name System (DNS) Parameters&quot; page:</t>
<table>
<thead>
<tr>
<th align="right">Value</th>
<th>Name</th>
<th>Status</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td align="right">TBD_wet</td>
<td>Wet-Run DNSSEC</td>
<td>Optional</td>
<td>[this document]</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>Martin Hoffmann contributed the idea of using the DS record of an already
signed zone also as a dry-run DS in order to facilitate testing key rollovers.</t>
</section>

</middle>

<back>
<references><name>Normative References</name>
<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.6840.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7489.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8145.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8509.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8914.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9567.xml"/>
</references>

<section anchor="implementation-status"><name>Implementation Status</name>
<t><strong>Note to the RFC Editor</strong>: please remove this entire section before publication.</t>
<t>In the following implementation status descriptions, &quot;dry-run DNSSEC&quot; refers
to dry-run DNSSEC as described in this document.</t>
<t>None yet.</t>
</section>

<section anchor="change-history"><name>Change History</name>
<t><strong>Note to the RFC Editor</strong>: please remove this entire section before publication.</t>

<ul spacing="compact">
<li>draft-yorgos-dnsop-dry-run-dnssec-00</li>
</ul>
<blockquote><t>Initial public draft.</t>
</blockquote>
<ul spacing="compact">
<li>draft-yorgos-dnsop-dry-run-dnssec-01</li>
</ul>
<blockquote><t>Document restructure and feedback incorporation from IETF 113.</t>
</blockquote>
<ul spacing="compact">
<li>draft-yorgos-dnsop-dry-run-dnssec-02</li>
</ul>
<blockquote><t>Document restructure and feedback incorporation from IETF 114; mainly:</t>
<t>Use explicit dry-run algorithm types for DS.</t>
<t>Introduce NOERROR reporting.</t>
</blockquote>
<ul spacing="compact">
<li>draft-yorgos-dnsop-dry-run-dnssec-03</li>
</ul>
<blockquote><t>Shape up NOERROR reporting.</t>
<t>No need for exclusive NOERROR signal from upstream; existence of dry-run suffices.</t>
<t>Ask for NOERROR Extended DNS Error.</t>
<t>Remove most IETF 114 feedback sections for better flow of the document; kept the discussion about signaling.</t>
<t>Add security considerations for increased validation workload.</t>
<t>Add an explicit fallback behavior section.</t>
</blockquote></section>

</back>

</rfc>
