ランダムトークン生成ツールとは?

Web Crypto APIを使用して、16進数、Base64、英数字、URL安全、数字のみ、記号入り、または完全にカスタムの文字セットでランダムトークンを生成します。APIキー、セッショントークン、CSRFトークン、数字のPINやワンタイムコード、パスワードリセットリンクなど、暗号学的な安全性が必要な場面にお使いください。

バイトはすべて crypto.getRandomValues から取得します。ブラウザが TLS 鍵を作るのと同じ供給源です。16・32・48・64・128 バイトから選べ、指定したフォーマットでのエントロピー(ビット数)がパネルに即時表示されます。最大 20 個まで一度に生成でき、.txt で一括ダウンロードして配布できます。

使い方

  1. トークン形式(16進数、Base64、英数字、URL安全、数字のみ、記号入り、または独自のカスタム文字)と希望する長さを選択してください。
  2. 生成ボタンをクリックすると、暗号学的に安全なランダムトークンが即座に作成されます。
  3. トークンをコピーするか、一括で複数のトークンを同時に生成できます。

使用するタイミング

  • API キー、Webhook 署名秘密鍵、サービス間認証トークンを発行するとき。
  • パスワード再設定リンク、メール確認トークン、ワンタイムログイン URL を作るとき。
  • テストフィクスチャに、互いに重複しない現実的なランダム ID を入れたいとき。

結果

APIキー用に256ビットの16進数トークン(64文字)を生成します:「a3f8b2c1d4e5f6...」。crypto.getRandomValuesによる完全なエントロピーを備えています。

よくある質問

API キーには実際どれくらいのエントロピーが必要ですか?
長期発行する鍵の実用下限は 128 ビットで、総当たりはほぼ不可能になります。署名や暗号演算用は 32 バイト(256 ビット)を推奨。短時間で失効するセッショントークンは 16 バイトで十分です。
base64 と URL-Safe の違いは何ですか?
base64 は + と / とパディング = を使うため、URL やファイル名に貼ると壊れます。URL-Safe はそれぞれを - と _ に置き換え、パディングも省きます。クエリ文字列・パス・HTTP ヘッダに載るトークンは URL-Safe を選んでください。
同じバイト数でも、英数字フォーマットのエントロピーが hex より低いのはなぜ?
hex と base64 は 1 バイトあたり 8 ビットをそのまま文字に詰めます。英数字は剰余で 62 文字に割り当てるため、1 バイトあたり約 2 ビット失われ、わずかな偏りも出ます。ID 用途には十分でも、暗号鍵としては不向きです。
Web Crypto が使えない場合、Math.random() を代用してもよいですか?
だめです。Math.random() は予測可能な疑似乱数で、出力をいくつか観測すれば後続を再現できます。Web Crypto は 2014 年以降のすべてのブラウザと近年の Node.js で使えます。無ければそもそも秘密を生成しないでください。
同じトークンがアプリ内で重複することはありますか?
16 バイトのトークンなら、衝突が起き始めるのは 2^64 個発行した辺り(誕生日のパラドックスの境界)です。数十億規模までは統計的にゼロとみなしてよく、重複チェックを入れる必要はありません。

関連ツール