暗号学的に安全な擬似乱数生成器を使う
CSPRNG は真の乱数と区別がつかない出力を生成します。正しい API と、セキュリティ文脈で Math.random() が禁止される理由を学びましょう。
- 1
CSPRNG はハードウェアソース(熱ノイズ、キーストロークのタイミング、ディスクシーク時間)からエントロピーを集め、真の乱数と計算上区別できない出力を生成します。ブラウザーでは crypto.getRandomValues() を、Node.js では crypto.randomBytes() を使ってください。Math.random() は決して使わないでください。シミュレーション向けの PRNG であり、セキュリティ向けではありません。
- 2 ランダムバイトジェネレーター →
暗号学的に安全なランダムバイトを生成します。このツールはプラットフォームの CSPRNG を使います。必要なバイト数を指定してください(256 ビット鍵には 32、128 ビット鍵には 16、GCM nonce には 12)。
- 3 パスワードジェネレーター →
CSPRNG でランダムパスワードを生成します。長さと文字セットを指定してください。高セキュリティのパスワードには、大文字小文字、数字、記号を含む 16 文字以上を使ってください。
- 4
エントロピーの確認:CSPRNG の良さはエントロピー源で決まります。起動時、OS のエントロピープールは少ないことがあります。Node.js とブラウザーは、十分なエントロピーが集まるまでブロックすることで対処します。組み込みデバイスや VM では、ハードウェアのエントロピー源(例:RDRAND、/dev/hwrng)の追加を検討してください。
よくある質問
- Math.random() はなぜ安全でないのですか?
- Math.random() は、予測可能な値をシードとした決定論的アルゴリズム(例:xorshift)を使います。十分な出力があれば、攻撃者は内部状態を再構築し、将来のすべての出力を予測できます。シミュレーションでの速度のために設計されており、セキュリティのための予測不可能性はありません。
- エントロピーとは何ですか?
- エントロピーは予測不可能性の尺度です。CSPRNG が安全な出力を生成するには、高エントロピーの入力(ハードウェアノイズから)が必要です。作成直後の VM ではエントロピープールが小さいことがあります。haveged や virtio-rng で補ってください。低エントロピーは予測可能な「ランダム」出力につながります。
関連ツール
ランダムバイトジェネレーター
Generate cryptographically secure random bytes or integers。無料、プライベート、100%クライアントサイド。 ツール
パスワードジェネレーター
Generate strong, cryptographically secure random passwords。無料、プライベート、100%クライアントサイド。 ツール
ハッシュ計算ツール
Compute MD5, SHA-1, SHA-256, or SHA-512 hashes with hex or Base64 output。無料、プライベート、100%クライアントサイド。 ツール