签名覆盖的是字节,而 XML、JSON 和电子邮件等格式允许同一内容有多种字节编码。规范化方案从中确定唯一的一种:XML-DSig 和 SAML 使用排他 XML 规范化(Exclusive XML Canonicalization);JSON 使用 JSON 规范化方案(JCS,RFC 8785:键按顺序排列、ECMAScript 数字格式、无空白);邮件头和正文使用 DKIM 的 simple 和 relaxed 算法(RFC 6376 §3.4);ASN.1 以 DER 作为规范形式。
每一种规范化都是一个攻击面:签名者和验证者必须以完全相同的方式实现它,应用程序也必须依据规范化后的内容而不是原始输入来处理;XML 签名包装和 DKIM 正文长度手法利用的都是这里的缺口。JWS 和 COSE 等格式直接对实际传输的字节签名(base64url(header).base64url(payload)),从而回避了这个问题,这也是它们更容易正确实现的原因。