Subject: Re: [marf] draft-ietf-marf-dkim-reporting feedback

From: "Murray S. Kucherawy" <[email-masked]>
Date: Wed, 5 Oct 2011 21:48:18 -0700

> -----Original Message-----
> From: [email-masked] [mailto:[email-masked]] On Behalf Of Steve Atkins
> Sent: Friday, September 30, 2011 12:20 PM
> To: Message Abuse Report Format working group
> Subject: [marf] draft-ietf-marf-dkim-reporting feedback
> 
> 1. Who would want it and their existing alternatives.
> 
> This seems to be a feature that will primarily be of interest to bulk
> emailers. Those senders are interested in many facets of email
> delivery, and have existing networks of probe addresses at many ISPs
> which they use to monitor email delivery. Those probe networks can
> already give them most of the same information that this would provide,
> without any requirement for support by the receiving ISP.

The main motivation (for me, at least) is implementers that need to debug unexplained failures.  Setting up a test address at a problem site can help, but doesn't always as doing so presumes what happens between (for example) DKIM validation and mailbox retrieval makes no changes to the message, and that's not always the case.

> 2. Where in the delivery path does it detect errors, and whether
> organizations causing errors are likely to deploy this sort of code
> 
> It seems to be intended to detect DKIM-invalidating modifications "at
> the receiver",

I would say "at or before the receiver" is more precise.

> as it's fairly easy for a sender to identify problems
> that are near to them. Receivers who have a "non-DKIM-clean" delivery
> path seem like the least likely receivers to add additional DKIM/ADSP-
> specific baggage to their delivery path - so I'm not sure that
> something like this would be likely to be deployed at the receiving
> ISPs where the feedback would likely need to be generated. Unless it's
> intended for MUA deployment, maybe?

MUAs could also do it, to be sure.  I'm not sure I understand the rest of what you're saying here; why would a receiver with a "dirty" delivery path not want to identify the problem?  Surely they'd start to get pressure from signers that want to get valid signatures through delivery.

> 3. Implementation nits
> 
> 3a. Inconsistent flags for in-band reporting
> 
> There are some nits too. You can ask for a magic cookie in the
> rejection string using rs= - which is good, as that can be handled well
> by existing delivery log monitoring tracking. But rs= is not valid
> unless there's an r= field that's asking for reports to be sent to a
> specific address. r= is being overloaded as both a boolean ("do some
> sort of reporting") and as a parameter to one particular sort of
> reporting (via sending an email). Unless that's there for backwards
> compatibility I'd be tempted to split the two.

That'd be OK with me.  For backward compatibility, I'd probably leave "r=" as a reporting address and add some other key tag for declaring that reporting is requested.

> 3b. Does this define an email address for reports, or just a local
> part?
> 
> r= "MUST be a dkim-quoted-printable string containing an e-mail
> address", yet it "MUST be interpreted as a local part only". The
> examples tell me that it's just a local part, and doesn't have an "@"
> sign in it, but the spec should probably be clarified.

Fair enough.

> 4. Sampling may be useful, but probably not if it can only be applied
> identically to all receivers
> 
> I don't see ri= as being particularly useful given the way I expect
> this would be used, as that value is shared across all receivers. I'm
> either going to want a report about every failure, or I'm going to want
> summary reports. If Gmail are having very rare DKIM failures on my mail
> - one in a million, say - I'm going to want to see every one. If
> Earthlink are breaking everything I send, I'm going to want summary
> reports. I can't get both, so I'm going to end up leaving it set to "0"
> and summarizing at my end. If it were in the format of "no more than X
> reports every Y seconds" it might make more immediate sense than simply
> reporting every n-th message, maybe. That would also avoid the problems
> in 8.3 and would allow the sender more control over the issues in 8.5.

That change would be fine as well.  Interesting point about per-receiver rates though; hadn't thought of that.

> 5. In-band advertising vs out-of-band vs overloading DKIM
> 
> For many use cases this functionality could be handled by in-band
> advertising (e.g. a "DKIM-Errors-To: [email-masked]" header).

Interesting idea as well.  What do others think?

> It could also be handled via a separate DNS lookup, rather than
> overloading the existing DKIM key record.

I'm trying to piggyback on retrieving the key record.  At the time this was designed, most of the squawking about DKIM's load (especially with ADSP right behind it) had to do with the DNS load it would create.

> Does the increase in size of the DKIM key record cause significant cost
> (especially in the case where it causes the already large key record to
> expand so that it's over the size that can be efficiently / reliably
> handled over UDP)?

That was actually a secondary motivation for constraining "r=" to be a local-part only.  In my own observations, there are keys that pass the TCP limit and those that don't, but very few are close, which means "r=" wouldn't usually be the thing that pushes a record over the limit.

> 6. Would something broader be more useful?
> 
> This is very specific to DKIM or ADSP failures. If it is useful for the
> sender to be notified of one sort of authentication failure, they'll
> probably be interested in notification of other failures (SPF?).

Yep, and that's why there's also an "spf-reporting" draft.  The issue, though, is that for a failure of DKIM, a different set of data is useful for debugging versus an SPF failure.  That seems to suggest different extension documents is an appropriate path.

> 7. Would something narrower be as useful?
> 
> The rs= magic cookie in the rejection string seems like the most useful
> part of this. At large ISPs almost all rejections are handled during
> the SMTP session, and DKIM checking is happening at the external MX,
> not at an internal handoff.

In the larger picture I'd say that's probably the most visible part of this work, but I don't think it's the most valuable for debugging failures.  The canonicalized forms of the header/body at the receiver is what's most important in that case.

> Rather than specifying an out-of-band asynchronous notification via
> email at all, would this concept be just as useful if it only included
> the magic cookie in the rejection string?

It's not everything I'm after, at least.  Perhaps there should be two reporting modes, one that only involves the "rs=" and one that involves returning the data needed for debugging?

> (If I were starting from scratch rather than doing something specific
> for DKIM, I probably wouldn't add all this to the DKIM key record or
> the ADSP record at all - I'd use a separate name space to stash the
> data in, so that if you were to see a DKIM auth failure from me, you'd
> do a query for
> "mta3.cloudmark.com.dkim._authenticationfailure.wordtothewise.com" and
> do what that TXT record asked. Creative use of wildcarding would let me
> set a general "I'd like to know about it" policy, while setting much
> more verbose reporting while I was diagnosing delivery to a particular
> recipient ISP. And I'd also be able to have
> "*.spf._authenticationfailure.wordtothewise.com",
> "*.adsp._authenticationfailure.wordtothewise.com" and so on. But that's
> a whole other discussion.)

It's a discussion worth having.  Other than wanting to shorten "_authenticationfailure", I'd like to explore it a little.  I'm worried about backward compatibility with the work as-is though, where "r=" is a DKIM key record tag.  This would require replacing all of that code.

-MSK

---

From: Scott Kitterman <[email-masked]>
Date: Thu, 06 Oct 2011 00:10:55 -0500

> Interesting idea as well.  What do others think?

I thought we concluded that we wanted the reporting address to be localpart 
only plus the signing domain to preclude people using these records as a 
vector to mail bomb somebody else.  If so, that would be true for this 
approach too.

Since this is a message with a failed signature, I don't know if that content 
is valid, whereas if it's in the DNS record, then I know (modulo DNS spoofing) 
that it's provided by the domain owner.  From a security/reliability 
perspective I think in-band is much weaker.

Scott K