トークン & API キージェネレーター
Web Crypto API を使った暗号学的に安全なトークン。UUID、Hex、Base64 のベアラートークン、プレフィックス付き API キーに対応。
RFC 4122 v4 の 128 ビット識別子で、うち 122 ビットがランダムです。データベースの主キー、リクエスト ID、相関トークンの標準的な選択肢です。
エントロピー 122 ビット · ブラウザ内で生成、サーバーには送信されません
なぜ Math.random() を使わないのか?
Math.random() は疑似乱数ジェネレーターであり、その出力は予測可能でセキュリティトークンには不適切です。このツールは crypto.getRandomValues() を使用しており、TLS や SSH キー生成を支えるのと同じ API です。
トークンタイプの説明
UUID v4 はデータベース ID や相関トークンの標準です。Hex 文字列はセッショントークンやノンスに適しています。Base64 は API トークンにコンパクトです。プレフィックス付きの API キー(sk_ や vlt_ など)を使うと、漏洩した認証情報を識別してローテーションしやすくなります。
トークンはどのくらいの長さにすべきか
アクセスを保護するものであれば 128 ビットのエントロピーが下限であり、これは NIST SP 800-63B がランダム生成されたシークレットに求める水準です。Hex なら 32 文字、Base64 なら 22 文字、あるいは UUID v4 が 1 つ分に相当します。256 ビットを超えてもブルートフォース耐性は増えず、ログ量とヘッダーサイズが増えるだけです。文字種より長さが重要で、32 文字の Hex トークンと 22 文字の Base64 トークンは推測しにくさが同じです。
ベアラートークン、アクセストークン、API キー
これらの名前は認証情報の「使われ方」を表すもので、生成方法の違いではありません。ベアラートークンは提示するだけでアクセスが認められるトークンで、だからこそ HTTP の Authorization ヘッダーはそれをそのまま運びます。アクセストークンは有効期間が短いベアラートークンで、通常は OAuth フローで発行されます。API キーは人ではなくサービスに対して発行される長寿命のベアラートークンです。生成時点ではこの 3 つはすべて同じもの、すなわち不透明で高エントロピーなランダム文字列です。前の 2 つには Hex か Base64 を、スキャン可能なプレフィックスが欲しいときは API キーモードを使ってください。
API キーにプレフィックスを付ける理由
GitHub、Stripe、OpenAI、Slack がキーにプレフィックス(ghp_、sk_live_、xoxb_)を付けているのには理由があります。シークレットスキャナーが前後の文脈なしに、文字列だけで漏洩したキーを認識できるからです。プレフィックス付きのキーを公開リポジトリに push すれば、発行元は数分以内に失効させられます。素の 32 文字の Hex 文字列はコミットハッシュと見分けがつかないため、何にも検知されません。プレフィックスは環境も一目で分かるようにしてくれます。本番用のキーをステージングの設定に貼り付けてしまう事故に対する、最も安価な防御策です。
よくある質問
このトークンは本当にランダムですか?
はい。すべてのトークンは crypto.getRandomValues() から生成されます。これはブラウザの暗号学的に安全な乱数生成器で、OS のエントロピープールを種としています。TLS のセッション鍵を生成するのと同じプリミティブです。多くのオンラインジェネレーターが今も使っている Math.random() は予測可能な疑似乱数生成器であり、セキュリティトークンの生成に使ってはいけません。
生成したトークンはサーバーに送信されますか?
いいえ。生成は Web Crypto API を使ってブラウザ内で完結します。ネットワークタブを開いてトークンを生成してみてください。リクエストは一切発生しません。記録も保存も送信もされません。その後トークンを共有する場合も、ページから何かが出ていく前にブラウザ内で暗号化されます。
API キーはどのくらいの長さにすべきですか?
128 ビットのエントロピーです。このツールの API キーモードが生成するのはまさにそれで、プレフィックスに 32 文字の 16 進数が続きます。実質的に推測不可能で、Stripe、GitHub、AWS が発行しているものと同水準です。それ以上にするのは、特定のコンプライアンス要件で求められる場合だけで十分です。
UUID v4 とランダムな Hex トークンの違いは?
UUID v4 は形式が固定されたランダムトークンです。36 文字、ハイフン 4 つ、バージョンとバリアントに 6 ビットが予約され、ランダムなのは 122 ビットです。データベースの uuid カラムなど、その形式を前提とする相手がいる場合に使ってください。単にシークレットが必要で形式を自由に決められるなら、Hex か Base64 を使いましょう。同じ強度でより短くなります。
複数のトークンをまとめて生成できますか?
はい。個数を 5、10、25 に設定すると、それぞれ独立に生成されます。「すべてコピー」は 1 行に 1 つずつコピーします。これは多くのシードスクリプト、.env ファイル、パスワードマネージャーが一括インポートで受け付ける形式です。
同僚にトークンを安全に送るには?
Slack、メール、チケットは避けてください。これらはコピーを無期限に残すため、後からそのチャンネルにアクセスできる人は誰でも認証情報にアクセスできてしまいます。「安全に共有する」を使って、暗号化された自己消滅リンクの向こうにトークンを置きましょう。ブラウザ内で暗号化され、鍵は URL のフラグメントに入って当社のサーバーには決して送られず、シークレットは読まれた時点または有効期限で破棄されます。
トークンを安全に共有したいですか?
トークンを Slack やメールに貼り付けないでください。受信者だけが開ける暗号化された自己消滅リンクで送信しましょう。