<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.1.7) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-dnsop-delegation-mgmt-via-ddns-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="DDNS Updates of Delegation Information">Automating DNS Delegation Management via DDNS</title>

    <author initials="J." surname="Stenstam" fullname="Johan Stenstam">
      <organization>The Swedish Internet Foundation</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>johan.stenstam@internetstiftelsen.se</email>
      </address>
    </author>
    <author initials="E." surname="Bergström" fullname="Erik Bergström">
      <organization>The Swedish Internet Foundation</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>erik.bergstrom@internetstiftelsen.se</email>
      </address>
    </author>
    <author initials="L." surname="Fernandez" fullname="Leon Fernandez">
      <organization>The Swedish Internet Foundation</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>leon.fernandez@internetstiftelsen.se</email>
      </address>
    </author>

    <date />

    <area>Internet</area>
    <workgroup>DNSOP Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 40?>

<t>Delegation information (i.e. the NS RRset, possible glue, possible DS
records) should always be kept in sync between child zone and parent
zone. However, in practice that is not always the case.</t>

<t>When the delegation information is not in sync the child zone is
usually working fine, but without the amount of redundancy that the
zone owner likely expects to have. Hence, should any further problems
ensue it could have catastropic consequences.</t>

<t>The DNS name space has lived with this problem for decades and it
never goes away. Or, rather, it will never go away until a fully
automated mechanism for how to keep the information in sync
automatically is deployed.</t>

<t>This document proposes such a mechanism.</t>

<t>TO BE REMOVED: This document is being collaborated on in Github at:
<eref target="https://github.com/johanix/draft-ietf-dnsop-delegation-mgmt-via-ddns">https://github.com/johanix/draft-ietf-dnsop-delegation-mgmt-via-ddns</eref>.
The most recent working version of the document, open issues, etc,
should all be available there.  The authors (gratefully) accept pull
requests.</t>



    </abstract>



  </front>

  <middle>


<?line 64?>

<section anchor="introduction"><name>Introduction</name>

<t>For DNSSEC signed child zones with TLD registries as parents there is 
an emerging trend towards running so-called "CDS scanners" and "CSYNC 
scanners" by the parent.</t>

<t>These scanners detect publication of CDS records (the child signalling
a desire for an update to the DS RRset in the parent) and/or a CSYNC
record (the child signalling a desire for an update to the NS RRset
or, possibly, in-bailiwick glue in the parent).</t>

<t>The scanners have a number of drawbacks, including being inefficient
and slow. They are only applicable to DNSSEC-signed child zones and
they add significant complexity to the parent operations. But given
that, they do work.</t>

<t><xref target="RFC9859"/> proposes a method to alleviate the inefficiency and
slowness of scanners. But the DNSSEC requirement and the complexity
remain.</t>

<t>This document proposes an alternative mechanism to automate the
updating of delegation information in the parent zone for a child
zone based on DNS Dynamic Updates secured with SIG(0) signatures.</t>

<t>This alternative mechanism shares the property of being efficient
and provide rapid convergence (similar to generalized notifications in
conjuction with scanners). Furthermore, it has the advantages of not
requiring any scanners in the parent at all and also not being
dependent on the child (and parent) being DNSSEC-signed.</t>

<t>Knowledge of DNS NOTIFY <xref target="RFC1996"/> and DNS Dynamic Updates
<xref target="RFC2136"/> and <xref target="RFC3007"/> is assumed. DNS SIG(0) transaction
signatures are documented in <xref target="RFC2931"/>. In addition this
Internet-Draft borrows heavily from the thoughts and problem statement
from <xref target="RFC9859"/>.</t>

<section anchor="requirements-notation"><name>Requirements Notation</name>

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

</section>
</section>
<section anchor="is-there-a-use-case"><name>Is there a Use Case?</name>

<t>Because of the drawbacks of CDS and CSYNC scanners they are unlikely
to be able to fully automate the maintenance of delegation information
in all parent zones. The primary reasons are the hard requirement on
DNSSEC in the child zones and the complexity cost of operating the
scanner infrastructure. In practice, scanners are likely mostly
realistic for parent zones that are operated by well-resourced
registries.</t>

<t>All the parts of the DNS name space where the parent is smaller and
more resource constrained would be able to automate the delegation
management via this mechanism without the requirement of operating
scanners. Also all parts of the name space where there are child zones
that are not DNSSEC-signed would be able to use this.</t>

<t>Obviously, also well-resourced parent zones with DNSSEC-signed child
zones would be able to use this DNS UPDATE-based mechanism, but in
those cases scanners plus generalized notifications would also work.</t>

</section>
<section anchor="dns-notify-versus-dns-update"><name>DNS NOTIFY versus DNS UPDATE</name>

<t>DNS NOTIFY and DNS UPDATE messages share several properties
and are used to address similar issues.</t>

<section anchor="similarities-between-notify-and-update"><name>Similarities between NOTIFY and UPDATE</name>

<t>Both NOTIFY and UPDATE are "push" rather than "pull" messages and
therefore very efficient.</t>

<t>Both NOTIFY and UPDATE are messages, in DNS packet format. They are
used by one party (the sender) to inform another party (the recipient)
that some piece of DNS information has changed and that as a
consequence of this change the recipient of the message may want to
also make a change to its DNS data.</t>

<t>A NOTIFY (as per <xref target="RFC1996"/>) is only a hint and the recipient may
ignore it. But if the recipient does listen to the NOTIFY it should
make its own lookups to verify what has changed and whether that
should trigger any changes in the DNS data provided by the recipient.</t>

</section>
<section anchor="differences-between-notify-and-update"><name>Differences between NOTIFY and UPDATE</name>

<t>The difference between the UPDATE and the NOTIFY is that the UPDATE
contains the exact change that should (in the opinion of the sender)
be applied to the recipients DNS data. Furthermore, for secure Dynamic
Updates, the message also contains proof why the update should be
trusted (in the form of a digital signature by a key that the
recipient trusts).</t>

<t>In this document the term "Dynamic Update" or "DNS UPDATE" implies
secure dynamic update. Furthermore this document implies that the
signature algorithms are always based on asymmetric crypto keys, using
the same algorithms as are being used for DNSSEC. I.e. by using the
right algorithm the resulting signatures will be as strong as
DNSSEC-signatures.</t>

<t>DNS UPDATEs can be used to update any information in a zone (subject
to the policy of the recipient). But in the special case where the
data that is updated is the delegation information for a child zone
and it is sent across a zone cut (i.e. the child sends it to the
parent), it acts as a glorified generalized NOTIFY.</t>

<t>The DNS UPDATE in this case is essentially a message that says:</t>

<figure><artwork><![CDATA[
"the delegation information for this child zone has changed; here
is the exact change; here is the proof that the change is
authentic, please verify this signature"
]]></artwork></figure>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>SIG(0)</dt>
  <dd>
    <t>An assymmetric signing algorithm that allows the recipient to only
need to know the public key to verify a signature created by the
senders private key.</t>
  </dd>
</dl>

</section>
<section anchor="updating-delegation-information-via-dns-updates"><name>Updating Delegation Information via DNS UPDATEs.</name>

<t>This is not a new idea. There is lots of prior art and prior
documents, including the expired
I-D.andrews-dnsop-update-parent-zones-04.</t>

<t>The functionality to update delegation information in the parent zone
via DNS UPDATE has been available for years in a least one DNS
implementation (BIND9). However, while DNS UPDATE is used extensively
inside organisations it has not seen much use across organisational
boundaries. And zone cuts, almost by definition, usually cuts across
such boundaries.</t>

<t>When sending a DNS UPDATE it is necessary to know where to send
it. Inside an organisation this information is usually readily
available. But outside the organisation it is not. And even if the
sender would know where to send the update, it is not at all clear
that the destination is reachable to the sender (the parent primary is
likely to be protected by firewalls and other measures).</t>

<t>This constitutes a problem for using DNS UPDATES across zone cuts.</t>

<t>Another concern is that traditionally DNS UPDATEs are sent to a
primary nameserver, and if the update signture verifies the update is
automatically applied to the DNS zone. This is often not an acceptable
mechanism. The recipient may, for good reason, require additional
policy checks and likely an audit trail. Finally, the change should in
many cases not be applied to the running zone but rather to some sort
of provisioning system or a database.</t>

<t>This creates another problem for using DNS UPDATEs for managing
delegation information.</t>

<t>Both problems are addressed by the proposed mechanism for locating the
recipient of a generalized NOTIFY.</t>

</section>
<section anchor="locating-the-target-for-a-generalized-notify-andor-dns-update"><name>Locating the Target for a generalized NOTIFY and/or DNS UPDATE.</name>

<t>Section 3 of <xref target="RFC9859"/> defines a new RR type, DSYNC, that has the
following format:</t>

<figure><artwork><![CDATA[
{qname}   IN  DSYNC  {RRtype} {scheme} {port} {target}
]]></artwork></figure>

<t>where {target} is the domain name of the recipient of the NOTIFY
message. {RRtype} is typically "CDS" or "CSYNC" in the case where
delegation information should be updated (there are also other uses of
generalized notifications).</t>

<t>Finally, {scheme} is an 8 bit unsigned integer to indicate the type of
notification mechanism to use. Scheme=1 is defined as "NOTIFY" (and
the presentation format is also "NOTIFY"), as in "send a generalized
NOTIFY to {target} on port {port}".</t>

<t>This document proposes the definition of a new {scheme} for the same
record that is used for generalized NOTIFY. Scheme=TBD is here defined
as "UPDATE", as in "send a DNS UPDATE to {target} on port {port}".
When parsing or presenting DNS zone data the 8 bit unsigned integer
TBD should be replaced by the string "UPDATE", as in the examples
below.</t>

<t>Apart from defining a new scheme to specify the mechanism "UPDATE"
(rather than the mechanism "NOTIFY") this document does not say
anything about what Qname to look up or what RR type. The UPDATE
mechanism should use exactly the same method of locating the target of
the UPDATE as is used for generalized NOTIFY.</t>

<t>This lookup addresses the first issue with using DNS UPDATE across
organizational boundaries.</t>

<t>Example 1: a parent zone announces support for DNS UPDATE as a
mechanism for delegation synchronization for all child zones:</t>

<figure><artwork><![CDATA[
_dsync.parent.  IN DSYNC ANY UPDATE 5302 ddns-receiver.parent. 
]]></artwork></figure>

<t>Example 2: a parent zone announces support for different DNS UPDATE
targets on a per-child basis:</t>

<figure><artwork><![CDATA[
childA._dsync.parent.  IN DSYNC ANY UPDATE 5302 ddns-receiver.registrar1.
childB._dsync.parent.  IN DSYNC ANY UPDATE 5302 ddns-receiver.registrar3.
childC._dsync.parent.  IN DSYNC ANY UPDATE 5302 ddns-receiver.registrar2.
]]></artwork></figure>

<t>The DSYNC RRset is looked up, typically by the child primary name
server or by a separate agent for the child, at the time that the
delegation information for the child zone changes in some way that
would prompt an update in the parent zone. When the {scheme} is
"UPDATE" (i.e. the number 2 in the wire protocol) the interpretation
is:</t>

<t><spanx style="verb">Send a DNS UPDATE to the IP address for the name {target} on port
5302, where {target} is the domain name in the right-hand side of the
DSYNC record that matches the qname in the DNS query.</spanx></t>

</section>
<section anchor="limitation-of-scope-for-the-proposed-mechanism"><name>Limitation of Scope for the Proposed Mechanism</name>

<t>DNS UPDATE is in wide use all over the world, for all sorts of
purposes. It is not in wide use across organizational boundaries. This
document only address the specific case of a child zone that makes a
change in its DNS delegation information that will require an update
of the corresponding information in the parent zone. This includes:</t>

<t><list style="symbols">
  <t>changes to the NS RRset</t>
  <t>changes to glue (if any)</t>
  <t>changes to the DS RRset (if any)</t>
  <t>changes to the KEY RRset (only used for validation of UPDATE
messages)</t>
</list></t>

<t>Only for those specific cases is the described mechanism proposed.</t>

</section>
<section anchor="the-dns-update-receiver"><name>The DNS UPDATE Receiver</name>

<t>While the simplest design is to send the DNS UPDATEs to the primary
name server of the parent it will in most cases be more interesting to
send them to a separate UPDATE Receiver. To separate the primary name
server from the UPDATE Receiver, use a {target} with addresses
separate from the addresses of the primary name server.</t>

<section anchor="processing-the-update-in-the-dns-update-receiver"><name>Processing the UPDATE in the DNS UPDATE Receiver</name>

<t>The receiver of the DNS UPDATE messages should implement a suitably 
strict policy for what updates are accepted (typically only allowing 
updates to the NS RRset, glue and DS RRset).</t>

<t>Furthermore, it is strongly recommended that the policy is further
tightened by only allowing updates to the delegation information of a
child zone with the exact same name as the name of the SIG(0) key the
signed the UPDATE request. I.e. an UPDATE request for the delegation
information for the zone <spanx style="verb">child.parent.</spanx> should only be processed if
it is signed by a SIG(0) key with the name <spanx style="verb">child.parent.</spanx> and the
signature verifies correctly.</t>

<t>Once the DNS UPDATE message has been verified to be correctly signed
by a known and trusted key with the correct name and also adhere to
the update policy it should be subjected to the same set of
correctness tests as CDS/CSYNC scanner would have performed. If these
requirements are also fulfilled the change may be applied to the
parent zone in whatever manner the parent zone is maintained (as a
text file, data in a database, via and API, etc).</t>

</section>
</section>
<section anchor="interpretation-of-the-response-to-the-dns-update"><name>Interpretation of the response to the DNS UPDATE.</name>

<t>All DNS transactions are designed as a pair of messages and this is
true also for DNS UPDATE. The interpretation of the different
responses to DNS UPDATE are fully documented in <xref target="RFC2136"/>, section
2.2.</t>

<section anchor="rcode-noerror"><name>RCODE NOERROR</name>

<t>A response with rcode=0 ("NOERROR") should be interpreted as a
confirmation that the DNS UPDATE has been received and
accepted. I.e. the change to the parent DNS data should be expected to
be published in the parent zone at some future time.</t>

</section>
<section anchor="rcode-refused"><name>RCODE REFUSED</name>

<t>A response with rcode=5 ("REFUSED") should be interpreted as a
permanent signal that DNS UPDATEs are not supported by the
receiver. This would indicate a parent misconfiguration, as the UPDATE
should not be sent unless the parent has announced support for DNS
UPDATE via publication of an appropriate target location record.</t>

</section>
<section anchor="rcode-badkey"><name>RCODE BADKEY</name>

<t>A response with rcode=17 ("BADKEY") should be interpreted as a
definitive statement that the DNS UPDATE Receiver does not have access
to the public SIG(0) key needed for signature verification. In this
case the child should fall back to bootstrap of the SIG(0) public key
into the DNS UPDATE Receiver, see below.</t>

</section>
<section anchor="no-response-to-a-dns-update"><name>No response to a DNS UPDATE</name>

<t>The case of no response is more complex, as it is not possible to know
whether the DNS UPDATE actually reached the receiver (or was lost in
transit) or the response was not sent (or lost in transit).</t>

<t>For this reason it is suggested that a lack of response is left as
implementation dependent. That way the implementation has sufficient
freedom do chose a sensible approach. Eg. if the sender of the DNS
UPDATE message (perhaps the primary name server of the child zone) only
serves a single child, then resending the DNS UPDATE once or twice may
be ok (to ensure that the lack of response is not due to packets being
lost in transit). On the other hand, if the sender serves a large
number of child zones below the same parent zone, then it may already
know that the receiver for the DNS UPDATEs is not responding for any
of the child zones, and then resending the update immediately is
likely pointless.</t>

</section>
</section>
<section anchor="management-of-sig0-public-keys"><name>Management of SIG(0) Public Keys</name>

<t>Only the child should have access to the SIG(0) private key. The
corresponding SIG(0) public key should preferably be published in DNS,
but it doesn't have have to be. The SIG(0) public key only needs to be
available to the parent DNS UPDATE Receiver. Keeping all the public
SIG(0) keys for different child zones in some sort of database is
perfectly fine.</t>

<section anchor="bootstrapping-the-sig0-public-key-into-the-dns-update-receiver"><name>Bootstrapping the SIG(0) Public Key Into the DNS UPDATE Receiver</name>

<t>Bootstrap of the child public SIG(0) key to be trusted by the UPDATE
Receiver may be done either manually or automatically. Manually
may in various cases be the preferred method, especially in the case
of non-registry parents with a small number of child delegations.</t>

<t>If the UPDATE Receiver only supports manual bootstrap, then that is
what will happen (apart from informing the child about this
policy). If the child wants to enforce manual bootstrap it needs to
request this from the UPDATE Receiver.</t>

<t>In those cases there is by definition some mechanism in place to
communicate information from the child to the parent, be it email, a
web form, pieces of paper or something else. The same mechanism can be
extended to also be used to communicate the initial SIG(0) public key
from the child to the parent.</t>

<t>Regardless of whether manual bootstrap or automatic bootstrap is to be
used (subject to the UPDATE Receiver policy), the bootstrap must be
initiated. This is done by the child issuing a self-signed DNS UPDATE
to the parent containing:</t>

<figure><artwork><![CDATA[
DEL child.parent. {ttl} ANY KEY 
ADD child.parent. {ttl} IN  KEY ... 
]]></artwork></figure>

<t>The first record is an instruction to delete any previous keys for 
this child (CLASS=ANY in a DNS UPDATE is a request to delete an entire
RRset). The second is an instruction to add the new key.</t>

<t>When receiving such a message (where the self-signature validates) the
parent UPDATE Reciever SHOULD mark that key as "known" (but not yet
trusted) and then either put that key into a queue for later look up
and validation of the corresponding KEY record (if supporting
automatic bootstrap) or put that key into a queue for subsequent
manual validation and verification.</t>

<section anchor="automatic-bootstrap-of-the-sig0-public-key"><name>Automatic Bootstrap of the SIG(0) Public Key</name>

<t>Automated bootstrapping is also possible, subject to the policy of the
UPDATE Receiver. The basic idea is to publish the public SIG(0) key as
a KEY record either at the child apex or at a special name below the
name of an authoritative nameserver for the zone located in a DNSSEC-
signed zone. This publication must occur prior to the initial key
upload. Then the UPDATE Receiver (or an agent) may look that KEY up
for subsequent validation.</t>

</section>
<section anchor="automatic-bootstrap-when-child-zone-is-dnssec-signed"><name>Automatic Bootstrap When Child Zone Is DNSSEC-signed</name>

<t>If the child zone is DNSSEC-signed (including a signed delegation via
a DS record), then the KEY record containing the SIG(0) public key
located at the zone apex can be looked up and validated by the DNS
UPDATE Receiver.</t>

<figure><artwork><![CDATA[
child.parent. IN KEY ...
child.parent. IN RRSIG KEY ...
]]></artwork></figure>

<t>In case of validation success the key SHOULD be promoted to "trusted"
by the UPDATE Receiver. At this point any old keys should be deleted.</t>

<t>In case of validation failure (or absence of a DNSSEC signature) the
SIG(0) SHOULD NOT be promoted to the set of keys that the UPDATE
Receiver trusts and any old keys MUST be kept.</t>

</section>
<section anchor="automatic-bootstrap-when-child-nameserver-is-in-a-dnssec-signed-zone"><name>Automatic Bootstrap When Child Nameserver Is In A DNSSEC-signed Zone</name>

<t>If the child zone is unsigned but at least one of the authoritative
nameservers for the zone is located in a DNSSEC-signed zone (including
a signed delegation via a DS record), then the KEY record containing
the SIG(0) public key can be looked up and validated by the DNS UPDATE
Receiver.</t>

<t>Example: assume that the unsigned child zone "child.parent." has
two nameservers:</t>

<figure><artwork><![CDATA[
child.parent.  IN NS ns.child.parent.
child.parent.  IN NS ns.provider.example.
]]></artwork></figure>

<t>ns.child.parent. is located in the unsigned zone child.parent. and a
KEY record located under that name can not be DNSSEC-validated.
ns.provider.example. on the other hand is located in a DNSSEC signed
zone.  In this case the KEY record containing the public SIG(0) key
for child.parent.  may be located at the special label
"_sig0key.{child}._signal.{nameserver}":</t>

<figure><artwork><![CDATA[
_sig0key.child.parent._signal.ns.provider.example. IN KEY ...
_sig0key.child.parent._signal.ns.provider.example. IN RRSIG KEY ...
]]></artwork></figure>

<t>In case of validation success the key SHOULD be promoted to "trusted"
by the UPDATE Receiver. At this point any old keys should be deleted.</t>

<t>In case of validation failure (or absence of a DNSSEC signature) the
SIG(0) SHOULD NOT be promoted to the set of keys that the UPDATE
Receiver trusts and any old keys MUST be kept.</t>

<t>This bootstrap mechanism is identical to the method used for DNSSEC
bootstrap as described in <xref target="RFC9615"/>. As the proof of the SIG(0) key
being authentic is based on a clear DNSSEC signature chain this method
is as secure as if the child zone had been signed.</t>

</section>
<section anchor="automatic-bootstrap-when-child-zone-is-unsigned"><name>Automatic Bootstrap When Child Zone Is Unsigned</name>

<t>Hence, to bootstrap the public SIG(0) key for a child zone it is
possible for the parent use a "bootstrap policy" a la:</t>

<t><list style="symbols">
  <t>Look up the KEY RRset in the child zone. Compare to the child KEY
received in the self-signed DNS UPDATE.</t>
  <t>To mitigate a possible on-path attacker, do the look up of the child
KEY RRset, using TCP transport, from multiple vantage points, at
multiple times. The child KEY RRset must be consistent over time and
space.</t>
  <t>Make on-path attacks even more difficult by adding a requirement to,
in addition to TCP, also use a more secure transport, like DoT, DoH
or DoQ once those become more generally available for DNS queries to
authoritative servers. The child KEY RRset must be consistent over
all tested transports.</t>
  <t>If the received KEY RRset is consistent from multiple vantage points
and multiple times then it is considered authentic and promoted by
the parent's UPDATE Receiver from "known" to "trusted" SIG(0) key
for the child. At this point any old SIG(0) public keys for the
child should be deleted.</t>
</list></t>

<t>Should a "registry" parent want to support this mechanism (as a
service to its unsigned children) then a likely model is that the
target of the DNS UPDATE is operated by the registrar (or possibly
that the DNS UPDATE is forwarded to the registrar). The registrar
performs its normal verifications of a change and then transforms the
update into an EPP <xref target="RFC5730"/> transaction to communicate it to the
registry.</t>

<t>This bootstrap mechanism for the case of an unsigned child is
essentially identical to the "automatic DNSSEC Bootstrap via CDS"
service a la <xref target="RFC8078"/> that multiple TLD registries provide
today. It does not provide the provable authenticity of the two
previous methods but it is possible to make on-path attacks
arbitrarily difficult by using a larger number of repeated queries
from a larger number of vantage points.</t>

</section>
<section anchor="publishing-supported-bootstrap-methods"><name>Publishing Supported Bootstrap Methods</name>

<t>As there are multiple possible methods to bootstrap the initial SIG(0)
public key to become trusted by the parent it becomes important for
child zone operators to be able to find out which method to use. One
alternative would be to send this information inside the KeyState
EDNS(0) option that is already needed to inquire state for specific
keys. This does have the drawback of being less visible and
potentially more difficult to use operationally.</t>

<t>Another method is to utilize the same mechanism as used in
<xref target="I-D.berra-dnsop-announce-scanner"/> to announce details about CDS and
CSYNC scanner capabilities. This mechanism uses an SVCB record located
at the target of the DSYNC record to announce capabilities. For the
UPDATE Receiver the important capabilites are primarily supported
bootstrap methods.</t>

<section anchor="svcb-key-bootstrap"><name>SVCB Key "bootstrap"</name>

<t>The "bootstrap" key is used to signal what mechanisms are supported for
upgrading an unsigned delegation to a signed delegation. Three mechanisms
are currently identified:</t>

<t><list style="symbols">
  <t>"at-apex": This is an indication that the UPDATE Receiver supports
           automatic bootstrap of the SIG(0) public key for signed
           child zones by the child publishing the DNSSEC-signed
           KEY record at the child zone apex.  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
child.parent.  IN KEY ... 
child.parent.  IN RRSIG KEY ... 
]]></artwork></figure>
  <vspace blankLines='1'/>
See <xref target="automatic-bootstrap-when-child-zone-is-dnssec-signed">Automatic Bootstrap When Child Zone Is DNSSEC-signed</xref></t>
  <t>"at-ns":   This is an indication that the UPDATE Receiver supports
           automatic bootstrap of the SIG(0) public key by publishing
           the DNSSEC-signed KEY record both at the zone apex AND at
           the special name "_sig0key.{child}._signal.{nameserver}."
           below the name of an authoritative nameserver located in a
           signed zone. This mechanism is similar to what is described
           in <xref target="RFC9615"/> for CDS bootstrap:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
child.parent.     IN NS ns.provider.com.
child.parent.     IN KEY ... 
_sig0key.{child}._signal.ns.provider.com.  IN KEY ... 
_sig0key.{child}._signal.ns.provider.com.  IN RRSIG KEY ... 
]]></artwork></figure>
  <vspace blankLines='1'/>
See <xref target="automatic-bootstrap-when-child-nameserver-is-in-a-dnssec-signed-zone">Automatic Bootstrap When Child Nameserver Is In A DNSSEC-signed Zone</xref></t>
  <t>"unsigned": This method is similar to what <xref target="RFC8078"/> describes
            for CDS bootstrapping.  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
child.parent.     IN KEY ... 
]]></artwork></figure>
  <vspace blankLines='1'/>
See <xref target="automatic-bootstrap-when-child-zone-is-unsigned">Automatic Bootstrap When Child Zone Is Unsigned</xref></t>
  <t>"manual":  This is an indication that the UPDATE Receiver supports some other
           mechanism for bootstrap of the SIG(0) public key.</t>
</list></t>

<t>The value of the "bootstrap" key is a string with one or more of the defined
mechanisms, separated by ",". The mechanisms may occur in arbitrary order.</t>

<t>New mechanisms are likely to be defined in the future.</t>

</section>
<section anchor="complete-example"><name>Complete Example</name>

<t>Example for a parent that operates an UPDATE Receiver that only
support the secure automatic bootstrap methods "at-apex" and
"at-ns". Otherwise manual bootstrap is needed.</t>

<figure><artwork><![CDATA[
_dsync.parent.example.   IN  DSYNC ANY UPDATE 0 updater.parent.example.
updater.parent.example.  IN  SVCB 0 . (bootstrap="at-apex,at-ns,manual")
]]></artwork></figure>

<t>I.e. this UPDATE Receiver does not support the "unsigned" method based
on <xref target="RFC8078"/>.</t>

</section>
</section>
</section>
<section anchor="rolling-the-sig0-key"><name>Rolling the SIG(0) Key</name>

<t>Once the parent (or registrar) DNS UPDATE Receiver has the key, the
child can update it via a DNS UPDATE just like updating the NS RRset,
the DS RRset or the glue in the parent zone (assuming a suitable DNS
UPDATE policy in the parent). I.e. only the initial bootstrapping of
the key is an issue.</t>

<t>Note, however, that the alternative of re-bootstrapping (by whatever
bootstrapping mechanism was used) in case of a key compromise may be a
better alternative to the parent supporting key rollover for child
SIG(0) keys. The decision of whether to allow SIG(0) key rollover via
DNS UPDATE is left as parent-side policy.</t>

</section>
<section anchor="re-bootstrapping-in-case-of-errors"><name>Re-bootstrapping In Case of Errors</name>

<t>Sometimes things get out of sync in spite of all efforts. It could be
an operator error in the parent end losing the child public key or it
could be an error in the child end losing the private key. Another
possibility could be a key rollover that for some reason didn't sync
correctly.</t>

<t>If <xref target="I-D.berra-dnsop-keystate"/> is supported then the child can
inquire with the UPDATE Receiver about the KeyState of the SIG(0) key
it would use in an UPDATE request.</t>

<t>In all such cases, as soon as the child becomes aware of the problem
it should simply re-bootstrap by the same mechanism as used
initially. The self-signed DNS UPDATE that starts the bootstrapping
process contains a</t>

<figure><artwork><![CDATA[
DEL child.parent. {ttl} ANY KEY
]]></artwork></figure>

<t>and that is an instruction to the parent UPDATE Receiver to delete any
SIG(0) public keys for this child (and after that start the process to
validate the new key).</t>

<t>Note that when receiving such a self-signed DNS UPDATE the parent MUST
NOT delete any old keys until the new key has been validated and
therefore promoted to "trusted". This is needed and important to avoid
the potential attack vector of an adversary causing a parent to
invalidate the child key by just sending a self-signed bootstrap
UPDATE (which will not validate, but if the old key is deleted then
the harm would already be done).</t>

</section>
</section>
<section anchor="communication-between-child-and-parent-update-receiver"><name>Communication Between Child and Parent UPDATE Receiver</name>

<t>There are two cases where communication between child and parent
UPDATE Receiver would benefit greatly from some additional
information.</t>

<section anchor="communication-in-case-of-errors"><name>Communication in Case of Errors</name>

<t>An error response from the parent UPDATE Receiver would be improved by
more detail provided via a set of new Extended DNS Error Codes
<xref target="RFC8914"/>. In particular, it would be useful to be able to express
the following "states":</t>

<t><list style="symbols">
  <t>"SIG(0) key is known, but not yet trusted": indicating that
bootstrap of the key is not yet complete. Waiting may resolve the
issue.</t>
  <t>"SIG(0) key is known, but validation failed": indicating that
bootstrap has failed and waiting will not resolve the issue.</t>
  <t>"Automatic bootstrap of SIG(0) keys not supported; manual bootstrap
required": indicating that while the parent does support delegation
sychronization via DNS UPDATE, it does only support manual
bootstrap.</t>
</list></t>

</section>
<section anchor="communication-to-inquire-state"><name>Communication To Inquire State</name>

<t>Extended DNS Errors <xref target="RFC8914"/> provides an excellent mechanism
for adding more detail to error responses. However it is,
intentionally, limited to:</t>

<t><list style="symbols">
  <t>returning extra information from the receiver to the original
sender. It is not possible to "send" information, only "return"
information.</t>
  <t>no information except the actual error code is meant for automatic
processing. it is therefore not possible to communicate things like,
eg. a KeyId via EDE.</t>
</list></t>

<t>The communication between child and parent would gain from the
addition of the ability to also send inquiries to the parent:</t>

<t><list style="symbols">
  <t>For the child to be able to inquire about the state of the
parent. I.e. "I operate under the assumption that the key {key} is
known and trusted by you (the parent). Is this correct?"</t>
  <t>For the child to inquire about things: "Do you (parent) support
automatic bootstrapping or not?"</t>
</list></t>

<t><xref target="I-D.berra-dnsop-keystate"/> is proposed as a mechanism to improve
the communication between child and parent, both in the error case and
in the inquiry case. If that draft is supported then all of the above
examples would travel as a new "KeyState codes" in a KeyState OPT as
specified in <xref target="I-D.berra-dnsop-keystate"/>.</t>

</section>
<section anchor="mutual-authentication"><name>Mutual Authentication</name>

<t>In a traditional DNS UPDATE only the sender (i.e. the child in this
case) of the UPDATE is providing information. The receiver is only a
consumer of the information (assuming that the receiver able to
validate the SIG(0) signature of the sender, and that the UPDATE
adheres to policy, etc).</t>

<t>However, in the proposed mechanism with the new KeyState OPT the
UPDATE Receiver can also send information back to the sender (the
child). One example is details about the SIG(0) key bootstrap policy
of the parent.  This opens up the possibility for an adversary to
potentially cause disruption by sending forged responses to the child.</t>

<t>For this reason the current proposal is that the UPDATE Receiver also
maintains a SIG(0) key pair, including publication of the public key
in DNS. This key is then used to sign responses to the child. This
requires that the child goes though a similar bootstrap process to get
the public key of the UPDATE Receiver as the parent does.</t>

<t>Once such bootstrap is complete the child can use the public key of
the UPDATE Receiver to verify the authenticity of responses from the
UPDATE Receiver, thereby making the mutual authentication complete.</t>

</section>
</section>
<section anchor="scalability-considerations"><name>Scalability Considerations</name>

<t>The primary existing mechanism for automatic synchronization of DNS
delegation information is based on parent-side "scanning" of the child
zones for CDS and/or CSYNC RRsets, performing DNSSEC validation on the
result and then, in the CSYNC case, based on the result, issue and
validate a potentially large number of additional DNS queries, all of
which must be DNSSEC validated. This makes a CDS/CSYNC scanner for a
parent with a significant number of delegations a complex and resource
consuming service. Among the issues are rate-limiting by large DNS
operators and inherent difficulties in issuing millions of recursive
DNS queries where all received data must be validated.</t>

<t>By comparision, the DNS UPDATE based mechanism for automatic
synchronization shifts most of the effort to the child side. It is the
child that is responsible for detecting the need to update the
delegation information in the parent zone (which makes sense as it is
the child that has made a change and therefore, in many cases, already
"knows"). It is the child rather than the parent that computes what
records should be added or removed. All of this is good for
scalability.</t>

<t>Furthermore, the information collection and validation effort for the
UPDATE Receiver is restricted to validation of a single DNS message,
using a SIG(0) key that the UPDATE Receiver already has.</t>

<t>Hence, as the data collection and validation is much simplified the
task of the UPDATE Receiver is mostly focused on the policy issues of
whether to approve the UPDATE or not (i.e. the same process that a CDS
and/or CSYNC scanner follows).</t>

</section>
<section anchor="security-considerations"><name>Security Considerations.</name>

<t>Any fully automatic mechanism to update the contents of a DNS zone
opens up a potential vulnerability should the mechanism not be
implemented correctly.</t>

<t>In this case the definition of "correct" is a question for the
receiver of the DNS UPDATE. The receiver should verify the
authenticity of the DNS UPDATE and then do the same checks and
verifications as a CDS or CSYNC scanner does. The difference from the
scanner is only in the validation: single SIG(0) signature by a key
that the UPDATE Receiver trusts vs DNSSEC signatures that chain back
to a DNSSEC trust anchor that the validator trusts.</t>

<t>Another issue of concern is whether a parent-side service that
provides support for changes to child delegation information via DNS
UPDATE is open for potential denial-of-service attacks. The answer is
likely no, as it is possible to have a very strict rate-limiting
policy based on the observation that no child zone should have a
legitimate need to change its delegation information frequently.</t>

<t>Furthermore, as the location of the UPDATE Receiver can be separated
from any parent name server even in the worst case the only service
that can be subject to an attack is the UPDATE Receiver itself, which
is a service that previously did not exist.</t>

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

<t>IANA is requested to assign a new "scheme" value to the registry for
"DSYNC Location of Synchronization Endpoints" as follows:</t>

<dl>
  <dt>Reference</dt>
  <dd>
    <t>(this document)</t>
  </dd>
</dl>

<texttable>
      <ttcol align='left'>RRtype</ttcol>
      <ttcol align='left'>Scheme</ttcol>
      <ttcol align='left'>Purpose</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>ANY</c>
      <c>TBD</c>
      <c>Delegation management</c>
      <c>(this document)</c>
</texttable>

<t><vspace blankLines='999' /></t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements.</name>

<t><list style="symbols">
  <t>Peter Thomassen and I together came up with the location mechanism
for the generalized notifications, which this draft relies upon.</t>
  <t>Mark Andrews provided the initial inspiration for writing some code
to experiment with the combination of the location mechanism from
the generalised notifications with DNS UPDATEs across zone cuts.</t>
  <t>Stefan Ubbink helped me realize the need to also cater for the case
of re-bootstrapping if or when things got out of sync for some
reason.</t>
</list></t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC9859">
  <front>
    <title>Generalized DNS Notifications</title>
    <author fullname="J. Stenstam" initials="J." surname="Stenstam"/>
    <author fullname="P. Thomassen" initials="P." surname="Thomassen"/>
    <author fullname="J. Levine" initials="J." surname="Levine"/>
    <date month="September" year="2025"/>
    <abstract>
      <t>This document generalizes and extends the use of DNS NOTIFY (RFC 1996) beyond conventional zone transfer hints to allow other types of actions that were previously lacking a trigger mechanism to be triggered via the DNS. Notifications merely nudge the receiver to initiate a predefined action promptly (instead of on a schedule); they do not alter the action itself (including any security checks it might employ).</t>
      <t>To enable this functionality, a method for discovering the receiver endpoint for such notification messages is introduced, via the new DSYNC record type. Notification types are recorded in a new registry, with initial support for parental NS and DS record updates including DNSSEC bootstrapping.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9859"/>
  <seriesInfo name="DOI" value="10.17487/RFC9859"/>
</reference>
<reference anchor="RFC1996">
  <front>
    <title>A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY)</title>
    <author fullname="P. Vixie" initials="P." surname="Vixie"/>
    <date month="August" year="1996"/>
    <abstract>
      <t>This memo describes the NOTIFY opcode for DNS, by which a master server advises a set of slave servers that the master's data has been changed and that a query should be initiated to discover the new data. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1996"/>
  <seriesInfo name="DOI" value="10.17487/RFC1996"/>
</reference>
<reference anchor="RFC2136">
  <front>
    <title>Dynamic Updates in the Domain Name System (DNS UPDATE)</title>
    <author fullname="P. Vixie" initials="P." role="editor" surname="Vixie"/>
    <author fullname="S. Thomson" initials="S." surname="Thomson"/>
    <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
    <author fullname="J. Bound" initials="J." surname="Bound"/>
    <date month="April" year="1997"/>
    <abstract>
      <t>Using this specification of the UPDATE opcode, it is possible to add or delete RRs or RRsets from a specified zone. Prerequisites are specified separately from update operations, and can specify a dependency upon either the previous existence or nonexistence of an RRset, or the existence of a single RR. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2136"/>
  <seriesInfo name="DOI" value="10.17487/RFC2136"/>
</reference>
<reference anchor="RFC3007">
  <front>
    <title>Secure Domain Name System (DNS) Dynamic Update</title>
    <author fullname="B. Wellington" initials="B." surname="Wellington"/>
    <date month="November" year="2000"/>
    <abstract>
      <t>This document proposes a method for performing secure Domain Name System (DNS) dynamic updates. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3007"/>
  <seriesInfo name="DOI" value="10.17487/RFC3007"/>
</reference>
<reference anchor="RFC2931">
  <front>
    <title>DNS Request and Transaction Signatures ( SIG(0)s )</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <date month="September" year="2000"/>
    <abstract>
      <t>This document describes the minor but non-interoperable changes in Request and Transaction signature resource records ( SIG(0)s ) that implementation experience has deemed necessary. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2931"/>
  <seriesInfo name="DOI" value="10.17487/RFC2931"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>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="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>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="RFC9615">
  <front>
    <title>Automatic DNSSEC Bootstrapping Using Authenticated Signals from the Zone's Operator</title>
    <author fullname="P. Thomassen" initials="P." surname="Thomassen"/>
    <author fullname="N. Wisiol" initials="N." surname="Wisiol"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>This document introduces an in-band method for DNS operators to publish arbitrary information about the zones for which they are authoritative, in an authenticated fashion and on a per-zone basis. The mechanism allows managed DNS operators to securely announce DNSSEC key parameters for zones under their management, including for zones that are not currently securely delegated.</t>
      <t>Whenever DS records are absent for a zone's delegation, this signal enables the parent's registry or registrar to cryptographically validate the CDS/CDNSKEY records found at the child's apex. The parent can then provision DS records for the delegation without resorting to out-of-band validation or weaker types of cross-checks such as "Accept after Delay".</t>
      <t>This document establishes the DS enrollment method described in Section 4 of this document as the preferred method over those from Section 3 of RFC 8078. It also updates RFC 7344.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9615"/>
  <seriesInfo name="DOI" value="10.17487/RFC9615"/>
</reference>
<reference anchor="RFC5730">
  <front>
    <title>Extensible Provisioning Protocol (EPP)</title>
    <author fullname="S. Hollenbeck" initials="S." surname="Hollenbeck"/>
    <date month="August" year="2009"/>
    <abstract>
      <t>This document describes an application-layer client-server protocol for the provisioning and management of objects stored in a shared central repository. Specified in XML, the protocol defines generic object management operations and an extensible framework that maps protocol operations to objects. This document includes a protocol specification, an object mapping template, and an XML media type registration. This document obsoletes RFC 4930. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="69"/>
  <seriesInfo name="RFC" value="5730"/>
  <seriesInfo name="DOI" value="10.17487/RFC5730"/>
</reference>
<reference anchor="RFC8078">
  <front>
    <title>Managing DS Records from the Parent via CDS/CDNSKEY</title>
    <author fullname="O. Gudmundsson" initials="O." surname="Gudmundsson"/>
    <author fullname="P. Wouters" initials="P." surname="Wouters"/>
    <date month="March" year="2017"/>
    <abstract>
      <t>RFC 7344 specifies how DNS trust can be maintained across key rollovers in-band between parent and child. This document elevates RFC 7344 from Informational to Standards Track. It also adds a method for initial trust setup and removal of a secure entry point.</t>
      <t>Changing a domain's DNSSEC status can be a complicated matter involving multiple unrelated parties. Some of these parties, such as the DNS operator, might not even be known by all the organizations involved. The inability to disable DNSSEC via in-band signaling is seen as a problem or liability that prevents some DNSSEC adoption at a large scale. This document adds a method for in-band signaling of these DNSSEC status changes.</t>
      <t>This document describes reasonable policies to ease deployment of the initial acceptance of new secure entry points (DS records).</t>
      <t>It is preferable that operators collaborate on the transfer or move of a domain. The best method is to perform a Key Signing Key (KSK) plus Zone Signing Key (ZSK) rollover. If that is not possible, the method using an unsigned intermediate state described in this document can be used to move the domain between two parties. This leaves the domain temporarily unsigned and vulnerable to DNS spoofing, but that is preferred over the alternative of validation failures due to a mismatched DS and DNSKEY record.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8078"/>
  <seriesInfo name="DOI" value="10.17487/RFC8078"/>
</reference>
<reference anchor="RFC8914">
  <front>
    <title>Extended DNS Errors</title>
    <author fullname="W. Kumari" initials="W." surname="Kumari"/>
    <author fullname="E. Hunt" initials="E." surname="Hunt"/>
    <author fullname="R. Arends" initials="R." surname="Arends"/>
    <author fullname="W. Hardaker" initials="W." surname="Hardaker"/>
    <author fullname="D. Lawrence" initials="D." surname="Lawrence"/>
    <date month="October" year="2020"/>
    <abstract>
      <t>This document defines an extensible method to return additional information about the cause of DNS errors. Though created primarily to extend SERVFAIL to provide additional information about the cause of DNS and DNSSEC failures, the Extended DNS Errors option defined in this document allows all response types to contain extended error information. Extended DNS Error information does not change the processing of RCODEs.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8914"/>
  <seriesInfo name="DOI" value="10.17487/RFC8914"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">




<reference anchor="I-D.berra-dnsop-announce-scanner">
   <front>
      <title>Announce Existence of Parent CDS/CSYNC Scanner</title>
      <author fullname="Erik Bergström" initials="E." surname="Bergström">
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <author fullname="Johan Stenstam" initials="J." surname="Stenstam">
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <author fullname="Leon Fernandez" initials="L." surname="Fernandez">
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <date day="10" month="October" year="2025"/>
      <abstract>
	 <t>   In DNS operations, automated scanners are commonly employed by the
   operator of a parent zone to detect the presence of specific records,
   such as CDS or CSYNC, in child zones, indicating a desire for
   delegation updates.  However, the presence and periodicity of these
   scanners are typically implicit and undocumented, leading to
   inefficiencies and uncertainties.

   This document proposes an extension to the semantics of the DSYNC
   resource record, as defined in [RFC9859], allowing parent zones to
   explicitly signal the presence and scanning interval of such
   automated scanners.  This enhancement aims to improve transparency
   and coordination between child and parent zones.

   TO BE REMOVED: This document is being collaborated on in Github at:
   https://github.com/johanix/draft-berra-dnsop-announce-scanner
   (https://github.com/johanix/draft-berra-dnsop-announce-scanner).  The
   most recent working version of the document, open issues, etc, should
   all be available there.  The authors (gratefully) accept pull
   requests.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-berra-dnsop-announce-scanner-02"/>
   
</reference>

<reference anchor="I-D.berra-dnsop-keystate">
   <front>
      <title>Signalling Key State Via DNS EDNS(0) OPT</title>
      <author fullname="Erik Bergström" initials="E." surname="Bergström">
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <author fullname="Leon Fernandez" initials="L." surname="Fernandez">
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <author fullname="Johan Stenstam" initials="J." surname="Stenstam">
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <date day="7" month="February" year="2025"/>
      <abstract>
	 <t>   This document introduces the KeyState EDNS(0) option code, to enable
   the exchange of SIG(0) key state information between DNS entities via
   the DNS protocol.  The KeyState option allows DNS clients and servers
   to include key state data in both queries and responses, facilitating
   mutual awareness of SIG(0) key status between child and parent zones.
   This mechanism addresses the challenges of maintaining
   synchronization of SIG(0) keys used for securing DNS UPDATE messages,
   thereby enhancing the efficiency and reliability of DNS operations
   that require coordinated key management.

   This document proposes such a mechanism.

   TO BE REMOVED: This document is being collaborated on in Github at:
   https://github.com/johanix/draft-berra-dnsop-opt-transaction-state
   (https://github.com/johanix/draft-berra-dnsop-transaction-state-00).
   The most recent working version of the document, open issues, etc,
   should all be available there.  The authors (gratefully) accept pull
   requests.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-berra-dnsop-keystate-01"/>
   
</reference>



    </references>

</references>


<?line 805?>

<section anchor="change-history-to-be-removed-before-publication"><name>Change History (to be removed before publication)</name>

<t><list style="symbols">
  <t>draft-ietf-dnsop-delegation-mgmt-via-ddns-00</t>
</list></t>

<ul empty="true"><li>
  <t>Re-submitted as a WG document after adoption.</t>
</li></ul>

<t><list style="symbols">
  <t>draft-johani-dnsop-delegation-mgmt-via-ddns-06</t>
</list></t>

<ul empty="true"><li>
  <t>Added the more secure bootstrap of the SIG(0) public key based on
RFC9615 in addition to the original mechanism based on RFC8078.</t>
</li></ul>

<ul empty="true"><li>
  <t>Replaced references to the draft on generalized notifications with
a reference to RFC9859.</t>
</li></ul>

<t><list style="symbols">
  <t>draft-johani-dnsop-delegation-mgmt-via-ddns-05</t>
</list></t>

<ul empty="true"><li>
  <t>Fixed typos in the KeyState OPT section.</t>
</li></ul>

<ul empty="true"><li>
  <t>Added a section on mutual authentication.</t>
</li></ul>

<ul empty="true"><li>
  <t>Fixed spelling errors.</t>
</li></ul>

<t><list style="symbols">
  <t>draft-johani-dnsop-delegation-mgmt-via-ddns-04</t>
</list></t>

<ul empty="true"><li>
  <t>Reworked the section on automatic bootstrapping a la RFC8078.</t>
</li></ul>

<ul empty="true"><li>
  <t>Added a section on re-bootstrapping the SIG(0) key with the parent
after problems.</t>
</li></ul>

<ul empty="true"><li>
  <t>Added text on the importance of augmenting error responses using EDE
(RFC8914).</t>
</li></ul>

<ul empty="true"><li>
  <t>Added text on the insufficiency of RFC8914 for child-to-parent
communication and a reference to the (upcoming) draft on a new OPT
code to alleviate this.</t>
</li></ul>

<t><list style="symbols">
  <t>draft-johani-dnsop-delegation-mgmt-via-ddns-03</t>
</list></t>

<ul empty="true"><li>
  <t>Update the draft based on the excellent dnsdir review of 
draft-ietf-dnsop-generalized-notify-01 by Patrick Mevsek.</t>
</li></ul>

<ul empty="true"><li>
  <t>Expand the section on alternatives for initial bootstrap
to suggest a mechanism similar to what is used for automatic
bootstrap of DNSSEC signed delegations via multiple queries
for child the CDS RRset.</t>
</li></ul>

<ul empty="true"><li>
  <t>Added a section on scalability considerations.</t>
</li></ul>

<ul empty="true"><li>
  <t>Expanded the Security Considerations section with a paragraph on
the potential for DDOS attacks aimed at the UPDATE Receiver.</t>
</li></ul>

<t><list style="symbols">
  <t>draft-johani-dnsop-delegation-mgmt-via-ddns-02</t>
</list></t>

<ul empty="true"><li>
  <t>Update the references to the (updated) I-D for generalized
notifications.</t>
</li></ul>

<ul empty="true"><li>
  <t>Remove duplicated descriptions between the two drafts. It is
sufficient that the generalized notification draft describes the
mechanics.</t>
</li></ul>

<t><list style="symbols">
  <t>draft-johani-dnsop-delegation-mgmt-via-ddns-01</t>
</list></t>

<ul empty="true"><li>
  <t>Change the RRtype from the original "NOTIFY" to the proposed "DSYNC"</t>
</li></ul>

<ul empty="true"><li>
  <t>Expand the description of how to interpret different RCODE responses
to the UPDATE. Expand the description of bootstrapping
alternatives. Change the mnemonic of the RR type used from "NOTIFY"
to "DSYNC" in the examples.</t>
</li></ul>

<t><list style="symbols">
  <t>draft-johani-dnsop-delegation-mgmt-via-ddns-00</t>
</list></t>

<ul empty="true"><li>
  <t>Initial public draft.</t>
</li></ul>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+192XIjx7Xge35FDvRwSQUAdbckS+INy8MmKYtXvbnZugqN
w2EXCwmgxEIVXFkgGmr3b80PzI/NWXMpAFRLVsS8TIfDIoCqXE6efcvJZGL6
qq/dmR2db/p2VfRVs7CXL27spavdAj62jX1eNMXCrVzT2/uqsJfw88gUt7ed
uz+jT/b79azonbftPH3vupm33Yr+NrO2bIoVzDPrink/qVw/n8wa364ns/DC
ZLVY9ROYYjKDnyaPHhkc9cy+uzx/c/XelPBh0Xa7M+v7mTHVujuzfbfx/ZNH
j7569MQUnSvOYNLedY3rzbbt7hZdu1mf4X5evrI/wBe4uz/jl+bO7eCJWXxh
cokrM8b3RTP7e1G3DUy9c96sqzP7174tx9a3Xd+5uYe/div842/GFJt+2XZn
xk6MhX9V48/sf03tTe8aGGlFX/LO/6tdFk3+Q9stiqb6mXZ/Zt8snb3Zulnl
l2FV9pt208wYhvhGCR97hAE+6Pg7tyqq+sz+hONPvYz/PysZwffVvHe1d/Cb
y5Z5NbVPXbfwffd//ne60Kuuuhv+8ruu1MEE01ueoP2QlT6b2m/gETgY93Oy
0GcOsCz/4XddZw3jT+c6/pF1moaR/N6dAVIqytOnyWRii1vYZFECYiWUUUXK
sCfV1E1tDysFQnr92rt+bNet99Vt7eyi3rjk4+WN6VwJaOtPrV+2m3pmi3pb
7Ly9dfbOrXsYGXCzKeFzv3WuseWygod+BmS2sAm7BiJpeoOfp/bbduvuXTfG
l9a4xqp0sJACRvG2aXsdG9dWFt5NjflhCWPi59nhzciLugp6M66g8mbjN0Vd
7+xWiHFeNbDB201vtxUQEvwX3ylWeCjITjo3w9Nqyh2vDH6l1dt227jO1tWd
g9Hc27Ure1hpa5fFPW7NNSWMqzBqdna+6eDdDjbaAiRX3gCZbGBJPSIAPIPv
wS77AnFyXZXwdePdPzc4kIedIyohq0PMs35dAKiWhYcF3LsZrR2WBruX4S2A
BGBUFjPgigj4qjcNAtsuWvwG4Dq1LwH0XYGrGuM6tlVdW32IHrEAhKq2BSwe
YIasBjk0zLdyJdB65XmeZbvFnd85tyboZQfCJ6HvViVBHxY6c+u63bkZbQ0/
t+WGWDzsAPANFuk35RLmDnPhky/t0yv7+ur5y/++ukTySl+sEAvxTMu2rovb
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
b9f69eAlNeRaeIBIfxpgav4vKY2eS4GSAAA=

-->

</rfc>

