メインコンテンツへスキップ

開発者ツール · Developer

JSON正規化(RFC 8785)

JSON入力をRFC 8785(JCS: JSON Canonicalization Scheme)に基づいて正規化し、SHA-256/SHA-384/SHA-512ハッシュを同時生成できるオンラインツールです。オブジェクトキーをUTF-16コードユニット順でソートし、空白を除去して数値を正規化することで、同じJSONデータから常に同一のバイト列を生成します。デジタル署名の作成・検証、APIレスポンスの整合性確認、キャッシュキーの生成など、一貫したJSON比較が必要な場面で活躍します。

最終更新:

使い方

使い方を開く
  1. 1

    JSONを入力

    テキストエリアに正規化したいJSONデータを入力またはペーストします。

  2. 2

    正規化結果を確認

    RFC 8785に基づいて正規化されたJSONと、SHA-256/SHA-384/SHA-512ハッシュが自動的に表示されます。

  3. 3

    結果をコピー

    正規化結果やハッシュ値の「コピー」ボタンをクリックして、クリップボードにコピーできます。

JSON入力

JSONを入力してください

JSON正規化ツールとは

JSON正規化ツールは、JSON Canonicalization Scheme(JCS、RFC 8785)に基づいてJSONデータを決定的に正規化するオンラインツールです。オブジェクトキーのソート、空白の除去、数値の正規化を行い、同じデータから常に同じバイト列を生成します。正規化結果のSHA-256/SHA-384/SHA-512ハッシュも同時に計算されます。JSONはオブジェクトキーの順序や空白の有無によって同一データでも異なるバイト列になることがありますが、JCSによる正規化を行うことで、デジタル署名・HMAC検証・キャッシュキー生成などで一貫した結果を得ることができます。Web Crypto APIを使用してブラウザ内のみで処理されます。

主な機能

  • RFC 8785(JCS)準拠のJSON正規化
  • オブジェクトキーのUTF-16コードユニット順ソート
  • SHA-256/SHA-384/SHA-512ハッシュの同時生成
  • JSON構文エラーの行番号付き表示
  • 正規化結果とハッシュ値の個別コピー機能

こんな場面で役立ちます

  • JSONデータのデジタル署名を作成・検証するとき
  • 異なるシステム間でJSON比較の一貫性を確保したいとき
  • JSONの整合性ハッシュを計算してキャッシュキーにするとき
  • APIレスポンスの正規化を検証したいとき
  • JSONオブジェクトのキー順序に依存しない比較をしたいとき

よくある質問

RFC 8785(JCS)とは何ですか?

RFC 8785は、JSON Canonicalization Scheme(JCS)と呼ばれる、JSONデータの正規化形式を定義する標準規格です。同じデータから常に同一のバイト列を生成するルールを規定しており、デジタル署名やハッシュ比較に使用されます。

通常のJSON.stringify()との違いは何ですか?

JSON.stringify()はオブジェクトキーの順序が挿入順に依存し、空白やフォーマットも引数で変わります。RFC 8785ではキーをUTF-16コードユニット順でソートし、空白を除去し、数値表現を正規化することで、常に同一の出力を保証します。

なぜSHA-256/SHA-384/SHA-512のみ対応ですか?

正規化JSONのハッシュは改ざん検知やデジタル署名に使用されるため、セキュリティ上安全なSHA-2ファミリーのみをサポートしています。MD5やSHA-1は衝突攻撃に脆弱であり、このユースケースには適しません。

入力データはサーバーに送信されますか?

いいえ、処理はブラウザ内のWeb Crypto APIで行われます。入力データが外部に送信されることはありません。

どのような用途で正規化が必要になりますか?

主な用途はJWS(JSON Web Signature)やJWT、JCS(JSON Canonicalization Scheme)を使ったAPIのデジタル署名です。また、JSONオブジェクトのキー順序が実装によって異なる場合でも、正規化によって常に同一のハッシュ値を得られるため、キャッシュ管理やデータ整合性チェックにも活用できます。

JCS(JSON Canonicalization Scheme)とは何ですか?

JCSはJSON Canonicalization Schemeの略称で、RFC 8785として定義されています。JSONを決定的にシリアライズするためのアルゴリズムを規定しており、オブジェクトキーをUTF-16コードユニット順でソートし、空白を除去し、数値を正規化します。その結果、元のJSONのフォーマットや生成したランタイムに関わらず、常に同一のバイト列が得られるため、ハッシュ化やデジタル署名を再現可能な形で行えます。

このツールは公式のRFC 8785仕様に準拠していますか?

はい、本ツールはrfc-editor.orgで公開されているRFC 8785(JCS)アルゴリズムに基づいて実装されています。IETFやrfc-editor.orgの公式製品ではありませんが、有効なJSON入力に対して仕様に準拠した出力を生成するよう設計されています。仕様の正文については rfc-editor.org/rfc/rfc8785 を参照してください。

RFC 8785の実装ライブラリはありますか?

RFC 8785自体が付録(Appendix G)で検証済みのオープンソース実装を挙げています。JavaScript/Node.jsはnpmのcanonicalizeパッケージ、Javaはerdtman/java-json-canonicalization、Go・.NET/C#・Python 3はcyberphone/json-canonicalizationリポジトリの各実装です。ライブラリの出力を本ツールに貼り付ければ、バイト単位で一致するかをブラウザ上で突き合わせられます。

自作実装やライブラリの出力が正しいか検証するには?

同じJSONを本ツールで正規化し、出力をバイト単位で比較するか、表示されるSHA-256ハッシュ同士を比較してください。エッジケースの確認には、RFC 8785の付録にあるテストデータが役立ちます。Appendix BのIEEE 754数値シリアライズ表は指数表記やゼロの扱いを、本文3.2.3節の例は絵文字・制御文字を含むUTF-16キーソートをカバーしています。