ユーザ用ツール

サイト用ツール


raspberrypi:log20150610_bcm2708_rng

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

raspberrypi/log20150610_bcm2708_rng.txt · 最終更新: 2015-06-10 14:54 by tosihisa@netfort.gr.jp