Re: [DNSOP] [DNSSEC-Bootstrapping] Fwd: New Version Notification for draft-thomassen-dnsop-dnssec-bootstrapping-02.txt

Bob Harold <rharolde@umich.edu> Wed, 27 April 2022 13:11 UTC

Return-Path: <rharolde@umich.edu>
X-Original-To: dnsop@ietfa.amsl.com
Delivered-To: dnsop@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 58E80C22FBC5 for <dnsop@ietfa.amsl.com>; Wed, 27 Apr 2022 06:11:58 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.094
X-Spam-Level:
X-Spam-Status: No, score=-2.094 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, SPOOF_COM2OTH=0.001, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=umich.edu
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jHek0-Y1p3Dt for <dnsop@ietfa.amsl.com>; Wed, 27 Apr 2022 06:11:52 -0700 (PDT)
Received: from mail-yw1-x112e.google.com (mail-yw1-x112e.google.com [IPv6:2607:f8b0:4864:20::112e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 97EB2C22FBC1 for <dnsop@ietf.org>; Wed, 27 Apr 2022 06:11:52 -0700 (PDT)
Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-2f7c57ee6feso18068287b3.2 for <dnsop@ietf.org>; Wed, 27 Apr 2022 06:11:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=umich.edu; s=google-2016-06-03; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=6R38C8wE4eN9u7HPHnDU83BQ+t9mTeYzud/ETkvX1mY=; b=cVE9AuRioi+pSCTFySjT9+zQ+VqDrKWz5YMmHEenDytjAZvxVZu0NE1p6W1Oppl04A AA3R9cCcQ4ongq/BptOlb4sw0qwZ9rffKsFz9PFftyr2qlxwJMW+nXB9JNrO073v+ZkM /7+vo4YfzLqYD07HL31AV7Kr8cMmtJMG8I3poXSXrrdz15j9MfRfL5+HFNDENi/XKwji rcXZtMZU7DGC/IqqJh+wABgzWKYxWD6uYm4TkWP9CNFM/3MF4UodOiWMNFx+4XWTCaKH XfhJXl4vC3uGIrGevcsGKGlwnpCGU2ieecgsnE+pZzus1yCh9H9ZHciw0/4/jYdvcnCh u0nw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=6R38C8wE4eN9u7HPHnDU83BQ+t9mTeYzud/ETkvX1mY=; b=3nxsAVhxrx8XwuNE7Nvji8ApVzrXhdYxrY65zj0G5kjerxTRgRPcF55q42tSVlPK+3 EpPa4hgfFLxSv+3mcl+4980ji+9CNYgC00XgJo6irLzVH2/AtQd9i4Pf4tiFsz2HUjdS M2jGK/F0hzbWFf/89599zZzTyzZp31/ZcBhv+XVNaVixhbtZGz/kf6IJWmhYX1sGzIh5 izSqxFCKkrmKtBjJeSnasU1fjkJ6qclJCxgVniLJW2EkCCCgIVSq6+ms/B+jysdvOkai LAwNaU+91xio4+GbB7PFYI3GDpY9iYdJ3jfrcjBG02h9ejv9FT3F4rF+FShRwW/9Rgnz 7hbQ==
X-Gm-Message-State: AOAM533rfyyUGo+72KibGAxgWwLrQI/ZTnqAl+jtXy9niiT7sPvcm5W8 CzhbyRS1mdDvu5YGwPTCYjMPwkCoDmL0tregSFUY+w==
X-Google-Smtp-Source: ABdhPJyM59+CRig86KE63PfG1+7t17O9cwpILCohhgaOXpAomUc6CB2WEy3DOpuavNIMidoLerM27U1U7Hm9UWWHbbQ=
X-Received: by 2002:a0d:ea8e:0:b0:2f4:dd32:4968 with SMTP id t136-20020a0dea8e000000b002f4dd324968mr26828042ywe.133.1651065111135; Wed, 27 Apr 2022 06:11:51 -0700 (PDT)
MIME-Version: 1.0
References: <163520620129.17275.16274772439094875607@ietfa.amsl.com> <91154628-0ca3-15d8-c6bd-b71232b2e64b@desec.io> <8d3b2ae-70e3-74b4-40a0-70e848acc4aa@nohats.ca> <66e2a81b-b971-cdea-0f40-cfed68be574f@desec.io> <705c1434-532-6840-8ae4-545bde91822@nohats.ca> <37fa7324-643a-9c3c-4256-97abe52f1118@desec.io> <2c8d972a-1388-2f42-994-56a58fe03916@nohats.ca> <26f99653-0b88-1226-fa7d-6ce6267c9eea@desec.io> <608f2d3d-6e63-7e33-2c52-bd78aa4e9f39@nohats.ca> <805e32ca-aa4f-4550-adc9-2913b81becde@desec.io>
In-Reply-To: <805e32ca-aa4f-4550-adc9-2913b81becde@desec.io>
From: Bob Harold <rharolde@umich.edu>
Date: Wed, 27 Apr 2022 09:11:40 -0400
Message-ID: <CA+nkc8AcD54StByFVc2AzKT2_mX-RoYGECZ3-FXQN37eNtnV_Q@mail.gmail.com>
To: Peter Thomassen <peter@desec.io>
Cc: Paul Wouters <paul.wouters=40aiven.io@dmarc.ietf.org>, Paul Wouters <paul.wouters@aiven.io>, "dnsop@ietf.org WG" <dnsop@ietf.org>, dnssec-bootstrapping@ietf.org
Content-Type: multipart/alternative; boundary="000000000000735fc505dda28dc1"
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnsop/4Y5GulqjE_ttVvf4zoRumIko5So>
Subject: Re: [DNSOP] [DNSSEC-Bootstrapping] Fwd: New Version Notification for draft-thomassen-dnsop-dnssec-bootstrapping-02.txt
X-BeenThere: dnsop@ietf.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: IETF DNSOP WG mailing list <dnsop.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dnsop>, <mailto:dnsop-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dnsop/>
List-Post: <mailto:dnsop@ietf.org>
List-Help: <mailto:dnsop-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dnsop>, <mailto:dnsop-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 27 Apr 2022 13:11:58 -0000

(Response at the bottom, nothing inline)

On Tue, Apr 26, 2022 at 11:29 PM Peter Thomassen <peter@desec.io> wrote:

> Hi Paul,
>
> Thank you for all your thoughts, which I think we should continue
> discussing so that we arrive at something we both agree with. While that's
> of course not strictly required, I think it is possible if we twist our
> brains a bit more. :-)
>
> I've spent some time writing down the problem from scratch, in a very
> structured way and from rather basic principles. I hope that this way, it
> will be possible to point very directly at where my arguments go wrong, so
> that I will understand your perspective better.
>
> As the draft has been adopted now, I think it's better to continue
> discussion on dnsop@ietf.org only (this thread is also on
> dnssec-bootstrapping@ietf.org). The fresh write-up is now here:
> https://mailarchive.ietf.org/arch/msg/dnsop/FE5Sm5vzZtq9VgKxgkfmv4VuVI8/
>
> Note that I'm not specifically arguing for the hashed naming scheme
> (anymore). Instead, the new write-up points out a problem that is implicit
> in the current draft, and then discusses various possible solutions (the
> hashed scheme being but one if them).
>
> Thanks,
> Peter
>
>
> On 11/9/21 22:53, Paul Wouters wrote:
> > On Tue, 9 Nov 2021, Peter Thomassen wrote:
> >
> >> On 11/9/21 3:56 PM, Paul Wouters wrote:
> >>>>  Now let's consider bootstrapping for dedyn.io *itself* (not one of
> its
> >>>>  children!).  The location of the bootstrapping records for this
> domain
> >>>>  would be dedyn.io._boot.ns1.desec.io, which is the same as the name
> of
> >>>>  the *zone* which constains bootstrapping records for domains *under*
> >>>>  dedyn.io, such as at example.dedyn.io._boot.ns1.desec.io.
> >>>
> >>>  Aren't you saying here that you want to be able to boostrap dedyn.io,
> >>>  meaning it is currently unsigned, while also having a problem with
> >>>  containing its "children", eg it is already used for boostrapping
> >>>  other domains, while it it unsigned yet itself ?
> >>
> >> In such a situation, a domain like dedyn.io (which has other subzones
> >> on the same nameserver) is not necessarily already being used for
> >> bootstrapping.
> >>
> >> Example: Imagine a DNS operator which supports both DNSSEC and
> >> bootstrapping.  They have a customer with the zone example.com and
> >> a subzone foo.example.com, but DNSSEC is currently off.
> >>
> >> Suppose the customer turns on DNSSEC in the operator's service portal.
> >> What will happen now is that the _boot zones under the operator's
> >> nameserver hostnames will be populated with bootstrapping records for
> >> these domains, with prefixes example.com._boot and
> >> foo.example.com._boot.
> >
> > I think in this case, you cannot start foo.example.com._boot. because
> > its parental agent (which happens to be you too but should still follow
> > the RFC) detects that the parent zone example.com is not signed and
> > thus cannot perform a bootstrap of foo.example.com. Doing them at once
> > would be a race condition. You'd really want to do these one after the
> > other.
> >
> >> Remember, the bootstrapping records are of type CDS/CDNSKEY, and they
> >> will now show up both at the level of "foo.example.com._boot" and one
> >> level up, at the level of "example.com._boot".
> >
> > But can't you still publish all of these? like:
> >
> > in dedyn.io zone (or ns1.dedyn.io zone or _boot.ns1.dedyn.io zoe):
> >
> > example.<hash-of-example.com>._boot.ns1.dedyn.io IN CDNSKEY [...]
> > foo.<hash-of-foo.example.com>._boot.ns1.dedyn.io IN CDNSKEY [...]
> >
> > in your example.com zone:
> >
> > example.com. IN CDNSKEY [...]
> >
> > In your foo.example.com zone:
> >
> > foo.example.com. IN CDNSKEY [...]
> >
> >> As a result, the DNS operator is no longer free to make a delegation
> >> at "example.com._boot", because that would change the meaning of the
> >> bootstrapping records.  (CDS/CDNSKEY records have a conflicting meaning
> >> when they occur at an apex.)
> >
> > I still don't see the APEX problem?
> >
> >> However, there's nothing wrong with enabling bootstrapping records
> >> for both these domains at once.
> >
> > I think there is. You can't boostrap a domain whose parent is not
> > already fully DNSSEC enabled. As those parents are not valid candidates
> > to take in CDS records.
> >
> >>  There's no reason why DS records for
> >> foo.example.com should not be put into example.com while
> >> bootstrapping for example.com is running in parallel.
> >
> > There is because the parent is unsigned and so whatever it is publishing
> > about its children is lacking trust.
> >
> >>  (It's not
> >> even necessary for example.com to ever be securely delegated, if there
> >> is another trust root for it, e.g. in an enterprise setting.)
> >
> > There is. nothing under example.com will ever DNSSEC validate. It cannot
> > make claims abouts its sub delegations via DS records as those DS
> > records would be bogus.
> >
> >> DS bootstrapping does not require the parent of the bootstrapped domain
> >> to be secure.  The protocol should not concern itself with the chain of
> >> trust above the domain that is being bootstrapped.
> >
> > This intension was not clear to me from reading the draft. You want to
> > DNSSEC bootstrap "islands of trust" ? I think that should be out of
> > scope. You are then already in enterprise/provisioning territory where
> > this provisioning can just be added without this new protocol.
> >
> >> The protocol should not make any assumptions like that, so that
> >> bootstrapping of several domains along the same branch in the DNS tree
> >> (e.g. example.com, and foo.example.com) can be fully orthogonal.
> >
> > I disagree. Sure you can have an island of trust, eg a manually
> > configured trust anchor for internal.example.com with a DS trust anchor,
> > but then you should still insist on all checks from internal.example.com
> > to be securely delegated. So you first have to do
> foo.internal.example.com
> > before you can do bar.foo.internal.example.com.
> >
> > While I think this is true from a security and logical point of view, I
> > think you will run into practical issues if you are attempting to
> > retrieve or publish DS records that lack DNSSEC validation.
> >
> >> Let's consider the bootstrapping namespace under _boot.ns1.desec.io.
> >> There would usually be NS/DS records at this name.
> >>
> >> However, it should be possible to introduce zone cuts underneath that
> >> name, so operators can control the size and churn of the zones involved
> >> in bootstrapping.  This idea madeit into the draft based on feedback
> >> by John Levine, who pointed out that scalability should be a very
> >> strong priority.
> >>
> >> So, there may be additional NS/DS rrsets at com._boot.ns1.desec.io, or
> >> dedyn.io._boot.ns1.desec.io.
> >
> > But then you are most certainly better of without hashing, because then
> > you can make a zone for each <tld>._boot.ns1.desec.io. Or when you see
> > that foo.tld is a generic domain too that is becoming too large, create
> > a zone for foo.tld._boot.ns1.desec.io.
> >
> > Whereas with hashes, you just have an unpredictable flat <blob>._
> boot.ns1.desec.io zone.
> >
> >> Adding such a delegation turns the corresponding name into an apex, and
> >> thus requires that there are no bootstrapping CDS/CDNSKEY records at
> >> that name, because they would silently change in meaning.
> >
> > Ok, so I think you are saying that for:
> >
> > example.com._boot.ns1.desec.io. IN CDS [..]
> >
> > or
> >
> > example.<hash-of-com>._boot.ns1.desec.io. IN CDS [..]
> >
> > or
> >
> > com._boot.ns1.desec.io. IN CDS [..]
> >
> > That without the <hash> method, having a zone cut at
> > com._boot.ns1.desec.io. could somehow change the meaning ?
> >
> > You would have an NS and DS record for com._boot.ns1.desec.io., but
> > not for example.com._boot.ns1.desec.io. where you would have a CDS
> > or CDNSKEY. In fact, the lack of NS for example.com._boot.ns1.desec.io.
> means
> > that you are not using CDS to update a DS.
> >
> > I don't see the "silently change in meaning" ?
> >
> >> The problem is that if we now put bootstrapping records at these
> >> delegation points, they suddenly take on the meaning of conventional
> >> (non-bootstrapping) CDS/CDNSKEY records for these subzones.
> >
> > So for com._boot.ns1.desec.io. I dont see that happening, but I guess
> > if you do both example.com._boot.ns1.desec.io. and
> > foo.example.com._boot.ns1.desec.io, then you have:
> >
> > com._boot.ns1.desec.io. IN NS ....
> > com._boot.ns1.desec.io. IN DS ....
> > example.com._boot.ns1.desec.io. IN CDS ....
> >
> > If this last record is treated in the "regular" way, that means that
> example.com._boot.ns1.desec.io.
> > is signaling to com._boot.ns1.desec.io to update its DS record. But
> > there is no zone cut there, so the "traditional" meaning has no effect.
> >
> > In a way, this is just the same as me publishing www.example.com IN CDS
> [...]. No one will ever
> > ask for the record since there is no NS for www.example.com. So there is
> > no way for "current deployed software" to do anything wrong. In your
> > document, you could simply say "no bootraps are allowed under a _boot"
> > delegation.
> >
> > I don't think this issue is improved by using hashes.
> >
> > Now let's say you want to use CDS for com._boot.ns1.desec.io. to notify
> boot.ns1.desec.io.
> >
> > You would publish:
> >
> > com._boot.ns1.desec.io. IN CDS ....
> >
> > Now someone could think you are boosttrapping for com. Someone could
> > fake the (unsigned) com NS records to be ns1.desec.io. And they could
> > possible convince com's parent to do dnssec bootstrap. If the attacker
> > manages to trigger the boostrap in com's parent, the parent would still
> > find com is either A) already signed so only CDS in com directly can be
> > used to update, not this bootstrap, or B) unsigned, in which case I
> > again press my point that nothing under an unsinged delegation should
> > qualify for booststrap anyway. Still the common non-attack case here
> > would be that com has no nameserver ns2.desec.io so the bootstrap would
> > be aborted. Meanwhile, your nameservers involved in the com._
> boot.ns1.desec.io.
> > and _boot.ns1.desec.io zones can still use regular CDS updating,
> > verifying the CDS/CDNSKEY is really in use for that domain and proceed
> > with publication of the updated DS record.
> >
> >>>>  Now let's consider bootstrapping for dedyn.io *itself* (not one of
> its
> >>>>  children!).  The location of the bootstrapping records for this
> domain
> >>>>  would be dedyn.io._boot.ns1.desec.io, which is the same as the name
> of
> >>>>  the *zone* which constains bootstrapping records for domains *under*
> >>>>  dedyn.io, such as at example.dedyn.io._boot.ns1.desec.io.
> >>>
> >>>  So as stated above, I don't think this is a valid use case, as you
> need
> >>>  the bootstrap already in place ?
> >>
> >> You don't need that.
> >>
> >> You only need a validation path to exist for each NS hostname (and the
> >> _boot zone underneath).
> >
> > We disagree. I think the boostrap should only extend the validation path
> > from a parent zone to the child zone. It should not try to skip a
> > zonecut in the hierarchy. Yes this causes a delay to deploy, but you
> > need some delay for security anyway and people won't be deploying 7
> > delegations deep dnssec bootstraps, or if they do, a 7*1 day delay is
> > fine.
> >
> >>>>  This has nothing to do with in-bailiwick.  The problem occurs because
> >>>>  bootstrapping records cannot be at the apex (as to not overload the
> >>>>  meaning of apex CDS/CDNSKEY records), but by "inheriting" the
> structure
> >>>>  under dedyn.io, a situation arises where this condition is not met.
> >>>>
> >>>>  The solution is to not "inherit", but flatten the hierarchy, which is
> >>>>  what the hash does.  With hashing, children of dedyn.io would have
> >>>>  their bootstrapping records under h(dedyn.io)._boot.ns1.desec.io,
> such
> >>>>  as example.h(dedyn.io)._boot.ns1.desec.io.
> >>>
> >>>  I would think you could still use exmaple.dedyn.io._boot.ns1.desec.io
> .
> >>>  (regardless of hashing or not). But you need desec.io to already be
> DNSSEC
> >>>  signed, and since you control desec.io, it should be trivial to add
> NS
> >>>  and DS for _boot.dedyn.io, or TLD._boot.dedyn.io without needing to
> >>>  bootstrap?
> >>
> >> I am not following.
> >
> > the boostrap is usually needed to bridge the gap of Registrar and DNS
> > Hoster. If the DNS hoster already has signed dnshoster.com, then they
> > can just atomically create NS/DS records for _boot.ns1.dnshoster.com.
> > They are not depending on another party that lacks the automation to
> > deploy DNSSEC.
> >
> >>>>  It is unclear to me how such situations would properly be dealt with
> if
> >>>>  the bootstrapping owner names retained the target domains' hierarchy.
> >>>
> >>>  Can you explain why the above wouldn't work ?
> >>
> >> In the general case, there will be a collision between bootstrapping
> >> records and conventional apex-level CDS/CDNSKEY records, unless
> >> delegations within the _boot subtree are prohibited.
> >
> > Yes :) But I hope I managed to point out you can still use CDS/DS within
> > your bootstrap without the double meaning of the names outside the
> > bootstrap chain.
> >
> >>>>  One could of course specify that you can only ever bootstrap *one*
> >>>>  name along a certain branch of the DNS tree.  But what would be the
> >>>>  motivation for such a limitation?
> >>>
> >>>  No, you should be able to do all the domains you want, as long as you
> >>>  prefix them into the _boot zone?
> >>
> >> Only if you enforce there are no delegations there, within the _boot
> >> zone.
> >
> > See above. I think you can.
> >
> >>>>  I'm sure the situation could be complicated futher by considering
> more
> >>>>  sophisticated delegation hierarchies (e.g. dedyn.io is at
> ns1.desec.io,
> >>>>  foo.dedyn.io is not, but bar.foo.dedyn.io is again at ns1.desec.io,
> and
> >>>>  so on).  These are all things the protocol should be ignorant of.
> >>>
> >>>  I don't think that needs to matter, you can even run NS/DS onto
> >>>  _boot.ns1.dedyn.io with only ns1 as its nameserver and _
> boot.ns2.dedyn.io
> >>>  with only ns2 as its nameserver?
> >>
> >> I am not following.
> >
> > I was trying to say that I think these all work fine, with or without
> > delegations in the FQDN path of the bootstrap names.
> >
> >>>>  The hash ensures that *different things* get *different names*.
> >>>
> >>>  But the DNS is already pretty good at that with FQDNs?
> >>
> >> The DNS provides sufficient naming capabilities, yes.  My point is that
> >> in your proposal, when dedyn.io and its children are hosted on the same
> >> nameserver, two different things will turn up with the same name:
> >>
> >> 1.) the name of the bootstrapping records for dedyn.io
> >> 2.) the name of the zone containing bootstrapping records for children
> >>     of dedyn.io
> >>
> >> The name in question is: dedyn.io._boot.ns1.desec.io
> >>
> >> CDS/CDNSKEY records at that name can now mean two things:
> >>
> >> - They could mean "thing 1", i.e. bootstrapping records for dedyn.io
> >
> > Yes.
> >
> >> - They could mean "thing 2", that is DS rollover for the bootstrapping
> >>   zone *itself* (dedyn.io._boot.ns1.desec.io)
> >
> > No?
> >
> > If your zone cut is at io._boot.ns1.desec.io or _boot.ns1.desec.io, then
> > CDS dedyn.io._boot.ns1.desec.io does not have a traditional (C)DS
> record meaning,
> > as there is no NS (zonecut) for dedyn.io._boot.ns1.desec.io.
> >
> > If your zone cut is at dedyn.io._boot.ns1.desec.io because you have many
> > delegations for <customers>.dedyn.io then the interpretation of CDS
> cannot
> > be for boostrap because dedyn.io is already DNSSEC signed (or else you
> > cannot / should not accept secure delegations for <customers>), so its
> > intepretation is always for a classic DNSKEY roll signaling of the zone
> > dedyn.io._boot.ns1.desec.io to its parent (either io._boot.ns1.desec.io
> > or _boot.ns1.desec.io or ns1.desec.io or even desec.io). If you would
> > try to mean it as this protocol and old software reads it as
> > traditional, that software would abort too if it is unsigned. So I don't
> > think you can accidentally break things either?
> >
> >> It's not explicit what's meant, so there's an ambiguity.  Worse, if
> >> you add or remove the delegation at dedyn.io_boot.ns1.desec.io, the
> >> meaning of CDS/CDNSKEY records at that name silently changes.
> >
> > But the meaning only changes from one invalid use to another invalid
> > use?
> >
> >> So, yes, the DNS is good at naming things differently, but we have to
> >> create a naming scheme that is free of collisions.
> >
> > I am not convinced. See above. I think it is clear based on where the
> > (C)DS records are and who would even query for it at that particular
> > location.
> >
> > I don't think it helps scaling either because large zones are pretty
> > trivial these days and all these records are fairly short lived
> > (days). I doubt we will see 60M of these on 1 nameserver. Can you (or
> > John) explain what you think is the scale that would no longer work on
> > a DNSSEC system? And how would that scaling compare to the CPU/disk
> > required to generate new DNSKEYs for all those new DNSSEC domains,
> > signing the domains and creating CDNSKEY/CDS records for them?
> >
> > And regardless, you can create delegatations for com._boot just as
> > easilly as <hash-of-com>._boot.
> >
> > I think it only helps prevent hitting the theoretical but non-real
> > FQDN limit of 255, but as I said before, anything that prepends an
> > _underscore prefix will always have a limit under 255. Not using hashes
> > would reduce the max length to 128 minues the _boot prefix length versus
> > 255 - 64 (length of base64(sha256)) - _boot prefix length.  So more or
> > less reduce support of FQDNs from ~200 to ~128. This already requires a
> > minimum of 3 subdelegations, but since most TLDs dont exceed ~10 to
> > ~20, would require 4+ delegations. At which point you should really be in
> > part of the DNS tree where you control all parties to provision zones
> > without needing the bootstrap, that is mainly aimed at Registrar - DNS
> > Operator limitations. Eg you would be using catalog zones with your
> > nameservers that would be able to do CDS -> DS because of existing XFR
> > or NSUPDATE based trust relationships, or would even run on the same
> > nameserver to completely automated DS updates when hosting both child
> > and parent.
> >
> > Anyway, just to reflect, I _do_ like and this idea, but strongly prefer
> no
> > hashing and not using it to go two delegations deep over unsigned
> parents.
> >
> > Paul
>

To avoid (C)DS at an apex under the _boot tree, one could use another _name
like:

_nsboot.dedyn.io._boot.ns1.desec.io.  CDS ...

So the CDS records in this new scheme are never at an apex, but one level
down under a new "_nsboot" label.
It adds another label, but avoids any ambiguity.

-- 
Bob Harold