コンピューティングにおいて、エントロピーとは、暗号化やランダムデータを必要とするその他の用途のために、オペレーティングシステムやアプリケーションによって収集されるランダム性のことです。このランダム性は、多くの場合、ハードウェアソース(ファンノイズや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は暗号化を主要な目標の一つとして統合しており、暗号化のためのエントロピー増加だけでなく、カーネルの様々な内部操作を含むOSの多くの部分のランダム化にも常に取り組んできました。2011年頃、2つのランダム生成デバイスが廃止され、1つのソースに統合されました。これにより、平均的なシステムで毎秒数百メガバイトの高品質なランダムデータを生成できるようになりました。十分なエントロピーが蓄積された後は、OpenBSDのユーザーランドプログラムによるランダムデータの枯渇の可能性が大幅に低減されました。
/dev/random と /dev/urandom は、Solaris 2.6 以降、 Sun パッケージまたはパッチとしてSolarisに提供されており、 [ 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の最新バージョンでは、さまざまなエントロピー源を利用できます。
組み込みシステムは、起動時間が短い単純なデバイスであることが多く、十分なエントロピーを必要とする鍵生成操作がシステムの最初の処理の 1 つであることが多いため、十分なエントロピーを収集するのが難しい場合があります。これらのデバイスには一般的なエントロピーソースが存在しないか、起動中に十分なエントロピーを生成するのに十分な時間アクティブになっていない可能性があります。組み込みデバイスには、回転ディスクドライブ、ヒューマンインターフェースデバイス、ファンさえも欠けていることが多く、ネットワークインターフェースがあったとしても、十分なエントロピーを提供するのに十分な時間アクティブになっていません。エントロピーへの容易なアクセスがないため、一部のデバイスはハードコードされた鍵を使用して乱数生成器をシードしたり、デバイスのMAC アドレスなどの簡単に推測できる一意の識別子から乱数生成器をシードしたりする場合があります。簡単な調査[ 20 ]では、ルーターなどの多くの組み込みシステムが同じ鍵を使用していることを発見し、脆弱な鍵が広く使用されていることを実証しました。これらのシステムの一部で、単純で攻撃者が特定できることが多いワンタイムの一意の識別子がエントロピーに組み込まれていなければ、発見された脆弱な鍵の数ははるかに多かったと考えられます。[ 21 ]
真の乱数発生器(TRNG)は、(分散)中央集権的なサービスになり得る。乱数を取得できる中央集権的なシステムの一例として、米国国立標準技術研究所(NIST )の乱数ビーコンサービスが挙げられる。Cardanoプラットフォームは、分散型プルーフ・オブ・ステークプロトコルの参加者を利用して乱数を生成する。[ 22 ]
ユーザー空間プロセスを使用してランダムな文字を収集できるソフトウェアパッケージがいくつかあり、これは/dev/randomが行うのと全く同じです。例えば、エントロピー収集デーモン(EGD)などです。[ 23 ]
最新のCPUやハードウェアには、オペレーティングシステムに高品質かつ高速なエントロピーを提供する統合ジェネレータが搭載されていることが多い。Linuxカーネルベースのシステムでは、/dev/hw_randomを介してこのようなデバイスから生成されたエントロピーを読み取ることができる。[ 24 ]ただし、/dev/hw_randomは遅い場合がある。[ 25 ] [ 26 ]
エントロピー生成装置を製造している企業もあり、それらのいくつかはLinux用のドライバとともに出荷されている。[ 27 ] [ 28 ]
Linux システムでは、RDRAND命令をサポートする CPU 、Trusted Platform Modules、および一部のIntel、AMD、またはVIAチップセット[ 30 ] に搭載されている真の乱数生成器( TRNG )をサポートするrng -tools パッケージ[ 29 ]をインストールすることで、/dev/random に収集されるエントロピーを効果的に増加させ、暗号化の可能性を向上させることができます。これは、他のエントロピー源を持たないヘッドレス システムで特に役立ちます。
システム管理者、特にインターネットサーバーを管理する管理者は、エントロピーの枯渇によってサーバープロセスが停止しないようにする必要があります。Linuxカーネルを使用するサーバー、またはコンソールやストレージサブシステムからエントロピーを生成するその他のカーネルやユーザー空間プロセスを使用するサーバーでは、マウスやキーボードがないため、エントロピーが理想的とは言えないことが多く、サーバーはIDEのタイミングなどの限られたリソースからエントロピーを生成する必要があります。
Linuxのエントロピー プール サイズはファイル/proc/sys/kernel/random/entropy_availで確認でき、通常は少なくとも 2000 ビット (最大 4096 ビット) である必要があります。[ 31 ] [ 32 ]エントロピーは頻繁に変化します。
エントロピーが低い、またはゼロのシステムを担当する管理者は、/dev/ random の代わりに /dev/urandom を使用しようとしないでください。これは SSL/TLS 接続の暗号化レベルを低下させる可能性があります。[ 33 ]
一部のソフトウェアシステムはディフィー・ヘルマン鍵を頻繁に変更し、場合によってはエントロピーのボトルネックがあってもサーバーが正常に機能し続けるのに役立つことがあります。[ 34 ]
エントロピーの低いサーバーでは、プロセスが /dev/random (Linux ベースのシステム) にランダムな文字が現れるのを待っているときにハングアップしたように見えることがあります。たとえば、Debianでは、このことが原因でexim4がハングアップするケースがあることが知られていました。 [ 35 ]
エントロピー源はキーボードタイミング攻撃に利用できる。[ 36 ]
エントロピーはサーバーの暗号化(TLS/SSL)に影響を与える可能性があります。サーバーが適切な乱数源を使用しない場合、サーバーによって生成される鍵は安全ではなくなります。場合によっては、クラッカー(悪意のある攻撃者)が擬似乱数生成器(PRNG)の出力からエントロピーの一部を推測することができ、これはPRNGに十分なエントロピーが導入されていない場合に発生します。[ 37 ]
一般的に使用されるエントロピー源には、マウス、キーボード、IDE のタイミングなどがありますが、他にも潜在的な源があります。たとえば、コンピュータのマイクからエントロピーを収集したり、ディスク ドライブ内の空気の乱流を測定するセンサーを構築したりすることができます。[ 38 ]
Unix/BSD派生システムでは、システム内の2つのエントロピー生成ソースによって生成されたビットストリームをフィルタリング/保護するためにARM Cortex CPUを利用するUSBベースのソリューションが存在する。[ 39 ]
Cloudflareは、80個の溶岩ランプのラックからの画像フィードをエントロピーの追加ソースとして使用しています。[ 40 ]
{{cite web}}: CS1 maint: 複数の名前: 著者リスト (リンク) CS1 maint: url-status (リンク){{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)