KeyGenerator.io

JWT シークレット生成ツール

HS256・HS384・HS512 用の HMAC 署名鍵をブラウザ内で生成。通信なし、記録なし、送信なし。

0 ビットのエントロピー

鍵長
エンコード

スペース キーで再生成、C キーでコピー。シークレットは端末上の crypto.getRandomValues で生成し、このページは外部リソースを一切読み込みません。

このシークレットの作り方

HS256・HS384・HS512 で署名されたトークンは、署名に使ったものと同じシークレットで検証されます。これはパスワードではありません。誰も入力せず、誰も覚える必要がなく、読み上げられる必要もありません。環境変数やシークレットマネージャーに置かれるランダムなバイト列であり、その役目は推測不可能であることだけです。

ここでのバイト列はブラウザの暗号論的擬似乱数生成器である crypto.getRandomValues から直接取得し、16進数または Base64 として出力しています。タイムスタンプもカウンターも Math.random も経路上に一切ありません。256ビットを選べば 32 バイト、384ビットなら 48 バイト、512ビットなら 64 バイト —— 長さはアルゴリズムが使うハッシュに対応します。

すべてお使いの端末内で完結します。読み込み後に通信は一切行わないため、画面上のシークレットはこれまでどこにも存在せず、どこにも送られません。再読み込みすれば完全に消えます。

よくある質問

JWT シークレットはどのくらいの長さが必要ですか?

署名に使うアルゴリズムのハッシュ出力と同じ長さ以上です。HS256 なら 32 バイト(256ビット)、HS384 なら 48 バイト、HS512 なら 64 バイト。HMAC はブロック長を超える鍵をハッシュして縮めるため、200 バイトにしても 64 バイトより実質的に強くはなりません。危険なのは、これより短くすることです。

16進数と Base64 ではどちらが安全ですか?

同じです。同一のランダムバイト列の書き方が違うだけで、32 バイトは 16進数で 64 文字、Base64 なら約 44 文字、強度は変わりません。ライブラリが期待する形式を選んでください。設定ファイルやシェルスクリプトを経由するなら、0-9 と a-f しか含まない16進数のほうが安全です。

Base64URL はどんなときに使いますか?

Base64URL は + と / を - と _ に置き換え、パディングを省くため、URL やクエリ文字列、ファイル名にそのまま入れてもエスケープが要りません。それ以外の場面では標準の Base64 で十分です。JWT 自体は Base64URL でエンコードされますが、それはトークンの話であり、署名に使うシークレットの話ではありません。

パスワードやパスフレーズをそのまま使えますか?

使えますが、HMAC 署名が破られる最も一般的な原因がこれです。覚えやすい文字列が持つエントロピーは、その長さから受ける印象よりはるかに低くなります。有効なトークンを一つ手に入れた攻撃者は、ハードウェアの限界速度で候補をオフラインで試せます。回数制限は何の助けにもなりません。ランダムなバイト列を使ってください。

ウェブページでシークレットを生成しても安全ですか?

そのページが値を外部に送れるかどうかがすべてで、それは信じるのではなく確認できます。開発者ツールの「ネットワーク」タブを開いたまま何度でも生成してみてください。このページは読み込み後、一切リクエストを発行しません。背後にサーバー処理は存在しません。そもそも存在しようがない作りです。

シークレットはどこに保管すべきですか?

環境変数、あるいはシークレットマネージャーがあればそちらへ。リポジトリには絶対に置かないでください。git にコミットされたシークレットは、後から削除しても履歴に残り、履歴はクローンされ、フォークされ、バックアップされます。一度コミットしてしまった場合、確実な対処は交換することだけです。

どのくらいの頻度で更新すべきですか?

実際に守れる周期で、そして漏洩が疑われた時点で直ちに。現実的な障害は、更新すると旧シークレットで署名した全トークンが無効になることです。ログアウトさせずに切り替えたいシステムでは、移行期間中は二つを併用するのが一般的です —— 署名は新しい鍵で行い、検証は新旧どちらも受け付け、その後に旧鍵を廃止します。

RS256 や ES256 にも使えますか?

使えません。これらは非対称方式で、秘密鍵で署名し対応する公開鍵で検証するため、必要なのは共有シークレットではなく鍵ペアです。このページが生成するのは HS 系が使う対称鍵の HMAC シークレットです。発行者と検証者が別の組織であれば、むしろ非対称方式が適しています。

生成したシークレットはそちらから見えますか?

見えません。見る手段が存在しません。このページはスタイルもスクリプトも埋め込んだ 1 枚の静的 HTML で、ブラウザに届いた後は何も読み込まず、何も送信しません。解析ツールもフォントも外部スクリプトもなく、記録を取りうるサーバーもありません。