====== Raspberry Pi のハードウェア乱数生成器を試す ======
今まで知りませんでしたが,Raspberry Pi にはハードウェア乱数生成器があるようです.
Raspberry Pi にキーボードやマウス等を繋がすに,いわゆるサーバの様にヘッドレス運用をしていると,乱数のエントロピーが不足しがちになりますが,
ハードウェア乱数生成器を使うことができれば,改善できるかもしれません.
参考サイト:http://vk5tu.livejournal.com/43059.html
===== ハードウェア乱数生成使用前のエントロピー =====
現在のエントロピー状態は,以下で確認できます.
$ cat /proc/sys/kernel/random/entropy_avail
763
https://archlinuxjp.kusakata.com/wiki/Haveged によると,この数値が1000以下だと暗号処理などで十分なエントロピーが貯まるまで止まるようです.
===== 必要なドライバのロードとソフトのインストール =====
Raspberry Pi のハードウェア乱数生成ドライバは,bcm2708_rng と言う名前で,これを起動時にロードするように /etc/modules を編集します.
$ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
bcm2708_rng
次に,rng-tools をインストールします.私は Raspbian を使っているので,以下の様にコマンドを実行します.
$ sudo apt-get install rng-tools
基本的にこれでOKで,Raspberry Pi を再起動させると,ハードウェア乱数生成ドライバがロードされ,rngd がそれを使うようになります.
===== 動作確認と効果 =====
Raspberry Pi を起動したら,ハードウェア乱数ドライバがロードされているかを確認します.
$ lsmod | grep rng
bcm2708_rng 952 0
また,ps コマンドで,rngd が動作しているかを確認します.
/var/log/syslog に,以下の様なログがあることを確認します.
Jun 10 22:52:19 tiamat rngd[2056]: stats: bits received from HRNG source: 60064
Jun 10 22:52:19 tiamat rngd[2056]: stats: bits sent to kernel pool: 4608
Jun 10 22:52:19 tiamat rngd[2056]: stats: entropy added to kernel pool: 4608
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS 140-2 successes: 3
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS 140-2 failures: 0
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS 140-2(2001-10-10) Monobit: 0
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS 140-2(2001-10-10) Poker: 0
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS 140-2(2001-10-10) Runs: 0
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS 140-2(2001-10-10) Long run: 0
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS 140-2(2001-10-10) Continuous run: 0
Jun 10 22:52:19 tiamat rngd[2056]: stats: HRNG source speed: (min=654.094; avg=659.847; max=667.233)Kibits/s
Jun 10 22:52:19 tiamat rngd[2056]: stats: FIPS tests speed: (min=5.709; avg=6.476; max=7.753)Mibits/s
Jun 10 22:52:19 tiamat rngd[2056]: stats: Lowest ready-buffers level: 2
Jun 10 22:52:19 tiamat rngd[2056]: stats: Entropy starvations: 0
Jun 10 22:52:19 tiamat rngd[2056]: stats: Time spent starving for entropy: (min=0; avg=0.000; max=0)us
Jun 10 23:33:12 tiamat rngd[2079]: rngd 2-unofficial-mt.14 starting up...
Jun 10 23:33:12 tiamat rngd[2079]: entropy feed to the kernel ready
この状態で,エントロピーの状態を確認します.
$ cat /proc/sys/kernel/random/entropy_avail
2101
使用前は1000未満だったものが2000を超えています.
===== 終わりに =====
実際の乱数の効果は未確認ですが,ヘッドレス運用で乱数エントロピーが足りず,貯まるまで処理がブロックされる場合に有用と思います.
できればメルセンヌ・ツイスタも試してみたいです.
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html