[dnsext] Update to RFC 5155. Maybe?

Edward Lewis <ed.lewis@neustar.biz> Tue, 18 December 2012 16:39 UTC

Return-Path: <ed.lewis@neustar.biz>
X-Original-To: dnsext@ietfa.amsl.com
Delivered-To: dnsext@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 01E8821F8A70 for <dnsext@ietfa.amsl.com>; Tue, 18 Dec 2012 08:39:17 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -101.245
X-Spam-Level:
X-Spam-Status: No, score=-101.245 tagged_above=-999 required=5 tests=[AWL=0.753, BAYES_00=-2.599, HTML_MESSAGE=0.001, J_CHICKENPOX_45=0.6, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bmKxsoy+1Yjs for <dnsext@ietfa.amsl.com>; Tue, 18 Dec 2012 08:39:15 -0800 (PST)
Received: from eastrmfepo203.cox.net (eastrmfepo203.cox.net [68.230.241.218]) by ietfa.amsl.com (Postfix) with ESMTP id 3100821F8AA5 for <dnsext@ietf.org>; Tue, 18 Dec 2012 08:39:07 -0800 (PST)
Received: from eastrmimpo210 ([68.230.241.225]) by eastrmfepo203.cox.net (InterMail vM.8.01.04.00 201-2260-137-20101110) with ESMTP id <20121218163906.WUYC29905.eastrmfepo203.cox.net@eastrmimpo210> for <dnsext@ietf.org>; Tue, 18 Dec 2012 11:39:06 -0500
Received: from [127.0.0.1] ([68.98.141.167]) by eastrmimpo210 with cox id d4f51k00t3cuADQ014f6pG; Tue, 18 Dec 2012 11:39:06 -0500
X-CT-Class: Clean
X-CT-Score: 0.00
X-CT-RefID: str=0001.0A020207.50D09C2A.0142,ss=1,re=0.000,fgs=0
X-CT-Spam: 0
X-Authority-Analysis: v=2.0 cv=R/2B6KtX c=1 sm=1 a=d1qrA6Qzssd1VjKW2xnq3A==:17 a=lfhf77dOo4cA:10 a=hGBaWAWWAAAA:8 a=2wkWlQ6YoiIA:10 a=RL0RLb9fkoNnM12wMJQA:9 a=CjuIK1q_8ugA:10 a=AW4evaw7Adk3Aast:21 a=COHeP7mDHUvbcau-:21 a=_W_S_7VecoQA:10 a=1NnByFLOlG-FeoPL:21 a=d1qrA6Qzssd1VjKW2xnq3A==:117
X-CM-Score: 0.00
Authentication-Results: cox.net; none
Mime-Version: 1.0 (Apple Message framework v1283)
Content-Type: multipart/alternative; boundary="Apple-Mail=_AF466B40-1C8C-4216-891E-D0D69A8F2FCB"
From: Edward Lewis <ed.lewis@neustar.biz>
In-Reply-To: <20121217203354.0B2E62D200AD@drugs.dv.isc.org>
Date: Tue, 18 Dec 2012 11:39:05 -0500
Message-Id: <95C76953-2D89-4EBC-86D7-BDBBE0379041@neustar.biz>
References: <20121206211100.14488.62562.idtracker@ietfa.amsl.com> <82AEB125-F110-40A1-A527-F18BB567EBE4@neustar.biz> <50CAF418.5060304@nlnetlabs.nl> <6B0BDF89-EDEB-44AF-83E8-6EDC599B3DAD@neustar.biz> <33CB3A55-89FE-4ABA-A9F8-0C537FADC15A@neustar.biz> <20121217203354.0B2E62D200AD@drugs.dv.isc.org>
To: dnsext mailing list <dnsext@ietf.org>
X-Mailer: Apple Mail (2.1283)
Cc: Edward Lewis <ed.lewis@neustar.biz>
Subject: [dnsext] Update to RFC 5155. Maybe?
X-BeenThere: dnsext@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: DNS Extensions working group discussion list <dnsext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dnsext>, <mailto:dnsext-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/dnsext>
List-Post: <mailto:dnsext@ietf.org>
List-Help: <mailto:dnsext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dnsext>, <mailto:dnsext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 18 Dec 2012 16:39:17 -0000

This and last week I posted on a topic involving RFC 5155 and what appeared to be missing text.  I think I've reached that proverbial "rock and a hard place" position.  One problem - for some reason people seem to be ditching the open discussion that the WG is supposed to foster.  Most of the replies I have received to my messages have been off-list, making this a headache for me to discern what, at least in my opinion (which is not necessarily representative of the WG) of what should be done.  I encourage folks to speak on-list...

I see that there are two alternatives.  One is to take RFC 5155 as is and fill in the missing text.  The other is to step back and take a look at how RFC 5155 has been put into practice.  It is unfortunate to me that the two alternatives aren't in sync.

One path involves adding a few paragraphs to RFC 5155.  But the problem comes in some details.  There are two questions that remain open, including what NSEC3 records are needed to close off the proof.

I want to interject this piece of commentary.  When DNSSEC was formulated, NSEC was an "optimal" solution to negative answers, "optimal" far as protocol engineering was concerned.  One side effect of enabling zone walking was an undesired side effect which what NSEC3 addresses - but in doing so, we had to "give up something" in terms of needing more bytes in a response.  Another side effect was the huge cost of transitioning into DNSSEC, which the opt-out feature, tacked on to NSEC3 addresses.  In doing so, we had to give up being able to secure the unsigned delegations and we created a conflict with how DNS' wild card mechanism worked.  This isn't meant to be a criticism of RFC 5155, just putting it into context and why it took more than a simple effort to write.

Tradeoffs aside, NSEC3 with opt-out has been a workable solution to two major drawbacks of the original DNSSEC design.  It is deployed in 76 of the 98 signed operational zones at the upper reaches of the DNS hierarchy.  (Those numbers include the root zone, the immediate TLDs but omit the 11 test TLDs in place.  Exact numbers aside though, NSEC3 is deployed in operations.)  The 76 zones represent about 25% of the total top zones - including the non-DNSSEC zones.

But the version of NSEC3 in operations today is a subset of the NSEC3 that is in RFC 5155.  So far as I can tell, no one has fully implemented RFC 5155 functionality.  Which makes me wonder, if we crimped the options, can we solve the holes (here) in a better way.  So snother path to fixing the current problem with RFC 5155 is to remove some of the options available - options that haven't been implemented and cause complications in the processing of the records.  This is something done in other protocols as the documents advance through the standards process, something that rarely, if ever, happens in DNS.  The downside of taking on a more aggressive clean up is that there is code deployed according to the current way things are done.

The first proposed path (adding paragraphs) begins with this, as has already been posted:

Replace section 7.2.3 with the following.

7.2.3.  No Data Responses, QTYPE is not DS

  If the No Data Response is a result of an empty non-terminal derived 
  from an insecure delegation covered by an Opt-Out NSEC3 RR, the 
  closest provable encloser proof MUST be included in the response.  
  The included NSEC3 RR that covers the "next closer" name for the 
  delegation MUST have the Opt-Out flag set to one. 

  In all other cases, the server MUST include the NSEC3 RR that matches 
  QNAME.  This NSEC3 RR MUST NOT have the bits corresponding to either 
  the QTYPE or CNAME set in its Type Bit Maps field.

Replace section 8.5 with the following.

8.5.  Validating No Data Responses, QTYPE is not DS

  If there is an NSEC3 RR that matches QNAME present, the validator must 
  check that both the QTYPE and the CNAME type are not set in its Type 
  Bit Maps field.

  If there is no NSEC3 RR present that matches QNAME, then the validator 
  MUST verify a closest provable encloser proof for the QNAME.  The 
  validator MUST verify that the Opt-Out bit is set in the NSEC3 RR that 
  covers the "next closer" name to the delegation name. This test covers 
  the case where the response is due to an Empty Non-Terminal derived 
  from an insecure delegation covered by an Opt-Out NSEC3 RR.

  Note that this test also covers the case where the NSEC3 RR exists
  because it corresponds to an empty non-terminal, in which case the
  NSEC3 RR will have an empty Type Bit Maps field.

There are two other blurbs to add.  First is that the Empty Non-Terminals concerned here include those that have descendant Empty Non-Terminals also eligible for exemption.  And then there is some confusion over having to "verify a closest provable encloser proof" as this means up to 3 NSEC3 RRs are involved.  One demonstrating opt-out is in play, a second that there is no NSEC3 for the name in question, and then a proof about wildcards.  The latter though does not play a role in the processing of the DNS response (ignoring DNSSEC), so that's a bit off the rails.  In addition, there's some looseness when there are "stacked" Empty Non-Terminals - which NSEC3 is used to show that there's no NSEC3 for the desired name.

The other path tries to remedy that, but also is targeted at solving the issue that debugging the problem here was very complex, despite the seemingly simple patch job needed.  Here are some proposed changes to NSEC3 opt-out, which limit its options but bring it in line with what is deployed and implemented.

Restrict a NSEC3 "chain" (defined by the parameters in the NSEC3PARAM record) to being opt-out or not only.  I.e., no longer support spans that are opt-out here and there, every span between NSEC3'd names is opt-out eligible.

Include all Empty Non-Terminals in the NSEC3 chain.  Part of this stems from the signer electing to NSEC3 a name based on something the client cannot verify.  When I first was handed the situation, it was unclear if we had a server malfunction, a signer malfunction, or both, because it was not clear that the data in question was an Empty Non-Terminal over opted-out delegations.  Lacking the ability to zone walk (which is the goal of NSEC3), we could not verify this until we got a look at the zone's contents.

A zone may have multiple NSEC3PARAM records (needed for transitions) and each chain is independent as far as opt-out or not.  Again, this is needed just for transitions as it doesn't make much sense to use both opt-out and regular NSEC3.  This is stated for completeness.

The impact of these "radical" steps is to reduce the number of NSEC3 and RRSIG(NSEC3) in some negative answers.  We still need three in NXDOMAIN situations, so this isn't a terribly great gain but for NoError, NoData cases it can help.  These changes permits DNSSEC code to be called RFC 5155 "fully" compliant - as no one (apparently) has taken time to implement this fully.  Always signing Empty Non-Terminals brings more harmony with wild cards and proofs involving them and by limiting the exemption to only names with NS records and no DS records, that can be verified in periods of troubleshooting.

Comments on list are desired.  Conversation on this is desired.  This is presented as a two way choice, but these are not the only two choices available.