Re: [dns-privacy] re-evaluation of the draft, was Re: [Fwd: New Version Notification for draft-vandijk-dprive-ds-dot-signal-and-pin-00.txt]

Robin Geuze <robin@robingeuze.nl> Tue, 09 June 2020 08:53 UTC

Return-Path: <robin@robingeuze.nl>
X-Original-To: dns-privacy@ietfa.amsl.com
Delivered-To: dns-privacy@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 340563A0A03 for <dns-privacy@ietfa.amsl.com>; Tue, 9 Jun 2020 01:53:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.099
X-Spam-Level:
X-Spam-Status: No, score=-2.099 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=robingeuze.nl
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id h4Y5SMJFJlmH for <dns-privacy@ietfa.amsl.com>; Tue, 9 Jun 2020 01:53:31 -0700 (PDT)
Received: from outbound5.mail.transip.nl (outbound5.mail.transip.nl [IPv6:2a01:7c8:7c9:ca11:136:144:136:9]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 487193A0B2F for <dns-privacy@ietf.org>; Tue, 9 Jun 2020 01:53:30 -0700 (PDT)
Received: from submission10.mail.transip.nl (unknown [10.103.8.161]) by outbound5.mail.transip.nl (Postfix) with ESMTP id 49h3n21F5KzGnt6 for <dns-privacy@ietf.org>; Tue, 9 Jun 2020 10:53:26 +0200 (CEST)
Received: from [192.168.1.24] (ip51cd943a.adsl-surfen.hetnet.nl [81.205.148.58]) by submission10.mail.transip.nl (Postfix) with ESMTPA id 49h3n06fnVz1gwfw for <dns-privacy@ietf.org>; Tue, 9 Jun 2020 10:53:24 +0200 (CEST)
To: dns-privacy@ietf.org
References: <158987990316.29446.4343920282978207647@ietfa.amsl.com> <a15e2d1df86820f2483516662d3712d8a60161cd.camel@powerdns.com> <eaf5d580-ec3c-bf7e-2987-cc03ebcde80a@huitema.net> <1b323302a42ea7559b9d76b041d4ebef15ac20cc.camel@powerdns.com> <alpine.LRH.2.22.394.2006031140570.9753@bofh.nohats.ca>
From: Robin Geuze <robin@robingeuze.nl>
Message-ID: <3f2d4c33-3dd1-be36-9085-e27b9d98b032@robingeuze.nl>
Date: Tue, 09 Jun 2020 10:52:44 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0
MIME-Version: 1.0
In-Reply-To: <alpine.LRH.2.22.394.2006031140570.9753@bofh.nohats.ca>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Content-Language: en-US
X-Scanned-By: ClueGetter at submission10.mail.transip.nl
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=transip-a; d=robingeuze.nl; t=1591692805; h=from:subject:to: references:in-reply-to:date:mime-version:content-type; bh=FNvK+WIhkSVc5tQpQqnF2FgiQYMctG8VqfHbVNSO614=; b=E8v0qEqZVr4SceCgRufCM4tVtmL7CEY8PIv9TqJSKmqsyC7WSDEnEBaLjzZq2P4RXtNBcd u4+biuROrZTRe6Qd83jmAHLEsZ0WLiKraq5vA/Ox70jUMPSDqaWIpEBRTBBf3gTesfHnaR HtZ3g3dLNK+EMeS/QDuZ9+ru/UoXxESr8sOdbW2swaJSdrC8v84Hcd5YFX0WhZZDRLM2hs 7fyn7qYL3cR64xvhLAKfGKySkT6IY1Pfsv8bedqc4yKjTw4ZHH2Bpd3g4TAUa2tM6qagav MKqRV2buu2Spun/5fcKChqqJd1fUTcGZ9btT6cs5J63Tsr3BKCRcRS9aOG01CA==
X-Report-Abuse-To: abuse@transip.nl
Archived-At: <https://mailarchive.ietf.org/arch/msg/dns-privacy/EhJt51FWwdBtXoKLoFBg1p0D6Cc>
X-Mailman-Approved-At: Tue, 09 Jun 2020 08:49:15 -0700
Subject: Re: [dns-privacy] re-evaluation of the draft, was Re: [Fwd: New Version Notification for draft-vandijk-dprive-ds-dot-signal-and-pin-00.txt]
X-BeenThere: dns-privacy@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <dns-privacy.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dns-privacy>, <mailto:dns-privacy-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dns-privacy/>
List-Post: <mailto:dns-privacy@ietf.org>
List-Help: <mailto:dns-privacy-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dns-privacy>, <mailto:dns-privacy-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 09 Jun 2020 08:53:35 -0000

Hello Paul,

I wanted to take a step back and explain the reasoning behind this 
implementation and why we didn't pick a different implementation.

So lets start at the beginning, why do we want to encrypt the 
communication between then resolvers and the authoritatives in the first 
place. There are two main reasons for encrypting things. One is 
authentication. DNSSEC already covers this aspect, at least in the sense 
of data authentication, it does not guarantee sender authenticity, I'll 
come back to this aspect later. One important aspect of the way DNSSEC 
works is that the parent zone is assumed to be trustworthy. We use that 
same assumption, since going around it would require a completely 
separate system, not unlike the CA system.

So the second reason to encrypt things is confidentiality. This is what 
the draft is meant to accomplish. Ideally this would mean we would get 
encryption all the way from the root to the eventual authoritative 
nameserver. This seems unlikely, so for this draft, and any other 
efforts to use DoT, we also need QNAME minimization to be used. To 
ensure confidentiality we need to ensure that the nameserver we are 
talking to is the actual nameserver we want to talk to. Like I said 
before DNSSEC does not offer that guarantee, primarily due to the fact 
that while DS records are signed in the parent zone, NS records are not, 
and thus can easily be spoofed by an attacker.

So we need some way to identify the nameservers we should talk to. 
Luckily we already have a mechanism for this, TLSA! So the simplest way 
to implement this would be to just put a TLSA record at 
_853._tcp.<nameserver>. There are a few problems with this approach 
though. Like I said before NS records are not to be trusted coming from 
the parent, this means that the TLSA record you get is initially not 
trustworthy either. You can establish the authenticity by requesting the 
NS records from the child as described in 
draft-huque-dnsop-ns-revalidation. This approach could work. But 
depending on the data you are trying to request it could lead to a 2 
times increase in queries at the very least, if you chain a bunch of 
nameservers that have yet more nameservers it at some point becomes 
problematic, because you need to request the TLSA record for each of 
them. And mind you, this slow down would be for all domains, not only 
those supporting DoT.

So a much cleaner, and more efficient sollution, would be to put a TLSA 
record for the specific domain somewhere. Ideally this would be in the 
parent zone, for example on a _dot label. However, that would mean that 
registry would need to implement a completely new concept, we would need 
a new EPP RFC, which knowing the average deployment time for new 
technologies by registries, would mean we would be done by the time hell 
is frozen over.

Another solution would be to put the TLSA record in the child zone. This 
could work, it would require only 2 additional queries (QNAME 
minimization remember). However, the downside is that your initial 
communication with the authoritative will still be plain text. You could 
solve this by putting a chain in the TLS handshake, however you would 
still need some way to signal that DoT should be attempted in the first 
place, otherwise resolvers would be wasting a lot of time probing which 
authoritatives support DoT.

So we are back to ideally signaling something via the parent. The only 
way to do this securely and without registries having to make large 
changes would be to use the DS record. The simplest way to accomplish 
this would be to just add a dummy DS record with an algorithm DoT. 
However, that still leaves the problem of getting some way to 
authenticate the sender. We could use the methods described above, 
however the problem of the initial communication remains. Stuffing the 
TLSA chain into the TLS Hello would solve that, but it would be a very 
complex solution to a simple problem.

This is where our idea comes from. “Hey, if we are going to be abusing 
the DS record anyway, why not put a hash of the key in there”. It is a 
simple solution, it will most likely be relatively easy to implement for 
registries (they only need to add a new algorithm number in some cases, 
the hashing method remains the same), and the amount of code needed in a 
DNSSEC resolver is minimal. It also requires no extra queries, which is 
a nice bonus.

So in summary, we think this solution is the simplest, and has the 
highest chance of deployment, due to it requiring minimal effort from 
all parties involved. Other solutions are definitely possible, however 
this is as far as I call tell the only one, outside TLSA records in the 
parent, that allows full start to finish encryption.

Regards,

Robin Geuze

On 03-06-2020 17:51, Paul Wouters wrote:
> On Wed, 3 Jun 2020, Peter van Dijk wrote:
>
>>
>> We have definitely thought about that! The way this signaling 
>> protocol is structured means that we cannot see DNSKEY flags until we 
>> have established some encrypted connection (in our case, DoT). So 
>> flags are out. I think it would be simplest to allocate one 
>> 'algorithm' number per protocol. This would also allow protocols 
>> other than DoT to perhaps use the various DNSKEY/DS fields for 
>> different semantics.
>
> I had a discussion with Viktor Dukhovni about the concepts of the draft.
>
> We kind of came to the following conclusion:
>
> If you need EPP and/or Registry and Registrar support for new things,
> this is not really going to get deployed at scale. (and we need scale
> to hide)
>
> Syncing between domain owner and nameserver operator for public keys is
> basically impossible. While it might work manually for one domain,
> imagine GoDaddy or Cloudflare wanting to change their DoT key. They have
> to get all their domain DS records updated. We can hope for CDS, but is
> that realistic?
>
> All of the draft (storing DoT signal plus pubkey in DS record) is
> basically the same as storing this in a TLSA record at the nameserver
> name, except it saves a few RTTs. But saving those RTTs is really not
> that important if you do this at the large nameserver hosters, for which
> a recursive presumbly already has a working DoT connection open because
> it is serving so many more other domains.
>
> It really makes much more sense to signal the capability of nameservers
> with nameservers, and not with the domains they serve. Then if someone
> uses ns0.nohats.ca, ns1.cloudflare.com and ns2.godaddy.com, those
> hosters can all maintain their keys themselves and update their
> nameservers without needing to inform or get consent from their millions
> of domain name owners.
>
>
> So we kind of concluded this was a neat hack, but we shouldn't really
> think it leads to realistic at scale stable deployments.
>
> Let's just use TLSA records on the nameservers. It is logically where
> this information is authoritative for.
>
> Paul and Viktor
>