2. 术语和定义
本节定义本文档其余部分使用的术语.
DKIM 设计为在 [RFC5598] 定义的 Internet Mail 服务内运行. 基本电子邮件术语取自该规范.
语法描述使用 Augmented BNF (ABNF) [RFC5234].
本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" 和 "OPTIONAL" 应按 [RFC2119] 中的描述解释. 这些词只有在以 ALL UPPERCASE 形式出现时才具有规范性含义.
2.1. Signer
邮件系统中代表某个域对消息进行签名的元素称为 Signer. 它们可以是 MUA (Mail User Agent), MSA (Mail Submission Agent), MTA (Mail Transfer Agent), 或邮件列表扩展器等其他代理. 一般来说, 任何 Signer 都会以某种方式参与把消息注入消息系统的过程. 关键问题是消息必须在离开 Signer 的管理域之前完成签名.
2.2. Verifier
邮件系统中验证签名的元素称为 Verifier. 它们可以是 MTA, Mail Delivery Agent (MDA), 或 MUA. 在大多数情况下, 预期 Verifier 会靠近消息的最终用户 (读者), 或者靠近邮件列表扩展器等消费该消息的代理.
2.3. 身份
个人, 角色或组织. 在 DKIM 语境中, 示例包括作者, 作者所在组织, 处理路径上的 ISP, 独立信任评估服务, 以及邮件列表运营者.
2.4. 标识符
指代某个身份的标签.
2.5. 签名域标识符 (Signing Domain Identifier, SDID)
一个单独的域名, 是 DKIM 的强制性载荷输出, 指代通过签名声明对消息承担某种责任的身份. 它在 Section 3.5 中规定.
2.6. 代理或用户标识符 (Agent or User Identifier, AUID)
一个单独标识符, 指代由 Signing Domain Identifier (SDID) 代表并承担责任的代理或用户. AUID 由一个域名和一个可选 local-part 组成. 该域名与 SDID 使用的域名相同, 或者是其子域. 对于 DKIM 处理, AUID 中的域名部分只有基本域名语义; 任何可能的所有者特定语义都超出 DKIM 范围. 它在 Section 3.5 中规定.
注意, AUID 的可接受值可以通过 public-key record 中的一个标志进行约束. (见 Section 3.6.1.)
2.7. 身份评估器 (Identity Assessor)
邮件系统中消费 DKIM 载荷的元素, 该载荷即负责的 Signing Domain Identifier (SDID). Identity Assessor 专门用于评估所交付的标识符. Identity Assessor 还可以使用其他 DKIM 值和非 DKIM 值 (如果可用), 以提供更通用的消息评估过滤引擎. 但是, 这种附加活动超出本规范范围.
2.8. 空白
空白有三种形式:
-
WSP 表示简单空白, 即空格 (ASCII 0x20) 或制表符 (ASCII 0x09).
-
LWSP 是线性空白, 定义为 WSP 加上属于 header field 折叠的 CRLF (carriage return/line feed) 序列.
-
FWS 是折叠空白. 它允许用 CRLF 分隔的多行通过至少一个空白字符连接在一起.
正式 ABNF 如下 (WSP 和 LWSP 仅供参考):
WSP = SP / HTAB
LWSP = *(WSP / CRLF WSP)
FWS = [*WSP CRLF] 1*WSP
除排除 obs-FWS 外, FWS 的定义与 [RFC5322] 中的定义相同.
2.9. 导入的 ABNF token
以下 token 从所注明的其他 RFC 导入. 这些 RFC 应被视为权威定义.
以下 token 从 [RFC5321] 导入:
- "local-part" (实现警告: 这允许带引号字符串)
- "sub-domain"
以下 token 从 [RFC5322] 导入:
- "field-name" (header field 的名称)
- "dot-atom-text" (电子邮件地址 local-part 中)
以下 token 从 [RFC2045] 导入:
- "qp-section" (一行 quoted-printable 编码文本)
- "hex-octet" (一个 quoted-printable 编码 octet)
INFORMATIVE NOTE: 注意, [RFC2045] 中的 ABNF 不遵循 [RFC5234] 的规则, 因此必须相应解释, 尤其是在大小写折叠方面.
本文未定义的其他 token 从 [RFC5234] 导入. 这些是 SP, HTAB, WSP, ALPHA, DIGIT, CRLF 等直观原语.
2.10. 通用 ABNF token
以下 ABNF token 在本文档其他位置使用:
hyphenated-word = ALPHA [ *(ALPHA / DIGIT / "-") (ALPHA / DIGIT) ]
ALPHADIGITPS = (ALPHA / DIGIT / "+" / "/")
base64string = ALPHADIGITPS *([FWS] ALPHADIGITPS)
[ [FWS] "=" [ [FWS] "=" ] ]
hdr-name = field-name
qp-hdr-value = dkim-quoted-printable ; with "|" encoded
2.11. DKIM-Quoted-Printable
DKIM-Quoted-Printable 编码语法类似于 [RFC2045, Section 6.7] 中描述的 Quoted-Printable: 任意字符都可以编码为 "=" 后跟字母表 "0123456789ABCDEF" 中的两个十六进制数字 (不允许小写字母), 表示该字符的十六进制编码整数值. 所有控制字符 (值 < %x20), 8-bit 字符 (值 > %x7F), 以及字符 DEL (%x7F), SPACE (%x20) 和分号 (";", %x3B) 都 MUST 编码. 注意, 包括 SPACE, CR 和 LF 字符在内的所有空白都 MUST 编码. 编码后, 为避免行过长, MAY 在任意位置添加 FWS; 此类空白不是值的一部分, 并且 MUST 在解码前移除. SHOULD NOT 使用 [RFC2049] 中未列为 "mail-safe" 的字符.
ABNF:
dkim-quoted-printable = *(FWS / hex-octet / dkim-safe-char)
; hex-octet is from RFC2045
dkim-safe-char = %x21-3A / %x3C / %x3E-7E
; '!' - ':', '<', '>' - '~'
INFORMATIVE NOTE: DKIM-Quoted-Printable 与 [RFC2045] 定义的 Quoted-Printable 有若干重要差异:
-
输入文本中的空白 (包括 CR 和 LF 字符) MUST 编码. [RFC2045] 不要求这种编码, 也不允许对属于 CRLF 换行的 CR 或 LF 字符进行编码.
-
编码文本中的空白会被忽略. 这样做是为了允许用 DKIM-Quoted-Printable 编码的 tag 按需换行. 特别地, [RFC2049] 要求输入中的换行表示为物理换行; 此处并非如此.
-
"soft line break" 语法 (即 "=" 作为一行中最后一个非空白字符) 不适用.
-
DKIM-Quoted-Printable 不要求编码后的行不超过 76 个字符 (但取决于编码文本使用的上下文, 可能存在其他要求).