コンピューティングにおいて、エントロピーとは、暗号化やランダムデータを必要とするその他の用途で使用するためにオペレーティングシステムまたはアプリケーションによって収集されるランダム性です。このランダム性は、マウスの動きなどの既存のもの、または特別に用意されたランダム性ジェネレーターなど、ハードウェアソース(ファンのノイズやHDDの変動)から収集されることがよくあります。エントロピーが不足すると、パフォーマンスとセキュリティに悪影響を与える可能性があります。
Linuxカーネルは、キーボードのタイミング、マウスの動き、および統合ドライブエレクトロニクス(IDE)のタイミングからエントロピーを生成し、特殊ファイル /dev/randomおよび/dev/urandomを介して他のオペレーティングシステムプロセスがランダムな文字データを利用できるようにします。この機能は、Linuxバージョン1.3.30で導入されました。[1]
より多くのエントロピーソースを使用できるようにするLinuxカーネルパッチがいくつかあります。[2] Fedoraなどの一部のオペレーティングシステムに含まれているaudio_entropydプロジェクト[3]は、オーディオデータをエントロピーソースとして使用できるようにします。[4]また、ビデオソースからランダムデータを計算するvideo_entropyd [5]と、これら3つを含み、これらのいずれも実行できないシステム(仮想マシンなど)にエントロピーデータを配布するために使用できるentropybroker [6]も利用可能です。さらに、havegedを介してHAVEGEアルゴリズムを使用してエントロピーをプールすることもできます。[7] 一部のシステムでは、ネットワーク割り込みもエントロピーソースとして使用できます。[8]
OpenBSDは暗号化を主要な目標の1つとして統合しており、暗号化のエントロピー向上だけでなく、カーネルのさまざまな内部操作を含むOSの多くの部分のランダム化にも常に取り組んできました。2011年頃、平均的なシステムで毎秒数百メガバイトの高品質ランダムデータを生成できたため、2つのランダムデバイスが削除され、単一のソースにリンクされました。[説明が必要]これにより、OpenBSDでは、十分なエントロピーが最初に収集されると、ユーザーランドプログラムによるランダムデータの枯渇は不可能になりました。
Linuxカーネルから移植されたドライバがHurdカーネルで利用可能になりました。[9]
/dev/randomと/dev/urandomは、Solaris 2.6以降、Solaris用のSunパッケージまたはパッチとして利用可能であり、 [10] Solaris 9以降は標準機能となっています。[11] Solaris 10以降、管理者はカーネルレベルの暗号化フレームワークを介して既存のエントロピーソースを削除したり、新しいエントロピーソースを定義したりすることができます
/dev/randomを実装したサードパーティ製のカーネルモジュールは、Solaris 2.4以降のリリースでも利用可能です。[10]
OS/2には、ソフトウェアプロセスがランダムデータを取得できるソフトウェアパッケージがあります。[12]
Windows 95以降のMicrosoft Windowsリリースでは、Linuxカーネルの/dev/randomと同様の方法でCryptoAPIを使用してエントロピーを収集します。 [13]
WindowsのCryptoAPIは、バイナリレジストリキーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG\Seedを使用して、すべてのエントロピーソースからシード値を格納します。[14]
CryptoAPIはクローズドソースであるため、Windowsプラットフォームで実行される一部のフリーおよびオープンソースソフトウェアアプリケーションは、ランダム性を得るために他の手段を使用しています。たとえば、GnuPGバージョン1.06以降は、メモリ内の空きバイト数など、さまざまなソースを使用してランダムシードと組み合わせることで、必要なランダム性を生成します。[15]
CAPIを使用するプログラマーは、CAPIのCryptGenRandom ()を適切に初期化した後、呼び出すことでエントロピーを取得できます。[16]
CryptoAPIはWindows Vista以降で非推奨になりました。新しいAPIはCryptography API: Next Generation (CNG)と呼ばれます。[17] WindowsのCNGは、バイナリレジストリキーHKEY_LOCAL_MACHINE\SYSTEM\RNG\Seedを使用してシード値を格納します
新しいバージョンのWindowsは、さまざまなエントロピーソースを使用できます。
組み込みシステムは、起動時間が短く、非常にシンプルなデバイスであることが多いため、十分なエントロピーを集めることが困難です。十分なエントロピーを必要とする鍵生成処理は、システムが最初に行う処理の一つであることが多いからです。これらのデバイスには、一般的なエントロピー源が存在しない、あるいは起動時に十分なエントロピーを確保できるほど長くアクティブになっていない可能性があります。組み込みデバイスには、回転式ディスクドライブ、ヒューマンインターフェースデバイス、さらにはファンさえも搭載されていないことが多く、ネットワークインターフェースは、たとえ搭載されていたとしても、十分なエントロピーを提供するのに十分な時間アクティブになっていません。エントロピーに容易にアクセスできないため、一部のデバイスでは、乱数生成器のシードとしてハードコードされた鍵を使用したり、デバイスのMACアドレスなど、容易に推測できる一意の識別子から乱数生成器のシードを作成したりすることがあります。ある簡単な調査[ which? ]では、ルーターなどの多くの組み込みシステムで同じ鍵が使用されていることが確認され、脆弱な鍵が広く使用されていることが示されました。これらのシステムのエントロピーに、単純で攻撃者によって容易に判別可能な一回限りの一意の識別子が組み込まれていなかった場合、発見された脆弱な鍵の数ははるかに多かったと考えられています。[20]
真性乱数生成器(TRNG)は、(非)集中型サービスになり得ます。乱数を取得できる集中型システムの一例として、米国国立標準技術研究所(NIST )の乱数ビーコンサービスが挙げられます。Cardanoプラットフォームは、分散型プルーフ・オブ・ステーク・プロトコルの参加者を利用して乱数を生成します。[21]
EGD(エントロピー収集デーモン)など、ユーザー空間プロセスを使用してランダムな文字を収集できるソフトウェアパッケージがいくつかあります。これはまさに/dev/randomが行っていることです。[22]
現代のCPUやハードウェアには、オペレーティングシステムに高品質で高速なエントロピーを提供できる統合型ジェネレーターが搭載されていることがよくあります。Linuxカーネルベースのシステムでは、/dev/hw_randomを介して、このようなデバイスから生成されたエントロピーを読み取ることができます。[23]ただし、/dev/hw_randomが遅い場合があります。[24] [25]
エントロピー生成デバイスを製造している企業がいくつかあり、その中にはLinux用のドライバが同梱されているものもあります。[26] [27]
Linuxシステムでは、RDRAND命令をサポートするCPU 、Trusted Platform Module、および一部のIntel、AMD、またはVIAチップセットに搭載されている真性乱数生成器(TRNG)をサポートするrng-toolsパッケージ[28]をインストールできます。 [29]これにより、 /dev/randomに収集されるエントロピーが効果的に増加し、暗号の潜在能力が向上する可能性があります。これは、他のエントロピー源を持たない ヘッドレスシステムで特に役立ちます。
システム管理者、特にインターネットサーバーを管理する管理者は、エントロピーの枯渇によってサーバープロセスが停止しないようにする必要があります。Linuxカーネル、またはコンソールとストレージサブシステムからエントロピーを生成するその他のカーネルプロセスやユーザー空間プロセスを利用するサーバーのエントロピーは、マウスとキーボードがないため、理想的とは言えないことがよくあります。そのため、サーバーはIDEタイミングなどの限られたリソースからエントロピーを生成する必要があります。
Linuxのエントロピープールのサイズは、ファイル/proc/sys/kernel/random/entropy_availで確認でき、通常は少なくとも2000ビット(最大4096ビット)である必要があります。[30] [31]エントロピーは頻繁に変化します
エントロピーが低い、またはゼロのシステムの管理者は、/dev/ randomの代わりに/dev/urandomを使用しないでください。SSL/TLS接続の暗号化レベルが低下する可能性があります。[32]
一部のソフトウェアシステムはDiffie-Hellman鍵を頻繁に変更するため、エントロピーのボトルネックがあってもサーバーが正常に機能し続けるのに役立つ場合があります。[33]
エントロピーの低いサーバーでは、プロセスが/dev/random(Linuxベースのシステム)にランダムな文字が現れるのを待っている間、ハングしているように見えることがあります。たとえば、Debianには既知の問題があり、このためexim4がハングする場合があります。 [34]
エントロピーソースはキーボードタイミング攻撃に使用される可能性があります。[35]
エントロピーはサーバーの暗号化(TLS/SSL)に影響を与える可能性があります。サーバーが適切な乱数源を使用していない場合、サーバーによって生成される鍵は安全ではありません。場合によっては、クラッカー(悪意のある攻撃者)が疑似乱数生成器(PRNG)の出力からエントロピーの一部を推測できることがあります。これは、PRNGに十分なエントロピーが導入されていない場合に発生します。[36]
一般的に使用されるエントロピー発生源には、マウス、キーボード、IDEのタイミングなどがありますが、他にも潜在的な発生源があります。たとえば、コンピューターのマイクからエントロピーを収集したり、ディスクドライブ内の乱気流を測定するセンサーを構築したりすることができます。[37]
Unix/BSD派生システムには、システム内の2つのエントロピー発生源によって生成されたビットストリームをフィルタリング/保護するためにARM Cortex CPUを利用するUSBベースのソリューションが存在します。[38]
Cloudflareは、80個のラバランプのラックからの画像フィードを、エントロピーの追加ソースとして使用しています。[39]