SRI ハッシュ生成

貼り付けたアセットテキストから SHA-256、SHA-384、SHA-512 の SRI 値を生成します。オプションのリソース URL を追加すると、HTML の読み込み用スニペットを生成できます。

ブラウザ内でローカルに実行
このツールの処理はすべてブラウザ内で行われます。KivTools が入力内容をアップロード・保存したり、外部 API に送信したりすることはありません。
アセットソーススクリプトまたはスタイルシートのテキストとしての正確なバイト列を貼り付けます。1 文字でも変わるとハッシュは変化します。
アルゴリズム

SRI 整合性ハッシュの生成方法

ページは貼り付けた JavaScript / CSS のテキストを Web Crypto API で Subresource Integrity の値に変換します。テキストを UTF-8 としてエンコードし、SHA-256・SHA-384・SHA-512 でバイト列をハッシュ化し、integrity 属性が期待する sha256-… 形式の base64 で出力します。

処理はすべてこのタブ内で完結します。テキストは送信されず、作業中にリクエストは発生しません。オプションの URL は、保護したいスクリプトやスタイルシートの隣に貼る HTML スニペットに書かれるだけです。

  1. ファイルの中身をそのままソース欄に貼り付けます。テキストエリアはバイナリを運べないため、読める JavaScript・CSS・JSON・HTML が対象です。
  2. 必要なアルゴリズムにチェックを入れます。多くのファイルは SHA-256 で足ります。複数選ぶと、ブラウザーは対応する中で最も強いものを選びます。
  3. 任意で、ファイルを配信する URL を貼り付けます。これでスニペットが script タグかスタイルシートのタグかが決まります。
  4. 「整合性を生成」を押します。出力にはアルゴリズムごとの 1 行、integrity 属性、タグのスニペットが並びます。
  5. 結果をコピーするか sri-integrity.txt としてダウンロードし、公開前にビルドツールのハッシュと突き合わせます。

ハッシュが対象にする範囲と、このページが確認すること

何をハッシュ化するか

入力はテキストとして読み込まれ TextEncoder でエンコードされるため、ハッシュが対象にするのは欄にある内容そのものの UTF-8 バイト列です。abc を貼り付けると最初の行は sha256-ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= になります。これは printf abc | openssl dgst -sha256 -binary | base64 と同じ値です。各ハッシュは生のダイジェストの base64 にアルゴリズム名とハイフンを付けたもので、integrity 属性が使う形式です。

1 文字変わるだけでハッシュは変わります。改行コードも同じです。CRLF で保存されたファイルや、エディターで折り返し直されたコピーは、配信されるファイルとは別のハッシュになります。本番でハッシュが一致しないときは、画面の文字ではなくバイト列を比べてください。

URL とスニペット

URL 欄は HTML に貼るタグを組み立てるためだけに使います。ページがその URL を取得することはありません。作業中にブラウザーからリクエストは出ません。.css で終わる URL(クエリやフラグメント付きも可)は <link rel="stylesheet" href="…" integrity="…" crossorigin="anonymous"> になり、それ以外は <script src="…"> になります。

受け付けるのは http://、https://、//ホスト、/パス、./パス、../パス で始まる URL だけです。引用符・空白・山かっこは拒否し、属性値は書き出す前にエスケープします。URL が不正なときは壊れたタグをコピーせずメッセージで停止し、直前の結果は画面から消えます。

このページではできないこと

Subresource Integrity はブラウザー側の検査です。スクリプトやスタイルシートは、バイト列が整合性の値と一致するときだけ実行されます。ハッシュが示すのは完全性であり、真正性ではありません。ファイルを差し替えられる相手はハッシュも計算し直せます。入力した URL がそのバイト列を配信しているかは確認しません。ファイルをダウンロードすることもありません。

入力がテキスト欄のため、バイナリファイル、圧縮されたバンドル、UTF-8 以外のエンコーディングのファイルはハッシュ化できません。それらはシェルで同じ digest コマンドを使ってください。URL 欄も検査ではありません。タグを手書きしなくて済むだけです。

最近使ったツール: