3.5 The DKIM-Signature Header Field (DKIM-Signature 头字段)
3.5. The DKIM-Signature Header Field (DKIM-Signature 头字段)
DKIM-Signature 头字段的签名是一个标准的 [RFC5322] 头字段。像任何 RFC5322 头字段一样, 它由头字段名、冒号、头字段值和尾随的 CRLF 组成。头字段值使用在 Section 3.2 中定义的 tag=value 语法。
签名在 Signer 的 ADMD 出站边界应用, 并在 Verifier 的 ADMD 入站边界进行验证。此头字段的单个邮件可能包含多个 DKIM-Signature 头字段, 由同一个或不同的 Signer 创建 (参见 Section 4)。
以下标签在 DKIM-Signature 头字段中定义:
v= 版本 (纯文本; 推荐, 默认为 "1")。此标签必须是头字段中的第一个, 其值必须为 "1"。此标签必须被解释以确定 DKIM 的版本。未以 "v=" 标签开始或其值不为 "1" 的头字段将被忽略。
a= 用于生成签名的算法 (纯文本; 必需)。签名者和验证者必须支持 "rsa-sha1" 和 "rsa-sha256" 算法。参见 Section 3.3 以了解实施者和验证者必须支持的算法。
b= 签名数据 (base64; 必需)。将签名值转换为 base64 后放置在此标签中。空白在 base64 字符串中是被忽略的, 可用于将长签名值拆分为多个行。
bh= 正文哈希 (body hash) (base64; 必需)。正文哈希是使用 Section 3.7 中定义的哈希算法对规范化正文进行哈希后的值, 使用 base64 编码。
c= 消息规范化算法 (纯文本; 可选, 默认为 "simple/simple")。此标签告诉验证者使用什么规范化算法。参见 Section 3.4。
d= 签名域标识符 (Signing Domain Identifier, SDID) (纯文本; 必需)。签名域声称对此邮件负责。此域的 DNS 记录将被查询以获取验证签名所需的公钥。"d=" 域必须与 "s=" 选择器的域相同或为其父域。
h= 签名的头字段 (纯文本; 必需)。冒号分隔的头字段名称列表, 标识在生成签名时包含在签名中的头字段, 从最底部到最顶部排序。头字段名称必须是小写字母的。
i= 代理或用户标识符 (Agent or User Identifier, AUID) (dkim-quoted-printable; 可选, 默认为 "@d")。代理或用户标识符提供了一个标识符, 用于引用代表 SDID 承担责任的代理或用户。"i=" 域必须与 "d=" 域相同或为其子域。
l= 正文长度计数 (纯文本十进制; 可选, 默认为整个正文)。此标签告诉验证者在计算正文哈希时使用正文的多少字节。
q= 查询方法 (纯文本; 可选, 默认为 "dns/txt")。冒号分隔的查询方法列表, 用于检索公钥。"dns/txt" 方法必须被支持。
s= 选择器 (Selector) (纯文本; 必需)。选择器细分了 "d=" 域的命名空间, 以允许存储多个密钥。参见 Section 3.1 中对此机制的讨论。
t= 签名时间戳 (纯文本十进制; 推荐)。签名创建的时间, 以秒为单位, 从 1970 年 1 月 1 日 00:00:00 UTC 开始计算 (Unix 时间)。
x= 签名过期时间 (纯文本十进制; 推荐)。签名过期的绝对时间, 以秒为单位, 从 1970 年 1 月 1 日 00:00:00 UTC 开始计算。如果存在此标签, 则其值必须大于 "t=" 标签的值。
z= 复制的头字段 (dkim-quoted-printable; 可选)。此标签包含在签名时使用的所选头字段的副本, 使用 DKIM-Quoted-Printable 编码。这允许在转发过程中检测头字段的修改。
ABNF 语法:
sig-tag-list = sig-tag *( ";" sig-tag ) [ ";" ]
sig-tag = [FWS] sig-tag-name [FWS] "=" [FWS]
sig-tag-value [FWS]
sig-tag-name = %x61 / %x62.68 / %x63 / %x64 / %x68 /
%x69 / %x6c / %x71 / %x73 / %x74 /
%x76 / %x78 / %x7a
; a, bh, c, d, h, i, l, q, s, t, v, x, z
sig-tag-value = tval / sig-a-tag-value / sig-b-tag-value /
sig-c-tag-value / sig-d-tag-value /
sig-h-tag-value / sig-i-tag-value /
sig-l-tag-value / sig-q-tag-value /
sig-s-tag-value / sig-t-tag-value /
sig-x-tag-value / sig-z-tag-value