Linux起動時に乱数を生成する方法

Linux起動時に乱数を生成する方法

私は現在XINUを使用してオペレーティングシステムコースを受講していますが、オペレーティングシステムで実行されているすべてのプロセスを制御でき、乱数ジェネレータの出力を完全に予測できます。ここコードです。

ユーザー、場所、または時間によって異なる動作をするプロセスが多いため、この簡単なアプローチもデスクトップOSで使用すると真の乱数を生成できることは明らかです。しかし、ユーザー入力がある前の起動時にはどうですか?

Linuxの暗号化乱数ジェネレータははるかに洗練されていますが、それでもユーザー入力に頼っているようです。 OpenSSHは、多くのLinuxシステムで起動時に実行されます。純正構成に非常に近接して運営されている会社がたくさんあると確信しています。同じハードウェア、ソフトウェアをエミュレートし、攻撃しようとしているサーバーと同じ時間と場所を設定できる場合、利点は利用できませんか?それか。

また、開発者が自分のコード(dockerfile、Ruby on Railsプロジェクトなど)をアップロードでき、サーバーが設定されている多くのホスティングサービスで使用できる事前に作成された展開もあります。これらのサーバーには、事前に構築されたソフトウェア、既知のハードウェア、場所、および時間があります。私は彼らが現実の世界でハードウェアランダム性を持っていると仮定していますが、そうでない場合はどうなりますか?

答え1

エントロピー不足は常に問題になってきました。特に、任意のデバイスや他のAPIを使用できない古いオペレーティングシステム、またはすべて同じシードを持つことができるクラウドまたはレプリケーションオペレーティングシステムの場合は、これがさらに重要です。さらに、利用可能なエントロピーソースにもかかわらず、人々は愚かな仕事を続けています(例:CVE-2020-27020)。

1つの解決策は、起動時にいくつかのチップのRDRAND機能などのさまざまな乱数ソースから読み込み、1つのソースが破損または破損した場合にこれらの複数のソースから読み取ることです。これにより、「十分な」エントロピーが得られるまで開始が遅れることがあります。ソースコードを詳しく見てみると、さまざまなオープンソースオペレーティングシステムが起動時にどのように実行するのかがわかります。

別の解決策は、事前に生成された任意のデータ(おそらくインストーラまたはホストオペレーティングシステムによって生成される)の一定量をシステムまたは仮想ホストにシードすることです。その後、このデータは後でシステムを初めて起動するときに使用されます。これにより、ホストオペレーティングシステムが各ホストに対して適切なエントロピーを生成する場合、同じ数の仮想マシンが異なるエントロピーセットを持つことができます。

関連情報