JSON 规范化

最后更新: 2021-10-16 10:01:04 +0800 +0800
原文以英文撰写。您正在阅读AI翻译版本。

JSON 规范化会将语义等价的 JSON 数据转换为一个确定性的字节序列。这在哈希、签名、比较,或将 JSON 用作身份键之前非常有用。普通的 JSON 序列化并不足够:对象成员顺序、空白、转义方式和数字格式可能不同,而数据模型并未发生变化。

JSON 规范化方案 #

RFC 8785 定义了 JSON 规范化方案(JCS)。它采用 ECMAScript JSON 序列化规则,按照 UTF-16 代码单元的字典序序列化对象属性,不输出无意义的空白,并要求输入为有效的 I-JSON。

应规范化解析后的数据,而不是任意文本。应拒绝重复的对象成员名称、不受支持的数值(例如 NaN 和 infinity),以及无法在所选数据模型中表示的输入。数值精度十分重要:将每个数字都解析为二进制浮点值的实现,可能会在不易察觉的情况下改变大整数。

哈希与签名 #

应对规范化后的 UTF-8 字节进行签名,而不是对原始 JSON 文本进行签名:

  1. 根据定义的配置文件验证并解析 JSON;
  2. 使用符合标准的规范化器对其进行序列化;
  3. 对这些精确的字节进行哈希或签名;以及
  4. 在签名中记录规范化算法和签名算法。

规范化不会使不受信任的 JSON 变得安全,不会证明模式有效性,也不会替代经过身份验证的传输。它只为约定的数据值提供稳定的字节。生产者和验证者必须使用相同的规范化规则。

评论

在 GitHub 上阅读或评论(发表评论需要登录)