首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DKIM规范中关于头哈希的一个歧义部分

DKIM规范中关于头哈希的一个歧义部分
EN

Stack Overflow用户
提问于 2021-12-19 00:33:38
回答 1查看 57关注 0票数 0

我正试图根据DKIM规范签署电子邮件信息。我正在阅读RFC 6376,并且看到了创建签名的相对直接的方式,但是关于DKIM-签名头的标记b有一个问题。

据我所知,它的值应该是哈希的base64编码签名,它是根据选定的消息头计算的,包括DKIM-签名,但是没有标记b的值。如果它是正确的,那么我在这里理解RFC会有一些困难:

报头字段必须显示在消息正文之后的哈希算法中,而不是与其余的报头字段一起显示。

这里,RFC谈到了DKIM-签名头。案文取自"3.7.计算消息散列“一章。

如果我正确地理解了它,那么这意味着我必须计算一个块的散列,其中包括完整的消息体,并将DKIM-签名头附加到它的末尾(变体1)。但是,正如我在其他来源中所读到的,包括这里的答案,似乎(因为在其他来源中没有明确的算法),DKIM-签名头应该被附加到消息头列表的末尾,这些消息头是为散列选择的(变体2)。那么歧义是:哪个变体是正确的?

最后,在计算了两个散列之后,我应该签署第二个散列(正确的变体消歧后的头的散列),就像看起来应该工作一样,还是应该只对选定的(和规范化的)头的列表签名?

常识告诉我,变式2应该是实际的选择,签名应该应用于第二个散列,但我很怀疑。

EN

回答 1

Stack Overflow用户

发布于 2021-12-20 19:54:09

RFC 6376中签名算法的伪码是错误的.它在Errata 5252中得到了修正

代码语言:javascript
复制
   body-hash    =  hash-alg (canon-body, l-param)
   data-hash    =  hash-alg (h-headers, D-SIG)
   signature    =  sig-alg (d-domain, selector, data-hash)

这意味着首先对规范化的消息体进行散列,直到l参数中指定的长度,然后将该哈希包含在DKIM-Signature标头字段的bh标记中。然后,使用h标记中指定的标头字段启动一个新哈希,并根据c标记进行规范化(不存在的标头字段包含一个空字符串,以便在以后添加这些标头字段将使DKIM签名无效),然后是DKIM-Signature标头字段,您将在不使用b标记的情况下添加该字段。得到的散列就是您签名的那个。这意味着你的第二个变体是正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70408208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档