TRNG(ハードウェア乱数生成器)の基礎から実装・評価・運用まで:エントロピ源と規格を軸にした完全ガイド

ハードウェア乱数生成器(TRNG)とは

ハードウェア乱数生成器(True Random Number Generator, TRNG)は、物理現象から得られるランダムなノイズ(エントロピー)を直接取り込み、真の乱数を生成する装置や回路です。ソフトウェア上の疑似乱数生成器(PRNG)は決定論的アルゴリズムであり同じ初期状態(シード)から同じ出力を再現しますが、TRNGは外部の物理事象に起因する非決定論的な振る舞いを利用するため、理論上は予測不能なビット列を提供します。

主なエントロピー源(物理的原理)

  • 熱雑音(Johnson–Nyquistノイズ): 抵抗などの素子が持つ熱起因の電圧ノイズ。
  • ショットノイズ、アバランシェノイズ: 半導体素子(フォトダイオードやダイオードの逆バイアス)で観測される確率的な電流変動。
  • 位相・周波数ジッタ: 発振回路(リングオシレータ、クロック)の周期変動。
  • 光子到着時間の量子揺らぎ: 単一光子検出器を用いる量子乱数生成(QRNG)。
  • 放射性崩壊の到着時間: 高精度に測定可能だが扱いが難しく実用は限定的。
  • SRAM起動状態やメタステーブル状態: 電源投入時の半導体素子の不確定な初期化パターン。

TRNGとPRNG(およびハイブリッド)の違いと組合せ

実運用ではTRNG単独で大量の乱数を直送するのではなく、TRNGをエントロピ源としてPRNG(あるいは準乱数生成器、DRBG)を適切にシードし、性能と安全性を両立するハイブリッド方式が一般的です。TRNGは高品質な真の乱数を供給してシードや再シードを行い、PRNGは効率的に大量の乱数を生成します。CPU内蔵命令(例: IntelのRDRAND/RDSEED)は内部エントロピ源+DRBGを組み合わせた設計である点に注意が必要です(RDRANDはDRBG出力、RDSEEDはより直接的なエントロピ出力を意図)。

ハードウェア乱数生成器のアーキテクチャ(基本構成)

  • エントロピ源(物理センサー): 上述の物理現象を測定。
  • 前処理(サンプリング回路): ノイズを取り出すためのアンプ/フィルタ/ADCなど。
  • ホワイトニング/抽出(コンディショニング): ビット偏りや相関を除去し、真のエントロピーを取り出すための処理(XOR、ハッシュ関数、暗号ブロック関数等)。
  • DRBG(オプション): 抽出したエントロピをシードに使って効率よく乱数を生成。
  • ヘルスモニタ(健全性検査): 出力の突発的変化や故障を検出するための連続チェック。
  • インタフェース: OSやアプリケーションへ提供するためのAPIや命令(例: /dev/random、RNG命令)。

品質評価と規格・試験

TRNGは単に統計テストに合格すれば良いというものではなく、エントロピ量の定量評価、連続障害の検知、設計上の健全性など多面的に検証する必要があります。主要なガイドライン/規格には次のようなものがあります。

  • NIST SP 800-90B: "Recommendation for the Entropy Sources Used for Random Bit Generation"(エントロピ源に関する勧告)。エントロピ推定と設計助言を扱う。
  • NIST SP 800-90A: DRBG(決定的乱数生成器)に関する勧告。TRNGを使う場合のシードやコンディショニングの推奨も含む。
  • FIPS 140-3: 暗号モジュールの認証規格。乱数生成の要件も含まれる。
  • AIS 20/31(ドイツ等で使われる要求): エントロピ源と生成器クラスの評価指針。
  • 統計テスト群: NIST SP 800-22(STS)、Dieharder、TestU01など。これらは出力の統計的性質を評価するために使われる。

統計試験とエントロピ推定

統計試験(例えばNIST STS、Dieharder、TestU01)は出力の偏りや相関を検出するツールですが、"合格"だけでエントロピが十分であるとは限りません。NIST SP 800-90Bはエントロピ源の最小エントロピ推定法を示しており、設計者はソースの最小推定値に基づいて安全性解析を行う必要があります。また、現場ではリアルタイムのヘルスチェック(閾値外れ、連続同値検出、自己相関の変化など)を組み込むことが必須です。

実装上の注意点と攻撃ベクタ

  • バイアス・相関: 前処理が不十分だと出力に偏りが残り予測可能性が増す。
  • 環境依存性: 温度・電源変動・電磁ノイズで挙動が変化する可能性。IoTなど温度変動の大きい環境では特に注意。
  • 故障モード: センサー劣化や接続不良でエントロピ低下が生じうる。恒久的故障を検出するヘルスモニタが必要。
  • サプライチェーン/設計上のバックドア: 2013年の議論のように、設計に意図的な弱点があると安全性が損なわれる(Intel RDRANDに対する疑念が例として挙がった)。信頼できる評価とレビューが重要。
  • 物理的攻撃: 漏洩や外部刺激(強制温度変化、電磁妨害)で挙動を制御・推定される可能性。

実用的な運用上のベストプラクティス

  • TRNGを直接大量消費するのではなく、TRNGを定期的にPRNG/DRBGに再シードするハイブリッド運用。
  • NIST SP 800-90Bなどに従いエントロピ推定とヘルスチェックを実装する。
  • 複数の独立したエントロピ源を組み合わせる(同一故障点による全滅リスクを低減)。
  • 出力に対して暗号学的なコンディショニング(ハッシュ関数やブロック暗号)を適用してホワイトニングを行う。
  • OS側との連携: Linuxの/dev/randomやgetrandom()などにTRNGを正しく混合する。またハードウェア乱数を利用する際は、ドライバやrngデーモン(rngd)の挙動を理解する。
  • 監査と更新: ファームウェアやドライバの更新経路を確保し、サードパーティ評価や認証(FIPS、AIS等)を検討する。

利用分野

  • 暗号鍵生成・シード材料: 秘密鍵・セッションキー生成における根幹。
  • セキュリティプロトコル: TLS/SSH/PKIなどでの鍵生成やノンス。
  • クラウド・仮想化環境: 仮想マシン起動時のエントロピ不足を補う。
  • ギャンブル、宝くじ、ゲーム: 公平性を担保するための乱数源。
  • シミュレーションやモンテカルロ法: 高品質なランダム性が結果の信頼性に直結(ただし同一実験の再現性を必要とする場合はPRNGを利用)。

まとめ(設計者・運用者へのメッセージ)

ハードウェア乱数生成器は、安全な暗号基盤にとって不可欠な要素ですが、「入れれば安全」という単純なものではありません。信頼できる物理ソースの選定、適切なコンディショニング、継続的なヘルスチェック、規格に基づく評価と認証、そして実運用でのフォールバック設計(エントロピ枯渇時の挙動など)が重要です。TRNGは強力なツールですが、その安全性を維持するための工学的配慮と運用体制が同じくらい重要です。

参考文献