← RFC Reference

ARC — 认证接收链

Email Authentication Published March 2026
ELI5: 想象一份证物链式保管表。每个处理证物的人都在表格上签名,并记录他们收到时的状况。即使证物在处理过程中略有变化,最终收件人也能沿着链条往回追踪,看到它始于经过验证的状态,且仅由可信方处理。ARC 对电子邮件身份验证结果也做同样的事情,当邮件通过中间方传递时进行记录。

为什么存在这个RFC

电子邮件转发是 SPF 和 DKIM 的致命弱点。当消息通过邮件列表、别名或 .forward 规则转发时:

当 SPF 和 DKIM 在最终目的地都失效时,DMARC 也会失效,消息可能被拒绝或隔离——即使它是合法发送的并通过受信任的基础设施转发的。

ARC(认证接收链),在 RFC 8617 中定义,通过让每个中间代理记录它观察到的认证结果的快照然后对其签名来解决这个问题。最终接收者可以检查链以确定消息在发起点已被认证,即使直接 SPF 和 DKIM 检查现在失效。

工作原理

三个 ARC 头集

处理消息的每个中间代理添加一组三个头,用实例计数器(i=)编号,该计数器在每一跳处递增:

头 用途
ARC-Authentication-Results (AAR) 记录此中间代理观察到的认证结果(SPF、DKIM、DMARC)。遵循与标准 Authentication-Results 头相同的格式。
ARC-Message-Signature (AMS) 中间代理看到的消息头和正文的类似 DKIM 的签名。使用与 DKIM 相同的签名语法。
ARC-Seal (AS) 对所有先前 ARC 头集加上当前 AAR 的签名。这封存了链,防止任何人篡改或重新排序先前的条目。

保管链示例

# alice@example.com 的原始消息
# SPF: pass, DKIM: pass, DMARC: pass

# 跳转 1: lists.org 的邮件列表接收消息
ARC-Authentication-Results: i=1; lists.org;
dkim=pass header.d=example.com;
spf=pass smtp.mailfrom=example.com;
dmarc=pass header.from=example.com
ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.org; s=arc; ...
ARC-Seal: i=1; a=rsa-sha256; d=lists.org; s=arc; cv=none; ...

# lists.org 添加页脚、修改主题、重新发送
# 原始 DKIM 签名现在无效(正文已更改)
# SPF 现在引用 lists.org IP,而不是 example.com

# 跳转 2: 最终目的地 mx.receiver.com
Direct DKIM check: FAIL (body modified by list)
Direct SPF check: FAIL (IP is lists.org, not example.com)
Direct DMARC check: FAIL (neither aligned)

ARC 链验证:
i=1 ARC-Seal: 有效(由 lists.org 签名)
i=1 AAR: 在 lists.org 处 dkim=pass、spf=pass、dmarc=pass
链结论: cv=pass
接收者信任 lists.org => 覆盖 DMARC 失效

关键技术细节

链验证 (cv) 标签

ARC-Seal 头包含 cv=(链验证)标签,具有以下三个值之一:

ARC 和 DMARC 覆盖

ARC 不替代 DMARC。相反,它提供接收者在做出 DMARC 覆盖决定时可以使用的额外信息。接收者的逻辑可能是:

  1. 直接检查 DMARC。如果通过,正常投递。
  2. 如果 DMARC 失效,检查 ARC 链。如果链有效(cv=pass)且接收者信任链中的中间代理,覆盖 DMARC 失效。
  3. 如果 ARC 链无效或中间代理不受信任,照常应用 DMARC 政策。

信任中间代理的决定是本地政策。例如,Gmail 维护受信任 ARC 签署者的列表(主要邮件列表提供商、大学邮件系统等)。

签名要求

ARC 签名使用与 DKIM 相同的密码学格式(RSA-SHA256 或 Ed25519)。签名域在 DNS 中 _domainkey 下的选择器处发布其 ARC 公钥,与 DKIM 密钥发布相同:

arc._domainkey.lists.org. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB..."

实例编号

ARC 集从 i=1 开始按顺序编号。每个中间代理添加具有下一个编号的集。最终接收者通过依次检查所有封印来验证链。如果任何封印失效或任何实例缺失,整个链无效。

ARC 不做的事

常见错误

可投递性影响

Related RFCs