====== 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