JSON 正規化會將語義等價的 JSON 資料轉換為一個確定性的位元組序列。這在雜湊、簽署、比較,或將 JSON 用作識別鍵之前非常有用。一般的 JSON 序列化並不足夠:物件成員順序、空白、跳脫方式和數字格式可能不同,而資料模型並未改變。
JSON 正規化方案 #
RFC 8785 定義了 JSON 正規化方案(JCS)。它採用 ECMAScript JSON 序列化規則,按照 UTF-16 程式碼單元的字典序序列化物件屬性,不輸出無意義的空白,並要求輸入為有效的 I-JSON。
應正規化解析後的資料,而不是任意文字。應拒絕重複的物件成員名稱、不受支援的數值(例如 NaN 和 infinity),以及無法在所選資料模型中表示的輸入。數值精度十分重要:將每個數字都解析為二進位浮點值的實作,可能會在不易察覺的情況下改變大整數。
雜湊與簽署 #
應對正規化後的 UTF-8 位元組進行簽署,而不是對原始 JSON 文字進行簽署:
- 根據定義的設定檔驗證並解析 JSON;
- 使用符合標準的正規化器對其進行序列化;
- 對這些精確的位元組進行雜湊或簽署;以及
- 在簽署中記錄正規化演算法和簽署演算法。
正規化不會使不受信任的 JSON 變得安全,不會證明結構描述有效性,也不會取代經過驗證的傳輸。它只會為約定的資料值提供穩定的位元組。產生者和驗證者必須使用相同的正規化規則。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)