Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.9.6. 乱数ジェネレーターの使用

簡単に破ることができない安全な暗号化キーを生成できるようにするには、乱数のソースが必要です。一般に、番号がランダムであるほど、一意のキーを取得する可能性が高くなります。乱数を生成するための エントロピー は、通常、環境の "ノイズ" を計算するか、ハードウェア 乱数ジェネレーター を使用して取得されます。
rng-tools パッケージの一部である rngd デーモンは、エントロピーを引き出すために環境ノイズと乱数ジェネレーターの両方が使用できます。デーモンは、乱数性のソースによって供給されるデータが十分にランダムなものかどうかをチェックしてから、カーネルの乱数エントロピープールにデータを格納します。生成された乱数は、/dev/random および /dev/urandom の文字デバイスから利用できます。
/dev/random/dev/urandom の違いは、前者がブロッキングデバイスであることです。つまり、エントロピー量が適切なランダム出力を生成するのに不十分であると判断すると、数値の供給を停止します。逆に、/dev/urandom は非ブロッキングソースであり、カーネルのエントロピープールを再利用するため、エントロピーは少なくなりますが、疑似乱数を無制限に提供できます。そのため、/dev/urandom は、長期暗号化キーの作成には使用しないでください。
rng-tools パッケージをインストールするには、root ユーザーとして次のコマンドを発行します。
~]# yum install rng-tools
rngd デーモンを起動するには、root で以下のコマンドを実行します。
~]# systemctl start rngd
デーモンの状態を問い合わせるには、次のコマンドを使用します。
~]# systemctl status rngd
オプションのパラメーターを使用して rngd デーモンを起動するには、直接これを実行します。たとえば、乱数入力の代替ソース (/dev/hwrandom 以外) を指定するには、次のコマンドを使用します。
~]# rngd --rng-device=/dev/hwrng
前のコマンドは、乱数が読み取られるデバイスとして /dev/hwrng を使用して rngd デーモンを起動します。同様に、-o (または --random-device) オプションを使用して、乱数出力用のカーネルデバイス (デフォルトの /dev/random 以外) を選択できます。利用可能なすべてのオプションの一覧は、rngd(8) の man ページを参照してください。
特定のシステムで使用可能なエントロピーのソースを確認するには、root で以下のコマンドを実行します。
~]# rngd -vf
Unable to open file: /dev/tpm0
Available entropy sources:
	DRNG
注記
rngd -v コマンドを入力した後、対応するプロセスはバックグラウンドで実行を継続します。-b, --background オプション (デーモンになる) はデフォルトで適用されます。
TPM デバイスが存在しない場合は、エントロピーのソースとして Intel Digital Random Number Generator (DRNG) のみが表示されます。お使いの CPU が RDRAND プロセッサー命令をサポートしているかどうかを確認するには、以下のコマンドを入力します。
~]$ cat /proc/cpuinfo | grep rdrand
注記
詳細およびソフトウェアコードの例については、Intel Digital Random Number Generator (DRNG) Software Implementation Guide. を参照してください。
rng-tools パッケージには rngtest ユーティリティーも含まれており、これはデータの乱数度のチェックに使用できます。/dev/random の出力のランダム性のレベルをテストするには、次のように rngtest ツールを使用します。
~]$ cat /dev/random | rngtest -c 1000
rngtest 5
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: 998
rngtest: FIPS 140-2 failures: 2
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: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 2
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=1.171; avg=8.453; max=11.374)Mibits/s
rngtest: FIPS tests speed: (min=15.545; avg=143.126; max=157.632)Mibits/s
rngtest: Program run time: 2390520 microseconds
rngtest ツールの出力に示される多数の障害は、テストされたデータのランダム性が不十分であり、信頼されるべきではないことを示しています。rngtest ユーティリティーで使用できるオプションの一覧は、rngtest(1) の man ページを参照してください。
Red Hat Enterprise Linux 7 では virtio RNG (乱数ジェネレーター) デバイスが導入され、ホストマシンからエントロピーにアクセスできる KVM 仮想マシンが提供されています。推奨される設定では、hwrng はホスト Linux カーネルのエントロピープールに (/dev/random を介して) フィードし、QEMU はゲストが要求するエントロピーのソースとして /dev/random を使用します。

図4.1 virtio RNG デバイス

virtio RNG デバイス
以前は、Red Hat Enterprise Linux 7.0 ゲストおよび Red Hat Enterprise Linux 6 ゲストは、rngd ユーザースペースデーモンを介してホストからのエントロピーを利用できました。デーモンの設定は、Red Hat Enterprise Linux のインストールごとに手作業で行っていました。Red Hat Enterprise Linux 7.1 では、手動の手順が不要になり、プロセス全体がシームレスかつ自動化されています。rngd を使用する必要がなくなり、使用可能なエントロピーが特定のしきい値を下回ると、ゲストカーネル自体がホストからエントロピーをフェッチします。これにより、ゲストカーネルは、アプリケーションが要求するとすぐに乱数を使用できるようにします。
Red Hat Enterprise Linux のインストーラーである Anaconda は、そのインストーラーイメージで virtio-rng モジュールを提供するようになり、Red Hat Enterprise Linux のインストール中にホストエントロピーを利用できるようにしました。
重要
シナリオで使用する乱数ジェネレーターを正しく決定するには、Understanding the Red Hat Enterprise Linux random number generator interface の記事を参照してください。