Hello Richard,

Thank you for your explanations. That makes a lot of sense, and in that light the behaviour of PhoenixDKIM is indeed draconian.

The suggestion of an algorithm change, or an I-can't-verify-your-algorithm, are good ones that I hadn't thought of.

In the latter case, would it be correct to then verify the one-below instance's hashes against the message as it stands? If there were no changes, this should verify; if it doesn't verify, an undocumented change occurred?

If that is the right reading, then that is the behaviour I'll move to: A missing recipe becomes "no change asserted" rather than an error, checked against the message as it stands, and only a genuine hash mismatch fails.

Of course, a signature sitting below a recipe-less change becomes unverifiable. The result is, I suppose, a more targeted fail where the chain can no longer be verified, rather than a blanket PERMERROR.

Does this sound about right?

Kind regards,
    Edmund


On 2026/07/05 17:15, Richard Clayton wrote:
In message <[email protected]>, Mauro De
Gennaro <[email protected]> writes

That last detail is what trips PhoenixDKIM when the producer is the Go or
Python
tool. On a transparent re-sign, those two add a fresh Message-Instance (m>=2)
with no recipe, and PhoenixDKIM's verifier rejects any non-first Message-
Instance that carries no recipe, with:

PERMERROR: Message-Instance m=N carries no recipe

It failed on all 14 multi-hop combinations where a relaying (non-originator)
hop
was produced by Go or Python. For what it is worth, I think PhoenixDKIM's
verifier is on reasonable ground here, and mail-auth agrees with you in spirit.
Section 9.1 says a forwarder that leaves the hashes unchanged SHOULD NOT add a
new Message-Instance at all.

hmm ... rejecting a message because an earlier hop did not obey a SHOULD
NOT is fairly draconian. Albeit as pointed out in another message #9.1.3
has a MUST (which by context only) doesn't apply to i=1.

The text was meant to put across to implementers "don't add unnecessary
Message-Instance fields it just wastes time and energy"... but it isn't
an interop issue so MUST NOT was rejected in favour of SHOULD NOT and
the MUST in #9.1.3 probably needs rephrasing.

Now ... people may feel that recipes are a MUST and the spec should be
changed in that direction. But what if the Message-Instance was added in
order to provide a hash value that used a new (more preferred) algorithm
or because a forwarder did not have code for one of the hash algorithms
and felt that passing on a value it was unsure about was unwise ??

I have not changed spec-04 in this area, since more discussion is needed


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

--
Edmund Lodewijks <[email protected]>
TZ: UTC+2 / GMT+2

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

Reply via email to