Re: [DNSOP] Benjamin Kaduk's Discuss on draft-ietf-dnsop-dns-zone-digest-12: (with DISCUSS and COMMENT)

"Wessels, Duane" <dwessels@verisign.com> Wed, 07 October 2020 19:59 UTC

Return-Path: <dwessels@verisign.com>
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 CF1983A1329; Wed, 7 Oct 2020 12:59:59 -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=verisign.com
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 GtKU8h6fD2M6; Wed, 7 Oct 2020 12:59:57 -0700 (PDT)
Received: from mail5.verisign.com (mail5.verisign.com [69.58.187.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E420A3A1328; Wed, 7 Oct 2020 12:59:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=verisign.com; l=27419; q=dns/txt; s=VRSN; t=1602100798; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=HxDOftCAv2Vgvpw81YJAEXUjsU3H9x5c//1QWhbivr4=; b=nnZ1U7YbeFGQotY9oJT8gIgXyxZF5fithB3Pp3V/i8ebHZR5xtyaEIbt Z7gem/cY1BYYncS4bi08jFPM3s1wX1737a9VgwPttf4aIzEKOYACyo89e hmvHkioK5Wa+p9N+qpBxSgLXSeLAEd/jvmEEWZHiq5PQ4KIiDnaR6b9GB 9JNedfNUM4Ad8w2lcp2OHM6i58bYohZEdm5VoOCd5k0ya55L45V5ymv1I xsWNXGEk52LSWTgLTcbqICAUiwuBaz98WMxk+bMH/GMH5ZD5lv932TY/R oJNPzW0IREEJRWGRI6ij5kLIRGX6gzAb6LT0Sd/kgWq4gpWeeuoGBfJQL g==;
IronPort-SDR: /b5AK+2FTzMxGVanOGxC4JVZffP6Cn6ZFBfG2jR19apf9aELaL158rAuYSBAzBNMIMxlffvhW7 PO8YoXkEWsTVNkEykGwmBsxpBvs4A9nsSvYBM/VKg41+6UnkGBGKGsL3UrmW0G2Yj3twmZNeNY 36eHn6iLbsiHa2MN57TzLdC+T0pLMubS278EjR64IguoHf6IYPsRS/3yeoHHHjvEIR6jexTInK SLxfnY2zvZXApEd6GaAdFmiM97J1o+/oZNa40Zr28pN2gl+aMLOCewJpbmIMH7VymZRuy88P1J 9QE=
X-IronPort-AV: E=Sophos; i="5.77,348,1596513600"; d="p7s'?scan'208"; a="3099096"
IronPort-PHdr: =?us-ascii?q?9a23=3AZtWPCBDmC/l1avBljrjzUyQJP3N1i/DPJgcQr6?= =?us-ascii?q?AfoPdwSP34psuwAkXT6L1XgUPTWs2DsrQY0rWQ7/6rCDdIyK3CmUhKSIZLWR?= =?us-ascii?q?4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBx?= =?us-ascii?q?rwKxd+KPjrFY7OlcS30P2594HObwlSizexfLF/IA+5oAjQucUbhYVvIbstxx?= =?us-ascii?q?XUpXdFZ/5Yzn5yK1KJmBb86Maw/Jp9/ClVpvks6c1OX7jkcqohVbBXAygoPG?= =?us-ascii?q?4z5M3wqBnMVhCP6WcGUmUXiRVHHQ7I5wznU5jrsyv6su192DSGPcDzULs5Vy?= =?us-ascii?q?iu47ttRRT1kyoMKSI3/3/LhcxxlKJboQyupxpjw47PfYqZMONycr7Bcd8GQG?= =?us-ascii?q?ZMWNtaWS5cDYOmd4YBD/QPM/tEr4fzpFUOoxmxCw6tBOzzxTBFnXD20bE/0+?= =?us-ascii?q?k7EQHKwA4tEtQTu3rUttX1M6ISXPi7wKbI0zrDdOhW1in56IjTahwqvP+CXa?= =?us-ascii?q?9qfsrX10YjGR7Og1KNpo3rITyVzf8NvHaf7+p7Tu+vlXAoqxtwoji0x8cshY?= =?us-ascii?q?/JipgJxVDD8CV02YA4LsC3R0Bne9CrCodQtz2EOItsRMMvW29ltSU0xLAGp5?= =?us-ascii?q?O1cyYHxZYnyhPcdvCLbYiG7xDjWuuRITl1i25pdbC/iRuy8UWs1/DxW8233V?= =?us-ascii?q?tLqidIkNnCu34L2hfO5MaHTf598V2g2TaJzw3c9uBEIVsomqrcMZIu3rkwlp?= =?us-ascii?q?8LvUTCACD2hEv2gLWRdkU+9eik8+Xnbav6pp+SLoN7lxn+Mr4vmsyhH+s0Kw?= =?us-ascii?q?cPX2aB+eil073j41P2QK9Tgv0qlqnZq4rWJcMdpqGnBQJez4Ut6w6nAju7zN?= =?us-ascii?q?gUh2QLIVBLdR6dkoTkO1/DLOr3APq8m1igjStny+rbMrDjHpnBNGXPnbjicL?= =?us-ascii?q?pn9kJRyww+xs1F6Z1OELEOOvfzV1f0tNzfExA2LRS5w/3iCNVhzoMeXn+PAr?= =?us-ascii?q?OBPKPSr1CI4uUvLvGRaYEJoDjxNvgq6ebhg3A4hVMRYLOl3YULZ3C/BPRmO1?= =?us-ascii?q?+VbmDxjdsbD2cKpBE+TOrwhFKeVj5TYm6+X6M65j4lFIKrFZrPSpy3jLCc3i?= =?us-ascii?q?q2EIdaan1GB12CC3vleIaJV+8JaC2II89hljIEVaKmS48kzRyhqQH7xKR8Lu?= =?us-ascii?q?rP5CIYsYnj2cNr5+LNjxEy9Cd0D8WS02GLVW17gmQIRzou0KBlvUN90kuD0b?= =?us-ascii?q?R/g/FAFtxc/e5GUho5NZPHyux6CszyVhjfcdiUVVasWs+mDi0pTtIt398OZF?= =?us-ascii?q?5wG9S8gRDY0CqnGL4VmKKXBJw66K7c2GLxJ8llwXbcyKYhl0UmQtdINWC+m6?= =?us-ascii?q?F/7RLcB4DVk0mAlqala7gc3CDU+Giey2qOp0ZYUBZpXarYW3AffVLarNX+5k?= =?us-ascii?q?PEUbCiEKkoMgpOycGcMatKdsbkjVRYS/f/NtTSeWWxm32/BRyQ3LODcJLqe3?= =?us-ascii?q?kB3CXaEEULjgYT/W2BNQgmHyuuv2LeAyZvFVL1eEPh6uh+p22nTk861Q2KaF?= =?us-ascii?q?dh17Wt8B4PmfOcU+8T3q4DuCo5tjp0Gk2939XOC9ebpgpuYrlcYd0n7FdAz2?= =?us-ascii?q?LZuBR3Poa8IKB6ml4ebwN3slvy1xV1BIRMi8kqo202zAp8Mq+Y31ZBeCmZ3Z?= =?us-ascii?q?D0ILHYNm7y/BX8I5LRj3vT1tSf/6YJoNcxp0jg9FWqH0Y/8F1i0sUT3neBsM?= =?us-ascii?q?bkFg0XBNjOX10s+hxh4/n2fyA76smcgXFzPLKvvzvZ88wkHuo+yxmmOdxYNf?= =?us-ascii?q?XXR0fJD8QGCp32e6QRkF+zY0dBZbgK+Q=3D=3D?=
X-IPAS-Result: =?us-ascii?q?A2EQAADCHH5f/zCZrQpgDgwBAQEBAQEBAQEBAwEBAQESA?= =?us-ascii?q?QEBAQICAQEBAYF+AgEBAQELAYF6gR8sgQgKhDORGCaDepZDgWkEBwEBAQEBA?= =?us-ascii?q?QEBAQQEAS8EAQGESgKCCSY3Bg4CAwEBCwEBAQUBAQEBAQYDAQEBAoZRgjcpA?= =?us-ascii?q?YNqAQEBAQIBI08HBQsCAQgYIwcCAgIwJQIECgQFDoMYAYJcEagjGTV2gTKKR?= =?us-ascii?q?goGgTgBgVKJFYEtgTmBQj6BEScMEIFPfj6ECAESASCDGDOCLQSQEQIKBwIgg?= =?us-ascii?q?jYGAYdngn+IW5AKgQoDB4JohEuCX4gwhgaFCh+DE4oEhT+OV5UUmkKDXwIEA?= =?us-ascii?q?gQFAhWBaoEMcHAVGksBgj4+EhcCDY4qARcUbgEOjFU+dDcCBgEJAQEDCYwEL?= =?us-ascii?q?YEGMl8BAQ?=
Received: from BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) by BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Wed, 7 Oct 2020 15:59:54 -0400
Received: from BRN1WNEX01.vcorp.ad.vrsn.com ([fe80::a89b:32d6:b967:337d]) by BRN1WNEX01.vcorp.ad.vrsn.com ([fe80::a89b:32d6:b967:337d%4]) with mapi id 15.01.1979.003; Wed, 7 Oct 2020 15:59:54 -0400
From: "Wessels, Duane" <dwessels@verisign.com>
To: Benjamin Kaduk <kaduk@mit.edu>
CC: The IESG <iesg@ietf.org>, "draft-ietf-dnsop-dns-zone-digest@ietf.org" <draft-ietf-dnsop-dns-zone-digest@ietf.org>, "dnsop-chairs@ietf.org" <dnsop-chairs@ietf.org>, "dnsop@ietf.org" <dnsop@ietf.org>, Tim Wicinski <tjw.ietf@gmail.com>
Thread-Topic: [EXTERNAL] Benjamin Kaduk's Discuss on draft-ietf-dnsop-dns-zone-digest-12: (with DISCUSS and COMMENT)
Thread-Index: AQHWnAfnt+pLHjOljEK3Fo7EIqCwDKmM09QA
Date: Wed, 7 Oct 2020 19:59:54 +0000
Message-ID: <A73D8E73-5253-4E86-A83C-A488337B9521@verisign.com>
References: <160200606961.32445.15470555113695796820@ietfa.amsl.com>
In-Reply-To: <160200606961.32445.15470555113695796820@ietfa.amsl.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3608.120.23.2.4)
x-originating-ip: [10.170.148.18]
Content-Type: multipart/signed; boundary="Apple-Mail=_C79CB73E-7A3C-44DF-81B4-1D7038CD17AB"; protocol="application/pkcs7-signature"; micalg=sha-256
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnsop/ceRXpd8b7A3UwAHNcRVBe8o4VsU>
Subject: Re: [DNSOP] Benjamin Kaduk's Discuss on draft-ietf-dnsop-dns-zone-digest-12: (with DISCUSS and COMMENT)
X-BeenThere: dnsop@ietf.org
X-Mailman-Version: 2.1.29
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, 07 Oct 2020 20:00:00 -0000

Hi Benjamin, thanks for the extensive review and comments.  Responses are
inline.  As you've noted some of this overlaps with Roman's comments as
well.


> On Oct 6, 2020, at 10:41 AM, Benjamin Kaduk via Datatracker <noreply@ietf.org> wrote:
> 
> Benjamin Kaduk has entered the following ballot position for
> draft-ietf-dnsop-dns-zone-digest-12: Discuss
> 
> When responding, please keep the subject line intact and reply to all
> email addresses included in the To and CC lines. (Feel free to cut this
> introductory paragraph, however.)
> 
> 
> Please refer to https://secure-web.cisco.com/1BhOfb00VlP-8nUKujrBf7Xdn619jDI_JYiZUqXkRxJrGzti31tg1_lvl6zhDB3k4IUREe6b8Nw3PlWFa0tN3hSEXudysqKd2OxwaaOs0SBHZvEEKVIPc1f-JzrxCn2NAZvke4gWp4K8Nu32aoVdLQKo7SS5PVgHXC9ilgSSqgG_on7pnLuTvHDjYBitnA0fUBIgsOzbVX0tkBue9G06o0C0r80D6EsaK6UoD5cuNz9mUjPZ56TJxzip1UXrfJZ28kGt4MPwe8JIqa4VLKcwz8GqlffyQuXEquiSqih46whY/https%3A%2F%2Fwww.ietf.org%2Fiesg%2Fstatement%2Fdiscuss-criteria.html
> for more information about IESG DISCUSS and COMMENT positions.
> 
> 
> The document, along with other ballot positions, can be found here:
> https://secure-web.cisco.com/1xe5afi0q1U9T8XBGtR5t0vEYlrnzaadCkXqE09yMZj4z0tASslenLfkLmcnAJ7Mh9GZqXJwg_vPKpS0X4wUosrcy_CVVGV42vwFrwqpNkm-3ukWQWroGS3v0hj84_EQOKGAHQG7X87FSo9kCMC4VX43uHk4s9tUi1QT-f1gd4kngZnItz73If8TdNzt_dLWdlpOjGkd1YSMOMD9ZAitEfs_X25RrGQdC2vFNdrGXdbChufVU8h4Ex2uZCVCakgPLhbPUKXVdXDkZ5JCPHireHA/https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fdraft-ietf-dnsop-dns-zone-digest%2F
> 
> 
> 
> ----------------------------------------------------------------------
> DISCUSS:
> ----------------------------------------------------------------------
> 
> Inclusion of an "implementation requirement" column in the IANA
> registries implies a need for a defined procedure to make changes to
> existing registrations.  With only a "specification required" procedure,
> it seems there would need to be a "change controller" column as well.
> Furthermore, is it expected that anyone with any specification could
> set, e.g., an implementation requirement of "MUST"?  It seems like this
> attribute might be better left for the RFCs defining the protocol, to be
> modified by an updating RFC...

To be honest, I feel like the "implementation requirement" column is a
bit of a can-of-worms.  I have a hard time finding other IANA registries
that use it.  Would it be better to omit this from the registry?

If not, would it be sufficient to say something like "all specifications
requesting an allocation must have the implementation requirement set to
MAY unless being published on the standards track"?



> 
> If we are to retain the Implementation Status appendix in the final RFC,
> the boilerplate will need some changes, and I think those changes should
> get review prior to AUTH48.  For example, "at the time of posting of
> this Internet-Draft" will make no sense in an RFC, and the relationship
> to RFC 7942 is not quite as clear given that we diverge from its
> recommendations.  "[A]ssist the IETF in its decision process" does not
> seem to apply after the IETF has made its decision, though the
> disclaimer about endorsement seems highly important to retain.


Is this okay?

  RFC Editor: Please retain this section upon publication.

  This section records the status of known implementations of the
  protocol defined by this specification, and is inspired by the
  concepts described in RFC7942.

  Please note that the listing of any individual implementation here
  does not imply endorsement by the IETF.  Furthermore, no effort has
  been spent to verify the information presented here that was supplied
  by IETF contributors.  This is not intended as, and must not be
  construed to be, a catalog of available implementations or their
  features.  Readers are advised to note that other implementations may
  exist.


> 
> This seems to be related to Roman's Discuss point, but the document
> seems to be inconsistent as to the primary purpose of the mechanism --
> Section 1.1 says that it is to verify "authenticity" of a stand-alone
> zone, whereas the Introduction implies that "integrity" is primary (with
> authenticity as an add-on "when used in combination with DNSSEC), and
> the Abstract refers to "accuracy and completeness".  In particular, it
> is easy to read references to "integrity" (and, indeed, the Abstract
> itself) as referring to something akin to a transport checksum instead
> of a cryptographic message integrity code.  I think the document needs
> to be much more clear, and consistent, about what properties it aims to
> provide.  (I do not believe that the "authenticity" property can be
> provided without DNSSEC, and Roman covers the cryptographic integrity
> case in his ballot position.)

Thanks for pointing this out. Here's some diff showing changes to address
this:

-        that provides a cryptographic message digest over DNS zone data.
+        that provides a cryptographic message digest over DNS zone data at rest.

-        can verify the zone contents for accuracy and completeness.
+        can verify the zone contents for integrity and, when signed with DNSSEC, origin authenticity.

-        Currently there is no standard way to verify the integrity and authenticity
+        Currently there is no standard way to verify the integrity and origin authenticity


-          to verify the authenticity of a stand-alone zone,
+          to verify the data integrity and origin authenticity of a stand-alone zone,
          regardless of how it is transmitted.  A consumer of zone data
-          should be able to verify that the data is as-published by the
-          zone operator.
+          should be able to verify that it is as-published by the
+          zone operator.  Authenticity can only be assured when the zone
+          is signed with DNSSEC.


> 
> 
> ----------------------------------------------------------------------
> COMMENT:
> ----------------------------------------------------------------------
> 
> Section 1.2
> 
>  The Transport Layer Security protocol suite also provides channel
>  security.  One can easily imagine the distribution of zones over
>  HTTPS-enabled web servers, as well as DNS-over-HTTPS [RFC8484], and
>  perhaps even a future version of DNS-over-TLS ([RFC7858]).
> 
> I'm not sure I understand why a "future version" of DoT is needed --
> while 7858 disclaims applicability outside of stub-to-recursive, is it
> know whether/what protocol changes would be needed, if any, to
> effectuate zone transfer?

It was an oblique reference to draft-ietf-dprive-xfr-over-tls.  Updated the
text to read:

  The Transport Layer Security protocol suite also provides channel
  security.  The DPRIVE working group is in the process of specifying
  DNS Zone Transfer-over-TLS [I-D.ietf-dprive-xfr-over-tls].  One can
  also easily imagine the distribution of zones over HTTPS-enabled web
  servers, as well as DNS-over-HTTPS [RFC8484].



> 
> Section 1.2
> 
>  been modified.  Such modification could be the result of an
>  accidental corruption of the file, or perhaps an incompletely saved
>  file [disk-full-failure].  For these reasons, it is preferable to
>  secure the data itself.
> 
> "secure" is kind-of a catchall word; it would be better to use a more
> precise term if possible, perhaps "protect the integrity of".

Okay.


> 
>  DNSSEC.  Furthermore, zones that employ NSEC3 with opt-out are
>  susceptible to the removal or addition of names between the signed
>  nodes.  Whereas DNSSEC is primarily protects consumers of DNS
> 
> (nit) an RFC 5155 reference might be helpful here.

Done.

> 
> Section 1.4.2
> 
> While I'm sure this is all true, I do wonder if there are any references
> available that go into more detail about the various possible setups and
> the problems that can arise with them.

How about RFC 3258 (anycast) and RFC 8901 (multi-signer DNSSEC)?

  However,
  modern DNS service has complex provisioning which includes multiple
  third-party providers ([RFC8901]) and hundreds of anycast instances
  ([RFC3258]).  



> 
> Section 1.4.3
> 
> RPZ is an individual draft that expired in 2018.  Is the reference
> likely to have archival value?

Shall we cite its wikipedia article instead?


> 
> Secion 1.4.4
> 
>  ICANN operates the Centralized Zone Data Service [CZDS], which is a
>  repository of top-level domain zone files.  Users that have been
>  granted access are then able to download zone data.  Adding a zone
>  digest to these would provide CZDS users with assurances that the
>  data has not been modified between origination and retrieval.  ZONEMD
>  could be added to CZDS zone data independently of the zone served by
>  production name servers.
> 
> I'm not entirely sure that I understand the relationship between the
> last two sentences.  Giving (cryptographic) assurance of integrity
> between origination and retrieval requires that the ZONEMD be generated
> by the same entity doing the origination.  Yet "added to the CZDS zone
> data independently of the zone served by the production name servers"
> seems to imply that there is a different entity adding ZONEMD than
> originating the data, which seems to contradict the previous statement.
> Is the intent just to say that the ZONEMD generation does not need to
> occur in-band with the production service even though it is managed by
> the same entity?

The thought here is that some zones in CZDS might have properties, such
as their size and update frequency, that make SIMPLE ZONEMD impractical
for use on production name servers. 

However, the zone operator could still do a one-time "offline" ZONEMD
digest calculation for the one time per day that they transmit a zone
file to CZDS.



> 
> Section 2
> 
> It may be better to reference RFC 7696 as BCP 201 directly.

Maybe we can do this in the RFC editing step?  I'm using xml2rfc  
but it doesn't seem to support BCP references / entities?

> 
> Section 3.1
> 
> If the ZONEMD contents other than digest (i.e., serial, scheme and hash
> algorithm) were included in the digest calculation, there are some
> classes of cross-algorithm attacks that would be made harder.  That
> said, it is not entirely clear whether there will be cases where more
> than one digest with the same output size is defined, which is a
> prerequisite for this sort of cross-algorithm attack, so the risk from
> leaving things as-is is probably tolerable, and furthermore so since
> DNSSEC does protect these fields, and we seem to be strongly encouraging
> use of DNSSEC (see Roman's ballot position).  (I assume that, given that
> the codepoint was allocated almost two years ago, this is already
> deployed and thus gratuitous wire-visible changes are ill-advised.)


Earlier versions of the draft did include those fields in the digest, but
with working group consensus we changed it.  I can say that it really
simplified the implementation, which I think is a good thing.

Perhaps too much detail, but the original design was to include the
non-digest fields of all ZONEMD RRs into all digests.  The current design
is to exclude all ZONEMD RRs from all digests.  There is a middle ground
option that was never really considered, which would be for each digest
to include its own RR non-digest fields, but entirely omit other ZONEMD
RRs.  I'm not sure if that middle ground option addresses the attack you
are referring to, but I'm guessing not.

I wouldn't say ZONEMD is already deployed in a way that would make it a
problem to revert.  But I still wouldn't advocate for including the
non-digest fields in the digest calculation.


> 
> Section 3.3.1
> 
> "REQUIRES" is not a BCP 14 keyword.

Yet it still seems to sneak in to recent RFCs?  If this is a strict rule
we can reword it.


> 
> Section 3.3.1.1
> 
>  o  All records in the zone, including glue records, MUST be included.
> 
> I suggest adding "unless excluded by a subsequent rule", so that this
> directive is not in conflict with all the subsequent exclusion rules.

Okay.


> 
>  o  If the zone is signed, DNSSEC RRs MUST be included, except:
> 
> If the zone is not signed, there would not be any DNSSEC RRs to worry
> about, would there?  It is not entirely clear to me how much value is
> added by this statement, that seems to just be repeating a subset of
> "all records in the zone ... MUST be included".

IMO it is better to be very explicit here and it makes sense to have this
rule given the following rule to exclude the ZONEMD signature.  


> 
> Section 4
> 
>  1.  The verifier MUST first determine whether or not to expect DNSSEC
>      records in the zone.  This is done by examining locally
>      configured trust anchors, or querying for (and validating) DS RRs
>      in the parent zone.  [...]
> 
> This procedure is a bit puzzling to me.
> Finding valid DS RRs in the parent zone, of course, makes sense, but
> "examining locally configured trust anchors" I am less sure about.  When
> would one trust anchor but not another imply that DNSSEC records should
> be expected?  It seems to only be possible when there is additional
> metadata associated with locally configured trust anchors (not just the
> key material themself, but what zone it is associated with).  Only if
> there is a configured trust anchor for the zone in question or a
> (possibly indirect) parent does querying for and validating the DS
> records make sense.  So these two checks are not independent (as the
> "or" would imply) but rather, the latter is dependent on the former.

How about:

  ... examining locally configured trust anchors, and, if necessary,
  querying for ...



> 
>      A.  The SOA Serial field MUST exactly match the ZONEMD Serial
>          field.  If the fields do not match, digest verification MUST
>          NOT be considered successful with this ZONEMD RR.
> 
> This step is occurring after ZONEMD RRSIG verification, so such a
> mismatch would seem to indicate misconfiguration on the signer.  Is it
> wise to proceed at all (by just skipping this RR) vs considering
> verification to have failed?

The scenario is that we have a zone, signed with DNSSEC and at least one
ZONEMD RR.  If we get to this step 5A and the ZONEMD and SOA serial numbers
don't match, then the question is do we fail verification right there or
do we continue looping through any remaining ZONEMDs and possibly have a
successful verification?

If there is just one ZONEMD RR then its equivalent to failing entirely.
So we're really interested in the case when there are multiple ZONEMDs.
Note they would also need unique hash,scheme tuples or else they would be
rejected at step 4.

If we have two ZONEMDs and the first has a wrong serial number but the
second has the correct serial, then do we still trust the second digest?
I'd agree its a bug or misconfiguration with the signer/publisher, but
I'm not sure it means the second digest is invalid.

As a practical matter, failing entirely for a wrong serial would probably
require changing the algorithm to do 5A for all ZONEMD RRs before proceeding
to 5B, otherwise the behavior depends on the order in which ZONEMD RRs are
processed.






> 
>      B.  The Scheme field MUST be checked.  If the verifier does not
>          support the given scheme, verification MUST NOT be considered
>          successful with this ZONEMD RR and it SHOULD report that the
>          RR's digest could not be verified due to an unsupported
>          scheme.
> 
> This seems to be setting us up for lots of diagnostic spew whenever
> anyone starts publishing with a new scheme (or hash algorithm).  Is the
> best condition for reporting that an unknown codepoint exists, or that
> verification failed overall and there was an unknown codepoint?  (It
> would also feel a bit odd to report that the RR's digest could not be
> verified for a particular reason if/when the diget was actually verified
> just using a different scheme/hash-algorithm.)

I struggled with this as well.  Open to suggestions.


> 
> Section 6
> 
> Is there anything interesting to say about split-horizon DNS?

I don't believe so.  Split DNS or views generally operates on a 
per-query basis.  I'd say in such a situation the two (or more)
views are really separate zones (with the same origin).  I don't
think that ZONEMD creates any additional problems that don't already
exist with split DNS.


> 
> Section 6.1
> 
> I suggest calling out more explicitly that "modifying the Digest field
> of the ZONEMD record" allows the attacker to make any zone contents
> appear to be valid (in the absence of DNSSEC validation).

How about this:

 For zones not signed with DNSSEC, an attacker can make any zone modifications
 appear to be valid by recomputing the Digest field of a ZONEMD RR.

> 
> Some discussion of "cryptographic attacks only get better" and the
> expected need to implement algorithm agility on long timescales might
> also be appropriate here (I do see that we referenced RFC 7696 earlier
> already).

How about this:

  As stated in [RFC7696], cryptographic algorithms age and become
  weaker as cryptanalysis techniques and computing resources improve
  with time.  Implementors and publishers of zone digests should
  anticipate the need for algorithm agility on long timescales.



> 
> Section 6.2
> 
> In security considerations, I'm used to "timing considerations"
> referring to time-based side-channel attacks, so it was slightly
> surprising to read on and discover that this is just the blunt
> progression of wall-clock time and signature expiration.  Would
> "Time-Related Considerations" work?

Well, the title of RFC 7583 is "DNSSEC Key Rollover Timing Considerations".


> 
> I think it might be worth adding a note that a consumer of ZONEMD might
> have some way of locally indicating that DNSSEC validation of a given
> ZONEMD record was performed successfully, so that the zone digest might
> still be used even if the signature is no longer validatable at some
> later point in time.  On the other hand, this local indication would
> also potentially be subject to attacks, so perhaps the extra complexity
> of discussing those risks is not worth it.
> 
> Section 6.4
> 
> I like that this was explicitly framed as a tradeoff.
> 
> Section 9
> 
>  Wouters, and other members of the DNS working group for their input.
> 
> "DNS" seems to be a concluded working group (but "DNSOP" is currently
> active).

Fixed.

> 
> Section 11.2
> 
> We seem to use RFC 5936 as the reference for "occluded data", which
> appears as part of "occluded data MUST be included" (§3.3.1.1).  It's
> not really clear to me that the MUST implies you have to read the
> reference to know what occluded data is, so I don't see a huge need to
> move this reference to the normative section.

Agreed.

> 
> Appendix A
> 
> I trust that the digests in the ZONEMD records have been validated for
> all the examples (it's a bit more complicated than I want to set up from
> scratch, myself).  I do appreciate the variety of examples and their
> utility as unit tests ("I'm occluded but must be digested", "I must be
> digested just once", etc.)!

I will make a point to verify them with one of the other implementations.

> 
> (I am a bit curious if the private-use hash algorithm 241 in A.3 is
> SHA-1, though ... not too many choices for native 20-octet output,
> though I suppose it could be truncated.)

Its possible, but that detail has been lost to time.  There was a time where
my implementation did support SHA1, so I may have taken it from there.

> 
> Appendix A.4, A.5
> 
> [Sometimes I ask people to update the examples to use times closer to the
> time of publication.  This is not one of those times; these examples
> seem to stand just fine as-is.]

Thanks for the review and comments.

DW