DKIM2与DMARCbis标准正式落地
速览
DKIM2和DMARCbis是邮件认证协议的新版本,分别作为DKIM和DMARC的升级。它们旨在提高邮件防伪造能力、简化配置并增强报告机制。这一更新对电子邮件生态系统的安全性和互操作性有重要意义。
AI 深度解读
背景
邮件认证是互联网基础设施中默默无闻却至关重要的环节。过去二十年,DKIM(DomainKeys Identified Mail)和 DMARC(Domain-based Message Authentication, Reporting, and Conformance)共同支撑着邮件的可信传递,防止攻击者冒用银行等域名发送钓鱼邮件。然而,随着实际部署经验的积累,这些协议开始暴露出设计上的局限:DKIM 签名在转发时容易断裂,无法抵抗重放攻击,且缺乏可信的传递路径记录;DMARC 则依赖静态的公共后缀列表(PSL),更新滞后且操作复杂。2025-2026 年,两个新标准 —— DKIM2(目前处于 draft-04)和 DMARCbis(2026 年 5 月发布为 RFC 9989、RFC 9990 和 RFC 9991)—— 同时落地,标志着邮件认证迈出了二十年来的最大一步。Stalwart 邮件服务器率先在 v0.16.12 版本中完整实现了这两个协议,并提供了在线测试沙盒(mail-auth playground)。
核心内容
DKIM2:从孤立签名到可验证的保管链
DKIM1 的核心逻辑很简单:发送方对邮件头和正文签名,接收方通过 DNS 获取公钥验证签名,从而确认域名对该内容负责。但 DKIM1 签名仅绑定内容,不绑定收件人、路径或后续操作,导致三大硬伤:
- 重放攻击:一个合法签名的邮件可以被原样复制发给数百万收件人,每一份副本都验证通过,攻击者借此消耗原域名的信誉。
- 转发断裂:邮件列表加前缀、转发网关改链接、追加页脚等操作会破坏签名哈希,接收方无法区分是善意改动还是恶意篡改。
- 无传递路径记录:
Received和Return-Path头未认证,易伪造,无法建立可信的保管链。ARC 协议虽试图弥补,但多数接收方因信任问题不敢使用。
DKIM2 的解决方案:将旧版单个签名头拆分为两个新头,各自承担不同职责。
Message-Instance头:描述邮件在某一时刻的状态。包含修订号(revision number)、对当前版本头和体的加密指纹,以及当某跳(hop)修改内容时附加的“配方”(recipe)—— 一种紧凑的指令,说明如何撤回修改,使转发后的邮件仍可被验证。DKIM2-Signature头:记录该跳实际使用的 SMTP 信封(MAIL FROM和RCPT TO),并对整个信封签名。此外还包含序列号(sequence number)、时间戳、以及一组标志位(如donotexplode禁止扇出、exploded标记合法扇出、request-feedback请求反馈)。
两个计数器驱动全局:一个计数器记录签名次数(每跳一次),另一个记录邮件修订次数(仅当内容被修改时递增)。纯透明转发(不修改内容)的节点甚至不需要感知 DKIM2。
DKIM2 如何逐一解决 DKIM1 的问题:
- 重放攻击:每个
DKIM2-Signature记录了该跳的mf=(MAIL FROM)和rt=(RCPT TO),后续跳的发送域名必须与前一跳的收件域名匹配。重放到不同收件人的邮件无法形成有效链。发送方还可通过donotexplode标志禁止扇出。 - 转发断裂:通过
Message-Instance的配方机制,修改内容的节点可以记录如何撤销改动,从而使后续验证者能够还原初始签名状态。这使得转发不再破坏签名。 - 无路径记录:序列号将多个签名串联成有序链,每跳都签下了自己的信封,形成不可篡改的保管链。
- ARC 的信任问题:DKIM2 内置了链式验证,不再需要独立的 ARC 覆盖层。
- 头部签名不一致:DKIM2 通过
Message-Instance统一了覆盖范围,减少歧义。 - 退信不可信(backscatter):DKIM2 引入了标准化反馈机制(通过标志位请求反馈),并允许发送方在签名中声明退信应发送给谁,减少了无辜第三方收到伪造退信的风险。
- 反馈随意:
request-feedback标志为中间件和发送方提供了标准化的反馈请求与路由方式。
DMARCbis:用动态 DNS 树遍历替代静态公共后缀列表
DMARC 自 2012 年标准化以来,核心机制是将 DKIM 和 SPF 的认证结果与 From: 域名进行对齐,然后根据域名发布的策略(无操作、隔离、拒绝)执行。但 DMARC 存在几个长期痛点:
- 公共后缀列表(PSL) 是静态维护的,更新缓慢,且无法处理私有域(如
co.uk下的子域)。PSL 的误判会导致对齐规则失效。 - 部分标签从未真正发挥作用(如
rf、pct等),造成配置混乱。 - 过去十年积累的操作经验(如如何处理子域、如何应对转发)未能反馈到标准中。
DMARCbis 的改进:
- 用 DNS 树遍历替代 PSL:接收方不再依赖静态列表,而是通过 DNS 查询从
From:域名的根开始逐级向上查找,直到找到第一个发布 DMARC 记录的域名。这使对齐规则能动态适应任何域名结构,包括私有域。 - 废弃无效标签:移除了
rf(报告格式)、pct(策略百分比)等从未真正工作的标签,简化配置。 - 融入操作经验:明确解决了子域聚合、转发场景下的策略继承、以及如何与其他认证机制(如 ARC)协作等问题。
- 完善报告机制:改进了聚合报告和失败报告的格式与路由,使其更易于大规模部署。
DMARCbis 的三个 RFC 各司其职:RFC 9989 为核心规范,RFC 9990 定义策略,RFC 9991 定义报告。
关键要点
- DKIM2 的核心创新:将签名从“内容绑定”升级为“传递路径绑定”,通过
Message-Instance和DKIM2-Signature两个头部构建可验证的保管链。 - 重放攻击的终结:每个签名绑定了 SMTP 信封(
MAIL FROM、RCPT TO),重放后链无法闭合。 - 转发友好:通过配方机制,修改内容的节点可以告知如何撤销改动,使转发不再破坏签名。
- 无需 ARC:DKIM2 内置了链式验证,ARC 作为独立覆盖层不再必要。
- DMARCbis 的 PSL 替代方案:DNS 树遍历消除了对静态列表的依赖,适配所有域名结构。
- 废弃无效标签:DMARCbis 精简了配置项,降低了部署复杂度。
- 标准化反馈
