[ DKIM ]

简单轻松的DKIM规范化:哪些变化可以生存

识别签名允许的规范化,在保留的字节上重现它并找到仍处于其保护范围之外的更改。

由EmailAuth研究团队提供

[ 要点 ]

  • 分别读取 header/body 算法;缺少 c 默认为 simple/simple。
  • 宽松的规则规范了指定的空白,而不是实质性的消息编辑。
  • 空体处理不同:简单散列 CRLF;宽松散列零八位组。
在此页面上

DKIM 规范化 定义如何为散列和签名验证准备消息字节。它允许特定的标准化;它不会使任意消息编辑变得无害。在更改发送者的配置之前诊断实际签名的设置和原始内容。

分别读取两个设置

签名的 c= 标签名称标头和主体按该顺序规范化。例如, 轻松/简单 对标头使用宽松的处理,对正文使用简单的处理。 RFC 6376 §3.5 当标签不存在时,将 simple/simple 定义为默认值;如果只说明头部算法,则主体算法默认为简单。

记录 c=, 签名头列表 h=, 这 正文哈希 bh= 以及任何身体长度限制 l= 旁边 d= 和 s=。主体哈希不匹配、标头签名不匹配和丢失的公钥需要进行不同的调查。不要从邮件客户端显示的内容推断规范化设置。

了解允许的标准化

简单的标头规范化保留了呈现给算法的标头字段。宽松的标头处理会小写字段名称、展开连续行并标准化指定的空白。它不会小写字段值或授权更改主题的单词。

简单的正文规范化会删除末尾的空行并确保最终所需的 CRLF,同时保留其他正文内容。宽松的正文处理还可以减少行内的空格和制表符运行,并在处理尾随空行之前删除行尾的空格。它不会组合任意行、重写 URL、删除MIME边界或忽略添加的文本。 RFC 6376 §3.4 指定确切的顺序和边缘情况,包括空体的不同处理。

使用一致的实现来进行精确测试。在验证之前更改行结尾的手工编辑近似值可能会导致其应该调查的故障。

应用受控示例

考虑合成车身线条 立即付款<SP><SP><SP><CRLF>,其中括号中的标签表示字节而不是文字文本。放松的身体规范化产生 立即付款<SP><CRLF> 对于那条线。简单的正文处理保留了内部和尾部空格。因此,这种仅包含空白的更改在两种主体算法下可能会产生不同的结果。

现在在签名消息后添加一个新句子。宽松的处理不会放弃实质性的添加。假设全身覆盖并且测试中没有其他变化,则规范化的主体会有所不同,其预期的主体散列也会有所不同。不能仅仅因为发件人使用relaxed/relaxed 就将页脚规则声明为安全。

该示例解释了预期的标准化,而不是捕获的事件或执行的测试。在生产中,考虑MIME编码、签名标头和签名的实际长度处理。两条消息可以呈现相同,但它们的签名字节不同。

在改变策略之前找到转型

保留原始的原始消息,然后获取可疑修饰符之前和之后的授权比较样本。使用副本进行分析。比较具有和不具有可疑页脚、链接重写或重新编码功能的其他等效测试,保持传输路线相同。

如果支持的体系结构允许,请在适当的最终签名阶段之前执行所需的内容更改。如果中间人重新签约,评估其新身份并 结盟。不要仅仅为了使一项诊断测试绿色而禁用保护网关处理或削弱域策略。

作为 RFC 6376 §8.2 警告,身体长度 l= limit 改变了规范化主体的覆盖范围。它不是签名后修改的通用解决方法,并且可能会将附加内容保留在签名部分之外。检查安全影响和提供商支持,而不是添加它来抑制故障。

证明字节和路由级别的修复

保留原始故障、规范化设置、受控比较以及从纠正的路线收到的结果。如果更改规范化是选择支持的补救措施,请确认实际的修改操作落在其允许的转换范围内。新的宽松签名可以容忍一些空白更改,同时仍然容易受到原始实质性重写的影响。仅当观察到的更改与验证结果一致时才关闭问题。

检查空体边缘情况

在下面 RFC 6376 §3.4.3,在简单的主体规范化中,一个完全空的或缺失的主体变成一个 CRLF 或两个八位字节。在下面 RFC 6376 §3.4.4,宽松的主体规范化为空主体生成零个八位字节。在这两种情况下对 CRLF 进行哈希处理的工具将不符合标准,即使这两条消息都显示为空白。这是一个规范示例,而不是完整的DKIM验证或执行的邮件测试。

DKIM公钥语法:识别截断或格式错误的DNS值 · 多个DKIM签名:找到对齐的传递签名.

[ 外卖 ]

分别读取 header/body 算法;缺少 c 默认为 simple/simple。宽松的规则规范了指定的空白,而不是实质性的消息编辑。空体处理不同:简单散列 CRLF;宽松散列零八位组。

[ 按角色 ]

这对您意味着什么

选择您的角色以执行后续实际步骤。

IT/邮件管理员

根据实际算法比较字节。

渲染的文本不足以解释正文哈希失败。

后续步骤

  1. 保留原始消息。
  2. 测试前记录 c、h 和 l。
  3. 重复受影响的网关转换。

CISO / SecOps

避免削弱覆盖范围来隐藏缺陷。

正文长度异常会更改签名保护的内容。

后续步骤

  1. 检查重新签名身份。
  2. 明确批准任何承保例外情况。
  3. 避免未经审查就禁用保护性处理。

创始人/非技术人员

确定加工顺序。

商业免责声明可能是合法的,但在错误的阶段插入时仍然会破坏签名。

后续步骤

  1. 分配网关和发件人所有者。
  2. 测试面向客户的路线。
  3. 批准签署边界的责任。

[ 常见问题解答 ]

常见问题

c=relaxed/simple是什么意思?

标头使用宽松的规范化,主体使用简单的规范化。

RFC 6376 §3.5

当 c 不存在时,默认值是什么?

RFC 6376将 simple/simple 定义为默认值。

RFC 6376 §3.5

主题文本是否宽松小写?

不。宽松的标头处理小写字段名称,而不是字段值。

RFC 6376 §3.4.2

放松的身体处理会忽略免责声明吗?

不会。添加的实质性页脚超出了普通空白规范化范围,并更改了完全覆盖的正文。

RFC 6376 §3.4.4

视觉上相同的消息可以有不同的哈希值吗?

是的。渲染可以隐藏与DKIM相关的字节、编码、行结束和MIME差异。

RFC 6376 §3.7

简单的主体处理是完全逐字节的吗?

它仍然应用其对尾随空行和最终 CRLF 的定义处理。保留其他正文内容。

RFC 6376 §3.4.3

我应该使用 l 来容忍附加内容吗?

请勿将其用作一般维修。它改变了覆盖范围,并需要特定的支持设计和安全审查。

RFC 6376 §8.2

什么证据表明存在破坏性转变?

保留可疑跳跃周围的原始样本、准确的签名设置以及通过相同路线的受控重复。

[ 来源 ]

来源

  1. RFC 6376

    部分 §1 · §3.4 · §3.4.1 · §3.4.2 · §3.4.3 · §3.4.4 · §3.5 · §3.7 · §6.1.3 · §8.2

[ 词汇表 ]

词汇表

DKIM
使用公钥数据验证的选定消息标头和正文内容上的域关联签名。

RFC 6376 §1

规范化
在DKIM哈希和验证之前定义标头或正文的准备工作。

RFC 6376 §3.4

正文哈希
规范化主体的编码散列,采用适当的长度处理,在 bh 中携带。

RFC 6376 §3.5

选择器
s 值与签名域一起使用来定位公共验证数据。

RFC 6376 §3.5

企业出处

为什么顶级金融机构和政府 退役了他们的电子邮件安全仪表板。

传统的电子邮件身份验证平台会向您出售仪表板并要求您的工程师来完成这项工作。在高风险环境中,手动监督意味着延迟执行、配置漂移和不受监控的影子域。

EmailAuth是代理电子邮件来源平台。 我们的代理人强制执行 p=reject,保持第三方发件人一致并将您的域名移至完整状态 RFC 9989 合规性、新的DMARC标准,以及人机交互审核能力。

政府 大型企业 一级金融机构

SaaS · 专用租赁 · 气隙本地部署 · BYOK 加密

知识库