1 疑似乱数の概説

1.1 定義と位置づけ

疑似乱数(pseudo-random number)とは、決定論的な手続きによって生成され、見かけ上は乱数らしい性質を持つ数列の総称である。計算機は入力が完全に決まれば出力も決まるため、一般に「計算機が作る値」を乱数として扱う場合は、必ず何らかの規則性を含む疑似乱数が中心になる。代表的な利用先は、モンテカルロ法などの確率計算、サンプリング統計推定、ゲームや映像の制御、確率的挙動を伴うシミュレーションである。

1.2 真の乱数との違い

1.2.1 決定論性と再現性

疑似乱数は、アルゴリズムと初期値(シード)が同じなら同じ系列が再現される。これは誤りの追跡や検証の観点では利点にもなる。一方、真の乱数は物理過程などに由来し、一般に決定論的な再現性を保証しない。したがって「乱数らしさ」は観測できる統計的性質で評価され、再現性の有無は用途の要件と関係する。

1.2.2 周期と状態数

有限の状態を持つ生成器では、ある時点で状態が過去のものと一致し、その後は同じ系列が繰り返される。繰り返しの長さは周期と呼ばれ、状態空間の大きさや更新規則に依存する。疑似乱数は周期が十分に長いなら実用上は問題になりにくいが、データ量が増えると周期や内部構造が観測される可能性がある。

1.3 用途と選定の考え方

選定は「必要な品質」と「期待するコスト」を両立させる問題である。例えば、単純なモンテカルロでも分布の歪みが問題になり得るため、統計的性質の確認が必要になる。ゲームや視覚表現では完全性よりも演出的な好みや速度が優先されることがあるが、サンプリングを伴う場合は偏り操作性公平性に影響する。加えて、暗号用途では予測耐性が必須であり、通常の疑似乱数生成器では要件を満たさない場合があるため、目的ごとにカテゴリを分けて判断する。

2 生成方式の分類

2.1 決定論的アルゴリズム

2.1.1 線形合同

線形合同法(LCG)は古典的な方式であり、状態を一定の線形関係で更新し、その結果から出力を得る。計算が軽く実装も容易だが、低次ビットの規則性や相関が強く現れることが知られている。現代の用途では、品質要件が高い場面ではそのまま使うのではなく、改善版や別方式の採用が検討されることが多い。

2.1.2 線形フィードバックシフトレジスタ

線形フィードバックシフトレジスタ(LFSR)は、ビット列をシフトし、特定のビットを用いて次の入力を作る方式である。理論的な性質が比較的扱いやすく、実装効率も高い。一方、線形構造を持つため観測データから内部状態が推定され得るなど、安全性の面では課題が残りやすい。用途が計算機シミュレーション中心であれば問題にならない場合もあるが、用途が限定される傾向がある。

2.1.3 メルセンヌ・ツイスター

メルセンヌ・ツイスターは、広い周期と良好な統計的挙動を目指して設計された疑似乱数生成器として知られる。多くの実装で長い周期を持ち、一般的な統計テストでも比較的良好とされることが多い。生成速度や実装の互換性、初期化の考え方など、運用面も含めて選択されることが多い。

2.2 状態空間モデル

2.2.1 状態と遷移

疑似乱数生成器は、内部状態を変数として、その状態を更新する写像(遷移規則)として捉えられる。出力は多くの場合、更新後の状態の一部を関数として取り出したものになる。この枠組みを用いると、周期の発生や、ある状態から見た将来の決定性が整理しやすい。

2.2.2 周期長の評価

周期長は、状態空間の探索から求めることもあるが、一般には実測や理論解析を組み合わせる。期待周期は理論上の目安として与えられ得るが、実運用では初期化の取り方やサンプリングの区間が効く。特に大規模な試行回数を想定する場合、生成器が持つ周期をデータ量に対して十分大きく見積もることが重要になる。

2.3 暗号学的安全性を重視した手法

2.3.1 CSPRNGの考え方

暗号学的に安全な疑似乱数生成器(CSPRNG)は、統計的な乱数らしさに加えて、内部状態や将来出力の推測が困難であることを目標とする。予測可能性が低いこと、出力観測だけで系列全体を再現しにくいことが要件になる。設計は一般に、攻撃者が観測した出力から内部の不確実性を推し量れないように工夫される。

2.3.2 予測耐性とスリープ要素

予測耐性は「過去の出力が与えられたときに次を推測できるか」という観点で評価される。さらに、初期化の弱さや相関の残存を避けるために、外部の不確実性を取り込みやすい構成や、生成過程に非線形性・拡散性を持たせる工夫が採られることがある。実務では、入力として与えるエントロピーの質と量が、とくに初期段階の強度に直結する点に注意が向けられる。

3 品質評価とテスト

3.1 統計的性質

3.1.1 一様性

一様性は、出力が指定した範囲に均等に分布する度合いを指す。区間を切り出したときの頻度が理論値と整合するか、また極端な値が過不足なく出ているかが検討対象になる。疑似乱数では、生成器の内部構造に由来する偏りが特定のビットや変換後の値に現れることがある。

3.1.2 独立性の近似

完全な独立性は決定論的生成では成立しにくいが、近似として扱えるかが焦点になる。隣接出力や小さな遅延を隔てた出力同士の関係が、理想的な乱数系列と比べて十分弱いかを確認する。近似が悪い場合、サンプリング誤差が偏ることがある。

3.1.3 相関と分布の歪み

相関は、複数サンプル間の結びつきがどの程度残っているかを表す。特定の次元で点が格子状に並ぶといった形で観測されることがあり、分布推定の精度や、サンプリングの効率に影響する。歪みは単純な一様性チェックだけでは見落とされやすいため、複数のテストを組み合わせて総合的に判断する。

3.2 周期性と再現性

3.2.1 期待周期と実測周期

理論上の周期が長くても、実装の初期化条件や利用形態によって実測上の繰り返しが早まることがある。実測周期は、一定間隔で状態が一致したか、出力列が再現されたかを用いて推定する。実データ量が増えるほど検証の価値が上がり、特にストリーミング生成では確認が重要になる。

3.2.2 シード依存性

生成器の性質はシードによって体感が変わる場合がある。ある初期化では周期が短くなる、偏りが強くなる、先頭部分の品質が劣化するなどが起こり得る。したがって、単一シードで合格しても十分とは限らず、実運用を想定したシードの範囲での検証が望ましい。

3.3 代表的なテスト手法

3.3.1 モンテカルロ適用時の安定性

モンテカルロでは、乱数生成器の偏りが推定値の系統誤差や分散に影響する。テストとしては、同じ計算条件で複数のシードを用いたときの推定結果の安定性を見る方法がある。分布の形状推定や収束挙動の比較も有効であり、統計テストの合否よりも「目的関数への影響」を直接評価する姿勢が実務的になる。

3.3.2 検定・テストスイート

統計検定では、乱数らしさを複数の観点から数値化し、合格条件を設定する。代表的なものは、ビットパターンの規則性、頻度の偏り、分布の一致、連続性など多面的であることが多い。テストスイートは個々の指標が互いを補うため、単発の検定に頼らない設計が推奨される。

4 実装と運用の実務

4.1 シード生成と管理

4.1.1 シードの出所

シードは生成器の性格を大きく左右するため、出所の設計が重要になる。シミュレーション用途では、時刻や乱数ライブラリが供給する値を使うことで実用上足りる場合があるが、大量の実行や再現性の要件がある場合は管理方法が問われる。暗号寄りの用途では、予測困難性を担保するようなエントロピー源が求められる。

4.1.2 秘密管理と再現用シード

再現性が必要な領域では、生成器の初期値を保存しておくことで同じ結果を再現できる。研究開発や検証ではこの利点が大きい。一方で、暗号用途や安全性が絡む場合は、シードや内部状態が漏洩すると攻撃の足場になるため、秘匿性の扱いを厳格にする必要がある。目的に応じて、保存する粒度とアクセス権を分けて考えることが実務の要点になる。

4.2 実行環境による差

4.2.1 異なるプラットフォームでの結果

同一アルゴリズムでも、実装の差やライブラリの挙動によって系列が変わることがある。言語仕様、標準ライブラリ、最適化方針の違いが影響するため、移植性が必要なプロジェクトでは「どの実装を使うか」を仕様に含めるのが望ましい。再現性を重視する場合、バージョン管理も重要になる。

4.2.2 浮動小数点変換の注意点

疑似乱数生成器の出力は整数として作られ、その後に実数へ変換されることが多い。浮動小数点への変換で丸めやスケーリングの違いが生じると、分布が微妙に変化することがある。特に範囲変換や一様乱数から任意分布への変換を行う場合、変換式の選び方が品質と再現性に関わるため、変換手順を明確に定義する必要がある。

4.3 計算効率と並列化

4.3.1 スループットとレイテンシ

乱数生成は計算全体のボトルネックになり得る。そこでスループット(単位時間あたりの生成量)とレイテンシ(生成に要する時間)を指標として評価する。生成器によっては高品質ゆえに計算コストが増え、全体性能とのトレードオフが生じる。用途要件に応じて、品質と速度のバランスを選び直すのが実務的である。

4.3.2 並列生成時の設計

並列環境では、同時に生成するために複数の系列を用いることが多い。その際、系列が独立に近くなるように初期化を行う、あるいはストリームを分割して重なりを避ける工夫が必要になる。単純に乱数生成器を共有すると競合や順序依存が生じ、再現性や統計品質に悪影響が出る場合があるため、設計の方針を先に定めることが重要になる。

4.4 よくある誤用

4.4.1 乱数をそのまま暗号に使う問題

統計的に見栄えが良い疑似乱数を、そのまま鍵生成や認証に用いると安全性が崩れることがある。暗号では、攻撃者が観測した出力から推測できないことが中心要件になるため、通常の方式では予測耐性が不足している可能性が高い。暗号関連の用途には、CSPRNGや標準化された構成を利用するのが原則となる。

4.4.2 有害なパラメータ選定

生成器のパラメータや変換手順を不適切に選ぶと、品質が低下しやすい。例えば、周期が短くなる初期化、低次ビットの扱い、範囲変換で生じる偏りなどが典型例である。さらに、並列化に伴う系列の取り扱いを誤ると、相関が強まったり、想定外の重複が発生する。結果として、見逃しやすい統計的問題が後から顕在化するため、初期の設計段階でテストと仕様化を行うことが求められる。