Havegedを使用してクラウドサーバーの追加エントロピーを設定する方法
エントロピーとランダム性の簡単な紹介
Linux疑似乱数ジェネレーター(PRNG)は、ハードウェア割り込み(キーボード、マウス、ディスク/ネットワークI / O)およびその他のオペレーティングシステムソースからランダム性を生成する特別なデバイスです。 このランダム性は主にSSL/TLSのような暗号化に使用されますが、他にも多くの用途があります。 仮想サイコロのペアを振るプログラムのような単純なものでさえ、高品質のランダム性のためにエントロピーに依存しています。
エントロピープールが枯渇したとき
Linuxには、/ dev/randomと/dev/urandomの2つの一般的なランダムデバイスがあります。 最高のランダム性は/dev/ randomから得られます。これはブロッキングデバイスであり、出力を提供し続けるのに十分なエントロピーが利用可能になるまで待機します。 エントロピーが十分であると仮定すると、/ dev/urandomから同じ品質のランダム性が見られるはずです。 ただし、これは非ブロッキングデバイスであるため、エントロピープールが不足した場合でも、「ランダム」データを生成し続けます。 以前のデータが繰り返される可能性が非常に高いため、これによりランダムデータの品質が低下する可能性があります。 実稼働サーバーで使用可能なエントロピーが少なくなると、特にこのサーバーが暗号化機能を実行するときに、多くの悪いことが起こる可能性があります。 たとえば、次のデーモンを実行しているクラウドサーバーがあるとします(すべてSSL / TLSまたはブロック暗号を使用)。
- Webサーバー
- 着信/発信メールサーバー
- SSH / SFTP
利用可能なすべてのエントロピーが使い果たされたときにこれらのデーモンのいずれかがランダム性を必要とする場合、それらはさらに待機するために一時停止する可能性があり、アプリケーションで過度の遅延を引き起こす可能性があります。 さらに悪いことに、最近のほとんどのアプリケーションは、プログラムの初期化時に作成された独自のランダムシードを使用するか、ブロックを回避するために/ dev / urandomを使用するため、アプリケーションのランダムデータの品質が低下します。 これは、安全な通信の整合性に影響を与える可能性があり、個人データの暗号解読の可能性を高める可能性があります。
エントロピープールを作成するためのユーザーランドソリューション
Linuxは、前述のハードウェアソースからすでに非常に高品質のランダムデータを取得していますが、ヘッドレスマシンには通常、キーボードやマウスがないため、生成されるエントロピーははるかに少なくなります。 ディスクとネットワークのI/Oは、これらのマシンのエントロピー生成ソースの大部分を占めており、これらは非常にまばらな量のエントロピーを生成します。 サーバーやクラウドサーバー/仮想マシンなどのヘッドレスマシンで専用のハードウェアRNGソリューションを利用できるものはほとんどないため、ビデオカードなどのハードディスクよりも「ノイズの多い」デバイスからのハードウェア割り込みを使用して追加のエントロピーを生成するユーザーランドソリューションがいくつかあります。サウンドカードなど 残念ながら、サーバーには通常どちらも含まれていないため、これもサーバーの問題であることがわかります。 havegedと入力します。 HAVEGEの原則に基づいており、以前は関連するライブラリに基づいていたhavegedを使用すると、プロセッサでのコード実行時間の変動に基づいてランダム性を生成できます。 同じハードウェア上の同じ環境であっても、1つのコードの実行に同じ正確な時間をかけることはほぼ不可能であるため、単一または複数のプログラムを実行するタイミングは、ランダムなソースをシードするのに適している必要があります。 ハッジされた実装は、ループを繰り返し実行した後、プロセッサのタイムスタンプカウンター(TSC)の違いを使用して、システムのランダムソース(通常は/ dev / random)をシードします。 これにより、予測可能なデータが作成されるはずですが、この記事の下部にあるFIPSテストの結果を見て驚かれるかもしれません。
Debian/Ubuntuにhavegedをインストールする
次のコマンドを実行することで、DebianとUbuntuにhavegedを簡単にインストールできます。
# apt-get install haveged
このパッケージがデフォルトのリポジトリで利用できない場合は、ソースからコンパイルする必要があります(以下を参照)
パッケージをインストールしたら、/ etc / default / havegedにある構成ファイルを編集するだけで、次のオプションが設定されていることを確認できます(通常はすでにデフォルトのオプションです)。
DAEMON_ARGS="-w 1024"
最後に、起動時に起動するように構成されていることを確認してください。
# update-rc.d haveged defaults
RHEL / CentOS/Fedoraにhavegedをインストールする
havegedをRHEL/CentOSにインストールするには(Fedoraの場合はこの手順をスキップしてください)、最初に公式サイトの指示に従ってEPELリポジトリーを追加する必要があります。
(RHEL / CentOSで)EPELリポジトリをインストールして有効にしたら、次のコマンドを実行してhavegedをインストールできます。
# yum install haveged
Fedoraユーザーは、リポジトリーを変更せずに上記のyuminstallコマンドを実行できます。 通常はデフォルトのオプションで問題ないため、起動時に開始するように構成されていることを確認してください。
# chkconfig haveged on
ソースからのインストール
ヘイジドに使用できる事前にパッケージ化されたバイナリがないシステムでは、ソースtarballからビルドする必要があります。 これは実際には予想よりもはるかに簡単です。 まず、ダウンロードページにアクセスして、最新リリースのtarball(この記事の執筆時点では1.7a)を選択します。 tarballをダウンロードしたら、現在の作業ディレクトリに解凍します。
# tar zxvf /path/to/haveged-x.x.tar.gz
次に、コンパイルしてインストールします。
# cd /path/to/haveged-x.x # ./configure # make # make install
デフォルトでは、これは/ usr / localのプレフィックスでインストールされるため、次のようなものを/etc/rc.local(またはシステムの同等のもの)に追加して、起動時に自動的に起動するようにする必要があります(必要に応じてパスを調整します) )::
# Autostart haveged /usr/local/sbin/haveged -w 1024
同じコマンドを手動で(rootとして)実行して、再起動せずにデーモンを起動します。Windowsの場合は、再起動します。
エントロピーの可用性とランダムデータの品質のテスト
最小限のインストール/構成作業の後、havegedのインストールが機能するはずです。また、システムのエントロピープールは、生成されるランダム性からすでにいっぱいになっているはずです。 他の人とその有効性の主張を盲目的に信頼している場合、セキュリティはセキュリティではありません。標準のテストを使用してランダムデータをテストしてみませんか? このテストでは、rngtestで使用されるFIPS-140メソッドを使用します。これは、rng-toolsなどのさまざまなパッケージ名でほとんどまたはすべての主要なLinuxディストリビューションで利用できます。
# cat /dev/random | rngtest -c 1000
次のような出力が表示されます。
rngtest 2-unofficial-mt.14 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. rngtest: starting FIPS tests... rngtest: bits received from input: 20000032 rngtest: FIPS 140-2 successes: 999 rngtest: FIPS 140-2 failures: 1 rngtest: FIPS 140-2(2001-10-10) Monobit: 0 rngtest: FIPS 140-2(2001-10-10) Poker: 0 rngtest: FIPS 140-2(2001-10-10) Runs: 1 rngtest: FIPS 140-2(2001-10-10) Long run: 0 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=1.139; avg=22.274; max=19073.486)Mibits/s rngtest: FIPS tests speed: (min=19.827; avg=110.859; max=115.597)Mibits/s rngtest: Program run time: 1028784 microseconds
乱数ジェネレーターではごくわずかな失敗が許容されますが、havegedを使用すると、998〜1000回の成功が頻繁に見られることが期待できます。
使用可能なエントロピーの量をテストするには、次のコマンドを実行できます。
# cat /proc/sys/kernel/random/entropy_avail
ヘイジドの考え方は、使用可能なビットが1024に近づくたびに、このプールを埋め戻すことです。 したがって、この数は変動しますが、実際に多くのランダム性(SSHキーの生成など)を要求しない限り、1000程度を下回ることはありません。