<?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-multialgo-00" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" updates="4035, 6840, 8624" consensus="true">

<front>
<title abbrev="multialgo">DNSSEC Multi-Algorithm Requirements</title><seriesInfo value="draft-thomassen-dnsop-multialgo-00" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="P." surname="Thomassen" fullname="Peter Thomassen"><organization>deSEC, SSE</organization><address><postal><street></street>
<city>Berlin</city>
<country>Germany</country>
</postal><email>peter@desec.io</email>
</address></author>
<date year="2023" month="July" day="10"></date>
<area>Internet</area>
<workgroup>DNSOP Working Group</workgroup>

<abstract>
<t>This document restates the requirements on DNSSEC signing and validation and
makes small adjustments order to allow for more flexible handling of
configurations that advertise multiple Secure Entry Points (SEP) with different
signing algorithms via their DS record or trust anchor set.
The adjusted rules allow both for multi-signer operation and for transfer of
signed DNS zones between providers, without requiring that each provider uses
the same signing algorithm.
In addition, the proposal enables pre-publication of a trust anchor in
preparation for an algorithm rollover, such as of the root zone.</t>
<t>This document updates RFCs 4035, 6840, and 8624.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>DNSSEC <xref target="RFC4033"></xref><xref target="RFC4034"></xref><xref target="RFC4035"></xref><xref target="RFC6840"></xref><xref target="RFC9364"></xref> adds origin
authentication to the DNS protocol. While it typically works smoothly when using
a single signing algorithm, complications can occur when multiple algorithms are
in use.</t>
<t>In particular, current specifications <xref target="RFC4035"></xref><xref target="RFC6840"></xref> require that a zone
be signed with each signing algorithm listed in a zone's DS RRset or appearing
via its trust anchors. This poses a problem for (at least) the following cases:</t>

<ul>
<li><t>In multi-signer setups where each DNS provider maintains their own key
(<xref target="RFC8901"></xref> Section 2.1.2), providers may not necessarily choose the same
signing algorithm. (For example, one may choose to use algorithm 8 while the
other picks algorithm 13, both of which will appear in the domain's DS
RRset.) While such setups do allow establishing a chain of trust, DNS
responses from either provider will only contain signatures of the one
signing algorithm used by that provider, violating the specification.</t>
</li>
<li><t>A related issue is the transfer of a signed domain name from one provider to
another, which requires a short multi-signer period in order to execute a
glitch-free transition without disabing DNSSEC for the domain.
If the old and the new provider do not use the same signing algorithms,
the same problems appear.</t>
</li>
<li><t>When performing an algorithm rollover for a zone with a trust anchor,
current specifications mandate that the zone has to be double-signed with
both the old and the new algorithm before publishing the new trust anchor.
For the root zone, this could lead to a potentially rather long phase of
double-signing (on the order of a year). As this comes with both financial
and SSR costs, it seems desirable to find a way for publishing the new trust
anchor without introducing the new algorithm into the zone just yet.</t>
</li>
</ul>
<t>For a more detailed explanation of the implications of the current rules as well
as of alternative solution approaches, see <xref target="oldrules"></xref>.</t>
<t>However, it turns out that these limitations are not fundamental to the
construction of the DNS and DNSSEC protocols, but appear as consequences of the
current requirements, which (in this very strict form) are not necessary for
origin validation.</t>
<t>This document explores how the signing and validation rules can be modified to
accommodate additional use cases, without compromising on the security
guarantees given by DNSSEC.</t>
<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 anchor="proposed-updates-to-rfcs"><name>Proposed Updates to RFCs</name>
<t>The heart of the issue is that even though one signature, in theory, will
suffice for validation, the signer cannot, in the general case, know which
particular signing algorithm(s) the validator will support -- and hence,
providing a &quot;large enough set&quot; (read: all of them) is the approach that had
been taken so far.</t>
<t>A more relaxed approach is defined which does not require all algorithms'
RRSIGs to be present, while ensuring that the set of signatures provided is
still &quot;large enough&quot; for reliable DNSSEC operation, so that glitch-free
multi-signer operation and TA pre-publication are made possible.
This is enabled by a new mechanism that allows the signer to determine which
RRSIGs can be skipped, without risking validation failures.</t>
<t>For the case of a multi-signer setup with two generally supported
algorithms (such as 8 and 13), the scheme requires only one of the
two signatures.  Similarly, when pre-publishing a trust anchor,
associated signatures don't need to be published immediately,
provided that the existing TA's algorithm is generally supported.</t>

<section anchor="updates-to-rfc-8624"><name>Updates to RFC 8624</name>
<t>The notion of UNIVERSAL signing algorithms is introduced, and defined
as follows:</t>

<ul>
<li><t>The information contained in the table of <xref target="RFC8624"></xref> Section 3.1 is
transferred into a to-be-erected IANA registry, and a boolean
column is added with the heading &quot;universal validation support&quot;.
Signing algorithms where this column is TRUE are called
&quot;UNIVERSAL&quot;.</t>
</li>
<li><t>&quot;MUST NOT sign&quot; algorithms can never be UNIVERSAL.  &quot;MUST
validate&quot; is a prerequisite for UNIVERSAL.  Changes that affect
whether an algorithm is UNIVERSAL require standards action.</t>
</li>
<li><t>Algorithms 8 and 13 are the only algorithms currently declared
UNIVERSAL.</t>
</li>
</ul>
<t>Also, new terminology is established for algorithms in &quot;MUST NOT
sign&quot; status: those are called &quot;INSECURE&quot;.</t>
<t>As soon as a &quot;MUST validate&quot; algorithm is known or expected to have declining
validation support, it should be moved to status &quot;MUST NOT sign&quot; (which
removes the UNIVERSAL label if present, and renders the algorithm INSECURE).
Accordingly, algorithms 5 and 7 are declared &quot;MUST NOT sign&quot;.</t>
<t>The following algorithms are thus INSECURE: 1, 3, 5, 6, 7, 12</t>
</section>

<section anchor="signing-requirements"><name>Signing Requirements</name>

<ol>
<li><t>Signers must sign with at least one UNIVERSAL algorithm if any
are present in the DS RRset or trust anchor set.  Other
signatures are OPTIONAL.</t>
</li>
<li><t>Absent any UNIVERSAL algorithms in the DS RRset or trust anchor
set, signers MUST sign with all algorithm listed.</t>
</li>
</ol>
</section>

<section anchor="validator-requirements"><name>Validator Requirements</name>

<ol>
<li><t>When the DS RRset or trust anchor set for a zone includes an
unsupported INSECURE algorithm, validators MUST treat the zone as
unsigned, even if signed with another supported algorithm.</t>
</li>
<li><t>Otherwise, validators MUST accept any valid path.</t>
</li>
</ol>
<t>Implementing these rules requires validating resolvers to keep a record of
INSECURE algorithms (e.g. via a static array of INSECURE algorithm numbers), so
that the zone's security status can be established upon inspection of a DS
record or TA set.</t>
</section>

<section anchor="discussion"><name>Discussion</name>
<t>It is observed that both signers and validators need to know only one of the
concepts &quot;UNIVERSAL&quot; and &quot;INSECURE&quot;: to use several signing algorithms, signers
only need to know which algorithms are UNIVERSAL, while validators only need to
know which are INSECURE. This limits the implementation effort.</t>
<t>The new validation requirements enable stable multi-signer setups using
UNIVERSAL algorithms as well as glitch-free provider transfers and algorithm
upgrades from INSECURE to UNIVERSAL algorithms (such as algorithm 7 to 13),
without risking SERVFAIL responses in the event that a resolver no longer
supports one of the algorithms (e.g. 7). For a detailed discussion, see
<xref target="security"></xref>.</t>
<t>DNS providers in a multi-signer setup are free to limit their responses to serve
signatures for one UNIVERSAL algorithm only. This one signature is sufficient to
provide a valid path everywhere.</t>
<t>When a UNIVERSAL algorithm is in use, signatures of other algorithms are not
required. DNS providers are thus free to introduce additional (non-INSECURE)
algorithms without coercing other participating providers to do the same.</t>
<t>For zones with trust anchors, when there is a trust anchor with a UNIVERSAL
algorithm, it is permissible to introduce a new trust anchor for a different
algorithm before introducing the corresponding DNSKEY and RRSIGs into the zone.
(Of course, they need to be added before the old trust anchor is removed.)</t>
</section>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>[This section needs to be updated to describe the construction of the new IANA
registry for the implementation status and requirements of DNSSEC signing
algorithms.]</t>
</section>

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

<section anchor="algorithm-transitions"><name>Algorithm Transitions</name>
<t>The new validation requirements guarantee that when a zone is in a multi-signer
setup with two algorithms, the security level is the same as it would be if the
zone was in a single-signer setup using the weakest of them (from the resolver's
perspective). This resolves undue SERVFAIL issues that could occur with certain
algorithm combinations under the previous rules.</t>
<t>For example, a zone using only algorithm 7 is treated as insecure by resolvers
that do not support this algorithm. When transferring the domain to another
provider via a multi-signer setup with algorithm 13, the zone's security status
remains &quot;insecure&quot;, as the DS RRset still includes INSECURE algorithm 7. The
presence of algorithm 13 is inconsequential at this point. Only once algorithm 7
is removed, the zone turns secure.</t>
<t>This rule prevents validation breakage when the resolver encounters an
unsupported RRSIG from an outdated algorithm, and instead acknowledges the fact
that the signer is using an algorithm that is in &quot;MUST NOT sign&quot; status, which
(depending on resolver support) might render the zone insecure. This allows for
glitch-free algorithm upgrades, with the security status of the zone changing
only once the transition is complete.</t>
<t>Resolvers supporting both algorithms retain full validation
throughtout the transition.  In case of a permanent multi-signer
setup, the zone maintainer needs to upgrade the INSECURE algorithm to
a UNIVERSAL one in order to restore universal validation.</t>
</section>

<section anchor="time-dependency-of-universal-algorithms"><name>Time Dependency of UNIVERSAL Algorithms</name>
<t>The same situation occurs when an algorithm is removed from the set
of UNIVERSAL algorithms.  In this case, the algorithm will enter
&quot;MUST NOT sign&quot; status and become INSECURE.  If the zone continues to
use the INSECURE algorithm, it will continue to fully validate with
supporting resolvers, while non-supporting resolvers will treat the
zone as insecure until the algorithm is replaced.</t>
<t>Conversely, when an algorithm is added to the set of UNIVERSAL ones,
it is conceivable that a signer may move to this algorithm before all
validators are upgraded.  This is, in fact, not a problem, as
resolvers do not need to know the concept of UNIVERSAL.  A problem
could only occur if the corresponding RRSIG was not supported by the
resolver; however, in that case labeling the algorithm as UNIVERSAL would
have been premature.  Determining universal support cannot be solved on
the protocol level, and it is the community's responsibility to only
advance an algorithm to UNIVERSAL if safe enough, i.e. if the
number of resolvers lacking support it is deemed negligible.</t>
<t>In any case, regardless of &quot;who moves first&quot;, resolution is never
disrupted, and changes to the set of UNIVERSAL algorithms do not
trigger overly conservative SERVFAIL responses.</t>
<t>Resolvers dropping support for INSECURE algorithms (e.g. 7) without
implementing this specification will produce SERVFAIL responses for
multi-signer setups involving the disabled algorithm.  Implementation
of the new validation rules is thus advised as soon as support for an
algorithm is dropped.</t>
</section>
</section>

<section anchor="acknowledgments"><name>Acknowledgments</name>
<t>The author would like to thank Shumon Huque and Viktor Dukhovni for early
feedback on this proposal. It was developed after discussions on the problem
space with Edward Lewis, Jakob Schlyter, Johan Stenstam, Steve Crocker, whose
contributions where both insightful and helpful.</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.6840.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.8624.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8901.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9364.xml"/>
</references>

<section anchor="oldrules"><name>Analysis of Original Specifications</name>

<section anchor="signing-requirements-1"><name>Signing Requirements</name>
<t><xref target="RFC4035"></xref> Section 2.2 specifies the RRSIG presence requirements as follows:</t>

<artwork>There MUST be an RRSIG for each RRset using at least one DNSKEY of
each algorithm in the zone apex DNSKEY RRset.  The apex DNSKEY
RRset itself MUST be signed by each algorithm appearing in the DS
RRset located at the delegating parent (if any).
</artwork>
<t>Further, Section 5.11 of <xref target="RFC6840"></xref> clarifies:</t>

<artwork>A signed zone MUST include a DNSKEY for each algorithm present in
the zone's DS RRset and expected trust anchors for the zone.
</artwork>
<t>It may seem tempting to just relax this rule, without any further adjustments.
However, doing so is not safe depending on the algorithm combination involved.
In particular, when using an algorithm that is
not universally supported among the resolver population (such as
algorithm 7) together with a supported one (such as algorithm 13),
resolvers may return SERVFAIL under certain circumstances.</t>
<t>More explicitly, a zone that is using some algorithm as its sole
signing algorithm is (correctly) treated as insecure by resolvers
that do not support that algorithm.  However, when attempting to transfer the
domain to another DNS provider through a multi-signer setup with a
supported algorithm, affected resolvers presented with the unsupported signature
only will not be able to distinguish this situation from a downgrade-to-insecure
attack where the second signature has been stripped, and will return SERVFAIL.</t>
<t>Zone owners and signers thus would have to take great care to not leave a
validating resolver without a valid supported path when transitioning e.g. from
algorithm 7 to 13.</t>
</section>

<section anchor="validator-requirements-1"><name>Validator Requirements</name>
<t>In general (according to the old requirements), when a validating resolver
supporting any of the algorithms listed in a given zone's DS record or TA set
responds to a query without the CD flag set, it may not treat that zone as
insecure, but must return either validated data (AD=1) or RCODE=2
(SERVFAIL).  For this purpose, any valid path suffices; the validator
may not apply a &quot;logical AND&quot; approach to all advertised algorithms.</t>
<t>Accordingly, <xref target="RFC6840"></xref> Section 5.11 states:</t>

<artwork>This requirement applies to servers, not validators.  Validators
SHOULD accept any single valid path.  They SHOULD NOT insist that
all algorithms signaled in the DS RRset work, and they MUST NOT
insist that all algorithms signaled in the DNSKEY RRset work.
</artwork>
<t>At first glance, the assertions that (1) the signer provide
signatures for all advertised algorithms while (2) the resolver shall
be content with just one seems somewhat contradictory.  However, the
role of the RRSIG rules is to ensure that the resolver will find a
valid path (using a &quot;logical OR&quot; strategy), regardless of which
particular algorithm(s) it supports, and thus be able to distinguish
reliably between &quot;all is in order&quot; (validated data) and a downgrade-to-insecure
attack (SERVFAIL).</t>
<t>With the new notion of UNIVERSAL algorithms, the same goal can be achieved with
less stringent signing and slightly modified validation rules (see above).</t>
</section>
</section>

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

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

</back>

</rfc>
