CSPRNG は暗号用途の決定論的生成器です。擬似乱数は弱さを意味しません。明示した前提の下で攻撃者に耐える性質が重要です。アルゴリズム、エントロピー源、出力を使うコードは別々に評価します。
RFC 4086 は暗号学的に強い列と通常のシミュレーション用生成器を区別します。出力の一部が分かっても残りを推測できてはいけません。統計検定だけでは証明できず、予測可能な seed は複雑に見える出力も弱めます。 [RFC 4086 — Cryptographically strong sequences]
NIST SP 800-90A Rev. 1 は Hash_DRBG、HMAC_DRBG、CTR_DRBG を規定します。CSPRNG という名称は全実装の認証ではありません。ハッシュ関数名だけでなく、機構、パラメーター、エントロピーの取得方法を確認します。 [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
Backtracking resistance は現在の状態が漏れた後も過去の出力を守ります。Prediction resistance は将来の出力に関係し、NIST SP 800-90A は新鮮なエントロピーの有効な投入と結び付けます。一方が他方や単なる次の呼び出しによる回復を自動的に意味するわけではありません。 [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]
OpenSSL 3.5 では RAND_bytes() と RAND_priv_bytes() は成功時に 1、その他の失敗時に 0、未対応の方式では -1 を返します。エントロピー源が故障すれば生成を拒否する場合があります。アプリは未確認のバッファーを使わず、結果を確認する必要があります。 [OpenSSL 3.5 — RAND_bytes return values and errors]
libsodium randombytes_buf_deterministic() は同じ seed から同じ列を生成し、テストなどに利用できます。仮想マシンのスナップショットを復元すると状態と出力が繰り返される場合があります。テストの再現性はコピー間で秘密が独立している保証ではありません。 [libsodium — Random data and deterministic testing]
libsodium randombytes_uniform() は単純な剰余演算の偏りを避け、上限未満から一様に選びます。良質な入力バイトだけでは目的範囲への正しい対応付けは保証されません。鍵は使用するアルゴリズムの規則にも従う必要があります。 [libsodium — Random data and deterministic testing]
RFC 8439 は同じ鍵で nonce を繰り返さないことを要求します。ランダムな外見だけでは一意性は証明できません。一方 RFC 6979 は署名値 k の決定論的生成を説明します。したがって CSPRNG はプロトコル規則の万能な代替ではありません。 [RFC 8439 — Nonce uniqueness] [RFC 6979 — Deterministic signing]
ライブラリーのバージョン、機構、初期化、エラー、状態の復元や複製後の動作を記録します。OpenSSL と libsodium の文書が説明するのは特定の関数であり、任意のウォレットの安全性ではありません。良質な生成も後のバックアップ漏えいは防げません。 [OpenSSL 3.5 — RAND_bytes return values and errors] [libsodium — Random data and deterministic testing]
理解を深めるには、この項目とあわせて次もお読みください Cryptographic Entropy, Random Number Generator, Deterministic RNG, Seed Generation. 次の項目からも参照されています Dice Roll Entropy, Cryptographic Entropy, Random Number Generator, Deterministic RNG.