Hello Pete,

Thank you for the note on tone and your point about the draft's length is fair: I will cite specific sections rather than referring to the document as a whole.

On your question let me be precise, because my formulation was looser than it should have been. I am not claiming that a message would verify against someone else's key. The signature covers the Message-Instance header field as literal text, so the base64 blob is identical for every implementation and the signature verifies correctly everywhere. The divergence occurs after that, when the recipe is decoded and applied.

Concretely, with duplicate keys: a recipe object containing two entries for the same header field name is not rejected by a conforming parser and RFC 8259 leaves the resolution undefined. One implementation takes the first, another the last. Both then reconstruct a different previous header state from the same signed bytes and compare it against the hash declared by the preceding hop. One reconstruction matches; the other does not. The verification verdict on a single message is therefore determined by which parser the operator runs, not by the message. What makes that more than an interoperability nuisance is that no amount of verification detects it. A node that reconstructs the entire chain uses one parser throughout, resolves the ambiguity the same way at every hop and obtains an internally consistent history. It does not observe a discrepancy; it observes a valid message (or an invalid one), according to which parser it runs. The divergence is not between hops, where verification looks, but between implementations, where nothing looks. No node in the path can observe that another reached the opposite conclusion on the same message.

I should add that Richard has stated he will add text to the specification forbidding duplicate keys. That closes this particular vector and I think that is the right fix. My concern is the class rather than the instance: numeric type coercion and tolerated malformed input have the same shape, in that two conforming parsers may resolve the same signed bytes differently, with the verdict rather than the signature diverging. Nor is uniformity obtainable by agreeing on one library: GHSA-72hv-8253-57qq, in jackson-core, describes a declared parsing limit enforced on the synchronous path and silently bypassed on the non-blocking one, within the same version, what the advisory itself calls an inconsistent enforcement policy. Whether the remaining cases warrant treatment in security considerations is a judgement for the group and I would also welcome hearing from others.

Regards,
Vittorio Moccia

Il 2026-09-15 22:26 Pete Resnick ha scritto:
Just on a few points:

On 15 Sep 2026, at 14:50, Vittorio wrote:

Il 2026-09-14 12:12 Hannah Stern ha scritto:

To me it looks as if you might be playing pigeon chess around these issues. Or FUD.
I will disregard this. IETF discussions should stay on engineering merits rather than personal characterizations.

Yes, I think Vittorio is correct here. I understand these discussions can be frustrating at times, but let's keep to the actual technical issues and give the benefit of the doubt to people's motives.

No. I'm asking for a description of actual problems with the mainline drafts that would ask for an
alternative in the first place.
Then let me be clear about the terms. My draft is not a WG document and I do not treat it as one; I keep it updated and announce it here and I raise points on this list when they bear on the base specification. In this thread, however, you asked for a specific constructive alternative and for a working implementation. Both exist and both are referenced in that draft. Declining to look at it while continuing to ask for what it contains is not a position I can do anything with. Read it or don't, but then the question stops being a question.

To be fair, your draft is 100 pages with a great deal of explanatory text, much implementation guidance, and a good amount of other text that is normally outside of the scope of IETF technical specifications. To be respectful of other participants' time, summarizing some of your concerns would be helpful when people have specific questions, and citing specific sections of your draft that answer a specific question would be useful in some circumstances.

What vulnerability? I don't see a potential exploit if someone is too strict, "just" an interoperability
issue that would  be sorted out early enough.
In a security boundary protocol, node A and node B parsing the same crafted payload differently is not a benign bug that sorts itself out. It is a security bypass vector: content can be smuggled past a filter or a verifier at one hop while a valid signature is preserved for a downstream hop that reconstructs it differently. You accept that JSON will produce parsing divergences but treat this as outside security. In a protocol whose purpose is authentication, that distinction does not hold: divergent interpretation of signed material at a security boundary is the vulnerability, not a precursor to one.

JSON parser differentials are a real, well-documented class of vulnerability, independent of DKIM2: duplicate keys, extreme numeric precision, type coercion and tolerated malformed input.

I'm not clear on something here: Are you saying that there is a potential for an attacker to create a recipe and text that would produce output that, due to a JSON parsing ambiguity, would cryptographically verify to someone else's key? Even having read 8.3 in your document, this does seem rather theoretical. There are other security experts in this group; I would like to hear other support for this position.

pr
_______________________________________________
Ietf-dkim mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to