知識マップ: 疑似乱数と本物の乱数の違いとは - どうやって区別するのかを整理

記事「疑似乱数と本物の乱数の違いとは - どうやって区別するのかを整理」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事は、seedと内部状態から決定論的に数列を作る疑似乱数(PRNG)と、熱雑音などの物理現象をエントロピー源に持つ本物の乱数(NRBG)の違いを整理し、実務で使われる安全な乱数APIの多くが物理エントロピー源でseedしたCSPRNG/DRBGのハイブリッド構成であることを示す。出力の見た目だけでは両者を区別できず、統計検定(NIST SP 800-22)も証明ではなく欠陥検出にとどまるため、区別は生成アルゴリズムやseedの出所といった生成器の構成を確認して行うべきだとする。鍵・トークン・nonce・セッションIDのようなセキュリティ用途では、時刻など予測可能な値でseedするとトークンを推測されアカウント乗っ取りにつながりかねず、BCryptGenRandomや.NETのRandomNumberGenerator、Pythonのsecretsといった OS・言語標準のsecure RNG APIを使うべきだとしている。

疑似乱数と本物の乱数の違いの知識マップ疑似乱数(PRNG)と本物の乱数(NRBG)の違い、実務のCSPRNG/DRBGがエントロピー源とのハイブリッド構成であること、統計検定が証明ではなく欠陥検出にとどまること、予測可能なseedがトークン予測攻撃につながることを示す図。前提とする前提とするで確認できるで確認できる原因になり得る原因になり得る防止する実装を担う利用する利用する利用する利用する推奨される対応用いるのは非推奨推奨される対応用いるのは非推奨疑似乱数(PRNG)本物の乱数(NRBG/TRNG)暗号学的疑似乱数(CSPRNG/DRBG)エントロピー源統計検定(NIST SP 800-22)予測可能なseed(時刻・PIDなど)seed推測攻撃アカウント乗っ取りBCryptGenRandom.NET RandomNumberGeneratorgetrandom()PythonのsecretsモジュールJava SecureRandom鍵・トークン・nonce・セッションIDの生成シミュレーション・テストの再現性セッションID

概念間の関係(全16件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

疑似乱数(PRNG)
seedと内部状態から、決定論的な手順で数列を生成する乱数。同じseedと同じアルゴリズムで同じ回数だけ取り出せば、同じ値列が出る。
本物の乱数(NRBG/TRNG)
熱雑音や発振器のジッタのような物理的な不確定性からエントロピーを取り出す乱数。常にエントロピー源へアクセスし、正常時にはfull entropyの出力を持つとNISTでは説明される。
暗号学的疑似乱数(CSPRNG/DRBG)
ハッシュ関数やブロック暗号を基盤にした、予測困難性を重視する決定論的な乱数生成器。疑似乱数の一種だが、内部状態が分からない前提で出力を予測しにくいように設計される。
予測可能なseed(時刻・PIDなど)
現在時刻やプロセスID、連番程度の、外部から絞り込みやすい値だけでPRNGをseedする実装上の弱点。
seed推測攻撃
予測可能な値でseedされたPRNGに対し、攻撃者がseedの候補範囲を絞り込み、同じアルゴリズムを手元で再現して狙った出力を探し当てる攻撃。
BCryptGenRandom
Windowsネイティブの乱数生成API。既定プロバイダはNIST SP800-90が定めるCTR_DRBGに準拠する。
.NET RandomNumberGenerator
.NETが提供する暗号強度の高い乱数生成APIのクラス。鍵やトークンの生成に使う静的メソッド(GetInt32・GetBytesなど)を持つ。
getrandom()
Linuxが提供する、暗号用途に使える乱数バイトを取得するシステムコール。
Pythonのsecretsモジュール
Pythonでセキュリティ用途の乱数(トークンなど)を安全に生成するための標準ライブラリモジュール。公式ドキュメントは秘密の管理にはrandomより優先して使うよう案内している。
Java SecureRandom
Javaが提供する暗号用途の乱数生成クラス。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。