以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

/dev/randomと/dev/urandomの違いを調べていたらhavegedというのを入れていた

f:id:abyssluke:20150924172323p:plain:right何気に/dev/randomと/dev/urandomの違いについて調べていたらhavegedという乱数エントロピー生成デーモンを知って入れてみたのでメモ。ついでに調べていて知った情報も蛇足としてメモ。長いので続きを読むから。
※貼ってあるランダムノイズ画像の作成方法も書いてあります
※特に記載がある場合を除き、記載されているコマンド等はUbuntu 14.04 LTS環境での例です

目次

havegedってなんぞや

Haveged プロジェクトは、HAVEGE アルゴリズムに基づいた予測不可能の使いやすい乱数生成器を提供することを目的としたプロジェクトです。Haveged は主にヘッドレス・サーバ (headless server) など、Linux の random デバイスを使うにあたってエントロピーが少ない状況を改善するために考案されました [1]。

Haveged - ArchWiki

簡単に言えば「PCから得られる予測不能な情報などから乱数の種を作りシステム側(/dev/random)に供給するデーモン」(という認識でいいんですかね?)。
/dev/randomを使った処理がなかなか終わらない時はいわゆる「エントロピー不足」なので入れてみると吉。

乱数のエントロピープールの貯まり具合を見てみる

$ cat /proc/sys/kernel/random/entropy_avail
2248

上はhaveged導入後の例だが、表示された数字が1000以下だとエントロピー不足とされている。

havegedを入れてみる

$ sudo apt-get install haveged

これで自動的にエントロピーが生成されるようになる。エントロピープールの貯まり具合をチェックすると増えているはず。

乱数が安全かどうか調べる

まずrng-toolsというのを入れる。

$ sudo apt-get install rng-tools

そのあと/dev/randomから得られる乱数をrngtestにパイプで渡してテスト。

$ cat /dev/random | rngtest -c 1000
rngtest 4
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: 1000
rngtest: FIPS 140-2 failures: 0
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: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=459.418; avg=4873.704; max=9765625.000)Kibits/s
rngtest: FIPS tests speed: (min=5.325; avg=42.383; max=45.305)Mibits/s
rngtest: Program run time: 4460061 microseconds

FIPS 140-2 failuresが0〜3くらいであれば特に問題なし。

補足

CentOSでのhavegedのインストール方法

havegedはepelレポジトリに入っているので予め入れておくこと。またインストールしても自動でhavegedは起動しないので設定する必要がある。

# yum install haveged
# chkconfig haveged on
# /etc/init.d/haveged start
rng-toolsにあるrngdについて

rng-toolsにはrngdという、havegedと同じように乱数のエントロピーをシステムに供給するデーモンも入っている。
TPMやCPUに乱数生成器の機能が搭載されているPCではこちらを入れるといいかも?

蛇足

ランダムノイズ画像の作成方法

記事最初にあるノイズ画像は以下のコマンドで作成した。netpbmのインストールが必要かも。

$ cat /dev/random | rawtoppm -rgb 200 200 | pnmtopng > random-test.png
Raspberry PiのSoCにあるハードウェア乱数生成器を使う方法

調べていたらRaspberry PiのSoCにハードウェア乱数生成器があるとか書いてあったので一応Raspbianでの設定方法を書いておく。 RasPi2でも通用するかは不明。
bcm2708_rngというモジュールをmodprobeで読み込ませ、次回起動時にも読み込ませるようにする。rng-toolsも入れてなければ入れておく。

$ sudo modprobe bcm2708_rng
$ sudo sh -c "echo bcm2708_rng >> /etc/modules"
$ sudo apt-get install rng-tools

/dev/hwrngがハードウェア乱数生成器となり、ここからrngdによってエントロピーが供給される。なお特権ユーザーからしかアクセスできない(rngtestする場合はsudoすること)。