WikiStart: nsec3-workshop2-report-draft.txt

Line 
1 1. Introduction
2
3 A second workshop to test and refine the NSEC3 extension for DNSSEC
4 was held September 18-20, 2006, in Dulles, Virginia, USA, and hosted
5 by VeriSign.  Attending were (in alphabetical order by first name):
6
7   David Blacka (VeriSign)
8   Edward Lewis (NeuStar)
9   Geoff Sisson (Nominet)
10   Jelte Jansen (NLNet Labs)
11   John Dickinson (Nominet)
12   Mark Andrews (ISC)
13   Matt Larson (VeriSign)
14   Peter Koch (DENIC)
15   Roy Arends (Nominet)
16   Sam Weiler (SPARTA)
17   Scott Rose (VeriSign)
18   Suresh Krishnaswamy (SPARTA)
19   Suzanne Woolf (ISC)
20   Wouter Wijngaards (NLNet Labs)
21   Ólafur Guðmundsson (OGUD Consulting)
22
23 After the first NSEC3 workshop in Frankfurt in May 2006, the attendees
24 felt, along with others in the dnsext working group, that a second
25 workshop was needed to address additional issues that couldn't be
26 tested at the first workshop for various reasons.
27
28
29 2. Issues tested
30
31 In this second NSEC3 workshop we tested five main areas:
32
33   (a) Signalling NSEC3 and traversing various combinations
34
35 We tested the mechanism proposed in the -07 NSEC3 draft for a zone to
36 signal its use of NSEC3.  This mechanism requires the zone to be
37 signed with new DNSKEY algorithm IDs that correspond to existing
38 algorithm IDs but specifically indicate NSEC3 is in use.  For example,
39 DNSKEY algorithm ID 5 indicates a zone signed with RSA/SHA-1.  For
40 this workshop, algorithm ID 133 (5+128) indicated RSA/SHA-1 and also
41 possibly NSEC3.
42
43 The goal of this signalling mechanism is to "blind" legacy,
44 NSEC3-oblivious DNSSEC validators to NSEC3 zones, causing these
45 validators to treat responses containing NSEC3 records as insecure
46 rather than bogus.  We tested different delegation paths alternating
47 between NSEC3 and NSEC and including opt-out.  Details of the
48 workshop's test zone structure environment are described below in
49 section 3.1.
50
51   (b) Transitioning from NSEC to NSEC3
52
53 We tested how a zone could transition from signing with NSEC to
54 signing with NSEC3, again as described in the -07 NSEC3 draft, while
55 maintaining a secure state and not requiring the zone to become
56 unsigned at any point during the transition.
57
58   (c) Zone signing
59
60 We tested the interoperability of NSEC3-capable DNSSEC zone signers.
61
62   (d) Zone loading and transfer
63
64 We tested the ability of several authoritative servers to successfully
65 load NSEC3-signed zones and then the interoperability of these servers
66 to transfer the NSEC3-signed zones without any errors or loss of
67 information.
68
69   (e) Handling brokenness
70
71 We tested the reaction of different NSEC3-capable validators to
72 different scenarios involving deliberately broken packets.  The
73 specific brokenness is discussed below, but broken responses included,
74 for example, missing or malformed NSEC3 records.
75
76
77 3. Test environment
78
79 3.1. Zone structure
80
81 In contrast to some previous DNSSEC workshops, where the structure of
82 test zones was decided during the workshop and configured on
83 attendees' workstations, for this workshop the test zone structure was
84 created before the workshop by Roy Arends of Nominet and hosted on
85 publicly accessible name servers at Nominet.  This method saved
86 considerable time, since we could begin the workshop with minimal
87 on-site setup.  Participants needed only to set up
88 resolvers/validators on their workstations, which then queried the
89 test zone structure on the Nominet name servers.
90
91 The test zone structure was hosted by three authoritative servers.
92 The 'trust-anchored zone' (ws.nsec3.org) resided on one server, the
93 second level zones resided on another server, and the third level
94 zones resided on yet another server.  The ws.nsec3.org zone was
95 DNSSEC-NSEC signed and contained delegations to signed zones and one
96 unsigned zone.  The delegations immediately under ws.nsec3.org were:
97
98         n0      unsigned zone
99         n1u     signed zone with unsigned delegations, using NSEC
100         n1s     signed zone with signed delegations, using NSEC
101         n3o     signed zone with opted out, unsigned delegations, using NSEC3
102         n3u     signed zone with unsigned delegations, using NSEC3
103         n3s     signed zone with signed delegations, using NSEC3
104
105 The zones with unsigned delegations (n0,n1u,n3o,n3u) had a delegation
106 to n0.(n0,n1u,n3o,n3u).  The zones with signed delegations (n1s,n3s)
107 had delegations to n1.n3s and n3.(n1s,n3s).
108
109 3.2. Software
110
111 The workshop tests used different authoritative servers,
112 resolver/validators and zone signers.  Implementation names are
113 obfuscated to avoid even unintentionally casting any implementations
114 in a negative light.
115
116 Five name server implementations were used as authoritative servers
117 and are designated A1 through A5 in this report.  (Different major
118 versions of the same software are counted as a different
119 implementation.)  The zones in the test structure were hosted by two
120 different NSEC3-capable authoritative server implementations, A1 and
121 A4.  The zone loading and transfer tests used all five.
122
123 Participants configured multiple different resolver/validators on
124 their workstations to query the workshop zone structure hosted at
125 Nominet and validate the responses.  Eleven different implementations
126 were used, although similarly to the authoritative servers, different
127 major versions of the same software count as different
128 implementations.  In some cases, the software was used only as a
129 resolver and in other cases a trust anchor was configured and the
130 software was also used as a DNSSEC validator.  These implementations
131 are referred to as R1 through R11 when used only in a resolver context
132 (i.e., no DNSSEC validation).  The same eleven implementations are
133 referred to as V1 through V11 when configured with a trust anchor and
134 performed DNSSEC validation.
135
136 For the zone signing tests, there were four different NSEC3-capable
137 DNSSEC zone signers that were tested for interoperability and their
138 ability to generate equivalent signed zones from the same unsigned
139 input.  These signers are designated S1 through S4.
140
141 Finally, for the brokenness tests, we used Roy Arends's "packet
142 server", which is special-purpose name server designed to serve
143 specially constructed deliberately broken packets to test validator
144 behavior to known-bad responses.
145
146
147 4. Signalling NSEC3 and traversing various combinations
148
149 Setup
150
151 This series of test were developed to test the NSEC/NSEC3 signaling
152 mechanism.  Previous work showed that non-NSEC3 aware validating
153 resolvers could not follow a unsigned delegation from a NSEC3 zone.
154 The proposed solution was to signal NSEC3 signed zones by using an
155 alternative DNSKEY algorithm code, which non-NSEC3 aware validators
156 would interpret as insecure and not attempt to validate security
157 information from those zones.  In this experiment, the algorithm code
158 for "NSEC3 signed" zones was 133.
159
160 Test Format
161
162 The tree used for the signaling and traversing tests are summarized below. 
163 For resolvers that required DNSSEC, the KSK for ws.nsec3.org was used as the
164 trust anchor. 
165
166 * ws.nsec3.org (signed with nsec)
167   * n0.ws.nsec3.org
168       * n0.n0.ws.nsec3.org
169   * n1u.ws.nsec3.org
170       * n0.n1u.ws.nsec3.org
171   * n1s.ws.nsec3.org
172      * n3.n1s.ws.nsec3.org
173   * n3u.ws.nsec3.org
174      * n0.n3u.nsec3.org
175   * n3s.ws.nsec3.org
176      * n1.n3s.ws.nsec3.org
177      * n3.n3s.ws.nsec3.org
178   * n3o.ws.nsec3.org
179      * n0.n3o.ws.nsec3.org
180   * full.ws.nsec3.org
181
182 The labels indicate the following:
183
184 n0 - unsigned zone data
185 n1 - DNSSEC signed data (NSEC chain)
186 n1u - DNSSEC signed data (NSEC chain) with unsigned delegations
187 n1s - DNSSEC signed data (NSEC chain) with signed delegations
188 n3 - DNSSEC with NSEC3 chain
189 n3u - DNSSEC with NSEC3 chain, unsigned delegations
190 n3s - DNSSEC with NSEC3 chain, signed delegations
191 n3o - DNSSEC with NSEC3 chain with Opt-Out
192 full - DNSSEC with NSEC3, includes wildcards, empty non-terminals, etc.
193
194 Each zone contained a single host (www) and DNSKEY RRs as appropriate.  There
195 was two versions of this tree - one served by A1 servers and one served by
196 A4 servers.  Each type of resolver sent queries for the www host in each of
197 the following zones:
198
199 www.n0.n0.ws.nsec3.org
200 www.n0.n1u.ws.nsec3.org
201 www.n3.n1s.ws.nsec3.org
202 www.n0.n3u.ws.nsec3.org
203 www.n0.n3o.ws.nsec3.org
204 www.n1.n3s.ws.nsec3.org
205 www.n3.n3s.ws.nsec3.org
206
207 Along with various queries to full.ws.nsec3.org as time permitted.
208 For each resolver implementation, the expected results depended on the
209 characteristics of the resolver:
210
211 Expected results:
212
213 Tree authoritative servers:  A1, A4
214 NSEC3-aware: R9, R1, R7, R10, R9
215 NSEC-aware: R8, R3, R10
216 DNSSEC unaware: R11, R5, R4, R6
217
218                         NSEC3-aware             NSEC-aware      DNSSEC-unaware
219
220 www.n0.n0       insecure                insecure        traditional resp.       
221
222 www.n0.n1u      insecure                insecure        traditional resp.
223
224 www.n1.n1s      nxdomain                nxdomain        traditional resp.
225                                        
226 www.n3.n1s      secure/AD               insecure        traditional resp.
227
228 www.n0.n3u      insecure                insecure        traditional resp.
229
230 www.n0.n3o      insecure                insecure        traditional resp.
231
232 www.n1.n3s      secure/AD               insecure        traditional resp.
233
234 www.n3.n3s  secure/AD           insecure        traditional resp.
235
236
237 Actual results from tests:
238
239
240                            R9      R1      R11     R8      R5       R3      R6
241
242         www.n0.n0               P               P               P               P               P                P      P
243
244         www.n0.n1u              P               P               P               P               P                P      P
245
246         www.n1.n1s              P               P               P               P               P                P      P
247                
248         www.n3.n1s              P               P               P               P               P                P      P
249
250         www.n0.n3u              P               P               P               P               P                P      P
251
252         www.n0.n3o              P           *           P               P               P                P      P
253
254         www.n1.n3s              P           P           P               P               P                P      P
255
256         www.n3.n3s              P           P           P               P               P                P      P
257
258
259
260
261                                    R3       R4            R7             R10            R10
262                                 (dnssec)                             (with nsec3)       (no nsec3)      (nsec3)
263                                
264         www.n0.n0               P                P                    P                   P                  P
265
266         www.n0.n1u              P                P                    P                   P                  P
267                        
268         www.n1.n1s              P                P                    P                   P                  P
269                
270         www.n3.n1s              P                P                    P                   P                  P
271
272         www.n0.n3u              P                P                    P                   P                  P
273
274         www.n0.n3o              P                P                    P                   P                  P
275
276         www.n1.n3s              P                P                    P                   P                  P
277
278         www.n3.n3s              P                P                    P                   P                  P
279
280
281 Discussion
282
283 From the results in the tables above, the "*" indicates that the tree
284 using A1 returning ServFail for that query.  It was later believed to
285 be an environment bug, not a protocol error.  One that may repeat if
286 the zones are not set up correctly.  All other queries resulted in
287 matching behavior with both domain trees and the expected results
288 (marked with the 'P' for "pass").
289
290 These tests do not cover all possible DNS environments.  More work
291 would need to be done as corner cases and unique zones are
292 encountered.  For the majority of expected scenarios, the expected
293 results (from the resolvers point of view) were recieved.  That is,
294 when a non-NSEC3 aware validating resolver encounters a zone along a
295 resolution path, it will see the unknown key algorithm and consider
296 that zone (and all children of that zone) to be insecure.
297
298
299 5. Transitioning from NSEC to NSEC3
300
301 Synopsis:
302
303 This tested the observed behaviour of several different
304 resolvers/validators before, during and after a roll from NSEC to
305 NSEC3.
306
307
308 Roll states:
309
310 State 1: Initial state (pre-roll):
311
312         An NSEC3-capable authoritative server with NSEC-signed zone
313         using key algorithm 5 (RSASHA1) which had three sub-zones.
314         These were:
315
316         - an unsigned sub-zone [n0.roll.ws.nsec3.org]
317         - a signed sub-zone using NSEC [n1.roll.ws.nsec3.org]
318         - a signed sub-zone using NSEC3 [n3.roll.ws.nsec3.org]
319
320 State 2: Intermediate state (during roll):
321
322         We performed a key rollover to an NSEC-signed zone using
323         key algorithm 133 (NSEC3RSASHA1, i.e. RSASHA1 algorithm with
324         code specially assigned to signal possible use of NSEC3).
325
326 State 3: Final state (post-roll):
327
328         We then signed the zones, replacing the NSEC chain with an
329         NSEC3 chain -- again using key algorithm 133 -- and reloaded
330         the server.
331
332
333 Testing:
334
335 A number of different resolvers/validators were tested:
336
337 - two different NSEC3-aware validators: V1 and V7.
338
339 - two different NSEC-only validators: V3 and V8.
340
341 - several different resolvers which were either DNSSEC-unaware or
342   had DNSSEC disabled: R3, R4, R5, R10, R11.
343
344
345 Result:
346
347 All resolvers/validators returned expected results throughout all
348 three states of the test.
349
350 - The NSEC3-aware validators returned consistent authoritative results
351   during all three states.
352
353 - The NSEC-only-aware validators returned authoritative answers in
354   State 1 and non-authoritative answers in States 2 and 3.
355
356 - The non-DNSSEC-aware resolvers returned expected answers throughout
357   the test.
358
359
360 6. Zone signing
361
362 Intro:
363
364 The signing tests used two different zones, in two different modes,
365 without opt-in and with.
366
367 There where 4 different signers used in this test:
368 jdns_signzone, ldns_signzone, pdns_signzone, Bind dnssec-signzone-9.5-pre
369
370 In this report the names of the actual signers will be obfuscated,
371 signers will be referred to as S1, S2, S3, S4 (not the same order as
372 above).
373
374 Structure:
375
376 In the signing test all signers used the same signing parameters
377   Signature Inception time: 20060919000000
378   Signature Expiration time: 20061231000000
379   TTL on all RRsets:         3600
380   NSEC3 iterations:          10
381   NSEC3 salt:                AFFE  (hex value)
382   same DNSKEY's              2 keys of alg 5
383                              2 keys of alg 133
384
385 By doing this the resulting zones where "directly" comparable,
386
387 The first zone used [REF1] had 10 different names including
388 apex, there were single label names, multiple label names and a
389 wild-card at multi-label name. There were delegations in the zone,
390 with and without DS records.
391
392 The second zone was an empty zone (only data at APEX).
393
394 Expected Results:
395 David Blacka had written a "zone normalizer" to convert the zones to a
396 standard format that then could be compared by diff to find any
397 discrepancies.
398
399 Actual Results:
400 The normalizer turned out to have two issues in processing the zones,
401 from various signers. The first issue was mixing of cases in names,
402 the second issue was ordering of RRSIG's covering a RRset.
403 Both issues have been addressed.
404 The initial report from the normalizer was that all zones differed.
405
406 At this point two humans where assigned to figure out the differences
407 in the zones, and what was correct.
408
409 John's tests
410 Checked the empty zones first. Visual check that all the signed zones
411 had the same
412     number of each type of RR
413     NSEC3-PARAM
414     hashes in the NSEC3 RR's
415     signatures in the RRSIG's
416     TTL's in all RR's
417
418 Several of the signatures had been done with incorrect
419 parameters. These were resigned. and the checks repeated.
420 Some signers signed zone with both algorithms and some only with alg
421 133. The room determined that this was an open issue that should not
422 be used to judge the signers validity.
423
424
425 Olafur's tests:
426 Started work on the non-empty zones, he wrote scripts to check the
427 consistency of the NSEC3 chains and if the NSEC3's matched the
428 NSEC3PARAM record at the apex. 
429 The scripts evolved from simply putting out the NSEC3 records to
430 actually checking the chain no matter what order provided.
431
432 Errors seen:
433 For the empty zones S2 and S1 were found to agree. S4 was found to use
434 the wrong TTL for DNSKEY's and S3 did not create a NSEC3-PARAM RR or
435 its RRSIG.
436
437 for the non-empty zones:
438 One implementation S4 did not include an NSEC3PARAM.
439 One implementation S1 had the right number of NSEC3 records but
440 multiple NSEC3's pointed to the same target.
441
442
443 Second run:
444 After reporting these results the developers sat down and updated
445 their signers to address the issues.
446
447 After second round of zone signing 3 of the signers  (S1, S2, S3)
448 agree on what should be in the NSEC3PARAM record and in the NSEC3
449 chain. S4 agrees with the the others on the NSEC3 chain but does not
450 include that NSEC3PARAM record in the zone.
451
452 At this point the opt-out zones where tested and they all passed, all
453 opted out the same name and had the same NSEC3 chain.
454
455 Conclusions:
456   (any difference between expected and actual results)
457
458 Signers agree on what NSEC3 records should be for the same NSEC3
459 settings. All of the signers generate NSEC3 from input flags or signer
460 configuration file.
461 Most of the issues seen where addressed and fixed at the workshop. S4
462 addressed their issue after testing completed.
463
464 Open issues:
465 Signing algorithms used. There is an open issue what to do if there are
466 both algorithm 133 and 5 DNSKEY records present.
467 Some singers sign with both algorithms but do NOT include NSEC chain.
468 One signer (S1) does not include the DNSKEY RR's with algorithm 5 when
469 instructed to generate NSEC3 chain.
470
471 DNSKEY record with algorithm 5 requires RRSIG's on the zone and/or
472 NSEC chain. What does it mean to have NSEC and NSEC3 specific DNSKEY
473 algorithms listed in the DNSKEY set at the apex?
474
475 Nit:
476 Some singers put their name and version into the signed zone, others
477 did not. Testers found the presence implementation information useful.
478
479
480 7. Zone loading and transfer
481
482 o Setup
483
484 We set up a chain of authoritative servers that had master/slave
485 relations to each other. Some of these servers understood NSEC3 (the
486 first one, to read the zone file) and some intermediate servers did
487 not understand NSEC3 (but were RFC 3597 ready). The zone was
488 transferred to the slaves down the chain by means of AXFR. This way
489 the behaviour of NSEC3 unaware servers when presented with an NSEC3
490 zone became subject to the test. A second objective was to test the
491 behaviour when the NSEC3 parameters were changed and the zone was
492 transferred to the secondaries. The secondaries that were NSEC3 aware
493 were expected to detect the parameter change. The chain of servers is
494 shown below.
495
496 Tested AXFR down this chain
497 1. A1
498 2. A2
499 3. A3
500 4. A4
501 5. A5
502 6. A1
503
504 The A1 server implementation was both used at the start and end, so it
505 got to be both a master and a slave in this sequence (as every other
506 server).
507
508 o Structure of the zones
509
510 Two zones were used for this test, both originating from the previous
511 signing test. The first zone was "empty", consisting only of the SOA
512 RR, the NS RRs and the necessary DNSSEC RRSets. The second zone was
513 more populated, called "full", and is available for reference at
514 <place URL here?>.
515  
516   This "full" zones contained wildcards, delegations and Empty Non Terminals.
517
518   Both zones were signed with NSEC3.
519
520 o Queries we sent
521
522 The zones at the servers were checked:
523
524 * We sent AXFR queries to every server in the chain with an NSEC3
525   aware querying tool, normalized and sorted the output to eventually
526   hash it by MD5.
527
528 * Also, we sent queries to solicit NXDOMAIN responses to the NSEC3
529   capable servers in the chain. These servers would only be capable of
530   including the NSEC3 RRs in the response if they had detected the
531   NSEC3 parameters.
532
533 After some time we updated the "full" zone to a new serial number, and
534 changed the NSEC3 parameter set inside this zone. After sending down
535 this modified zone down the chain of servers, we repeated the tests
536 mentioned above.
537
538 o Expected results
539
540 The NSEC3 unaware servers in between should treat the NSEC3 and
541 NSEC3PARAM records as unknown RR data (as of RFC 3597). Direct queries
542 should be answered, including AXFR queries from their slaves. No other
543 special handling is to be expected. This would still enable the NSEC3
544 aware servers to enable authenticated denial for the zone, even though
545 the zone is transferred to them via the NSEC3 unaware servers. The
546 zone must not change in transit (a.k.a "the telephone game").
547
548 The NSEC3 aware servers must detect the parameter change and adapt to
549 give correct NSEC3 RRs in NXDOMAIN responses.
550
551 o Actual results
552
553 All the AXFRed zones could be verified to be equal to each other and
554 also matched the original master zone file (after normalization to
555 sort the entries), except that the AXFR responses showed the SOA RR
556 twice, as usual.
557
558 After the zone update all servers successfully transferred the new
559 zone from their respective masters, and queries were answered
560 correctly with NXDOMAIN and (updated) NSEC3 records. The AXFRs from
561 the servers again showed the correct zone, i.e. same result as after
562 the first distribution down the server chain.
563
564 o Conclusion/discussion
565
566 The tested servers are either NSEC3 aware or RFC 3597 compliant and
567 treat NSEC3 and NSEC3PARAM as unknown RR types where necessary. This
568 enables the NSEC3 aware servers to operate correctly, and these NSEC3
569 aware servers detect the parameter update correctly. In conclusion,
570 the test is passed by all participating implementations.
571
572
573 8. Handling brokenness
574
575 Setup:
576
577 For the broken packets test we used a secure delegation to
578 'b.ws.nsec3.org' to Packet-server. Packet-server is not an
579 authoritative server in itself, but uses pre-compiled responses to
580 answer requests. The packet-server resides on ns4.infra.ws.nsec3.org.
581
582 The participants used validators v1, v7 and v9. These were capable of
583 understanding NSEC3, and configured with a trust anchor for
584 ws.nsec3.org. Other implementations were used as well, but since this
585 test focussed on nsec3 validation, we do not include it in this
586 report.
587
588 Structure of the packets:
589
590 The packets itself are mostly responses that miss some part of the
591 authenticated denial proof. Exceptions are the packets that are
592 ambiguous, for instance returning a NODATA for type A, while existence
593 of A is reflected in the NSEC3 type list.
594
595 The broken packets are in 10 different sets, what follows is a general
596 description of the sets
597
598 Set A. NXDOMAIN
599
600 An NXDOMAIN response was created containing three NSEC3 records. One
601 showing the Closest Encloser (CE), one proving the Closest Encloser
602 (NC), and one proving the absence of the wildcard at the Closest
603 Encloser (NW). The different responses in this set show none, one, two
604 or all three records.
605
606 Set B. standard NODATA
607
608 A standard NODATA response contains one NSEC3, showing the absence of
609 a type for that name. One response is a NODATA, but the NSEC3 shows
610 the presence of the type. One response shows a different NSEC3. One
611 shows the presence of the CNAME type.
612
613 Set C. Wildcard NODATA
614
615 A wildcard NODATA response contains thee NSEC3s. The CE, the NC and
616 the NSEC3 at the wildcard showing that the type does not exist for the
617 wildcard. The different responses in this set show none, one, two or
618 all three records
619
620 Set D. Wildcard expansion
621
622 A wildcard expansion has two NSEC3s. The CE and the NC. The different
623 responses in this set show none, one or two NSEC3s.
624
625 set E. Referrals to unsigned zones
626
627 A delegation to unsigned zones contain an NSEC3 that shows the absence
628 of the DS record. One response shows a missing NSEC3, one response
629 shows an NSEC3 with the DS bit set.
630
631 set F. Referrals to opted out unsigned zones.
632
633 An opted out delegation contains two NSEC3s. One shows the CE, the
634 other the NC, with the OO bit set. The responses contain zero or one
635 NSEC3, and one with the OO bit clear.
636
637 set G. NSEC3s from multiple chains.
638
639 This is an NXDOMAIN response where the three NSEC3s have different parameters.
640
641 set H. skewed NSEC3
642
643 These responses contain NSEC3s where the ownername sorts after the
644 next hashed ownername.
645
646 set I. same name
647
648 These responses contain NSEC3s where the ownername is equal to the
649 next hashed ownername
650
651 set J. multiple labels NXDOMAIN
652
653 These responses contain the responses similar to A, but the CE is not
654 the ownername. Furthermore these contain responses with the DNAME bit
655 in the CE, and a combination of other proofs.
656
657 What follows is a matrix that shows where the actual results differ
658 from the expected results
659
660
661 empty fields conform to expected result.
662
663 name    expected result                         R7
664 a1.b    regular NXDOMAIN                       
665 a2.b    missing CE                             
666 a3.b    missing NC                             
667 a4.b    missing NW                             
668 a5.b    missing CE, NC                         
669 a6.b    missing CE, NW                         
670 a7.b    missing NC, NW                         
671 a8.b    missing NC, NW, NC                      Can't prove denial,
672                                                 missing dnssec data
673
674 b1.b    regular NODATA                         
675 b2.b    NODATA, but type exists                 
676 b3.b    NODATA, but no matching NSEC3           No CE
677 b4.b    NODATA, but CNAME exists               
678
679 c1.b    regular NODATA                         
680 c2.b    missing CE                             
681 c3.b    missing NC                             
682 c4.b    missing NW                              no matching NSEC3
683 c5.b    missing CE, NC                         
684 c6.b    missing CE, NW                         
685 c7.b    missing NC, NW                         
686 c8.b    missing NC, NW, CE                      Can't prove denial,
687                                                 no dnssec data
688
689 d1.b    regular NODATA                         
690 d2.b    missing CE (result should be OK)       
691 d3.b    missing NC                             
692 d4.b    missing NW                              Wildcard exp, no denial
693                                                 of original data
694
695 ref.e1  DS missing, bit set in                  DS query gave SERVFAIL
696 ref.e2  missing                                 DS query gave SERVFAIL
697
698 oo.f1   missing CE                              Bogus response,
699                                                 probably bug.
700 oo.f2   missing NC                              SERVFAIL on DS query
701 oo.f3   missing NC, CE                          SERVFAIL on DS query
702 oo.f4   oo bit not set in NC                    SERVFAIL on DS query
703
704 g1.b                                            'Could not find single
705                                                 set of params'
706
707 h1      NC skewed                               
708 h2      CE skewed                               
709 h3      NW skewed                               
710
711 i1      nxdomain, NC same name                  AD bit set
712 i2      nxdomain, NW same name                  AD bit set
713 i3      nxdomain, CE same name                  AD bit set
714
715 1.a.j.b regular NXDOMAIN                       
716 2.a.j.b missing CE                             
717 3.a.j.b missing NC                             
718 4.a.j.b missing NW                             
719 5.a.j.b missing CE, NC                         
720 6.a.j.b missing CE, NW                         
721 7.a.j.b missing NC, NW                         
722 8.a.j.b missing NC, NW, CE                      Can't prove denial,
723                                                 no dnssec data
724 9.a.j.b DNAME bit in CE                         
725 10.a.j.b NODATA, but is delegation             
726 11.a.j.b delegation, but is APEX                SERVFAIL on query
727 12.a.j.b delegation, but is NODATA              SERVFAIL on query
728
729
730 name    R1              R10                     R9
731 a1.b   
732 a2.b   
733 a3.b   
734 a4.b   
735 a5.b   
736 a6.b   
737 a7.b   
738 a8.b                                            Missing DNSSEC data
739
740 b1.b   
741 b2.b                    Type does not exist
742 b3.b   
743 b4.b    No error        No error                No error
744
745 c1.b   
746 c2.b   
747 c3.b   
748 c4.b   
749 c5.b   
750 c6.b   
751 c7.b   
752 c8.b                                            Missing DNSSEC data
753
754 d1.b                    Proof not checked
755 d2.b                    Proof not checked       Error No CE
756 d3.b                    Proof not checked
757 d4.b                    Proof not checked
758
759 ref.e1  Untestable                              No DNSSEC data
760 ref.e2  Untestable                              No DNSSEC data
761
762 oo.f1                   Provably unsecured
763 oo.f2   Untestable      SERVFAIL on DS
764 oo.f3   Untestable      SERVFAIL on DS
765 oo.f4   Untestable      SERVFAIL on DS
766
767 g1.b                                            No CE, no NW
768
769 h1                      Validates OK            No CE
770 h2                                              No CE
771 h3                                              No NW
772
773 i1                      Validates OK            No CE
774 i2                      Validates OK            No CE
775 i3                      Validates OK            Validates OK
776
777 1.a.j                                           Unable to verify
778 2.a.j                                           Unable to verify
779 3.a.j                                           Unable to verify
780 4.a.j                                           Unable to verify
781 5.a.j                                           Unable to verify
782 6.a.j                                           Unable to verify
783 7.a.j                                           Unable to verify
784 8.a.j                                           Unable to verify
785 9.a.j   No error        No error                Unable to verify
786 10.a.j                  SERVFAIL                Unable to verify
787 11.a.j  Untestable      SERVFAIL                Unable to verify
788 12.a.j  Untestable      SERVFAIL                Unable to verify