481 / 691RNG

Random Number Generator

乱数生成器

RNG は不確実性を利用可能な値へ変える経路の一部です。秘密鍵では、出力がランダムに見えることだけでなく、予測困難性、初期化、障害処理が重要です。

Random Number Generator は目的に応じた値を供給します。暗号用途では、明示された前提の下で攻撃者が実用的に予測できないことが必要です。物理的なエントロピー源、決定論的生成器、OS のインターフェースは別の層であり、RNG という名称だけでは各層の性質は決まりません。

エントロピー源が不確実性を供給し、調整処理が入力を整え、決定論的生成器が内部状態から出力を作ります。NIST SP 800-90C は 90A の機構と 90B に基づく源を組み合わせます。そのため、返された各ビットが新たな物理測定に対応するとは限りません。 [NIST SP 800-90C — RBG constructions]

統計検定を通過した列でも、攻撃者が既に知っている場合があります。RFC 4086 は時計、シリアル番号、予測可能な初期値に注意を促しています。シミュレーション用生成器を、名称や出力分布だけで暗号用途に適すると判断できません。 [RFC 4086 — Unpredictability and weak inputs]

NIST SP 800-90B はノイズ源、調整処理、起動時と動作中の健全性試験を評価します。これらは源の故障を検出するもので、ウォレット全体の安全性を証明しません。障害処理は設計の一部です。故障経路の出力を無通知で検証済みの乱数として扱ってはいけません。 [NIST SP 800-90B — Source health and failure handling]

Linux getrandom() は通常、urandom 源の初期化を待ちます。GRND_NONBLOCK では待たずに EAGAIN を返す場合があります。初期化後の urandom への 256 バイト以下の要求は、シグナルで中断されず全量を読み取る保証があります。より大きな要求にはこの保証がなく、アプリは戻り状態を扱う必要があります。 [Linux getrandom(2) — Initialization and return behavior]

Web Crypto getRandomValues() は対応する整数配列を暗号学的に強い値で満たし、65536 バイトを超えると QuotaExceededError を送出します。仕様は鍵作成に generateKey() を推奨しています。API の存在はページの信頼性を証明せず、秘密にアクセスできるコードから秘密を守るものでもありません。 [W3C Web Crypto — getRandomValues and key generation]

BIP39 は最初に 128~256 ビットの初期エントロピーと計算したチェックサムを符号化します。その後、単語と任意の passphrase から PBKDF2 で 512 ビットの seed を導出します。チェックサムも長い導出出力も予測可能な入力を改善しません。単語を自分で選ぶことは乱数生成の代わりになりません。 [BIP39 — Initial entropy and mnemonic-to-seed derivation]

決定論的生成器には状態の保護と正しい初期化が必要です。NIST SP 800-90A はインスタンス化、生成、再シード、インスタンスの破棄を区別します。状態漏えい後の回復には適切な機構と攻撃者に未知の新しいエントロピーが必要で、単にもう一度呼び出すだけでは一般に回復を保証できません。 [NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseeding]

評価では、対象バージョンの源、アルゴリズム、初期化、インターフェース、エラー時の動作を特定する必要があります。ハードウェアやオフラインという表示だけでは、この連鎖は裏付けられません。引用した標準は生成要件を説明しますが、特定のウォレットの認証でも、そのバックアップの後の漏えいを防ぐものでもありません。 [NIST SP 800-90C — RBG constructions] [RFC 4086 — Unpredictability and weak inputs]

理解を深めるには、この項目とあわせて次もお読みください Cryptographic Entropy, CSPRNG, Seed Generation, Brute Force Search Space. 次の項目からも参照されています CSPRNG, Deterministic RNG, True Random Number Generator, Seed Generation.

DOC · 001NIST SP 800-90C — RBG constructions仕様 ↗DOC · 002RFC 4086 — Unpredictability and weak inputs仕様 ↗DOC · 003NIST SP 800-90B — Source health and failure handling仕様 ↗DOC · 004Linux getrandom(2) — Initialization and return behavior文書 ↗DOC · 005W3C Web Crypto — getRandomValues and key generation仕様 ↗DOC · 006BIP39 — Initial entropy and mnemonic-to-seed derivation仕様 ↗DOC · 007NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseeding仕様 ↗
一次資料を優先 · 投資助言ではありません