RFC 5617:ADSP — 作者域签名实践
ELI5: 想象你经营一家公司,在寄出的每封信上都盖上蜡封。ADSP 是向世界宣布的一种方式:"我们的每封信都有封印。如果你收到没有封印的信,那就是伪造的。"这是个好主意,但宣布机制过于僵化——它无法优雅地处理邮件列表、转发或第三方发件人。DMARC 最终用更灵活的方法解决了同样的问题,ADSP 随之被淘汰。
为什么存在这个协议
DKIM (RFC 6376) 让域名能够对其发出的邮件进行签名,但它没有告诉接收方当邮件缺少有效签名时应该做什么。没有政策层,接收方无法判断来自 bank.example.com 的未签名邮件是否合法(也许其出站路径并不总是签名)或欺诈(钓鱼者冒充银行)。
ADSP 是首次尝试填补这一空白。它让域名所有者发布 DNS 记录声明其签名实践:
- "unknown" — 域名可能会也可能不会签名所有邮件(如果不存在 ADSP 记录则为默认值)。
-
"all" — 域名使用作者签名签名所有邮件(DKIM
d=与From:域相匹配)。 - "discardable" — 域名签名所有邮件,应丢弃未签名的邮件。
发布于 2009 年 8 月,ADSP 的采用率有限,2013 年 11 月被 RFC 5863 转移为"历史"状态。其后继者 DMARC 解决了 ADSP 的缺陷,并成为标准的电子邮件身份验证政策机制。
工作原理
DNS 查询
ADSP 记录在 _adsp._domainkey.<domain> 处发布为 DNS TXT 记录。当接收方收到 From: 标头为 alice@example.com 的邮件时,它会查询:
_adsp._domainkey.example.com. IN TXT "dkim=all"
政策值
| 政策 | DNS 记录 | 含义 |
|---|---|---|
| Unknown |
dkim=unknown(或无记录) |
域名可能签名部分或全部邮件。对未签名邮件没有声明。 |
| All | dkim=all |
来自此域名的所有邮件均使用作者签名进行签名。未签名邮件可疑但不一定是伪造。 |
| Discardable | dkim=discardable |
所有邮件均签名。未签名邮件应静默丢弃。这是最严格的政策。 |
作者签名与第三方签名
ADSP 中的一个关键概念是作者签名 — 一种 DKIM 签名,其中 DKIM-Signature 标头中的 d= 标签与 From: 标头中的域名完全匹配。这比通用 DKIM 更严格,后者允许任何域名签名:
; 作者签名(ADSP 关心这个)
From: alice@example.com
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; ...
; d=example.com 与 From 域相匹配 → 作者签名:是
; 第三方签名(ADSP 忽略这个)
From: alice@example.com
DKIM-Signature: v=1; a=rsa-sha256; d=esp-provider.com; ...
; d=esp-provider.com 与 From 域不匹配 → 作者签名:否
这意味着如果您使用 ESP(电子邮件服务提供商)以 d=esp.com 而不是 d=yourdomain.com 进行邮件签名,ADSP 会将这些邮件视为未签名 — 即使它们具有完全有效的 DKIM 签名。
验证流程
- 接收邮件并提取
From:标头域名。 - 查找
d=与 From 域相匹配的 DKIM-Signature 标头(作者签名)。 - 如果存在有效的作者签名且验证通过,正常接受邮件。
- 如果不存在有效的作者签名,查询 DNS 获取
_adsp._domainkey.<domain>。 - 应用政策:
unknown表示不采取行动,all表示怀疑处理,discardable表示拒绝或静默丢弃。
关键技术细节
ADSP 失败的原因
ADSP 的设计存在根本局限性,阻止了有意义的采用:
-
邮件列表破坏作者签名。当邮件列表修改邮件(添加页脚、更改主题)时,DKIM 签名会破坏。在
dkim=discardable下,接收方会丢弃邮件。使用邮件列表的域名永远无法安全部署严格政策。 -
没有子域名覆盖。ADSP 仅适用于查询的确切域名。没有办法为
*.example.com设置政策,而无需为每个子域名单独发布记录。 - 没有报告机制。ADSP 没有办法让接收方向域名所有者发送身份验证结果反馈。没有数据,域名所有者无法在部署更严格的政策之前评估其影响。
-
没有渐进式推出。仅有的选项是"unknown"(无保护)、"all"(模糊)或"discardable"(核选项)。没有等效于 DMARC 的百分比(
pct=)标签用于渐进式执行。 - 没有考虑 SPF。ADSP 仅评估 DKIM。通过 SPF 但缺少 DKIM 的邮件被视为与完全未验证的伪造相同。
ADSP 与 DMARC:关键差异
| 功能 | ADSP (RFC 5617) | DMARC (RFC 7489) |
|---|---|---|
| 身份验证方法 | 仅 DKIM | DKIM 或 SPF(任一可通过) |
| 对齐模式 | 仅严格(From 精确匹配) | 严格或宽松(允许子域名) |
| 子域名政策 | 无 |
sp= 标签用于子域名 |
| 汇总报告 | 无 |
rua= 标签用于日报 XML 报告 |
| 取证报告 | 无 |
ruf= 标签用于按失败报告 |
| 渐进式推出 | 无 |
pct= 标签将政策应用于邮件百分比 |
| 政策操作 | unknown、all、discardable | none、quarantine、reject |
| DNS 位置 | _adsp._domainkey.<d> |
_dmarc.<d> |
| 状态 | 历史(2013 年停用) | 活跃,广泛部署 |
DNS 记录详解
; ADSP 记录语法
_adsp._domainkey.example.com. IN TXT "dkim=discardable"
; 唯一识别的标签是"dkim=",其值为:
; unknown - 默认,无声明
; all - 所有邮件均经作者签名
; discardable - 所有邮件均签名;未签名则丢弃
常见错误
- 在 2024 年及以后部署 ADSP。ADSP 是历史记录。没有主流接收方检查 ADSP 记录。如果您仍发布了一个,它没有任何作用。改为部署 DMARC。
-
将 ADSP 与 DMARC 混淆。两者都是 DKIM 的政策机制,但 DMARC 是当前标准。如果您遇到引用
_adsp._domainkey记录的文档,它已过时。 -
在 DNS 中留下过期的 ADSP 记录。旧的 ADSP 记录占用 DNS 查询时间并在调试时增加困惑。如果您在区域中发现
_adsp._domainkeyTXT 记录,请清理它们。 - 认为"discardable"是最强大的可能政策。即使在其巅峰时期,ADSP 的"discardable"也只被极少数接收方尊重。采用率太低,无法对抵御欺骗提供有意义的保护。
-
没有吸取教训。ADSP 失败是因为它是全有或全无的,没有可见性。DMARC 成功是因为它添加了报告(
rua=)和渐进式推出(pct=)。在执行前始终先进行监控。
可递送性影响
- 没有当前影响。现代接收方不检查 ADSP 记录。发布一个对投递、身份验证结果或垃圾邮件过滤没有影响。
- DMARC 部署的历史教训。ADSP 的失败直接影响了 DMARC 的设计。使 DMARC 可部署的报告和渐进式推出功能存在是因为 ADSP 证明了没有反馈的二元政策是不切实际的。
- 过期记录作为信号。DNS 中的旧 ADSP 记录是域名电子邮件基础设施没有得到积极维护的轻微信号。虽然没有接收方因此进行处罚,但在身份验证调试期间可能导致困惑。
-
迁移到 DMARC。如果您的域名有 ADSP 记录但没有 DMARC 记录,立即部署 DMARC。从
p=none和rua=报告地址开始以获得可见性,然后根据数据收紧政策。