シークレットキージェネレーター
openssl rand なしで、ブラウザで直接作るランダムキー・シークレット
値はこのブラウザの中だけで作られます。
ブラウザの crypto.getRandomValues() で生成し、サーバーには送信せず、保存も記録もしません。アドレスバー(URL)やブラウザのストレージにも残さないため、このページを閉じると値は消えます。コピーした値の保管は利用者の責任です。
鍵の強度を決めるのは文字数ではなくバイト数です。48バイトは384ビットの乱数で、それを Base64 で書くと64文字になります。64文字の文字列を見て「64バイトの鍵」と呼ぶと実際より強く見えてしまうため、このツールは常に両方の数値を併記します。
同じ48バイトを形式ごとに書くと
| 形式 | 48バイトのときの文字数 | 使用される文字 |
|---|---|---|
| Base64 | 64文字 | A-Z a-z 0-9 + / |
| Hex | 96文字 | 0-9 a-f |
| Base64URL | 64文字 | A-Z a-z 0-9 - _ |
Base64 は3バイトを4文字で表します。そのため、バイト数が3の倍数のときだけパディング(=)なしでちょうど割り切れます。48は3の倍数なので64文字きっかりになり、32バイトのように3の倍数でない場合は末尾に = が付きます。
| 用途 | 推奨の長さ | 推奨の形式 |
|---|---|---|
| セッションシークレット・Cookie 署名鍵 | 32バイト | Base64 |
| JWT 署名鍵(HS256) | 32バイト | Base64URL |
| API キー・Webhook 検証トークン | 32バイト | Base64URL |
| AES-256 鍵 | 32バイト | Hex |
| 余裕を持たせたいとき(既定値) | 48バイト | Base64 |
32バイト(256ビット)を超えると、総当たりで当てることは現実的に不可能になります。それより長くしても大半は余裕にすぎず、実質的な強度の差はありません。長さを伸ばすよりも、鍵をどこにどう保管するかに時間を使うほうが有効です。
サーバーが鍵を生成して送り返すと、その値がサーバーのアクセスログや中間プロキシ、エラー追跡ツールに残る可能性があります。一度でも残れば、その鍵はもう秘密ではありません。このツールはブラウザで生成し、ネットワークに一切流さない方式を選びました。
乱数は crypto.getRandomValues() から取得します。OS が提供する暗号学的に安全な乱数源のため、次の値を予測できません。Math.random() は予測可能で鍵の生成に使ってはならず、このツールでは使用していません。
自分で確かめたい場合は、開発者ツールのネットワークタブを開いたまま「新しく生成」を押してみてください。リクエストは一切発生しません。このページを保存してインターネット接続なしで開いても、同じように動作します。
