On 7/5/2017 8:11 PM, Wes Hardaker wrote:
Michael StJohns <[email protected]> writes:

That's not actually a plus you understand.   Mike
Sure it is.  We're down to the point where large changes aren't needed :-P

I'm sure you think that... but the small changes you've made to address some of my comments haven't gone far enough. There's also a need for a grammar and syntax pass on the document.

Here's what I've got so far (in document order rather than order of importance):

1) Use "exclusively" rather than "only" where you can - "only" has some issues with misunderstanding. E.g. in the abstract you have "only recently" which can be interpreted applying to "recently" rather than meaning "exclusively" with " recently added DNSKEYs"


Instead in the abstract: "... before exclusively signing with recently added DNSKEYs"

2) In the introduction - "validators can update" vs "validators can extend".

3) In the introduction - same issue with "only recently"

4) In the introduction - "ceasing publication of a revoked key" vs "removing a key from a zone"

5) Section 1.1 - What is the definition of "rolled"? Your use of it doesn't match 5011s and it's not defined either here or in 4033 or . Also "before signing a zone" - I don't think this is exactly what you asked them and the summary is probably inaccurate.

6) Section 2 "which apply to" vs "as required from".

7) Section 2 "Note that it does not..." - which "it" are you talking about?

8) Section 2 "using only recently" - same issue as above.

9) Section 2. New para at "Failure of a DNSKEY..."

10) Section 2. "... leaving that key in their trust anchor storage beyond the key's expected lifetime." vs "... leaving a key in their trust anchor storage beyond their expected lifetime" -"their" applies to two different things

11) Section 3: Attacker. "An entity intent..." vs "An attacker intent..." - self referencing definition problem

12) Section 4.1: This doesn't actually describe what's in 5011 - specifically bullet 3 was modified to clarify your concerns, but isn't what was in 5011. You need to have both here.

13) Section 4.1, bullet 3: Same problem with "only". Instead "Begin to exclusively use recently published DNSKEYs..."

14) Section 4.2 last para: This is only an attack if the private key is compromised. In which case, with only a steady state of a single key, you've got lots of other problems. Basically, in your one in one out with a steady state of one model, once the current private key is compromised you have no ability to fix the problem. But getting the numbers for figuring out when this change becomes "sticky" correct is useful.

15) Section 6 - general comment. You're doing interval calculations and you want to do date/time wall clock calculations instead. While the 5011 values are based on intervals from the RRs get to the validator, the publisher has to be looking at absolute times first (e.g. signature inception and expiration, original TTL) and then deltas from those. [Note, this is NOT a new comment - I've made it previously and strongly]

16) Section 5.1.1 - You're missing a *very* important point here - that DNSKEY RRSets may be signed ahead of their use. You need to assume that once signed, they are available to be published - even by an attacker. So wherever you have "signature lifetime" you want something like "latest signature expiration of any DNSKEY RRSet not containing the new key" or at least you want to calculate the date/time value based on that.

17) Section 5.1.1 doesn't actually apply if you use the 5011 rollover approach (section 6.3). E.g. K_old (and any RRSets it signed) will be revoked the first time K_new is seen and K_standby is the signing key. At this point this reduces to a normal denial of service attack (where you prevent new data from being retrieved by the resolver). You'd need a different section to do that analysis. [And thinking about it, why is there any practical difference between this attack and a normal denial of service attack in the first place?]

18) Section 5.1.1, T+35: "since the hold down time of 30 days + 1/2 the signature validity... " - Two items: Wordsmithing: The hold down time is just the 30 days, not the plus 1/2... which I *think* given the reference to 2.3 is actually the queryInterval. clarify please. And queryInterval is not actually 1/2 the signature validity - its the MIN (15 days, 10 days (sig life)/2 and 1 day(orig ttl)/2) or 1/2 a day.

19) Section 6 - the formulas are wrong. I also don't understand where you got MAX(originalTTL/2,15 days) - there's no support for this in the text.

The final formula should be:

EarliestDateWhereAttackFails::= latest SignatureExpiration of any DNSKEY RRSet not containing the new key

waitExpirationDate = EarliestDateWhereAttackFails + 2*queryInterval (from RFC5011 section 2.3) + holdDownTime + slop (let's call this twice the query interval or some other number - its really there just to deal with an attacker preventing the last RR_New from being delivered)


In the given example, assuming a 5/1/2017 00:00UTC inception date for the RR_Old, an 5/1/2017/00:01UTC inception date for the RR_new, a consistent 10 day signature validity and a 1day original TTL.

EarliestDateWhereAttackFails == 5/11/2017 00:01UTC

queryInterval = 1/2 day

waitExpirationDate = EarliestDateWhereAttackFails + 30 + 2 or 6/12/2017 00:01UTC - 42 days after the last old RRSet was signed and 32 days after the last possible expiration date of an RRSet without the new key.


So assume you sign both the new and old RRSigs with one seconds difference with identical parameters:

At T=0 a publisher sends RR_new

At query interval, and until EarliestDateWhereAttackFails and attacker somehow manages to intercept RR_new and substitute RR_Old - alternately, the attacker can let RR_new through until the next step - probably the more reasonable approach.

At T=EarliestDateWhereAttackFails-1second attacker intercepts RR_new and sends its last valid RR_old

At T=EarliestDate+queryInterval resolver receives another RR_new and starts the hold down

From T=EarliestDate+queryInterval until T=EarliestDate+queryInterval+holdDownTime every queryInterval the resolver gets another copy of RR_new

At T=EarliestDate+queryInterval+holdDownTime+queryInterval resolver gets the final copy of RR_New it needs to trigger the installation of the new trust anchor

An attacker can prevent or delay the installation of the trust anchor by preventing delivery of RR_New (or subsequent RR with the new key), but that's sort of the definition of a Denial of Service attack and really no worse than keeping say "A" records from the resolver.

In any event, the point needs to be made that this attack - while real - is a "retail" attack that would be difficult to prosecute by a single attacker across a broad range of end-entities. This goes to the general model that no publisher of DNS data knows each and every consumer of that data, nor can wait its publication on every consumer getting published data. The data protocol for DNS is unidirectional and the update protocol in 5011 was designed with that in mind.

20) The value in 6 regardless of what it is is the wrong value for revocation. revocationPublicationWaitTime is basically EarliestDateAttackFails + queryInterval + slop. Revocations take place immediately. You can delay them only as long as you have old valid signed RRSets.


So - not ready for last call.

Mike



_______________________________________________
DNSOP mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/dnsop

Reply via email to