はじめに
暗号技術において「ランダム性」は安全性の土台である。
どれほど強力な暗号アルゴリズムを用いても、乱数生成が弱ければシステム全体は簡単に破られてしまう。
本記事では、ランダム数生成器(Random Number Generator, RNG)の種類を整理し、それぞれの特徴・用途・セキュリティ上の位置づけを解説する。
真の乱数生成器(TRNG: True Random Number Generator)
真の乱数生成器(TRNG)は、物理的に予測不可能な自然現象を利用して乱数を生成する。
代表的なエントロピー源には以下がある。
- 熱雑音(Thermal Noise)
- 電子回路の揺らぎ
- クロックジッタ
- 放射性崩壊
これらは人為的に制御・再現できないため、TRNGの出力は非決定的かつ再現不可能である。
TRNGは主に、以下のような極めて重要な暗号処理で使用される。
- RSA・ECC などの秘密鍵生成
- 認証局(CA)のルート鍵生成
- ハードウェアセキュリティモジュール(HSM)
- CSPRNG の初期シード生成
TRNGの基本的な仕組み
TRNGの一般的な処理フローは次の通りである。
- 物理エントロピー源からノイズを取得
- 偏りを除去するためのノイズ整形(ホワイトニング)
- 非決定的変換を経て乱数を生成
この構造により、生成された乱数は事前予測・事後再現のどちらも不可能となる。
TRNGの課題
- 専用ハードウェアが必要
- 生成速度が遅い
- 大量生成には不向き
そのため、TRNGは「乱数そのもの」よりも安全な初期シードの供給源として使われることが多い。
擬似乱数生成器(PRNG: Pseudorandom Number Generator)
擬似乱数生成器(PRNG)は、数学的アルゴリズムによって乱数を生成する。
PRNGは初期値(シード)を入力として乱数列を生成するが、重要な特徴として次が挙げられる。
PRNGは決定論的である
つまり、同じシードを与えると、常に同じ乱数列が生成される。
PRNGの利点は以下の通りである。
- 高速
- ソフトウェア実装が容易
- 大量の乱数生成が可能
一方で、シードや内部状態が推測・漏洩すると、過去・未来の乱数がすべて予測可能になる。
PRNGは用途に応じて、以下の2種類に分類される。
統計的PRNG(Statistical PRNG)
統計的PRNGは、生成される乱数が統計的にランダムに見えることを目的として設計されている。
主な用途は以下の通り。
- 数値シミュレーション
- モンテカルロ法
- ゲーム
- 統計解析
これらの分野では「見た目のランダム性」や「分布の正しさ」が重要であり、予測耐性は要求されない。
しかし、統計的PRNGは本質的に決定論的であるため、
- シードが分かれば再現可能
- 内部状態の推測が容易
という理由から、暗号用途では使用してはならない。
暗号学的に安全なPRNG(CSPRNG)
CSPRNG(Cryptographically Secure PRNG)は、暗号用途専用に設計されたPRNGである。
CSPRNGは以下の性質を満たす必要がある。
- 出力の一部が漏れても次の値を予測できない
- 内部状態の復元が計算量的に不可能
- 過去・未来の出力が相互に推測できない
そのため、CSPRNGは次のようなセキュリティ上重要な要素に使用される。
- 暗号鍵
- セッショントークン
- Cookie・CSRFトークン
- Nonce・IV
- TLSなどの暗号プロトコル
統計的PRNGと比べると処理コストは高いが、
暗号分野では「遅いが安全」が正解である。
まとめ
| 種類 | 特徴 | 主な用途 |
|---|---|---|
| TRNG | 物理現象に基づく完全非決定性 | 鍵生成・エントロピー源 |
| 統計的PRNG | 高速・再現可能 | シミュレーション・ゲーム |
| CSPRNG | 予測困難・耐攻撃性 | 暗号・認証・セキュリティ |