Random Number Generator(RNG)は、数値を生成する装置やプログラムです。ウォレットには暗号学的に安全な生成器が必要です。過去の出力や作成時刻を知っていても、攻撃者が現実的な手間で新しい秘密を予測できてはいけません。その安全性はエントロピー源、アルゴリズム、アプリでの使い方に左右されます。ここでいうエントロピーは、攻撃者にとって結果がどれだけ不確かかを表します。
現在時刻だけから秘密を作るウォレットを想像してください。出力が複雑に見えても、作成時刻を知る人が試すべき候補はずっと少なくなります。RFC 4086 は、まさにこうした予測可能な入力に注意を促しています。ゲームやシミュレーションに適した生成器が、鍵にも適しているとは限りません。統計的な分布が良好でも、それだけでは安全性の証明になりません。 [2]
通常は複数の部分が連携します。源が不確実性を供給し、その出力を必要に応じて処理したうえで、暗号学的な決定論的生成器が秘密の内部状態から追加の値を作ります。決定論的とは、内部状態と入力が同じなら結果も同じになるという意味です。そのため、内部状態は秘密にしておく必要があります。アプリはシステムのインターフェースを通じて値を要求します。返すビットごとに新たな物理測定を行う必要はありません。NIST SP 800-90C は、90A の生成器と 90B のエントロピー源を組み合わせる方法を説明しています。 [1]
BIP39では、最初の単語が現れる前にウォレット復元の土台が作られます。生成器が用意するのは、128〜256ビットの初期エントロピーです。ビットは情報の基本単位で、ゼロか一を表します。大切なのは、その並びを攻撃者が予測できないことです。そこに、書き写しの誤りの一部を検出するための短い値であるチェックサムを加え、全体を復元用の単語に変換します。さらに、追加の秘密の文字列であるpassphraseを設定することもできます。PBKDF2という関数は、これらの入力から512ビットのseedを導出します。これはウォレットの鍵を導出するための秘密の出発点です。出力を長くしてもチェックサムを加えても、不足するランダム性は補えません。復元用の単語を自分で選ばないでください。 [6]
装置は、ノイズ源が同じ値を繰り返し始めるような故障を検知する必要があります。そのため NIST SP 800-90B は、起動時と動作中の検査、および検知した故障への対応を求めています。エラーを無視し、出力を検証済みの乱数として扱い続けてはいけません。これらの検査が対象とするのは源であり、ウォレット全体の安全性を保証するものではありません。 [3]
決定論的生成器は、次の結果を計算するために内部状態を保持します。NIST SP 800-90A は、初期化、生成、新しいエントロピーの補充(reseed)、終了を説明しています。状態が漏れた場合、もう一度呼び出すだけでは安全性が戻らないことがあります。適切な仕組みと、攻撃者の知らない新しいエントロピーが必要です。それでも、すでに漏れた鍵を攻撃者の手から取り戻せるわけではありません。 [7]
RNG を自分でプログラムする必要はありません。具体的なウォレットのバージョンについて、生成方法とエラー処理が文書化されているかを確認することが大切です。「ハードウェア」「オフライン」という言葉だけでは証明になりません。源、アルゴリズム、初期化、アプリのインターフェースまで検証する必要があります。正しく作られた秘密でも、後からバックアップを漏らせば保護を失います。 [1] [2]
Linux の getrandom() は、既定では urandom の初期化を待ちます。GRND_NONBLOCK を使うと、待たずに EAGAIN を返す場合があります。初期化後の urandom への要求が 256 バイト以下なら、シグナルで中断されず全量を読み取れる保証があります。それより大きい要求には同じ保証がありません。プログラムは戻り値と実際に受け取ったバイト数を適切に確認する必要があります。 [4]
Web Crypto の getRandomValues() は、対応する整数配列を暗号学的に強い値で埋めます。65536 バイトを超えると QuotaExceededError が発生します。対応アルゴリズムの鍵には仕様が generateKey() を推奨していますが、これは汎用のビットコインウォレット生成機能ではありません。API を正しく使ってもページの信頼性は証明されません。ページのコードが生成された秘密にアクセスできる場合があります。 [5]
理解を深めるには、この項目とあわせて次もお読みください Cryptographic Entropy, CSPRNG, Seed Generation, Brute Force Search Space. 次の項目からも参照されています CSPRNG, Deterministic RNG, True Random Number Generator, Seed Generation.