
乱数の仕組み - 疑似乱数(PRNG)と暗号論的乱数(CSPRNG)を実装して確かめる
約73分
コンピュータが乱数を作る仕組みを、動くコードと実測値で解説します。線形合同法の下位ビットが周期2で交互に並ぶこと、RANDUの3点組が15枚の平面にしか乗らないこと、Mersenne Twisterの624語の出力から内部状態を復元して以降10万個の出力を完全に予測できることを実際に走らせて確かめます。V8のソースからMath.random()がxorshift128+で2の53乗通りの値を返すことを読み、ECMAScript仕様が品質を規定していないことを確認し、getrandom(2)とLinuxカーネルのChaCha20ベースCSPRNG、RDRANDとRDSEEDの違いを一次ソースで整理。sortによるシャッフルの71%の偏り、モジュロバイアス、棄却法での直し方まで実測しました。