| rfc9615.original.xml | rfc9615.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Process | ||||
| or - mmark.miek.nl" --> | <!DOCTYPE rfc [ | |||
| <rfc version="3" ipr="trust200902" docName="draft-ietf-dnsop-dnssec-bootstrappin | <!ENTITY nbsp " "> | |||
| g-11" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3 | <!ENTITY zwsp "​"> | |||
| .org/2001/XInclude" updates="7344, 8078" indexInclude="true"> | <!ENTITY nbhy "‑"> | |||
| <!ENTITY wj "⁠"> | ||||
| ]> | ||||
| <rfc version="3" | ||||
| xmlns:xi="http://www.w3.org/2001/XInclude" | ||||
| submissionType="IETF" consensus="true" | ||||
| ipr="trust200902" docName="draft-ietf-dnsop-dnssec-bootstrapping-11" number="961 | ||||
| 5" category="std" xml:lang="en" updates="7344, 8078" tocInclude="true" symRefs= | ||||
| "true" | ||||
| sortRefs="true"> | ||||
| <front> | <front> | |||
| <title abbrev="dnssec-bootstrapping">Automatic DNSSEC Bootstrapping using Authen | <title abbrev="DNSSEC Bootstrapping">Automatic DNSSEC Bootstrapping Using Auth | |||
| ticated Signals from the Zone's Operator</title><seriesInfo value="draft-ietf-dn | enticated Signals from the Zone's Operator</title> | |||
| sop-dnssec-bootstrapping-11" stream="IETF" status="standard" name="Internet-Draf | <seriesInfo name="RFC" value="9615"/> | |||
| t"></seriesInfo> | <author initials="P." surname="Thomassen" fullname="Peter Thomassen"> | |||
| <author initials="P." surname="Thomassen" fullname="Peter Thomassen"><organizati | <organization>deSEC, Secure Systems Engineering (SSE)</organization> | |||
| on>deSEC, Secure Systems Engineering</organization><address><postal><street></st | <address> | |||
| reet> | <postal> | |||
| <city>Berlin</city> | <city>Berlin</city> | |||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal><email>peter@desec.io</email> | </postal> | |||
| </address></author><author initials="N." surname="Wisiol" fullname="Nils Wisiol" | <email>peter@desec.io</email> | |||
| ><organization>deSEC, Technische Universität Berlin</organization><address><post | </address> | |||
| al><street></street> | </author> | |||
| <city>Berlin</city> | <author initials="N." surname="Wisiol" fullname="Nils Wisiol"> | |||
| <country>Germany</country> | <organization>deSEC, Technische Universität Berlin</organization> | |||
| </postal><email>nils@desec.io</email> | <address> | |||
| </address></author><date year="2024" month="May" day="28"></date> | <postal> | |||
| <area>Internet</area> | <city>Berlin</city> | |||
| <workgroup>DNSOP Working Group</workgroup> | <country>Germany</country> | |||
| </postal> | ||||
| <email>nils@desec.io</email> | ||||
| </address> | ||||
| </author> | ||||
| <date year="2024" month="July"/> | ||||
| <area>OPS</area> | ||||
| <workgroup>dnsop</workgroup> | ||||
| <keyword>DNSSEC</keyword> | ||||
| <keyword>bootstrapping</keyword> | ||||
| <keyword>DS</keyword> | ||||
| <keyword>CDS</keyword> | ||||
| <keyword>CDNSKEY</keyword> | ||||
| <abstract> | <abstract> | |||
| <t>This document introduces an in-band method for DNS operators to | <t>This document introduces an in-band method for DNS operators to | |||
| publish arbitrary information about the zones they are authoritative | publish arbitrary information about the zones for which they are authoritative, | |||
| for, in an authenticated fashion and on a per-zone basis. | in an authenticated fashion and on a per-zone basis. | |||
| The mechanism allows managed DNS operators to securely announce | The mechanism allows managed DNS operators to securely announce | |||
| DNSSEC key parameters for zones under their management, including for | DNSSEC key parameters for zones under their management, including for | |||
| zones that are not currently securely delegated.</t> | zones that are not currently securely delegated.</t> | |||
| <t>Whenever DS records are absent for a zone's delegation, this signal | <t>Whenever DS records are absent for a zone's delegation, this signal | |||
| enables the parent's registry or registrar to cryptographically | enables the parent's registry or registrar to cryptographically | |||
| validate the CDS/CDNSKEY records found at the child's apex. | validate the CDS/CDNSKEY records found at the child's apex. | |||
| The parent can then provision DS records for the delegation without | The parent can then provision DS records for the delegation without | |||
| resorting to out-of-band validation or weaker types of cross-checks | resorting to out-of-band validation or weaker types of cross-checks | |||
| such as "Accept after Delay".</t> | such as "Accept after Delay".</t> | |||
| <t>This document establishes the DS enrollment method described in | <t>This document establishes the DS enrollment method described in | |||
| <xref target="dnssec-bootstrapping"></xref> of this document as the preferred me thod over | Section 4 of this document as the preferred method over | |||
| those from Section 3 of RFC 8078. It also updates RFC 7344.</t> | those from Section 3 of RFC 8078. It also updates RFC 7344.</t> | |||
| <t>[ Ed note: This document is being collaborated on at | ||||
| <eref target="https://github.com/desec-io/draft-ietf-dnsop-dnssec-bootstrapping/ | ||||
| ">https://github.com/desec-io/draft-ietf-dnsop-dnssec-bootstrapping/</eref>. | ||||
| The authors gratefully accept pull requests. ]</t> | ||||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="introduction"><name>Introduction</name> | <section anchor="introduction"><name>Introduction</name> | |||
| <t>Securing a DNS delegation for the first time requires that the | <t>Securing a DNS delegation for the first time requires that the | |||
| child's DNSSEC parameters be conveyed to the parent through some | child's DNSSEC parameters be conveyed to the parent through some | |||
| trusted channel. | trusted channel. | |||
| While the communication conceptually has to occur between the parent | While the communication conceptually has to occur between the parent | |||
| registry and the DNSSEC key holder, what exactly that means and how | registry and the DNSSEC key holder, what that means exactly and how | |||
| the communication is coordinated traditionally depends on the | communication is coordinated traditionally depends on the | |||
| relationship the child has with the parent.</t> | relationship the child has with the parent.</t> | |||
| <t>A typical situation is that the key is held by the child DNS | <t>A typical situation is that the key is held by the child DNS | |||
| operator; the communication thus often involves this entity. | operator; thus, the communication often involves this entity. | |||
| In addition, depending on the circumstances, it may also involve the | In addition, depending on the circumstances, it may also involve the | |||
| registrar, possibly via the registrant (for details, see <xref target="RFC7344"> | registrar, possibly via the registrant (for details, see <xref target="RFC7344" | |||
| </xref>, | sectionFormat="of" section="A"></xref>.</t> | |||
| Appendix A).</t> | ||||
| <t>As observed in <xref target="RFC7344"></xref>, these dependencies often resul t in a manual | <t>As observed in <xref target="RFC7344"></xref>, these dependencies often resul t in a manual | |||
| process that is susceptible to mistakes and/or errors. | process that is susceptible to mistakes and/or errors. | |||
| In addition, due to the annoyance factor of the process, involved | In addition, due to the annoyance factor of the process, involved | |||
| parties may avoid the process of getting a DS record set (RRset) | parties may avoid the process of getting a DS resource record set (RRset) | |||
| published in the first place.</t> | published in the first place.</t> | |||
| <t>To alleviate these problems, automated provisioning of DS records has | <t>To alleviate these problems, automated provisioning of DS records has | |||
| been specified in (<xref target="RFC8078"></xref>). | been specified in <xref target="RFC8078"></xref>. | |||
| It is based on the parental agent (registry or registrar) fetching | It is based on the parental agent (registry or registrar) fetching | |||
| DNSSEC key parameters from the CDS and CDNSKEY records (<xref target="RFC7344">< /xref>) | DNSSEC key parameters from the CDS and CDNSKEY records (<xref target="RFC7344">< /xref>) | |||
| located at the child zone's apex, and validating them somehow. | located at the child zone's apex, and validating them somehow. | |||
| This validation can be done using the child's existing DNSSEC chain of | This validation can be done using the child's existing DNSSEC chain of | |||
| trust if the objective is to update an existing DS RRset (such as | trust if the objective is to update an existing DS RRset (such as | |||
| during key rollover). | during key rollover). | |||
| However, when bootstrapping a DNSSEC delegation, the child zone has | However, when bootstrapping a DNSSEC delegation, the child zone has | |||
| no existing DNSSEC validation path, and other means to ensure the | no existing DNSSEC validation path, so other means to ensure the | |||
| CDS/CDNSKEY records' legitimacy must be found.</t> | CDS/CDNSKEY records' legitimacy must be found.</t> | |||
| <t>Due to the lack of a comprehensive DNS-innate solution, either | <t>Due to the lack of a comprehensive DNS-innate solution, either | |||
| out-of-band methods have been used so far to complete the chain of | out-of-band methods have been used so far to complete the chain of | |||
| trust, or cryptographic validation has been entirely dispensed with, in | trust, or cryptographic validation has been entirely dispensed with, in | |||
| exchange for weaker types of cross-checks such as "Accept after | exchange for weaker types of cross-checks such as "Accept after | |||
| Delay" (<xref target="RFC8078"></xref> Section 3.3). | Delay" (<xref target="RFC8078" sectionFormat="of" section="3.3"></xref>). | |||
| <xref target="RFC8078"></xref> does not define an in-band validation method for enabling | <xref target="RFC8078"></xref> does not define an in-band validation method for enabling | |||
| DNSSEC.</t> | DNSSEC.</t> | |||
| <t>This document aims to close this gap by introducing an in-band method | <t>This document aims to close this gap by introducing an in-band method | |||
| for DNS operators to publish arbitrary information about the zones | for DNS operators to publish arbitrary information about the zones | |||
| they are authoritative for, in an authenticated manner and on a | for which they are authoritative, in an authenticated manner and on a | |||
| per-zone basis. | per-zone basis. | |||
| The mechanism allows managed DNS operators to securely announce | The mechanism allows managed DNS operators to securely announce | |||
| DNSSEC key parameters for zones under their management. | DNSSEC key parameters for zones under their management. | |||
| The parent can then use this signal to cryptographically validate the | The parent can then use this signal to cryptographically validate the | |||
| CDS/CDNSKEY RRsets found at an insecure child zone's apex and, upon | CDS/CDNSKEY RRsets found at an insecure child zone's apex and, upon | |||
| success, secure the delegation.</t> | success, secure the delegation.</t> | |||
| <t>While applicable to the vast majority of domains, the protocol does | <t>While applicable to the vast majority of domains, the protocol does | |||
| not support certain edge cases, such as excessively long child zone | not support certain edge cases, such as excessively long child zone | |||
| names, or DNSSEC bootstrapping for domains with in-domain nameservers | names, or DNSSEC bootstrapping for domains with in-domain nameservers | |||
| only (see <xref target="limitations"></xref>).</t> | only (see <xref target="limitations"></xref>).</t> | |||
| <t>DNSSEC bootstrapping is just one application of the generic signaling | <t>DNSSEC bootstrapping is just one application of the generic signaling | |||
| mechanism specified in this document. | mechanism specified in this document. | |||
| Other applications might arise in the future, such as publishing | Other applications might arise in the future, such as publishing | |||
| operational metadata or auxiliary information which the DNS operator | operational metadata or auxiliary information that the DNS operator | |||
| likes to make known (e.g., API endpoints for third-party interaction).</t> | likes to make known (e.g., API endpoints for third-party interaction).</t> | |||
| <t>Readers are expected to be familiar with DNSSEC <xref target="BCP237"></xref> .</t> | <t>Readers are expected to be familiar with DNSSEC <xref target="BCP237"></xref> .</t> | |||
| <section anchor="terminology"><name>Terminology</name> | <section anchor="terminology"><name>Terminology</name> | |||
| <t>This section defines the terminology used in this document.</t> | <t>This section defines the terminology used in this document.</t> | |||
| <dl spacing="compact"> | <dl spacing="normal"> | |||
| <dt>CDS/CDNSKEY</dt> | <dt>CDS/CDNSKEY:</dt> | |||
| <dd>This notation refers to CDS and/or CDNSKEY, i.e., one or both.</dd> | <dd>This notation refers to CDS and/or CDNSKEY, i.e., one or both.</dd> | |||
| <dt>Child</dt> | <dt>Child:</dt> | |||
| <dd>see <xref target="RFC9499"></xref> Section 7</dd> | <dd>See <xref target="RFC9499" sectionFormat="of" section="7"></xref>.</dd> | |||
| <dt>Child DNS operator</dt> | <dt>Child DNS operator:</dt> | |||
| <dd>The entity that maintains and publishes the zone information for | <dd>The entity that maintains and publishes the zone information for | |||
| the child DNS.</dd> | the child DNS.</dd> | |||
| <dt>Parent</dt> | <dt>Parent:</dt> | |||
| <dd>see <xref target="RFC9499"></xref> Section 7</dd> | <dd>See <xref target="RFC9499" sectionFormat="of" section="7"></xref>.</dd> | |||
| <dt>Parental agent</dt> | <dt>Parental agent:</dt> | |||
| <dd>The entity that has the authority to insert DS records into the | <dd>The entity that has the authority to insert DS records into the | |||
| parent zone on behalf of the child. | parent zone on behalf of the child. | |||
| (It could be the registry, registrar, a reseller, or some other | (It could be the registry, registrar, a reseller, or some other | |||
| authorized entity.)</dd> | authorized entity.)</dd> | |||
| <dt>Signaling domain</dt> | ||||
| <dt>Signaling domain:</dt> | ||||
| <dd>A domain name constructed by prepending the label <tt>_signal</tt> to a | <dd>A domain name constructed by prepending the label <tt>_signal</tt> to a | |||
| hostname taken from the child's NS RRSet. | hostname taken from a delegation's NS RRset. | |||
| There are as many signaling domains as there are distinct NS | There are as many signaling domains as there are distinct NS | |||
| targets.</dd> | targets.</dd> | |||
| <dt>Signaling name</dt> | <dt>Signaling name:</dt> | |||
| <dd>The labels that are prefixed to a signaling domain in order to | <dd>The labels that are prefixed to a signaling domain in order to | |||
| identify a signaling type and a child zone's name (see | identify a signaling type and a child zone's name (see | |||
| <xref target="signalingnames"></xref>).</dd> | <xref target="signalingnames"></xref>).</dd> | |||
| <dt>Signaling record</dt> | <dt>Signaling record:</dt> | |||
| <dd>A DNS record located at a signaling name under a signaling domain. | <dd>A DNS record located at a signaling name under a signaling domain. | |||
| Signaling records are used by the child DNS operator to publish | Signaling records are used by the child DNS operator to publish | |||
| information about the child.</dd> | information about the child.</dd> | |||
| <dt>Signaling type</dt> | <dt>Signaling type:</dt> | |||
| <dd>A signal type identifier, such as <tt>_dsboot</tt> for DNSSEC bootstrapping. </dd> | <dd>A signal type identifier, such as <tt>_dsboot</tt> for DNSSEC bootstrapping. </dd> | |||
| <dt>Signaling zone</dt> | <dt>Signaling zone:</dt> | |||
| <dd>The zone which is authoritative for a given signaling record.</dd> | <dd>The zone that is authoritative for a given signaling record.</dd> | |||
| </dl> | </dl> | |||
| </section> | </section> | |||
| <section anchor="requirements-notation"><name>Requirements Notation</name> | <section anchor="requirements-notation"><name>Requirements Notation</name> | |||
| <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>& | <t> | |||
| quot;, "<bcp14>REQUIRED</bcp14>", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<b | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
| cp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ", | |||
| "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>&quo | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| t;, "<bcp14>MAY</bcp14>", and | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as de | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| scribed in | be | |||
| BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and o | interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | |||
| nly when, they appear in all | target="RFC8174"/> when, and only when, they appear in all capitals, as | |||
| capitals, as shown here.</t> | shown here. | |||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="updates-to-rfcs"><name>Updates to RFCs</name> | <section anchor="updates-to-rfcs"><name>Updates to RFCs</name> | |||
| <t>The DS enrollment methods described in Section 3 of <xref target="RFC8078"></ xref> are less | <t>The DS enrollment methods described in <xref target="RFC8078" sectionFormat=" of" section="3"></xref> are less | |||
| secure than the method described in <xref target="dnssec-bootstrapping"></xref> of this | secure than the method described in <xref target="dnssec-bootstrapping"></xref> of this | |||
| document. | document. | |||
| Child DNS operators and parental agents wishing to use CDS/CDNSKEY | Therefore, child DNS operators and parental agents wishing to use CDS/CDNSKEY | |||
| records for initial DS enrollment SHOULD therefore support the | records for initial DS enrollment <bcp14>SHOULD</bcp14> support the | |||
| authentication protocol described here.</t> | authentication protocol described here.</t> | |||
| <t>In order to facilitate publication of signaling records for the purpose | <t>In order to facilitate publication of signaling records for the purpose | |||
| of DNSSEC bootstrapping (see <xref target="signalingrecords"></xref>), the first bullet | of DNSSEC bootstrapping (see <xref target="signalingrecords"></xref>), the first bullet | |||
| ("Location") of <xref target="RFC7344"></xref> Section 4.1 is removed. </t> | ("Location") of <xref target="RFC7344" sectionFormat="of" section="4.1"></xref> is removed.</t> | |||
| </section> | </section> | |||
| <section anchor="signaling"><name>Signaling</name> | <section anchor="signaling"><name>Signaling</name> | |||
| <t>This section describes the general mechanism by which a child DNS | <t>This section describes the general mechanism by which a child DNS | |||
| operator can publish an authenticated signal about a child zone. | operator can publish an authenticated signal about a child zone. | |||
| Parental agents (or any other party) can then discover and process the | Parental agents (or any other party) can then discover and process the | |||
| signal. | signal. | |||
| Authenticity is ensured through standard DNSSEC validation.</t> | Authenticity is ensured through standard DNSSEC validation.</t> | |||
| <section anchor="chain-of-trust"><name>Chain of Trust</name> | <section anchor="chain-of-trust"><name>Chain of Trust</name> | |||
| <t>If a child DNS operator implements this specification, each signaling | <t>If a child DNS operator implements this specification, each signaling | |||
| zone MUST be signed and be validatable by the parental agent (i.e., have | zone <bcp14>MUST</bcp14> be signed and be validatable by the parental agent (i.e ., have | |||
| a valid publicly resolvable DNSSEC chain of trust). | a valid publicly resolvable DNSSEC chain of trust). | |||
| This is typically achieved by securely delegating each signaling zone.</t> | This is typically achieved by securely delegating each signaling zone.</t> | |||
| <t>For example, when publishing a signal that relates to a child zone | <t>For example, when publishing a signal that relates to a child zone | |||
| with NS records <tt>ns1.example.net</tt> and <tt>ns2.example.org</tt>, the child | with NS records <tt>ns1.example.net</tt> and <tt>ns2.example.org</tt>, the child | |||
| DNS operator needs to ensure that the parental agent has a valid DNSSEC | DNS operator needs to ensure that the parental agent has a valid DNSSEC | |||
| chain of trust for the zone(s) that are authoritative for the signaling | chain of trust for the zone(s) that are authoritative for the signaling | |||
| domains <tt>_signal.ns1.example.net</tt> and <tt>_signal.ns2.example.org</tt>.</ t> | domains <tt>_signal.ns1.example.net</tt> and <tt>_signal.ns2.example.org</tt>.</ t> | |||
| </section> | </section> | |||
| <section anchor="signalingnames"><name>Signaling Names</name> | <section anchor="signalingnames"><name>Signaling Names</name> | |||
| <t>To publish information about the child zone in an | <t>To publish information about the child zone in an | |||
| authenticated fashion, the child DNS operator MUST publish one or | authenticated fashion, the child DNS operator <bcp14>MUST</bcp14> publish one or | |||
| more signaling records at a signaling name under each signaling domain.</t> | more signaling records at a signaling name under each signaling domain.</t> | |||
| <t>Signaling records MUST be accompanied by RRSIG records created with | <t>Signaling records <bcp14>MUST</bcp14> be accompanied by RRSIG records created with | |||
| the corresponding signaling zone's key(s). | the corresponding signaling zone's key(s). | |||
| The type and contents of these signaling records depend on the type of | The type and contents of these signaling records depend on the type of | |||
| signal.</t> | signal.</t> | |||
| <t>The signaling name identifies the child and the signaling type. | <t>The signaling name identifies the child and the signaling type. | |||
| It is identical to the child name (with the final root label removed), | It is identical to the child name (with the final root label removed), | |||
| prefixed with a label containing the signaling type.</t> | prefixed with a label containing the signaling type.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="dnssec-bootstrapping"><name>Bootstrapping a DNSSEC Delegation</ name> | <section anchor="dnssec-bootstrapping"><name>Bootstrapping a DNSSEC Delegation</ name> | |||
| <t>When the child zone's CDS/CDNSKEY RRsets are used for setting up initial | <t>When the child zone's CDS/CDNSKEY RRsets are used for setting up initial | |||
| trust, they need to be authenticated. | trust, they need to be authenticated. | |||
| This is achieved by co-publishing the child's CDS/CDNSKEY RRsets as an | This is achieved by copublishing the child's CDS/CDNSKEY RRsets as an | |||
| authenticated signal as described in <xref target="signaling"></xref>. | authenticated signal as described in <xref target="signaling"></xref>. | |||
| The parent can discover and validate it, thus transferring trust from | The parent can discover and validate it, thus transferring trust from | |||
| the child DNS operator nameservers' chain of trust to the child zone.</t> | the child DNS operator nameservers' chain of trust to the child zone.</t> | |||
| <t>This protocol is not intended for updating an existing DS RRset. | <t>This protocol is not intended for updating an existing DS RRset. | |||
| For this purpose, the parental agent can validate the child's | For this purpose, the parental agent can validate the child's | |||
| CDS/CDNSKEY RRsets directly, using the chain of trust established by | CDS/CDNSKEY RRsets directly, using the chain of trust established by | |||
| the existing DS RRset (<xref target="RFC7344"></xref> Section 4).</t> | the existing DS RRset (<xref target="RFC7344" sectionFormat="of" section="4"></x ref>).</t> | |||
| <section anchor="signalingrecords"><name>Signaling Consent to Act as the Child's Signer</name> | <section anchor="signalingrecords"><name>Signaling Consent to Act as the Child's Signer</name> | |||
| <t>To confirm its willingness to act as the child's delegated signer and | <t>To confirm its willingness to act as the child's delegated signer and | |||
| authenticate the child's CDS/CDNSKEY RRsets, the child DNS operator | authenticate the child's CDS/CDNSKEY RRsets, the child DNS operator | |||
| MUST co-publish them at the corresponding signaling name under each | <bcp14>MUST</bcp14> copublish them at the corresponding signaling name under eac h | |||
| signaling domain, excluding those that would fall within the child | signaling domain, excluding those that would fall within the child | |||
| domain (<xref target="signalingnames"></xref>). | domain (<xref target="signalingnames"></xref>). | |||
| For simplicity, the child DNS operator MAY also co-publish the child's | For simplicity, the child DNS operator <bcp14>MAY</bcp14> also copublish the chi ld's | |||
| CDS/CDNSKEY RRsets under signaling domains within the child domain, | CDS/CDNSKEY RRsets under signaling domains within the child domain, | |||
| although those signaling domains are not used for validation | although those signaling domains are not used for validation | |||
| (<xref target="cds-auth"></xref>).</t> | (<xref target="cds-auth"></xref>).</t> | |||
| <t>Unlike the CDS/CDNSKEY RRsets at the child's apex, a signaling | <t>Unlike the CDS/CDNSKEY RRsets at the child's apex, a signaling | |||
| record set MUST be signed with the corresponding signaling zone's | RRset <bcp14>MUST</bcp14> be signed with the corresponding signaling zone's | |||
| key(s). Its contents MUST be identical to the corresponding | key(s). Its contents <bcp14>MUST</bcp14> be identical to the corresponding | |||
| RRset published at the child's apex.</t> | RRset published at the child's apex.</t> | |||
| <t>Existing use of CDS/CDNSKEY records was specified at the child apex | <t>Existing use of CDS/CDNSKEY records was specified at the child apex | |||
| only (<xref target="RFC7344"></xref>, Section 4.1). This protocol extends the u se of | only (<xref target="RFC7344" sectionFormat="of" section="4.1"></xref>). This pr otocol extends the use of | |||
| these record types to non-apex owner names for the purpose of DNSSEC | these record types to non-apex owner names for the purpose of DNSSEC | |||
| bootstrapping. To exclude the possibility of semantic collision, | bootstrapping. To exclude the possibility of semantic collision, | |||
| there MUST NOT be a zone cut at a signaling name.</t> | there <bcp14>MUST NOT</bcp14> be a zone cut at a signaling name.</t> | |||
| <section anchor="example"><name>Example</name> | <section anchor="example"><name>Example</name> | |||
| <t>For the purposes of bootstrapping the child zone <tt>example.co.uk</tt> with NS | <t>For the purposes of bootstrapping the child zone <tt>example.co.uk</tt> with NS | |||
| records <tt>ns1.example.net</tt>, <tt>ns2.example.org</tt>, and <tt>ns3.example. co.uk</tt>, | records <tt>ns1.example.net</tt>, <tt>ns2.example.org</tt>, and <tt>ns3.example. co.uk</tt>, | |||
| the required signaling domains are <tt>_signal.ns1.example.net</tt> and | the required signaling domains are <tt>_signal.ns1.example.net</tt> and | |||
| <tt>_signal.ns2.example.org</tt>.</t> | <tt>_signal.ns2.example.org</tt>.</t> | |||
| <t>In the zones containing these domains, the child DNS operator | <t>In the zones containing these domains, the child DNS operator | |||
| authenticates the CDS/CDNSKEY RRsets found at the child's apex by | authenticates the CDS/CDNSKEY RRsets found at the child's apex by | |||
| co-publishing them as CDS/CDNSKEY RRsets at the names:</t> | copublishing them as CDS/CDNSKEY RRsets at the names:</t> | |||
| <artwork><![CDATA[_dsboot.example.co.uk._signal.ns1.example.net | <artwork><![CDATA[_dsboot.example.co.uk._signal.ns1.example.net | |||
| _dsboot.example.co.uk._signal.ns2.example.org | _dsboot.example.co.uk._signal.ns2.example.org]]> | |||
| ]]> | ||||
| </artwork> | </artwork> | |||
| <t>These RRsets are signed with DNSSEC just like any other zone data.</t> | <t>These RRsets are signed with DNSSEC just like any other zone data.</t> | |||
| <t>Publication of signaling records under the in-domain name | <t>Publication of signaling records under the in-domain name | |||
| <tt>_signal.ns3.example.co.uk</tt> is not required.</t> | <tt>_signal.ns3.example.co.uk</tt> is not required.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="cds-auth"><name>Validating CDS/CDNSKEY Records for DNSSEC Boots trapping</name> | <section anchor="cds-auth"><name>Validating CDS/CDNSKEY Records for DNSSEC Boots trapping</name> | |||
| <t>To validate a child's CDS/CDNSKEY RRset for DNSSEC bootstrapping, the | <t>To validate a child's CDS/CDNSKEY RRset for DNSSEC bootstrapping, the | |||
| parental agent, knowing both the child zone name and its NS | parental agent, knowing both the child zone name and its NS | |||
| hostnames, MUST execute the following steps:</t> | hostnames, <bcp14>MUST</bcp14> execute the following steps:</t> | |||
| <ol> | <ol type="Step %d:"> | |||
| <li><t>verify that the child has no DS records published at the parent and | <li anchor="s1"><t>verify that the child has no DS records published at the pare | |||
| nt and | ||||
| that at least one of its nameservers is outside the child domain;</t> | that at least one of its nameservers is outside the child domain;</t> | |||
| </li> | </li> | |||
| <li><t>query the CDS/CDNSKEY RRset at the child zone apex directly from | <li anchor="s2"><t>query the CDS/CDNSKEY RRset at the child zone apex directly f rom | |||
| each of the authoritative servers as determined by the delegation's | each of the authoritative servers as determined by the delegation's | |||
| (parent-side) NS RRset, without caching;</t> | (parent-side) NS RRset, without caching;</t> | |||
| </li> | </li> | |||
| <li><t>query the CDS/CDNSKEY RRset located at the signaling name under | <li anchor="s3"><t>query the CDS/CDNSKEY RRset located at the signaling name und er | |||
| each signaling domain (except those falling within the child domain) | each signaling domain (except those falling within the child domain) | |||
| using a trusted DNS resolver and enforce DNSSEC validation;</t> | using a trusted DNS resolver and enforce DNSSEC validation;</t> | |||
| </li> | </li> | |||
| <li><t>check (separately by record type) that all RRsets retrieved | <li anchor="s4"><t>check (separately by record type) that all RRsets retrieved | |||
| in Steps 2 and 3 have equal contents;</t> | in Steps 2 and 3 have equal contents;</t> | |||
| </li> | </li> | |||
| </ol> | </ol> | |||
| <t>If the above steps succeed without error, the CDS/CDNSKEY RRsets are | <t>If the above steps succeed without error, the CDS/CDNSKEY RRsets are | |||
| successfully verified, and the parental agent can proceed with the | successfully verified, and the parental agent can proceed with the | |||
| publication of the DS RRset under the precautions described in | publication of the DS RRset under the precautions described in | |||
| <xref target="RFC8078"></xref>, Section 5.</t> | <xref target="RFC8078" sectionFormat="of" section="5"></xref>.</t> | |||
| <t>The parental agent MUST abort the procedure if an error | <t>The parental agent <bcp14>MUST</bcp14> abort the procedure if an error | |||
| condition occurs, in particular:</t> | condition occurs, in particular:</t> | |||
| <ul> | <ul> | |||
| <li><t>in Step 1: the child is already securely delegated or has in-domain | <li><t>in <xref target="s1" format="none">Step 1</xref>: the child is already se curely delegated or has in-domain | |||
| nameservers only;</t> | nameservers only;</t> | |||
| </li> | </li> | |||
| <li><t>in Step 2: any failure during the retrieval of the CDS/CDNSKEY | <li><t>in <xref target="s2" format="none">Step 2</xref>: any failure during the retrieval of the CDS/CDNSKEY | |||
| RRset located at the child apex from any of the authoritative | RRset located at the child apex from any of the authoritative | |||
| nameservers;</t> | nameservers;</t> | |||
| </li> | </li> | |||
| <li><t>in Step 3: any failure to retrieve the CDS/CDNSKEY RRsets located | <li><t>in <xref target="s3" format="none">Step 3</xref>: any failure to retrieve the CDS/CDNSKEY RRsets located | |||
| at the signaling name under any signaling domain, including failure | at the signaling name under any signaling domain, including failure | |||
| of DNSSEC validation, or unauthenticated data (AD bit not set);</t> | of DNSSEC validation, or unauthenticated data (AD bit not set);</t> | |||
| </li> | </li> | |||
| <li><t>in Step 4: inconsistent responses (for at least one of the types), | <li><t>in <xref target="s4" format="none">Step 4</xref>: inconsistent responses | |||
| including an RRset that is empty in one of Steps 2 or 3, but | (for at least one of the types), | |||
| including an RRset that is empty in one of Steps <xref target="s2" format="none" | ||||
| >2</xref> or <xref target="s3" format="none">3</xref>, but | ||||
| non-empty in the other.</t> | non-empty in the other.</t> | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <section anchor="example-1"><name>Example</name> | <section anchor="example-1"><name>Example</name> | |||
| <t>To verify the CDS/CDNSKEY RRsets for the child <tt>example.co.uk</tt>, the | <t>To verify the CDS/CDNSKEY RRsets for the child <tt>example.co.uk</tt>, the | |||
| parental agent (assuming that the child delegation's NS records are | parental agent (assuming that the child delegation's NS records are | |||
| <tt>ns1.example.net</tt>, <tt>ns2.example.org</tt>, and <tt>ns3.example.co.uk</t t>)</t> | <tt>ns1.example.net</tt>, <tt>ns2.example.org</tt>, and <tt>ns3.example.co.uk</t t>)</t> | |||
| <ol> | <ol> | |||
| <li><t>checks that the child domain is not yet securely delegated;</t> | <li><t>checks that the child domain is not yet securely delegated;</t> | |||
| </li> | </li> | |||
| <li><t>queries the CDS/CDNSKEY RRsets for <tt>example.co.uk</tt> directly from | <li><t>queries the CDS/CDNSKEY RRsets for <tt>example.co.uk</tt> directly from | |||
| <tt>ns1.example.net</tt>, <tt>ns2.example.org</tt>, and <tt>ns3.example.co.uk</t t> | <tt>ns1.example.net</tt>, <tt>ns2.example.org</tt>, and <tt>ns3.example.co.uk</t t> | |||
| (without caching);</t> | (without caching);</t> | |||
| </li> | </li> | |||
| <li><t>queries and validates the CDS/CDNSKEY RRsets located at (see | <li><t>queries and validates the CDS/CDNSKEY RRsets located at (see | |||
| <xref target="signalingnames"></xref>; <tt>ns3.example.co.uk</tt> is ignored bec ause it is | <xref target="signalingnames"></xref>; <tt>ns3.example.co.uk</tt> is ignored bec ause it is | |||
| in-domain)</t> | in-domain)</t> | |||
| </li> | ||||
| </ol> | ||||
| <artwork><![CDATA[_dsboot.example.co.uk._signal.ns1.example.net | <artwork><![CDATA[_dsboot.example.co.uk._signal.ns1.example.net | |||
| _dsboot.example.co.uk._signal.ns2.example.org | _dsboot.example.co.uk._signal.ns2.example.org]]> | |||
| ]]> | ||||
| </artwork> | </artwork> | |||
| </li> | ||||
| <ol spacing="compact" start="4"> | <li>checks that the CDS/CDNSKEY RRsets retrieved in Steps <xref target="s2" form | |||
| <li>checks that the CDS/CDNSKEY RRsets retrieved in Steps 2 | at="none">2</xref> | |||
| and 3 agree across responses.</li> | and <xref target="s3" format="none">3</xref> agree across responses.</li> | |||
| </ol> | </ol> | |||
| <t>If all these steps succeed, the parental agent can proceed to publish | <t>If all of these steps succeed, the parental agent can proceed to publish | |||
| a DS RRset as indicated by the validated CDS/CDNSKEY RRset.</t> | a DS RRset as indicated by the validated CDS/CDNSKEY RRset.</t> | |||
| <t>As in-domain signaling names do not have a chain of trust at | <t>As in-domain signaling names do not have a chain of trust at | |||
| bootstrapping time, the parental agent does not consider them during | bootstrapping time, the parental agent does not consider them during | |||
| validation. | validation. | |||
| Consequently, if all NS hostnames are in-domain, validation cannot be | Consequently, if all NS hostnames are in-domain, validation cannot be | |||
| completed, and DS records are not published.</t> | completed and DS records are not published.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="triggers"><name>Triggers</name> | <section anchor="triggers"><name>Triggers</name> | |||
| <t>Parental agents SHOULD trigger the procedure described in <xref target="cds-a uth"></xref> | <t>Parental agents <bcp14>SHOULD</bcp14> trigger the procedure described in <xre f target="cds-auth"></xref> | |||
| once one of the following conditions is fulfilled:</t> | once one of the following conditions is fulfilled:</t> | |||
| <ul> | <ul> | |||
| <li><t>The parental agent receives a new or updated NS RRset for a | <li><t>The parental agent receives a new or updated NS RRset for a | |||
| child;</t> | child;</t> | |||
| </li> | </li> | |||
| <li><t>The parental agent receives a notification indicating that the child | <li><t>The parental agent receives a notification indicating that the child | |||
| wishes to have its CDS/CDNSKEY RRset processed;</t> | wishes to have its CDS/CDNSKEY RRset processed;</t> | |||
| </li> | </li> | |||
| <li><t>The parental agent encounters a signaling record during a proactive, | <li><t>The parental agent encounters a signaling record during a proactive, | |||
| opportunistic scan (e.g., daily queries of signaling records for | opportunistic scan (e.g., daily queries of signaling records for | |||
| some or all of its delegations);</t> | some or all of its delegations);</t> | |||
| </li> | </li> | |||
| <li><t>The parental agent encounters a signaling record during an NSEC walk | <li><t>The parental agent encounters a signaling record during an NSEC walk | |||
| or when parsing a signaling zone (e.g., when made available via AXFR | or when parsing a signaling zone (e.g., when made available via AXFR | |||
| by the child DNS operator);</t> | by the child DNS operator);</t> | |||
| </li> | </li> | |||
| <li><t>Any other condition as deemed appropriate by local policy.</t> | <li><t>Any other condition deemed appropriate by local policy.</t> | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t>Timer-based trigger mechanisms (such as scans) exhibit undesirable | <t>Timer-based trigger mechanisms (such as scans) exhibit undesirable | |||
| properties with respect to processing delay and scaling; on-demand | properties with respect to processing delay and scaling; on-demand | |||
| triggers (like notifications) are preferable. Whenever possible, child | triggers (like notifications) are preferable. Whenever possible, child | |||
| DNS operators and parental agents are thus encouraged to use them, | DNS operators and parental agents are thus encouraged to use them, | |||
| reducing both delays and the amount of scanning traffic.</t> | reducing both delays and the amount of scanning traffic.</t> | |||
| <t>Most types of discovery (such as daily scans of delegations) are based | <t>Most types of discovery (such as daily scans of delegations) are based | |||
| directly on the delegation's NS RRset. | directly on the delegation's NS RRset. | |||
| In this case, these NS names can be used as is by the bootstrapping | In this case, these NS names can be used as is by the bootstrapping | |||
| algorithm (<xref target="cds-auth"></xref>) for querying signaling records.</t> | algorithm (<xref target="cds-auth"></xref>) for querying signaling records.</t> | |||
| <t>Some discovery methods, however, do not imply reliable knowledge of the | <t>Some discovery methods, however, do not imply reliable knowledge of the | |||
| delegation's NS RRset. | delegation's NS RRset. | |||
| For example, when discovering signaling names by performing an NSEC | For example, when discovering signaling names by performing an NSEC | |||
| walk or zone transfer of a signaling zone, the parental agent MUST NOT | walk or zone transfer of a signaling zone, the parental agent <bcp14>MUST NOT</b cp14> | |||
| assume that a nameserver under whose signaling domain a signaling | assume that a nameserver under whose signaling domain a signaling | |||
| record appears is actually authoritative for the corresponding child.</t> | record appears is actually authoritative for the corresponding child.</t> | |||
| <t>Instead, whenever a list of "bootstrappable domains" is obtained ot her | <t>Instead, whenever a list of "bootstrappable domains" is obtained by means oth er | |||
| than directly from the parent, the parental | than directly from the parent, the parental | |||
| agent MUST ascertain that the delegation actually contains the | agent <bcp14>MUST</bcp14> ascertain that the delegation actually contains the | |||
| nameserver hostname seen during discovery, and ensure that signaling | nameserver hostname seen during discovery, and ensure that signaling-record quer | |||
| record queries are only made against the proper set of nameservers as | ies are only made against the proper set of nameservers as | |||
| listed in the child's delegation from the parent.</t> | listed in the child's delegation from the parent.</t> | |||
| </section> | </section> | |||
| <section anchor="limitations"><name>Limitations</name> | <section anchor="limitations"><name>Limitations</name> | |||
| <t>As a consequence of Step 3 in <xref target="cds-auth"></xref>, DS bootstrappi | <t>As a consequence of <xref target="s3" format="none">Step 3</xref> in <xref ta | |||
| ng does not | rget="cds-auth"></xref>, DS bootstrapping does not | |||
| work for fully in-domain delegations, as no pre-existing chain of | work for fully in-domain delegations, as no preexisting chain of | |||
| trust to the child domain is available during bootstrapping. | trust to the child domain is available during bootstrapping. | |||
| (As a workaround, one can add an out-of-domain nameserver to the | (As a workaround, one can add an out-of-domain nameserver to the | |||
| initial NS RRset and remove it once bootstrapping is completed. | initial NS RRset and remove it once bootstrapping is completed. | |||
| Automation for this is available via CSYNC records, see <xref target="RFC7477">< /xref>.)</t> | Automation for this is available via CSYNC records, see <xref target="RFC7477">< /xref>.)</t> | |||
| <t>Fully qualified signaling names must by valid DNS names. | <t>Fully qualified signaling names must by valid DNS names. | |||
| Label count and length requirements for DNS names (<xref target="RFC1035"></xref | Label count and length requirements for DNS names (<xref target="RFC1035" sectio | |||
| > Section | nFormat="of" section="3.1"></xref>) imply that the protocol does not work for un | |||
| 3.1) imply that the protocol does not work for unusually long child | usually long child | |||
| domain names or NS hostnames.</t> | domain names or NS hostnames.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="operational-recommendations"><name>Operational Recommendations< /name> | <section anchor="operational-recommendations"><name>Operational Recommendations< /name> | |||
| <section anchor="child-dns-operator"><name>Child DNS Operator</name> | <section anchor="child-dns-operator"><name>Child DNS Operator</name> | |||
| <t>It is possible to add CDS/CDNSKEY records and corresponding signaling | <t>It is possible to add CDS/CDNSKEY records and corresponding signaling | |||
| records to a zone without the domain owner's explicit knowledge. | records to a zone without the domain owner's explicit knowledge. | |||
| To spare domain owners from being caught off guard by the ensuing DS | To spare domain owners from being caught off guard by the ensuing DS | |||
| changes, child DNS operators following this practice are advised to make | changes, child DNS operators following this practice are advised to make | |||
| that transparent, such as by informing the domain owner during zone | that transparent, such as by informing the domain owner during zone | |||
| creation (e.g., in a GUI), or by notifying them via email.</t> | creation (e.g., in a GUI) or by notifying them via email.</t> | |||
| <t>When transferring a zone to another DNS operator, the old and new child | <t>When transferring a zone to another DNS operator, the old and new child | |||
| DNS operators need to cooperate to achieve a smooth transition, e.g., | DNS operators need to cooperate to achieve a smooth transition, e.g., | |||
| by using the multi-signer protocols described in <xref target="RFC8901"></xref>. | by using the multi-signer protocols described in <xref target="RFC8901"></xref>. | |||
| If all else fails, the domain owner might have to request the removal of | If all else fails, the domain owner might have to request the removal of | |||
| all DS records and have the transfer performed insecurely (see | all DS records and have the transfer performed insecurely (see | |||
| <xref target="I-D.hardaker-dnsop-intentionally-temporary-insec"></xref>).</t> | <xref target="I-D.hardaker-dnsop-intentionally-temporary-insec"></xref>).</t> | |||
| <t>Signaling domains SHOULD be delegated as standalone zones, so | <t>Signaling domains <bcp14>SHOULD</bcp14> be delegated as standalone zones, so | |||
| that the signaling zone's apex coincides with the signaling domain (such | that the signaling zone's apex coincides with the signaling domain (such | |||
| as <tt>_signal.ns1.example.net</tt>). | as <tt>_signal.ns1.example.net</tt>). | |||
| While it is permissible for the signaling domain to be contained | While it is permissible for the signaling domain to be contained | |||
| in a signaling zone of fewer labels (such as <tt>example.net</tt>), a | in a signaling zone of fewer labels (such as <tt>example.net</tt>), a | |||
| zone cut ensures that bootstrapping activities do not require | zone cut ensures that bootstrapping activities do not require | |||
| modifications of the zone containing the nameserver hostname.</t> | modifications of the zone containing the nameserver hostname.</t> | |||
| <t>Once a Child DNS Operator determines that specific signaling record sets | <t>Once a child DNS operator determines that specific signaling record sets | |||
| have been processed (e.g., by seeing the result in the parent zone), | have been processed (e.g., by seeing the result in the parent zone), | |||
| they are advised to remove them. | they are advised to remove them. | |||
| This will reduce the size of the signaling zone, and facilitate more | This will reduce the size of the signaling zone and facilitate more | |||
| efficient bulk processing (such as via zone transfers).</t> | efficient bulk processing (such as via zone transfers).</t> | |||
| </section> | </section> | |||
| <section anchor="parental-agent"><name>Parental Agent</name> | <section anchor="parental-agent"><name>Parental Agent</name> | |||
| <t>In order to ensure timely DNSSEC bootstrapping of insecure domains, | <t>In order to ensure timely DNSSEC bootstrapping of insecure domains, | |||
| stalemate situations due to mismatch of stale cached records (Step 4 of | stalemate situations due to mismatch of stale cached records (<xref target="s4" format="none">Step 4</xref> of | |||
| <xref target="cds-auth"></xref>) need to be avoided. | <xref target="cds-auth"></xref>) need to be avoided. | |||
| It is thus RECOMMENDED to perform queries into signaling domains with an | It is thus <bcp14>RECOMMENDED</bcp14> that | |||
| (initially) empty resolver cache, or using some other method for | queries into signaling domains be performed with an (initially) empty | |||
| retrieving fresh data from authoritative servers.</t> | resolver cache, or that some other method for retrieving fresh data | |||
| <t>It is also RECOMMENDED to use QNAME minimization <xref target="RFC9156"></xre | from authoritative servers be used.</t> | |||
| f> when | <t>It is also <bcp14>RECOMMENDED</bcp14> that QNAME minimization <xref target="R | |||
| resolving queries for signaling records, to guard against certain | FC9156"></xref> be used when | |||
| resolving queries for signaling records to guard against certain | ||||
| attacks (see <xref target="security"></xref>).</t> | attacks (see <xref target="security"></xref>).</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="security"><name>Security Considerations</name> | <section anchor="security"><name>Security Considerations</name> | |||
| <t>The DNSSEC bootstrapping method introduced in this document is based on | <t>The DNSSEC bootstrapping method introduced in this document is based on | |||
| the approaches described in <xref target="RFC8078"></xref> Section 3, but | the approaches described in <xref target="RFC8078" sectionFormat="of" section="3 "></xref>, but | |||
| adds authentication to the CDS/CDNSKEY concept. | adds authentication to the CDS/CDNSKEY concept. | |||
| Its security level is therefore strictly higher than that of existing | Its security level is therefore strictly higher than that of existing | |||
| approaches described in that document (e.g., "Accept after Delay"). | approaches described in that document (e.g., "Accept after Delay"). | |||
| Apart from this general improvement, the same Security Considerations | Apart from this general improvement, the same Security Considerations | |||
| apply as in <xref target="RFC8078"></xref>.</t> | apply as in <xref target="RFC8078"></xref>.</t> | |||
| <t>The level of rigor in <xref target="cds-auth"></xref> is needed to prevent pu blication of a | <t>The level of rigor in <xref target="cds-auth"></xref> is needed to prevent pu blication of an | |||
| ill-conceived DS RRset (authorized only under a subset of NS hostnames). | ill-conceived DS RRset (authorized only under a subset of NS hostnames). | |||
| This ensures, for example, that an operator in a multi-homed setup | This ensures, for example, that an operator in a multi-homed setup | |||
| cannot enable DNSSEC unless all other operators agree.</t> | cannot enable DNSSEC unless all other operators agree.</t> | |||
| <t>In any case, as the child DNS operator has authoritative knowledge of | <t>In any case, as the child DNS operator has authoritative knowledge of | |||
| the child's CDS/CDNSKEY records, it can readily detect fraudulent | the child's CDS/CDNSKEY records, it can readily detect fraudulent | |||
| provisioning of DS records.</t> | provisioning of DS records.</t> | |||
| <t>In order to prevent the parents of nameserver hostnames from becoming a | <t>In order to prevent the parents of nameserver hostnames from becoming a | |||
| single point of failure for a delegation (both in terms of resolution | single point of failure for a delegation (both in terms of resolution | |||
| availability and for the trust model of this protocol), it is advisable | availability and for the trust model of this protocol), | |||
| to diversify the path from the root to the child's nameserver hostnames, | diversifying the path from the root to the child's nameserver hostnames is advis | |||
| such as by using different and independently operated TLDs for each one.</t> | able. For example, different and independently operated TLDs may be used for eac | |||
| h one.</t> | ||||
| <t>If QNAME minimization <xref target="RFC9156"></xref> is not used when queryin g for | <t>If QNAME minimization <xref target="RFC9156"></xref> is not used when queryin g for | |||
| signaling records, an upstream parent of a signaling domain will see | signaling records, an upstream parent of a signaling domain will see | |||
| those CDS/CDNSKEY queries and could respond with an authoritative answer | those CDS/CDNSKEY queries and could respond with an authoritative answer | |||
| signed with its own key, instead of sending the referral. | signed with its own key, instead of sending the referral. | |||
| Enabling QNAME minimization reduces the attack surface for such forgery.</t> | Enabling QNAME minimization reduces the attack surface for such forgery.</t> | |||
| </section> | </section> | |||
| <section anchor="iana-considerations"><name>IANA Considerations</name> | <section anchor="iana-considerations"><name>IANA Considerations</name> | |||
| <t>Per <xref target="RFC8552"></xref>, IANA is requested to add the following en | ||||
| tries to the | ||||
| "Underscored and Globally Scoped DNS Node Names" registry:</t> | ||||
| <artwork><![CDATA[+---------+------------+------------+ | <t>IANA has added the following entries to the | |||
| | RR Type | _NODE NAME | Reference | | "Underscored and Globally Scoped DNS Node Names" registry <xref target="RFC8552" | |||
| +---------+------------+------------+ | />:</t> | |||
| | CDS | _signal | [This RFC] | | <table anchor="iana-table"> | |||
| | CDNSKEY | _signal | [This RFC] | | <name></name> | |||
| +---------+------------+------------+ | <thead> | |||
| ]]> | <tr> | |||
| </artwork> | <th>RR Type</th> | |||
| <t><strong>Note to the RFC Editor</strong>: please replace "This RFC" | <th>_NODE NAME</th> | |||
| in the above table with a proper reference.</t> | <th>Reference</th> | |||
| </section> | </tr> | |||
| </thead> | ||||
| <section anchor="implementation-status"><name>Implementation Status</name> | <tbody> | |||
| <t><strong>Note to the RFC Editor</strong>: please remove this entire section be | <tr> | |||
| fore publication.</t> | <td>CDS</td> | |||
| <t>In addition to the information in this section, deployment is tracked | <td>_signal</td> | |||
| by the community at <eref target="https://github.com/oskar456/cds-updates">https | <td>RFC 9615</td> | |||
| ://github.com/oskar456/cds-updates</eref>.</t> | </tr> | |||
| <tr> | ||||
| <section anchor="child-dns-operator-side"><name>Child DNS Operator-side</name> | <td>CDNSKEY</td> | |||
| <td>_signal</td> | ||||
| <ul> | <td>RFC 9615</td> | |||
| <li><t>Operator support:</t> | </tr> | |||
| </tbody> | ||||
| <ul spacing="compact"> | </table> | |||
| <li>Cloudflare has implemented bootstrapping record synthesis for all | ||||
| signed customer zones.</li> | ||||
| <li>Glauca HexDNS publishes bootstrapping records for its customer | ||||
| zones.</li> | ||||
| <li>deSEC performs bootstrapping record synthesis for its zones using | ||||
| names <tt>_signal.ns1.desec.io</tt> and <tt>_signal.ns2.desec.org</tt>.</li> | ||||
| </ul></li> | ||||
| <li><t>Authoritative nameserver support:</t> | ||||
| <ul spacing="compact"> | ||||
| <li>Knot DNS supports signaling record synthesis since version 3.3.5.</li> | ||||
| <li>An implementation of bootstrapping record synthesis in PowerDNS is | ||||
| available at <eref target="https://github.com/desec-io/desec-ns/pull/46">https:/ | ||||
| /github.com/desec-io/desec-ns/pull/46</eref>.</li> | ||||
| </ul></li> | ||||
| </ul> | ||||
| </section> | </section> | |||
| <section anchor="parental-agent-side"><name>Parental Agent-side</name> | </middle> | |||
| <ul> | ||||
| <li><t>ccTLD:</t> | ||||
| <ul spacing="compact"> | <back> | |||
| <li>SWITCH (.ch, .li) has implemented authentication of consumed CDS | <displayreference target="I-D.hardaker-dnsop-intentionally-temporary-insec" to=" | |||
| records based on this draft.</li> | INSEC"/> | |||
| <li>.cl is working on an implementation.</li> | <references> | |||
| </ul></li> | <name>References</name> | |||
| <li><t>gTLD:</t> | <references> | |||
| <name>Normative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035. | ||||
| xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119. | ||||
| xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7344. | ||||
| xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7477. | ||||
| xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8078. | ||||
| 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.8552. | ||||
| xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9156. | ||||
| xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9499. | ||||
| xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <referencegroup anchor="BCP237" target="https://www.rfc-editor.org/info/bcp2 | ||||
| 37"> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.936 | ||||
| 4.xml"/> | ||||
| </referencegroup> | ||||
| <ul spacing="compact"> | <!-- [I-D.hardaker-dnsop-intentionally-temporary-insec] IESG state: Expired as o | |||
| <li>Knipp has implemented consumption of DNSSEC bootstrapping records | f 05/29/24--> | |||
| in its TANGO and CORE registry systems.</li> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.hard | |||
| <li>A deployment of this is running at .swiss.</li> | aker-dnsop-intentionally-temporary-insec.xml"/> | |||
| </ul></li> | ||||
| <li><t>Registrars:</t> | ||||
| <ul spacing="compact"> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8901. | |||
| <li>Glauca has implemented authenticated CDS processing.</li> | xml"/> | |||
| <li>GoDaddy is working on an implementation.</li> | </references> | |||
| </ul></li> | </references> | |||
| <li><t>A tool to retrieve and process signaling records for bootstrapping | ||||
| purposes, either directly or via zone walking, is available at | ||||
| <eref target="https://github.com/desec-io/dsbootstrap">https://github.com/desec- | ||||
| io/dsbootstrap</eref>. | ||||
| The tool outputs the validated DS records which then can be added | ||||
| to the parent zone.</t> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="acknowledgements"><name>Acknowledgements</name> | <section anchor="acknowledgements" numbered="false"><name>Acknowledgements</name | |||
| <t>Thanks to Brian Dickson, Ondřej Caletka, John R. Levine, Christian | > | |||
| Elmerot, Oli Schacher, Donald Eastlake, Libor Peltan, Warren Kumari, | <t>Thanks to <contact fullname="Brian Dickson"/>, <contact fullname="Ondřej Cale | |||
| Scott Rose, Linda Dunbar, Tim Wicinski, Paul Wouters, Paul Hoffman, | tka"/>, <contact fullname="John R. Levine"/>, <contact fullname="Christian | |||
| Peter Yee, Benson Muite, Roman Danyliw, Éric Vyncke, and Joe Abley for | Elmerot"/>, <contact fullname="Oli Schacher"/>, <contact fullname="Donald Eastla | |||
| ke"/>, <contact fullname="Libor Peltan"/>, <contact fullname="Warren Kumari"/>, | ||||
| <contact fullname="Scott Rose"/>, <contact fullname="Linda Dunbar"/>, <contact f | ||||
| ullname="Tim Wicinski"/>, <contact fullname="Paul Wouters"/>, <contact fullname= | ||||
| "Paul Hoffman"/>, | ||||
| <contact fullname="Peter Yee"/>, <contact fullname="Benson Muite"/>, <contact fu | ||||
| llname="Roman Danyliw"/>, <contact fullname="Éric Vyncke"/>, and <contact fullna | ||||
| me="Joe Abley"/> for | ||||
| reviewing draft proposals and offering comments and suggestions.</t> | reviewing draft proposals and offering comments and suggestions.</t> | |||
| <t>Thanks also to Steve Crocker, Hugo Salgado, and Ulrich Wisser for | <t>Thanks also to <contact fullname="Steve Crocker"/>, <contact fullname="Hugo S algado"/>, and <contact fullname="Ulrich Wisser"/> for | |||
| early-stage brainstorming.</t> | early-stage brainstorming.</t> | |||
| </section> | </section> | |||
| </middle> | ||||
| <back> | ||||
| <references><name>References</name> | ||||
| <references><name>Normative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml" | ||||
| /> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml" | ||||
| /> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7344.xml" | ||||
| /> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7477.xml" | ||||
| /> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8078.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.8552.xml" | ||||
| /> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9156.xml" | ||||
| /> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9499.xml" | ||||
| /> | ||||
| </references> | ||||
| <references><name>Informative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml9/reference.BCP.237.xml" | ||||
| /> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.hardaker | ||||
| -dnsop-intentionally-temporary-insec.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8901.xml" | ||||
| /> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="change-history-to-be-removed-before-publication"><name>Change H | ||||
| istory (to be removed before publication)</name> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-11</li> | ||||
| </ul> | ||||
| <blockquote><t>Addressed comment by Paul Wouters</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-10</li> | ||||
| </ul> | ||||
| <blockquote><t>Editorial nit</t> | ||||
| <t>Addressed comments by Paul Wouters</t> | ||||
| <t>Make capitalization of registrar/registrant consistent</t> | ||||
| <t>Editorial nit by Joe Abley</t> | ||||
| <t>Addressed comments by Éric Vyncke</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-09</li> | ||||
| </ul> | ||||
| <blockquote><t>Addressed comments by Paul Wouters</t> | ||||
| <t>Editorial nits by Roman Danyliw</t> | ||||
| <t>Editorial nits by Benson Muite</t> | ||||
| <t>Editorial nits by Peter Yee</t> | ||||
| <t>Editorial nit by Scott Rose</t> | ||||
| <t>Editorial suggestion from John Levine</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-08</li> | ||||
| </ul> | ||||
| <blockquote><t>Editorial changes from AD Review</t> | ||||
| <t>Updated implementation section</t> | ||||
| <t>Change capitalization of terms from terminology section</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-07</li> | ||||
| </ul> | ||||
| <blockquote><t>Add Glauca registrar implementation</t> | ||||
| <t>Editorial changes to Security Considerations</t> | ||||
| <t>Add/discuss on-demand triggers (notifications)</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-06</li> | ||||
| </ul> | ||||
| <blockquote><t>Add section "Updates to RFCs"</t> | ||||
| <t>Editorial nits</t> | ||||
| <t>Editorial changes from Secdir early review</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-05</li> | ||||
| </ul> | ||||
| <blockquote><t>Editorial changes</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-04</li> | ||||
| </ul> | ||||
| <blockquote><t>Added consent considerations.</t> | ||||
| <t>Editorial changes.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-03</li> | ||||
| </ul> | ||||
| <blockquote><t>Updated Implementation section.</t> | ||||
| <t>Typo fix.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-02</li> | ||||
| </ul> | ||||
| <blockquote><t>Clarified that RFC 8078 Section 3 is not replaced, but its method | ||||
| s are | ||||
| deprecated.</t> | ||||
| <t>Added new deployments to Implementation section.</t> | ||||
| <t>Included NSEC walk / AXFR as possible triggers for DS bootstrapping.</t> | ||||
| <t>Editorial changes.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-01</li> | ||||
| </ul> | ||||
| <blockquote><t>Allow bootstrapping when some (not all) NS hostnames are in baili | ||||
| wick.</t> | ||||
| <t>Clarified Operational Recommendations according to operator feedback.</t> | ||||
| <t>Turn loose Security Considerations points into coherent text.</t> | ||||
| <t>Do no longer suggest NSEC-walking Signaling Domains. | ||||
| (It does not work well due to the Signaling Type prefix. What's more, | ||||
| it's unclear who would do this: Parents know there delegations and can | ||||
| do a targeted scan; others are not interested.)</t> | ||||
| <t>Editorial changes.</t> | ||||
| <t>Added IANA request.</t> | ||||
| <t>Introduced Signaling Type prefix (<tt>_dsboot</tt>), renamed Signaling Name | ||||
| infix from <tt>_dsauth</tt> to <tt>_signal</tt>.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-ietf-dnsop-dnssec-bootstrapping-00</li> | ||||
| </ul> | ||||
| <blockquote><t>Editorial changes.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-thomassen-dnsop-dnssec-bootstrapping-03</li> | ||||
| </ul> | ||||
| <blockquote><t>Clarified importance of record cleanup by moving paragraph up.</t | ||||
| > | ||||
| <t>Pointed out limitations.</t> | ||||
| <t>Replace <xref target="RFC8078"></xref> Section 3 with our <xref target="cds-a | ||||
| uth"></xref>.</t> | ||||
| <t>Changed <tt>_boot</tt> label to <tt>_dsauth</tt>.</t> | ||||
| <t>Removed hashing of Child name components in Signaling Names.</t> | ||||
| <t>Editorial changes.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-thomassen-dnsop-dnssec-bootstrapping-02</li> | ||||
| </ul> | ||||
| <blockquote><t>Reframed as an authentication mechanism for RFC 8078.</t> | ||||
| <t>Removed multi-signer use case (focus on RFC 8078 authentication).</t> | ||||
| <t>Triggers need to fetch NS records (if not implicit from context).</t> | ||||
| <t>Improved title.</t> | ||||
| <t>Recognized that hash collisions are dealt with by Child apex check.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-thomassen-dnsop-dnssec-bootstrapping-01</li> | ||||
| </ul> | ||||
| <blockquote><t>Add section on Triggers.</t> | ||||
| <t>Clarified title.</t> | ||||
| <t>Improved abstract.</t> | ||||
| <t>Require CDS/CDNSKEY records at the Child.</t> | ||||
| <t>Reworked Signaling Name scheme.</t> | ||||
| <t>Recommend using cold cache for consumption.</t> | ||||
| <t>Updated terminology (replace "Bootstrapping" by "Signaling&quo | ||||
| t;).</t> | ||||
| <t>Added NSEC recommendation for Bootstrapping Zones.</t> | ||||
| <t>Added multi-signer use case.</t> | ||||
| <t>Editorial changes.</t> | ||||
| </blockquote> | ||||
| <ul spacing="compact"> | ||||
| <li>draft-thomassen-dnsop-dnssec-bootstrapping-00</li> | ||||
| </ul> | ||||
| <blockquote><t>Initial public draft.</t> | ||||
| </blockquote></section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 83 change blocks. | ||||
| 395 lines changed or deleted | 247 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||