0Pricing
Cyber Security Academy · 课时

DKIM 签名

使用密码学为消息签名。

DKIM 签名 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

DKIM 提供的功能

DKIM(DomainKeys 标识邮件)会为发出的邮件附加加密签名。接收方可以验证该签名,以确认以下两点:

  • 邮件确实获得了签名域名的授权
  • 签名所覆盖的内容在传输过程中未被修改

SPF 为服务器提供授权,而 DKIM 验证的是邮件本身,并且该签名能够经受转发。

公钥密码学基础

DKIM 依赖非对称密码学。域名所有者持有一对 key:

  • 私有 key会保密存放在发送邮件服务器上,用于签名
  • 公有 key会发布到 DNS 中,供任何人验证

由于只有持有私有 key 的一方才能生成有效签名,因此验证成功即可证明邮件来自合法域名。

签名过程

发送服务器发送邮件时,会根据选定的标头和正文计算签名,然后添加 DKIM-签名标头。

Steps on the sender side:
1. Select headers to sign (From, Subject, Date, ...)
2. Hash the message body
3. Build the DKIM-Signature header with those fields
4. Sign the hash with the private key
5. Attach the signature to the outgoing message

DKIM-签名标头的组成

DKIM-签名标头携带接收方进行验证所需的参数:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  d=company.com;        domain that signed
  s=mail2024;           selector (which key)
  h=from:subject:date;  signed headers
  bh=base64bodyhash;    body hash
  b=base64signature     the signature itself

DNS 中的选择器与公有 key

选择器(s= 标记)会告诉接收方应获取哪个公有 key。该 key 位于一个可预测的 DNS 位置:

Location:  <selector>._domainkey.<domain>

Example DNS TXT record:
mail2024._domainkey.company.com.  IN  TXT \
  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."

  p = the base64-encoded public key

验证过程

收到邮件后,验证服务器会反向执行这一过程:

  • 从 DKIM-签名中读取 d= 域名和 s= 选择器
  • 从 DNS 中的 selector._domainkey.domain 获取公有 key
  • 重新计算正文哈希和标头哈希
  • 使用公有 key 验证签名是否匹配

如果签名有效,DKIM 检查通过。如果邮件被修改,或签名使用了错误的 key,则检查失败。

正文哈希可检测篡改

bh(正文哈希)字段使 DKIM 能够发现篡改。发送方会对正文进行哈希计算,并将该哈希包含在签名数据中。

如果有人在传输过程中修改邮件正文,接收方重新计算的哈希就不会与已签名的 bh 匹配,验证也会失败。DKIM 正是通过这种方式提供完整性,而不仅仅是来源验证。

规范化

传输途中的邮件服务器经常会进行细微且无害的更改,例如重新换行或调整空白。为避免这些更改破坏有效签名,DKIM 使用规范化(c= 标记)。

  • 简单——严格模式;几乎任何更改都会破坏签名
  • 宽松——允许空白和标头大小写发生更改

为了适应多样化的邮件基础设施,大多数部署会使用 relaxed/relaxed,以提高可靠性。

选择器支持 key 轮换

选择器不只是标签,还支持安全的key 轮换。您应定期替换 DKIM key,以便在某个 key 泄露时限制风险。

轮换过程:

  • 使用新的选择器生成一对新的 key(例如 mail2025)
  • 在 DNS 中发布新的公有 key
  • 切换签名方,使其使用新的选择器
  • 将旧选择器保留在 DNS 中,直到传输中的邮件完成投递,然后将其移除

使用新的选择器可以避免出现无法验证签名的空档期。

DKIM 经得住转发

与 SPF 不同,DKIM经得住转发。签名会随邮件一起传递,因此只要已签名的标头和正文未被修改,转发后的邮件仍然可以通过验证。

这恰好弥补了 SPF 的弱点。邮件被转发时,SPF 可能会因为连接 IP 发生变化而失败,但 DKIM 仍然可以通过,从而让 DMARC 接受这封合法邮件。

DKIM 的限制

DKIM 功能强大,但单独使用并不完整:

  • 它能证明某个域名为邮件签名,但不会强制签名域名与可见发件人标头匹配,这正是 DMARC 对齐机制的作用
  • 攻击者可以使用自己的域名对应的有效 DKIM key 为邮件签名
  • 私有 key 泄露后,攻击者可以伪造有效签名,直到该 key 完成轮换并停止使用

DKIM 必须与 DMARC 结合,才能有效防范伪造。

快速检查

请测试您对 DKIM 的理解。

回顾

您已经学会了 DKIM 如何为邮件签名:

  • DKIM会附加加密签名,证明邮件的来源和完整性
  • 服务器上的私有 key用于签名;公有 key会在 DNS 中通过选择器发布
  • 正文哈希可以检测篡改;规范化可以容忍无害的更改
  • 选择器支持安全的key 轮换,并且 DKIM 在 SPF 失败的情况下仍能经得住转发
  • DKIM 仍然需要DMARC 对齐,才能将签名与可见发件人关联起来

接下来,您将使用 DMARC 策略和报告把 SPF 与 DKIM 结合起来。

常见问题解答

「DKIM 签名」课时是免费的吗?

是的 — 「DKIM 签名」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「DKIM 签名」这节课中我会学到什么?

使用密码学为消息签名。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「DKIM 签名」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 电子邮件欺骗的原理
  2. SPF 记录
  3. DKIM 签名
  4. DMARC 策略与报告
← 返回 Cyber Security Academy