ハードウェアベースの乱数ジェネレーター(RNG)は、周囲のノイズから乱数を取得します。ソフトウェアベースのジェネレーターは通常、(TrueCryptのように)画面上でマウスを動かすなど、ユーザー入力からこれを取得します。
ソフトウェアベースのジェネレーターよりもハードウェアRNGの安全性(ランダム性)が高いのはなぜですか?
直接回答すると、SWは予測可能または制限されている可能性があるコンピュータアルゴリズムに基づいています。
この比較を読みます ここ 利点と欠点があります。一般に、平均HW RNGは平均SW RNGと比較して優れています。
しかし、HW RNGは「true」と呼ばれ、SW RNG(アルゴリズムに基づいている)は「疑似」と呼ばれますが、ハードウェアRNGが常に優れているとは思いません。
ハードウェアの場合、それはデザインがいかにうまく機能しているか、それが実装にどれだけ進んでいるか、そして他に何が結果に影響を与えることができるかについてすべてです。
ユーザー入力の場合、ユーザーがどれだけうまくランダム化できるかが問題になります。マウス移動ベースのRNGは、ユーザーのスキルに応じて、平均的なハードウェアのRNGに比べて良くも悪くもなります。同様に、ハードウェアRNGは、ハードウェア設計者のスキルに応じて、平均的なマウス移動ベースのRNGよりも優れている場合と悪い場合があります。
ソフトウェアRNGには、入力ノイズによって更新される内部状態があります。この状態も、ジェネレーターから値を取得することによってシャッフルされます。
基本的なハードウェアRNGには内部状態がありません。優れたハードウェアジェネレーターは、ソフトウェアRNGを継続的にシードして、配布の問題を回避し、干渉を回避します(入力ノイズが攻撃の下でランダムになることはありません)。
ソフトウェアRNGの状態がリークするか公開されると、攻撃者が同じ出力を生成できるため、ランダム性は提供されません。このように、リークする可能性のある状態がないため、ハードウェアRNGの方が優れています。たとえば、一部のソフトウェアRNGは、十分なノイズを収集する前に、公開データまたは不十分なデータで初期化された状態になっています。これは、同じ初期状態を共有するVMの問題です(VMでSSHまたはPGPキーを生成しないでください)。一方、基本的なハードウェアジェネレーターは、理論的にはその入力に影響されます。