<?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-thomassen-dnsop-cds-consistency-00" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" updates="7344" consensus="true">

<front>
<title abbrev="cds-consistency">Ensuring CDS/CDNSKEY Consistency is Mandatory</title><seriesInfo value="draft-thomassen-dnsop-cds-consistency-00" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="P." surname="Thomassen" fullname="Peter Thomassen"><organization>deSEC, Secure Systems Engineering</organization><address><postal><street></street>
<city>Berlin</city>
<country>Germany</country>
</postal><email>peter@desec.io</email>
</address></author>
<date year="2022" month="July" day="9"></date>
<area>Internet</area>
<workgroup>DNSOP Working Group</workgroup>

<abstract>
<t>For maintaining DNSSEC Delegation Trust, DS records have to be kept up
to date.
<xref target="RFC7344"></xref> automates this by having the child publish CDS and/or
CDNSKEY records which hold the prospective DS parameters.
Parent-side entities (e.g. Registries, Registrars) can use these records
to update the delegation's DS records.
A common method for detecting changes in CDS/CDNSKEY record sets is to
query them periodically from the child zone (&quot;polling&quot;), as described in
Section 6.1 of <xref target="RFC7344"></xref>.</t>
<t>This document specifies that if polling is used, parent-side entities
MUST ensure that CDS/CDNSKEY record sets are equivalent across all of
the child's authoritative nameservers, before taking any action based on
these records.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t><xref target="RFC7344"></xref> automates DNSSEC delegation trust maintenance by having the
child publish CDS and/or CDNSKEY records which hold the prospective DS
parameters.
Parent-side entities (e.g. Registries, Registrars) can use these records
to update the delegation's DS records.
A common method for detecting changes in CDS/CDNSKEY record sets is to
query them periodically from the child zone (&quot;polling&quot;), as described in
Section 6.1 of <xref target="RFC7344"></xref>.</t>
<t>While <xref target="RFC7344"></xref> does specify acceptance rules (Section 4.1 ) for
CDS/CDNSKEY records that have been retrieved, it does not mention how
specifically the poll queries should be done.
A naive implementation would thus be likely to simply query CDS or
CDNSKEY records through a trusted validating resolver, and use the
validated answer.</t>
<t>This may be fine if all authoritative nameservers are controlled by the
same entity (= DNS operator).
However, it poses a problem in conjunction with multi-signer setups
(<xref target="RFC8901"></xref>):
When the CDS/CDNSKEY are retrieved &quot;normally&quot; using a validating
resolver, chances are that records are retrieved from one nameserver
only, without checking for consistency across other NS hostnames.</t>
<t>In a multi-signer setup, this means that a single provider could
(accidentally or maliciously) roll the DS record set at the parent.
For example, a provider could be performing a key rollover and then
accidentally publish CDS/CDNSKEY records for its own keys.
As a result, when the parent happens to retrieve the records from a
nameserver controlled by this provider, the other providers' DS records
would be removed from the parent, breaking the zone for some or all
queries.</t>
<t>A single provider should not be in the position to remove the other
providers' trust anchors.
To address this issue, this document specifies that if polling is used,
parent-side entities MUST ensure that CDS/CDNSKEY record sets are
equivalent across all of the child's authoritative nameservers, before
taking any action based on these records.</t>
<t>Readers are expected to be familiar with DNSSEC, including <xref target="RFC4033"></xref>,
<xref target="RFC4034"></xref>, <xref target="RFC4035"></xref>, <xref target="RFC6781"></xref>, <xref target="RFC7344"></xref>, and <xref target="RFC8901"></xref>.</t>

<section anchor="requirements-notation"><name>Requirements Notation</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>
</section>
</section>

<section anchor="polling-a-cds-or-cdnskey-record-set"><name>Polling a CDS or CDNSKEY Record Set</name>
<t>The terminology in this section is as defined in <xref target="RFC7344"></xref>.</t>
<t>To retrieve a Child's CDS/CDNSKEY RRset for DNSSEC delegation trust
maintenance, the Parental Agent, knowing both the Child zone name and
its NS hostnames, MUST ascertain that queries are made against all of
the nameservers listed in the Child's delegation from the Parent, and
ensure that the set of referenced keys is equal.</t>
<t>In other words, CDS/CDNSKEY records at the Child zone apex MUST be
queried directly from each of the authoritative servers as determined by
the delegation's NS record set, with DNSSEC validation enforced.
When a key is referenced in the CDS or CDNSKEY record set returned by
one nameserver, but not referenced in the corresponding answers of all
of the other nameservers, the CDS/CDNSKEY state MUST be considered
inconsistent.</t>
<t>If an inconsistent CDS/CDNSKEY state is encountered, the Parental Agent
MUST take no action.
Specifically, it MUST NOT delete or alter the existing DS RRset.</t>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>The level of rigor mandated by this document is needed to prevent
publication of a half-baked DS RRset (authorized only under a subset
of NS hostnames).
This ensures, for example, that an operator in a multi-homed setup
cannot unilaterally remove another operator's trust anchor from the
delegation's DS records.</t>
<t>As a consequence, DS records can only be modified when there is
consensus across all operators.</t>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4033.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4034.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4035.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6781.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7344.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8901.xml"/>
</references>

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

<ul>
<li>draft-thomassen-dnsop-cds-consistency-00</li>
</ul>
<blockquote><t>Initial public draft.</t>
</blockquote></section>

</back>

</rfc>
