483 / 736PRNG

Deterministic RNG

決定論的擬似乱数生成器

同じ手順、初期状態、入力からは同じ結果が得られます。決定論的な生成器では、これは不具合ではなく性質です。安全性を考えるには、秘密の出発点を知らない人にも結果を予測できるかを確認する必要があります。

Deterministic RNG は疑似乱数生成器です。数値を作るたびに新たなランダムな物理現象を測定するのではなく、決まった手順で値を計算します。seed と呼ばれる入力から始め、次の計算に必要な情報である内部状態を保持します。同じ入力で手順全体を繰り返すと、結果を再現できるため、テストに便利です。ただし、暗号学的に安全な生成器には、適切な設計と十分なエントロピー、つまり攻撃者から見た入力の不確かさも必要です。

計算を一時停止し、メモリを保存したと考えてください。同じ地点から再開し、その後も同じ入力を与えれば、同じように処理が進む可能性があります。NIST SP 800-90A はこうした生成器を DRBG として説明しています。アルゴリズム、設定、要求の順序が重要です。新たなエントロピーを補充する reseeding は状態を変えます。そのため、seed が同じだけでは、異なるプログラムの出力が一致するとは限りません。 [1]

単純なシミュレーション用プログラムでも、ランダムに見える数値は作れます。しかし、それだけではウォレットを守れません。RFC 4086 は、統計的なテストに合格する系列でも攻撃者が予測できる場合があると警告しています。暗号学的に強い生成器では、出力の一部が知られても、残りは実用上予測困難であるべきです。「決定論的」という言葉だけでなく、設計と初期データの質、秘密の保持が重要です。 [2]

不具合を調べる際には、同じ状況を正確に再現できると助かります。そこで libsodium の randombytes_buf_deterministic() は、同じ seed に対して同じ系列を返します。開発者は期待する結果を公開し、他の人に確認してもらえます。だからこそ、公開されたテスト用 seed を実際のウォレットには使えません。誰でも同じ「秘密」を計算できてしまうからです。 [3]

BIP32 は似た再現性を鍵の導出に利用します。ただし、一般的な乱数データの生成と同じ手順ではありません。単一の seed から枝分かれした鍵のツリーを作り、導出パスが使用する枝を選びます。同じ seed とパスなら、同じ鍵を取り戻せます。しかし、アドレスをさらに導出しただけで、元の秘密に新たな独立したエントロピーが加わるわけではありません。 [4]

BIP39 の復元用単語列は mnemonic と呼ばれ、入力の一部にすぎません。PBKDF2 は単語列と、任意の追加の秘密である passphrase を組み合わせ、後の導出に使う seed を計算します。単語列が同じでも、passphrase が変われば結果は変わります。同じ鍵を復元するには、元の入力をすべてそろえ、対応する導出方法を使う必要があります。単語列の一致だけでは十分ではありません。 [5]

デジタル署名は、対応する秘密鍵の保有者が取引を承認したことを示します。RFC 6979 は、署名に必要な補助値 k を、その鍵と署名対象のメッセージから計算する方法を説明しています。この段階では毎回新しい乱数値を取得する必要がありません。それでも、最初に鍵を作る際には質のよい乱数が必要です。正しい署名手順でも、初めから推測できた鍵を安全にはできません。 [6]

BIP32 で同じ鍵を復元するのは望ましい動作です。一方、新しいはずの値を意図せず繰り返すのは問題です。仮想マシンのスナップショットは、メモリを含むコンピューターの状態を保存します。libsodium が注意しているように、その復元で生成器の状態や出力まで繰り返す場合があります。環境を複製しても、各コピーが自動的に独立した秘密を作るとは考えられません。 [3] [4]

開発者は結果をテストベクトル、つまり既知の入力と期待する出力の組み合わせと比べます。一致すれば、その例について正しく計算したと分かります。しかし、実機が質のよいエントロピーを得ている証明にはなりません。NIST SP 800-90A も、仕組みと入力への要件を分けて扱います。プログラムの版、設定、エントロピーの補充方法も重要であり、Deterministic RNG という表示だけでウォレットの安全性は判断できません。 [1]

理解を深めるには、この項目とあわせて次もお読みください CSPRNG, Random Number Generator, HD Wallet, Seed Generation. 次の項目からも参照されています CSPRNG, COLDCARD RNG Incident (2026).

DOC · 001NIST SP 800-90A Rev. 1 — State, inputs and reseeding仕様 DOC · 002RFC 4086 — Pseudorandom sequences and unpredictability仕様 DOC · 003libsodium — Deterministic output and VM snapshots文書 DOC · 004BIP32 — Hierarchical deterministic key derivation仕様 DOC · 005BIP39 — Mnemonic and passphrase to seed仕様 DOC · 006RFC 6979 — Deterministic signing and initial key generation仕様
改訂日: 一次資料を優先 · 投資助言ではありません