ハードウェアRNG徹底解説:TRNG/PRNG/CSPRNGの違いからエントロピー評価・検査基準・実装ベストプラクティスまで
はじめに — ハードウェアRNGとは何か
ハードウェアRNG(Hardware Random Number Generator、ハードウェア乱数生成器)は、物理現象に基づいて真の乱数(真性乱数、True Random Number)を生成する装置です。暗号鍵の生成、セッションID、トークン、シミュレーションなど、セキュリティや可用性が求められる領域で利用されます。ソフトウェアによる擬似乱数(PRNG/CSPRNG)と組み合わせて使うことが一般的で、ハードウェアが提供する「エントロピー(真の乱雑性)」を元にシードを与えたり、直接乱数を供給したりします。
TRNGとPRNG/CSPRNGの違い
- TRNG(True RNG): 量子揺らぎ、熱雑音、電子ノイズ、光子検出などの物理現象を直接利用して得られる乱数。予測が困難で、理論的には高いエントロピーを提供する。
- PRNG(擬似乱数生成器): 数学的アルゴリズムで擬似的に生成する。初期シードが同一なら出力が同じになるため、真の乱数とは異なる。
- CSPRNG(暗号学的に安全なPRNG): 暗号用途で安全に使えるよう設計されたPRNG。シードが高エントロピーなら安全に長時間の乱数を生成できる。
ハードウェアRNGの主な物理原理と実装方式
TRNGにはさまざまな物理現象を利用した実装があり、代表的なものを以下に示します。
- 熱雑音(Johnson–Nyquist noise)/半導体雑音:抵抗やトランジスタの熱運動に起因する微小電圧ノイズを増幅してサンプリングする方式。回路の設計と増幅段での偏り対策が重要。
- アバランシェ雑音(Zenerダイオード等):逆バイアス時のブレークダウンで発生するノイズを利用する例。
- リングオシレータベース(RO):複数のリングオシレータの位相ジッタや周波数差をサンプリングして乱数を得る。FPGAやASICで広く使われるが、電源や温度の影響を受けやすい。
- フリップフロップのメタステイビリティ:クロック境界での決定不能状態を利用する方法。高速かつ回路面積が小さい利点がある。
- 光子検出(量子乱数生成器、QRNG):単一光子検出器やビームスプリッタを利用し、量子力学的な確率性そのものを利用する。ID Quantiqueなどの製品が商用化されている。
- 放射性崩壊の検出:放射性同位体の崩壊を検出して得る方法は高品質だが実用面と法規制の面で制約がある。
エントロピー評価と抽出(conditioning)
TRNGの出力が即「安全に使える乱数」になるわけではありません。ノイズ源から得られる生データは偏りや相関を含むことがあるため、エントロピーの評価と適切な抽出処理が必要です。
- エントロピー(最小エントロピー)評価:一連のサンプルがどれだけ予測不可能か、NIST SP800-90Bでは最小エントロピーなど保守的な推定方法を推奨しています。
- コンディショナー(抽出器):ハッシュ関数(SHA系)、AESベースの抽出、XORやLFSRでは不十分なことが多いため、暗号学的に堅牢な抽出器で歪みを取り除く。NISTやBSIのガイドラインに従うことが望まれます。
- DRBGとの組合せ:TRNGはシードや定期的なリシードのための高品質なエントロピー源として使い、実際の大量の乱数生成はCSPRNG/DRBGに任せるのが一般的です(効率と可管理性のため)。NIST SP800-90A/B/Cに設計指針があります。
評価基準と標準・試験
- NIST SP800-90シリーズ(特に90A、90B、90C): DRBGの推奨、エントロピー源の要求、エントロピー結合の方法を規定。
- NIST SP800-22(Statistical Test Suite, STS): 乱数列に対する統計的検定群。
- BSIのAIS 20/31(旧AIS31): ドイツ連邦情報セキュリティ局(BSI)によるハードウェア乱数評価基準。オンライン健康監視テスト(例:Repetition Count Test、Adaptive Proportion Test)を含む。
- TestU01、Dieharder: 学術的/実務的に広く使われる乱数性検定ツールキット。
実装上の注意点とセキュリティリスク
ハードウェアRNGは強力なエントロピー源になりますが、実装や運用次第では脆弱になります。
- バイアスと相関:増幅回路やサンプリング方法により出力に偏りや相関が入り得ます。定期的に統計検定と健康チェックが必要です。
- サプライチェーンとバックドアのリスク:ハードウェアに組み込まれた乱数生成器に意図的な弱点があると深刻です(歴史的な事例としてDual_EC_DRBG問題などがあり、アルゴリズムや実装の信頼性確認が重要)。
- 電源・温度・老化の影響:TRNGは外的条件に依存しやすく、温度や電源変動、経時変化で出力品質が劣化することがあります。
- 物理的攻撃:EMI注入、レーザー攻撃、電源グリッチ(電圧フリッパ)などで乱数の生成挙動を操作したり低下させたりできる場合があります。
- サイドチャネル:TRNGの内部状態や抽出処理がサイドチャネルを通じて漏洩する可能性があります。
運用上のベストプラクティス
- 多重化(複数ソースの組合せ):複数の独立したエントロピー源を組み合わせることで単一故障点や攻撃に対する耐性を高める。
- コンディショニングとCSPRNGの併用:ハードウェアはエントロピー源/リシード源として使い、実運用の乱数は検証されたCSPRNGに任せる。
- オンライン健康監視:AIS 31やNISTで勧められる連続的な自己検査(繰返し検出、適応比率テストなど)を導入する。
- 定期的な再評価とファームウェア更新:温度や経年変化、攻撃技術の進化に対応するための更新と再評価を行う。
- 透明性と監査:仕様・設計・試験結果を公開し、第三者監査を受けることで信頼性を高める。
- OS/アプリケーションとの連携:Linuxのhwrngフレームワークやrngd、getrandom()/ /dev/random といったOSのエントロピー管理機構と適切に連携させる。
代表的な商用ソリューションとCPU命令
- Intel RDRAND / RDSEED:IntelのCPUに実装されたDRNG命令。RDRANDは生成済み値の取得、RDSEEDはシード用の生エントロピーを取得するための命令として提供されます。Intelは内部設計や自己検査を公開文書で説明しており、第三者監査も行われています。
- AMD、VIAなどのハードウェア RNG:各社が独自のハードウェア乱数生成器を実装しており、専用命令やデバイスドライバで利用できます。
- QRNG製品(ID Quantique等):量子光学を使った高品質乱数生成器が商用化されており、機密性の高い用途で採用されています。
実社会での利用用途
- TLS/SSL鍵・証明書生成、鍵交換
- ワンタイムトークン・ワンタイムパスワード(OTP)
- 暗号ウォレットやシードフレーズ生成
- 乱数が重要なゲーム、ギャンブル、くじ引きシステム
- 科学シミュレーションやモンテカルロ法(ただし再現性が必要なら擬似乱数)
- IoTデバイスの識別子やセキュアブート用の鍵生成
検査ツールとテスト手順
導入後は以下のようなツールで出力を検査し、オンライン健康テストを実装してください。
- NIST STS(SP800-22): 基本的な統計試験。
- Dieharder、TestU01: より高度な検定群。特にTestU01は多彩なバッテリーを提供。
- AIS 31 のオンライン健康テスト実装: 実運用での早期検出に有効。
- NIST SP800-90Bに基づくエントロピー推定: 最小エントロピーを保守的に評価。
まとめ — ハードウェアRNGをどう位置づけるか
ハードウェアRNGは高品質なエントロピー源として暗号システムの根幹を支える重要な要素です。しかし「入れればそれで安全」という単純なものではなく、エントロピーの評価、適切な抽出(conditioning)、継続的な健康監視、複数ソースの冗長化、運用面での監査と更新といった対策が不可欠です。特にIoTや組み込み機器では、低コスト実装ゆえにトラブルが発生しやすく、設計段階からの注意が必要です。商用CPUに実装された命令や外付けのQRNGなど、利用可能な選択肢を理解し、用途に応じて最適な組合せを採ることが肝要です。
参考文献
- NIST SP800-90A: Recommendation for Random Number Generation Using Deterministic Random Bit Generators
- NIST SP800-90B: Recommendation for the Entropy Sources Used for Random Bit Generation
- NIST SP800-90C: Recommendation for Random Bit Generator (RBG) Constructions
- NIST SP800-22: A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications
- BSI AIS 20/31(ドイツ連邦情報セキュリティ局)
- Intel Digital Random Number Generator (DRNG) Software Implementation Guide
- Linux kernel: Hardware Random Number Generator (hwrng) framework
- ID Quantique: Quantum Random Number Generators
- Dual_EC_DRBG(過去の問題事例の概説) — Wikipedia
- Dieharder RNG test suite
- TestU01: A software library in ANSI C for the empirical testing of RNGs


