This is a strawman description for the DKIM2 header signing.  I know that
Richard is writing a draft for this, but as draft writing is heavyweight
and before going too deep down a particular path, I think there is benefit
to put some sort of concept out early for community feedback.  In the
IETF-122 discussion we heard from Bron that there is an implicit list of
headers that always will be signed, and that the headers will be
oversigned.  There is also a DKIM2-Signature "h=" to specify extra headers
to be signed not covered by the implicit list as mentioned in
draft-gondwana-dkim2-header.  Bron also mentioned that subsequent
DKIM2-Signatures extra headers "h=" cover prior DKIM2-Signatures "h="
headers i.e. must be a superset.

RFC6376 has a list of recommended headers to sign for in section 5.4.1
<https://datatracker.ietf.org/doc/html/rfc6376#section-5.4.1>.  This can be
the start of that implicit always signed headers.  These are:

* From

* Reply-To

* Subject

* Date

* To, Cc

* Resent-Date, Resent-From, Resent-To, Resent-Cc

* In-Reply-To, References

* List-Id, List-Help, List-Unsubscribe, List-Subscribe, List-Post,
List-Owner, List-Archive

At a high level, the signing algorithm would be:

1)  Find in the message which of the recommended headers are present.
Obtain the values in the order found in the recommended headers list, and
canonicalize using the Relaxed algorithm found in RFC6376 section 3.4.2
<https://datatracker.ietf.org/doc/html/rfc6376#section-3.4.2>.   Then
successively hash them.  If multiple headers of a given name are found,
obtain these in a bottom to top order as described in RFC6376 section 5.4.2
<https://datatracker.ietf.org/doc/html/rfc6376#section-5.4.2>.

2) Take the headers in the extra "h=" headers list, and obtain the value in
the order found.  If multiple headers of a given name are found in "h=",
obtain them in a bottom to top order as described in RFC6376 section 5.4.2
<https://datatracker.ietf.org/doc/html/rfc6376#section-5.4.2>.
Canonicalize using the Relaxed algorithm found in RFC6376 section 3.4.2
<https://datatracker.ietf.org/doc/html/rfc6376#section-3.4.2> then
successively hash them.  If not found, treat the value as empty.

3) Oversign the entire list of recommended headers as described in RFC6376
section 3.5 <https://datatracker.ietf.org/doc/html/rfc6376#section-3.5>
thereby preventing those from being added to the message.  This hashes an
empty value for each header.

4) Oversign the extra "h=" headers, preventing them from being added to the
message. This hashes an empty value for each header

5) Hash the body and DKIM2-Signature headers (out of scope for this
description)

6) Sign the hash.

The validation algorithm is analogous.  Hash as above, then perform the
signature validation with the hash.

The giant <implicit oversigning list> is:

from:reply-to:subject:date:to:cc:resent-date:resent-from:resent-to:resent-cc:in-reply-to:

references:list-id:list-help:list-unsubscribe:list-subscribe:list-post:list-owner:list-archive

EXAMPLE

ORIGINATION MESSAGE: with List-Unsubscribe-Post as the extra header

DKIM2-Signature: i=1; h=list-unsubscribe-post

To: list@mailinglist.example

From: user@origination.example

List-Unsubscribe-Post:

Effective h=from:to:list-unsubscribe-post:<implicit oversigning
list>:list-unsubscribe-post i.e. is order the headers are hashed.

FORWARDED MESSAGE: From header rewritten and Delivered-to added

DKIM2-Signature: i=2; h=list-unsubscribe-post:delivered-to

From: list@mailinglist.example

Delivered-to: list@mailinglist.example

DKIM2-Signature: i=1; h=list-unsubscribe-post

To: list@mailinglist.example

List-Unsubscribe-Post:

Effective h=from:to:list-unsubscribe-post:delivered-to:<implicit
oversigning list>:

list-unsubscribe-post:delivered-to i.e. is order the headers are hashed.


So I think this implicit header signing could work and does save some
unnecessary legacy h= overhead in the message header.

-Wei
_______________________________________________
Ietf-dkim mailing list -- ietf-dkim@ietf.org
To unsubscribe send an email to ietf-dkim-le...@ietf.org

Reply via email to