何気に/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くらいであれば特に問題なし。
補足
蛇足
ランダムノイズ画像の作成方法
記事最初にあるノイズ画像は以下のコマンドで作成した。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すること)。