Cookie の署名と検証
エンコード処理はすべてブラウザ内で完結します。データは送信されません
署名付き Cookie が守るのは改ざんであり盗聴ではありません。値はブラウザー内で平文のままですが、鍵を知るサーバーだけが一致する HMAC を作れます。出力は Express `cookie-signature` の `s:<base64url(値)>.<base64url(HMAC)>` で、HMAC の入力は元の値(UTF-8 バイト)です。検証は選択したアルゴリズムで試し、失敗すると残り 3 つも試して、一致すれば「アルゴリズムの選択違い」と教えます。比較は定数の逐次バイト比較で短絡しません。計算はすべてローカルで、鍵は送信しません。
機能
- HMAC は 4 種類:SHA-256 / SHA-384 / SHA-512 / SHA-1
- Express `cookie-signature` の `s:` 形式で出力
- `openssl dgst -hmac` と照合できる 16 進署名も表示
- 検証は「形式」「鍵・値」「アルゴリズム」の 3 つの原因を区別
- アルゴリズム違いのときは実際に使われたものを明示
- タイミング側信道を避ける定数の逐次バイト比較
- 空の鍵は拒否し、もっともらしい偽署名を出しません
- 1 行ずつコピーすることも、すべてコピーすることもできます
使い方
- 「署名」または「検証」を選びます
- 鍵を入力し、アルゴリズムを選びます
- 署名では Cookie の値、検証では `s:...` 全体を入力します
- 結果と内訳、openssl の対応コマンドがすぐ表示されます
よくある質問
- 署名すると Cookie の中身は隠れますか?
- いいえ。署名は「改変されていない」ことだけを保証し、値は平文のまま利用者や中間者から読めます。機密性には HTTPS が必要で、秘密を直接 Cookie に入れるべきではありません。署名が防ぐのは user=alice を user=admin に書き換えるような偽造です。
- なぜ `===` で署名を比較してはいけないのですか?
- `===` は最初の異なるバイトで返るため、先頭数バイトを当てた場合だけわずかに遅くなります。攻撃者は多数のリクエストでその差を平均化し、1 バイトずつ署名を復元できます。そのため本ツールは全バイトを XOR で累積し短絡しません。
- 鍵はどう保管すべきですか?
- 鍵はこの方式の安全性そのものです。サーバー側だけに置き、十分長くランダムにしてください。フロントエンドに含めたり Cookie と一緒に送ったりしないこと。本ツールは入力した鍵を保存しませんが、Web ページであることに変わりはありません —— 本番の鍵は自分のマシンのコマンドで扱ってください。
関連ツール
HMAC 署名
エンコード秘密鍵とメッセージから HMAC 署名を計算します。空白や日本語、中国語を含む鍵でも Node・Java・Python と一致し、鍵は端末内の計算にだけ使われて送信されません。
Cookie 整形
WebCookie リクエストヘッダーや Set-Cookie レスポンスヘッダーを表に整形し、属性と有効期限を分解、HttpOnly・Secure・SameSite の欠落も提示します。
Cookie を JS に
WebCookie 文字列を、コンソールに貼るだけで使える document.cookie 文またはオブジェクトリテラルに変換します。HttpOnly と Domain は理由付きで省略します。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。