[Ietf-dkim] Re: DKIM2 Multiple Domain Signatures Proposal

Tobias Herkula <tobias.herkula@1und1.de> Fri, 29 May 2026 14:23 UTC

Return-Path: <tobias.herkula@1und1.de>
X-Original-To: ietf-dkim@mail2.ietf.org
Delivered-To: ietf-dkim@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 114F5F76FB25; Fri, 29 May 2026 07:23:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1780064598; bh=TJwYCWk3fItA8y/NEHMGJ7NBDMtaJc0dR7TITsbA72c=; h=From:To:Subject:Date:References:In-Reply-To; b=m1MHitMKu/4T6bHwkSftQZUY2hi3pFuphqQ5ABTxf9VmRs6QFskELSo4Y0qcVpL0h LGeATSLewB3naRQgw9S1Hzm8LMTw5tujsjwqDylcDZU/aVS2ULjRVF+Cafef8DNmvs PzxSD5v3/RKKL3zG0z4U6QEszQn4btF8ahy5ROEg=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_NONE=0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=1und1.de
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id blLJdrLx5ohv; Fri, 29 May 2026 07:23:16 -0700 (PDT)
Received: from moint.1and1.com (moint.1and1.com [212.227.15.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 2FCE3F76F9D1; Fri, 29 May 2026 07:23:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=1und1.de; s=corp1; h=MIME-Version:Message-ID:Date:Subject:To:From:cc:sender:reply-to; bh=Cl6eAcnLY878nc32TCAwzeeruptFxhkOqu+3cECMfTM=; b=puMlGdtLnf9lfTPeRQjsX4fEZF xVryLHlYpoUoN9iYFN00y3rrSJ3D0eFAEnU7ewdoiuyaCXHdrTxMxTgSbxb3h+tmitYY6lTyRC2X+ rP8vau0sGVmN5nCO2peVJXPd1SHVG/gycZe6JcTCj0zrVhpB0H16Ytf9TYxM5dzD0RubheOxOJtcA UsmXUgwgahHyo8+KWMJHpM4Ea8gpKCYSIDg4aAmEEbkz64F4YCllZM4o6yHTrPEUmngP+HgA6ELri ydNG+jEcKItUfAJi2GYcYZtwZ8LO96uYyyjq3pWmDGNu6MGwS+71HjLP0ZebYIoF+l/nt65XD/4NF V1RqlHzQ==;
Received: from [10.98.29.9] (helo=BAPPEX024.united.domain) by mrint.1and1.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from <tobias.herkula@1und1.de>) id 1wSy6v-002H9H-3B; Fri, 29 May 2026 16:22:54 +0200
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mBmKoxeaCXVvuDn1fhn8inWdA30Hw1SGAOxULxb5EjGa87MKyNQojdkeNK4BcikbxCYsT5WyfS0mIVAyt4sAwn6K4HY2AzQ7p2/wAeYBzSaGJVWpXS4aURvVBDJgkM9U8eCYHFbvIkXGbWXzNtJE9GlKHf+L/gQ+HB7niMUriQAyQz+8KjixUY5ljwtt2tjrZlaSJDhvGI/SutG3VdgkI6whyJ39pk9alEJFMmDCPXcE5uGd9g1qqzn78osPr/JoY9BZ4/PqjafkRnAkEKHjmdIJtmBKNvyt0mfn8847qnPWe6Cgw2QMvwguizIyqrpM1T3CI2AigF9+fQ2ThixxeQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Cl6eAcnLY878nc32TCAwzeeruptFxhkOqu+3cECMfTM=; b=eW6zYN7E3676RjNmRg+k1Ek4Rg4WIBKuugxlUDRrwALBQfl3YqWriOPVNAXQsVGeskn7FzJHdjvA4e52SRXctOwVrZNRhud8ifibZOJnlOa7Ws/Fsry74AkOiWo0PZev9DOZ0JF0QZ5vEmuCp1HpvmfInoFgJTbfHGkhUqWssshlETV61eafuSZppGicne4bG3QtMs4T8szuVuVMq7wM3G5Gn4wKl0IXKuiJ5JkJsO8Q/EwOLMwTuvQ4/eCg7KvtzE8do5TwdiHJJQwqKlcHwfwRnypBTLEca6MAVgdQTSBZQuksZ01tmwCEGFjcDApEo0toNyZQwVktWilhkaZe5A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=1und1.de; dmarc=pass action=none header.from=1und1.de; dkim=pass header.d=1und1.de; arc=none
From: Tobias Herkula <tobias.herkula@1und1.de>
To: Wei Chuang <weihaw=40google.com@dmarc.ietf.org>, "ietf-dkim@ietf.org" <Ietf-dkim@ietf.org>
Thread-Topic: [Ietf-dkim] DKIM2 Multiple Domain Signatures Proposal
Thread-Index: AQHc7Ud0X0/sCq8GNkinBbYjksulibYk2UdQ
Date: Fri, 29 May 2026 14:22:50 +0000
Message-ID: <FRYP281MB215688518F651BAFE1691B68EA162@FRYP281MB2156.DEUP281.PROD.OUTLOOK.COM>
References: <CAAFsWK1ufndVa=5861077q=Xt=SAA9=L7J3tAm+Wiswz8irUpQ@mail.gmail.com>
In-Reply-To: <CAAFsWK1ufndVa=5861077q=Xt=SAA9=L7J3tAm+Wiswz8irUpQ@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=1und1.de;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: FRYP281MB2156:EE_|BE3P281MB5056:EE_
x-ms-office365-filtering-correlation-id: 102b0bce-f9b4-4d42-21ba-08debd8dc379
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|3613699012|8096899003|38070700021|13003099007|18002099003|22082099003|56012099006|6133799003|11063799006|3023799007;
x-microsoft-antispam-message-info: 3+hAc5sAo4w4Ur9rL/59s0fqrP+XeV4/EQPxUkmLuAJluTZEr+07XxMYO1YbBcGSob0gw35I+39tryVw2+vSbL4uCA4BwwrkRhZ9Zf0qao67LyKInpdDTA5j7/efbGHn2uUIMIYuMrHrMt9sPZiqKqwHdVtp4+s50k5TO6Z/YgdK5ooAyhvfe9knx7ddpDaiOyKi15bUYPlN4fHefPvQi8qAtIMwxlatJWnGYD9qpIEW9Oi1VGd5xo1nr6rRZ4T4awiNay8FsuxMMlbWEo3hkhAt+JUaIlhQkfrIEZ2f1w7RBwoN/y1on9ssip8Rx+mt1vyWmAOogPjVoQ1LLtfQ+C2BOyFAKy0KbTQQZnjSSd7YJIyMLRuUfaGf97BEdbjDIl0fCrsKAKGP8UO/zrJz3SC8t5SwqN9hZyWYQbrcnle1wdJC5ndVR0LyLlGn5NvOPoiqHKgIXR1KzvYfy/ZoQ6aUwcpqmjW3WjnfnUE/i+kiIjmfK5RjGD5qzrmGUZ/MMQa0gDkpioO/8pOZzhp3MMG1JgDEGBQA0AsacSCyunb0+uOgZGECTGqJahdNv7QDr0+fObFS6V2JJ+r1sH58irGaZu5lIZPTRTZZXKn1EGEKZkbsv5QtGw764yWggl60TFolO3SDzmqc6jS1JqJOqcEYip2NJGYeb3L6Hs+6j79U7b+QdMH+CG5acFwiny85StAsh+q+j5j2asG4hRDMl0INiAzUZx2pTIUSYIybBzW+KuLxy6J70Ge9Nl/hYLJZVLQQe/XFK/cZ/JBZqexjqX2OWq/oh1/R/f/bcOtn+zU=
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:FRYP281MB2156.DEUP281.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(3613699012)(8096899003)(38070700021)(13003099007)(18002099003)(22082099003)(56012099006)(6133799003)(11063799006)(3023799007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: RlxgtJJKseIglpOdEw51fG/DjBTb30M617X989x9keS0rmdsLWfm3xzzLf9bsIY47xNlPvfgxMIBIJNnCI0qPPYd7PSlyuO1xI9A4UvH9Fr7tPuo9eELxHGF3o2T2hbhguafhhLj5CEc3q79izj+C8LHuoT3uEFdvgqH00zXSIFEAcMLC1WW2xQAhZb74wKIZ0MeebEsHrITcNrC5h9bJfDcpz7ctPDpjDEaWUGzv8v2Gkb959KTjSN8BMJjq3kDB7DKAhvcegnl+vo+oKYWoelOaGsnN5zXtfPPaqc4LSs+e4RMnEdLf74o1aHjvABIUaYd1K4tezHY+6nWvOWcWHnaJweW4hg2cGjj7ZOR/hd7llGnioH6GFNFn6VHoIdU11Sj+h2x24IDAp4Ef6XQe6mkrBJqf66S4gunDkNcwsBVyGcHGkkbsCgfAPBPHmHFyE5KGRHeVaTzM3BedIVIjK5Kla+Ks2dsXMlBO/Cm1noBpWhvY3X0mEf/v71QUuSlxzjqci7RtLcHQYTIBZn9LIdt9xa5WTyGTxyAoCXX7QHIGwO3Fjec+CuLmUy5xb2KgEdmZ12sex8fGcBMUCmPQFL2rjfGFlI87H4K/D6hzeGjjoUOYbJE5PTKvM4cKYOCVWqdqZfGEwtqsNh+DqzN2Dqh0nyso0eQLctb4EAJkPnTOpOgJX/6pIoOIYO0NkYSaV4pENnwU526aGpasnz/xhvgkWp8iBom9vRpVscpWkQhxsF1qCPhwaydf6J+UPioGhrqNOBWzxApprYtox6YuAEUzLXmComUBZBE4aGsiw2jS//3l5AvcP19eYWsPOQuSxCMMv3GlX+Wq/oQQx0ry4gmWJEiOtWOTSoM6dffBwQreTIGzZqsGNwZHvsfH/2KMLN8hBOCFBiVNTfoTjyxRVzCFbkb31erUNRXCxg3lQ9ratkWOWZKuuK5o7WoVJpAQGO0m1bGrcyhycAtnmISyB4I12dqelzfnlYdQuwk1ureIyXyzUAp3hfJzQbHrcWian2M0b/5ur8lkgLOE5ZiELeVlxurxwP348TDQHjJ+4e1zl1Hnqpq026/iq3zB8+vBX5h0CiNvTvwqPBkO50hLThN3qdoMjM2z3gInBQzZmofqs53owAZBNM/1+vXMiN2ibLbj3yNAsOnJHdw5hU/sDPXnK1G0aaWk/0c+kJelSXn//x69Ku9e6RNRZDR8u3ttLvra4P041H0/LPTx3ghhvDdtk/wxV86sOrwoF/M9u+ER+KMfq4Muq+NbfyfdPk6h9G67WdtoKH8gTARIblTZ6eyq/sb+pDjwU8LwvEgaXKkU0FsTU/Iu1ShTcXDARlqTLd9COu/wOm4fljBzD+CqlEBlYM1/Zqls5AsWadqom4Oz7ptXFPVrxBMGghh57rJBknC6c4msjLcvsa2zk5IEd1ONQpuDNLDkd1EblvYThjZPcp/ZyWmSsgeZqhXL/2oKjLNLmd3ZTEuaa35HDzPPEUMLygmMczyuMl9n72p8dhrKdwnx/clPuNv1H0dP7UeATUqQcRxZI8bUqKBZh7RW1QD/cWDnOngxPATCwA3yEfDiG/YLclK632uXHn66tHpXjcLapXtJY9u6WMUOE4is6xLICwgnw0dgHOzb1xI822a3rJC/QHwvYcICThOS1tDPjSBwTw1mu4JYOgLqWiym6wsQvQiecYFP0L47R7OtQRLU8lEJRMNkaSocpaeYtVJDbGLiw/m3EKQR/KGzEMUlQ==
Content-Type: multipart/alternative; boundary="_000_FRYP281MB215688518F651BAFE1691B68EA162FRYP281MB2156DEUP_"
MIME-Version: 1.0
X-Exchange-RoutingPolicyChecked: FQXgLy8Od/CL/ZDVoU6O8rdFPWBfxYI/z7BR+2BTXXGfDtolmlArSpksfiiwfQ59panB+51T7ebvGMJCX4sJwYxPifbZuVW5gyyFWwjDXxZ8SJPFXizQJgN/MQO61ub+RTAYPg5pZY9nuLMr50s8dL+bSXg1pTw0X2JBTJ4a39B39kgbRSRCtJVSG1DHtfIcDy+TzYoYuDcv3XGKVHUV+MWTQNKd8tKAPR/YOqym17Cj6HJNDbUPIMyzebyscS1AEorq+cq1adQJQYt54Crpjj8ouKyHxHmQ4efAR0wIIM7sbSEBo8DXtn0KjDAc3cN11RGQDFfNaE2lTmLSwFyqvw==
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: FRYP281MB2156.DEUP281.PROD.OUTLOOK.COM
X-MS-Exchange-CrossTenant-Network-Message-Id: 102b0bce-f9b4-4d42-21ba-08debd8dc379
X-MS-Exchange-CrossTenant-originalarrivaltime: 29 May 2026 14:22:50.0208 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4336ed25-a33e-4aab-92ed-3e7fae3bb2fd
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: x5+3dfYSmmtlkKWHbxN7eKBnR0lTJLaMTGNe7V5BLOWqorwcA4ZE+nDKJCKbX91cOEHxEKvJBOGAQEwTiQxTig==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BE3P281MB5056
X-OriginatorOrg: 1und1.de
X-Virus-Scanned: ClamAV@mvs-ha-bs
Message-ID-Hash: JV52IEHFSCHDMWH2Q2VRALUVY5PONN5S
X-Message-ID-Hash: JV52IEHFSCHDMWH2Q2VRALUVY5PONN5S
X-MailFrom: tobias.herkula@1und1.de
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-ietf-dkim.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Ietf-dkim] Re: DKIM2 Multiple Domain Signatures Proposal
List-Id: IETF DKIM List <ietf-dkim.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/ietf-dkim/2fJ0iLYXVJOcA1Wbh1gtzbpTb7Q>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ietf-dkim>
List-Help: <mailto:ietf-dkim-request@ietf.org?subject=help>
List-Owner: <mailto:ietf-dkim-owner@ietf.org>
List-Post: <mailto:ietf-dkim@ietf.org>
List-Subscribe: <mailto:ietf-dkim-join@ietf.org>
List-Unsubscribe: <mailto:ietf-dkim-leave@ietf.org>

Hey Wei,

I remember a discussion were someone also wanted to assert ADMD boundaries and after reading your proposal and also re-reading Richards, I would like to propose a third way of solving the issue at hand (i.e. enablement of multi-hop in same ADMD signing for forwarders and single-hop multi-signing for differentiation between brands and sender infrastructures) and also provide a way to cryptographically assert ADMD boundaries itself.

A DKIM2 signature i=n could explicitly assert the signing domain expected to produce DKIM2 signature i=n+1. Alternatively, a DKIM2 signature i=n could explicitly assert the signing domain of DKIM2 signature i=n-1 as the domain it continues from. In both cases, the assertion MUST be covered by the DKIM2 signature instance that makes it and therefore protected against modification.


  *
If DKIM2 signature i=n asserts the signing domain of DKIM2 signature i=n+1, DKIM2 signature i=n+1 may omit the mf and rt fields and inherit their effective values from DKIM2 signature i=n.
  *
If DKIM2 signature i=n asserts the signing domain of DKIM2 signature i=n-1, DKIM2 signature i=n-1 may omit the mf and rt fields and inherit their effective values from DKIM2 signature i=n.

A relationship between two DKIM2 signature instances MUST be asserted in exactly one direction. If both signature instances assert the same relationship, the relationship is invalid. This keeps the chain of custody unambiguous and reduces replay opportunities by ensuring that each link has exactly one authoritative assertion. This can be repeated across multiple DKIM2 signature instances, creating a chain of signed relationships between consecutive signing domains. If either mf or rt changes between DKIM2 signature instances, the DKIM2 signature instance reflecting the change MUST explicitly assert the new value. Omission is only valid when the effective values remain unchanged. A receiver remains free to apply local policy when evaluating a relationship assertion that directly references the receiver's DKIM2 signature instance, or when inheriting omitted mf or rt values from the immediately related DKIM2 signature instance. If the receiver does not accept such a relationship or inheritance, the DKIM2 chain MUST be treated as invalid.

The examples are always from the perspective of the next entity that would add a new instance of the signature header.

Bulk Sender Example (simple)
Simple if I'm the hop after i=2 it's easy to understand that i=2 was authorized by i=1 to send this and a possible rejection later in this chain would go back to news@brand.example
DKIM2-signature: i=2 d=esp.example
DKIM2-signature: i=1 d=brand.example mf=news@brand.example rt=rcpt@mbp.example nd=esp.example
From: news@brand.example
To: rcpt@mbp.example

Bulk Sender Example (extended)
Also simple same result as before. I=1 and i=2 asserted the next hops and I'm as theoretic i=4 am mbp.example and ca deliver that message fine
DKIM2-signature: i=3 d=esp.example
DKIM2-signature: i=2 d=agency.example nd=esp.example
DKIM2-signature: i=1 d=brand.example mf=news@brand.example rt=rcpt@mbp.example nd=agency.example
From: news@brand.example
To: rcpt@mbp.example

Enterprise example from a Bulk Mailer with Forwarding and an SEG
The enterpise example also works fine, i=4 can easily validate the chain and gets the mail from news@brand.example and i=5 then allows the un-aligned domain change afterwards by asserting the last hop. If I'm now somewhere later in the chain this works out,
DKIM2-signature: i=5 d=enterprise.example mf=rcpt@enterprise.example rt=boss@enterprise.example ld=security.example
DKIM2-signature: i=4 d=security.example mf=info@enterprise.example rt=rcpt@enterprise.example
DKIM2-signature: i=3 d=esp.example
DKIM2-signature: i=2 d=agency.example nd=esp.example
DKIM2-signature: i=1 d=brand.example mf=news@brand.example rt=info@enterprise.example nd=agency.example
From: news@brand.example
To: info@enterprise.example

This approach effectively reduces header clutter while remaining simple to understand and implement. The relationship between signature instances is explicit and easy for both humans and machines to parse. Expressing multiple signing domains within the same construct introduces additional complexity, as a signature is no longer associated with a single signing domain and additional semantics are required to describe the relationship between domains. The proposed approach keeps that relationship explicit. My late reply to this comes from the time I tried to find a way to abuse this explicitly, I'm aware that any attacker could add hops with assertions, but this is the whole idea, if an attackers asserts the previous hop, he takes ownership and will be punished for spam, and if an attacker asserts the next hop a receiver can easily decide to not accept the message if he is not aware of such a relationship.

--

Best regards,
Tobias Herkula

________________________________
From: Wei Chuang <weihaw=40google.com@dmarc.ietf.org>
Sent: 26 May 2026 21:39
To: ietf-dkim@ietf.org <Ietf-dkim@ietf.org>
Subject: [Ietf-dkim] DKIM2 Multiple Domain Signatures Proposal


One problem we've observed in the current DKIM2 proposal is that the synthetic headers described in Section 11.1<https://www.ietf.org/archive/id/draft-clayton-dkim2-spec-08.html#name-add-any-necessary-message-i> imply SMTP boundaries where non-existed.  These are needed for enterprise or bulk sender flows to maintain the chain of custody with the added synthetic headers used to link together the mf= and rt= tag with the headers representing actual ADMD boundaries.  While they are easily generated and verified, other systems interpreting them may be confused such as NDR bounce handling, and seem to be an unnecessary artifact of the protocol.  Can we find an approach that does not require these synthetic headers?


First what are those synthetic headers:

Enterprise Forwarding Problem

Broken forwarding because the chain of custody is not maintained through the mf= and rt=:

From: orig@orig

DKIM2-signature: i=1; d=orig; mf=orig@orig; rt=recv@recv

DKIM2-signature: i=2; d=forw; mf=forw@forw; rt=dest@dest


"Fixed" by adding a i=2 synthetic DKIM2 signatures as described in Section 11.1<https://www.ietf.org/archive/id/draft-clayton-dkim2-spec-08.html#name-add-any-necessary-message-i> to link mf= and rt=.

From: orig@orig

DKIM2-signature: i=1; d=orig; mf=orig@orig; rt=recv@recv

DKIM2-signature: i=2; d=recv; mf=recv@recv; rt=forw@forw

DKIM2-signature: i=3; d=forw; mf=forw@forw; rt=dest@dest


Further the bulk sender pattern implies a synthetic email address where non-existed before.

Proposed Multiple Domain Signatures

Instead let's collapse the synthetic header into the header generated at the ADMD boundary.  We can do this by moving the domain d= into the signature s= and skip generating the synthetic header.  If we do this, it implies a set of changes in the DKIM2 signature and chain of custody algorithm.

  *   Move d= domain into the s= signature and drop d=

     *   Each of these signatures signs for the same hash but varies by signing algorithms or private keys

  *   "d=domain; s=selector:rsa-sha256:sigdata" => "s=domain:selector:rsa-sha256:sigdata"

     *   For a given DKIM2 signature header, defines a set of valid domains D across all signature selectors and algorithms


Modified chain of custody algorithm

  *   For the i= instance number of DKIM2 signature header, there is an origination i=1 and the highest numbered i=n.  These instance numbers of DKIM2 signatures form a continuous sequence of 1..n without skips.

  *   For each DKIM2 signature header i=m in 1..n

     *   mf= domain is DMARC aligned with a domain in the set of DKIM2 signatures D

  *   For each DKIM2 signature header i=m in 1..n-1

     *   rt= domain is DMARC aligned with a domain in the set of member of DKIM2 signatures D at i=m+1

  *   For the DKIM2 signature header at i=n, the receiver checks

     *   rt= address must be an exact match to the address of RCPT TO

     *   mf= address must be an exact match to the address of MAIL FROM

     *   Receiver accepts delivery for RCPT TO address (effectively i=n+1)

  *   For a given DKIM2 signature header, if there is more than one signature provided then they MUST all be checked if the verifier is able to do so.

     *   If any signature fails then an error SHOULD be reported

     *   If more than two domains are present then an error SHOULD be reported

     *   The verifier SHOULD check at least 6 signatures (or some TBD reasonable number) in a DKIM2 signature header.  Six is supposed to support three algorithms with either the enterprise or bulk sender use case.  This is to support some hypothesized new PQC algorithms that haven't been selected but likely to happen.  This is in addition to rsa-sha256 and ed25519-sha256 algorithms already specified.

     *   Each domain must have at least one passing signature, with non-passing results only permitted for unknown algorithms.

Usage

There are scenarios where we want multiple signatures to be associated with a given ADMD that can map to a single DKIM2 signature header.  Three cases:

  *   Different algorithms

  *   Forwarder with different receiver and sending domains that occurs with enterprise flows

  *   Bulk senders with multiple signatures to get feedback reports


#1 Different Algorithms

From: orig@orig

DKIM2-signature: i=1; s=orig::rsa-sha256:; s=orig::ed25519-sha256:; mf=orig@orig; rt=recv@recv


#2 Enterprise forwarding

From: orig@orig

DKIM2-signature: i=1; s=orig:::; mf=orig@orig; rt=recv@recv

DKIM2-signature: i=2; s=forw:::; s=recv:::; mf=forw@forw; rt=dest@dest


#3 Bulk sender multiple signers

From: brand@brand

DKIM2-signature: i=1; s=brand::; s=platform:::; mf=platform@platform; rt=recv@recv


In this bulk sender case, the platform i.e. bulk sender may wish to handle bounces on behalf of the brand.

Security Discussion

This approach still demonstrates to receivers that the forwarder actually handled the message by signing the message.  A subsequent receiver can validate the signatures, and checks for domain alignment using the above process.

Alternative Approach

Richard Clayton proposes a different approach to identify synthetic headers and addresses without the large changes above.  This would keep the synthetic headers generated in Section 11.1<https://www.ietf.org/archive/id/draft-clayton-dkim2-spec-08.html#name-add-any-necessary-message-i>.  To paraphrase him, hopefully correctly, he proposes that the synthetic forwarder addresses in the synthetic headers not specify a local-part.  The chain of custody tag matching of mf= and rt= would check for domain alignment only.  The examples below illustrate how they might look.  Note the synthetic headers with missing the local-parts are designated as @domain.


#1 Different Algorithms

From: orig@orig

DKIM2-signature: i=1; d=orig; s=::rsa-sha256:; s=::ed25519-sha256:; mf=orig@orig; rt=recv@recv


#2 Enterprise forwarding

From: orig@orig

DKIM2-signature: i=1; d=orig;   mf=orig@orig; rt=recv@recv

DKIM2-signature: i=2; d=recv;  mf=recv@recv; rt=@forw

DKIM2-signature: i=3; d=forw;  mf=forw@forw; rt=dest@dest


#3 Bulk sender multiple signers

From: brand@brand

DKIM2-signature: i=1; d=brand;      mf=brand@brand; rt=@platform

DKIM2-signature: i=2; d=platform;  mf=platform@platform; rt=recv@recv

Thanks,
-Wei