Re: [TLS] WGLC: draft-ietf-tls-dnssec-chain-extension-04

Ilari Liusvaara <ilariliusvaara@welho.com> Sun, 02 July 2017 14:03 UTC

Return-Path: <ilariliusvaara@welho.com>
X-Original-To: tls@ietfa.amsl.com
Delivered-To: tls@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6A8B112EC07 for <tls@ietfa.amsl.com>; Sun, 2 Jul 2017 07:03:14 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RP_MATCHES_RCVD=-0.001] autolearn=ham autolearn_force=no
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 gGy0zqQMglFS for <tls@ietfa.amsl.com>; Sun, 2 Jul 2017 07:03:12 -0700 (PDT)
Received: from welho-filter2.welho.com (welho-filter2.welho.com [83.102.41.24]) by ietfa.amsl.com (Postfix) with ESMTP id A731912700F for <tls@ietf.org>; Sun, 2 Jul 2017 07:03:11 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by welho-filter2.welho.com (Postfix) with ESMTP id 3F5873B5C4 for <tls@ietf.org>; Sun, 2 Jul 2017 17:03:10 +0300 (EEST)
X-Virus-Scanned: Debian amavisd-new at pp.htv.fi
Received: from welho-smtp2.welho.com ([IPv6:::ffff:83.102.41.85]) by localhost (welho-filter2.welho.com [::ffff:83.102.41.24]) (amavisd-new, port 10024) with ESMTP id vlXyWwGxVJcJ for <tls@ietf.org>; Sun, 2 Jul 2017 17:03:09 +0300 (EEST)
Received: from LK-Perkele-VII (87-92-19-27.bb.dnainternet.fi [87.92.19.27]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by welho-smtp2.welho.com (Postfix) with ESMTPSA id C633627B for <tls@ietf.org>; Sun, 2 Jul 2017 17:03:08 +0300 (EEST)
Date: Sun, 02 Jul 2017 17:03:08 +0300
From: Ilari Liusvaara <ilariliusvaara@welho.com>
To: tls@ietf.org
Message-ID: <20170702140308.6amd5ds3qqt3ju5m@LK-Perkele-VII>
References: <CAOgPGoAcuFF5v8f5LWpYQtgE8WygA+n1fsg0AeVFJX1=cADUgw@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Disposition: inline
In-Reply-To: <CAOgPGoAcuFF5v8f5LWpYQtgE8WygA+n1fsg0AeVFJX1=cADUgw@mail.gmail.com>
User-Agent: NeoMutt/20170609 (1.8.3)
Sender: ilariliusvaara@welho.com
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/jNP6ACWiAIiChuh1LQCwQZ-prgc>
Subject: Re: [TLS] WGLC: draft-ietf-tls-dnssec-chain-extension-04
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <tls.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tls>, <mailto:tls-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tls/>
List-Post: <mailto:tls@ietf.org>
List-Help: <mailto:tls-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tls>, <mailto:tls-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 02 Jul 2017 14:03:14 -0000

On Wed, Jun 28, 2017 at 02:15:45PM -0700, Joseph Salowey wrote:
> This is the working group last call for
> draft-ietf-tls-dnssec-chain-extension-04.
> Please send you comments to the list by July 12, 2017.

Some comments:

1) Section 3.2.  Protocol, TLS 1.3:

> The authentication chain will be an extension to the certificate_list
> to which the certificate being authenticated  belongs.

Extension blocks are per-certificate. I presume the extension goes to
the extension block of EE certificate?


2) Section 3.2.  Protocol, TLS 1.3:

I think if one refers to TLS 1.2 section, one should just call out the
differences (i.e., where the server extension goes), and not duplicate
parts of TLS 1.2 processing.

Right now, the text can be fairly easily be misread (e.g., that the
restriction on not constructing arbtirary records does not apply).


3) Section 3.4.  DNSSEC Authentication Chain Data:

> The resource records SHOULD be presented in the canonical form and
> ordering as described in RFC 4034 [RFC4034].

What is the expected _receiver_ (i.e., client) behavior? Is the client
supposed to run a canonicalization and sorting pass on the records?

If the client does not do this, and the server sends noncanonical or
unsorted RRset, the validation is going to fail.


4) Section 3.4.  DNSSEC Authentication Chain Data:

> Each RRset in the sequence is followed by its associated RRsig
> record.  The RRsig record is in DNS wire format as described in RFC
> 4034 [RFC4034], Section 3.1.  The signature portion of the RDATA, as
> described in the same section, is the following:

This seems to imply that all RRs that make RRSet need to be adjacent in
the serialization. However, I don't see this explicitly stated
anywhere.

Also, 'RRsig record' or 'RRsig records'? IIRC, if ZSK is being rolled
(and for DNSKEY, if KSK is being rolled), there will be two RRsig
records for one RRtype.


5) Section 3.4.  DNSSEC Authentication Chain Data:

> The first RRset in the chain MUST contain the TLSA record set being
> presented.  However, if the owner name of the TLSA record set is an
> alias (CNAME or DNAME), then it MUST be preceded by the chain of
> alias records needed to resolve it.

Is there a requirement to order the aliases in order those aliases are
followed?


6) Section 3.4.  DNSSEC Authentication Chain Data:

> The final DNSKEY RRset in the authentication chain corresponds to the
> trust anchor (typically the DNS root).  This trust anchor is also
> preconfigured in the TLS client, but including it in the response
> from the server permits TLS clients to use the automated trust anchor
> rollover mechanism defined in RFC 5011 [RFC5011] to update their
> configured trust anchor.

I think this is wrong. The final DNSKEY RRSet does contain the the
preconfigured root key. However, it also contains other keys that
are used to sign the DS records.

The client needs those keys in order to validate the chain, and those
keys are rotated every few months for root, instead of every N years.

Furthermore, frequently the trust anchor is provisioned as a fake DS
record for the root. Validating with such anchor requires sending the
root DNSKEY.


Real-world zone data (omitted the cryptographic line noise, and added
some hilights):

$ dig +dnssec -t DNSKEY .

; <<>> DiG 9.10.3-P4-Debian <<>> +dnssec -t DNSKEY .
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3623
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;.                              IN      DNSKEY

;; ANSWER SECTION:
.                       154841  IN      DNSKEY  256 3 8 <...>
.                       154841  IN      DNSKEY  257 3 8 <...>
.                       154841  IN      DNSKEY  256 3 8 <...>
.                       154841  IN      RRSIG   DNSKEY 8 0 172800 20170711000000 20170620000000 19036 . <...>
;; --------------------------------------------------------------------
;; Note the "19036" near end of previous line. That field contains the
;; key checksum of the key making the signature. 19036 is the checksum
;; of the well-known IANA root key.
;; --------------------------------------------------------------------


;; Query time: 0 msec
;; SERVER: ::1#53(::1)


$ dig +dnssec -t DS fi.

; <<>> DiG 9.10.3-P4-Debian <<>> +dnssec -t DS fi.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16923
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;fi.                            IN      DS

;; ANSWER SECTION:
fi.                     66181   IN      DS      48592 8 2 <...>
fi.                     66181   IN      RRSIG   DS 8 1 86400 20170711050000 20170628040000 14796 . <...>
;; --------------------------------------------------------------------
;; Note here the key checksum is not "19036", but "14796".  The key
;; used is found from the . IN DNSKEY records, and rotated every few
;; months.
;;
;; Also note: DS records are special, and reside on parent side of
;; zone cut, not on child side (another special type is NS, which
;; exists on both sides of the zone cut; all other data RRtypes exist
;; on the child side).
;; --------------------------------------------------------------------

;; Query time: 0 msec
;; SERVER: ::1#53(::1)


7) Section 4.  Construction of Serialized Authentication Chains

> The transport is "tcp" for TLS servers, and "udp" for DTLS servers.
> The port number label is the left-most label, followed by the
> transport, followed by the base domain name.

So if this would be used with IETF-QUIC, the labels would be
_443._tcp, which is the same as one used by HTTPS, right?


-Ilari