2013年3月24日日曜日

乱数をつかってみる



唐突だが私のマシンの起動時のログをdmesgでみるとこんなログが出てる
intel_rng: Firmware space is locked read-only. If you can't or
intel_rng: don't want to disable this in firmware setup, and if
intel_rng: you are certain that your system has a functional
intel_rng: RNG, try using the 'no_fwh_detect' option.
このintel_rngというのは乱数を作る装置らしい。

そこでこれについて調べると
起動時のカーネルのパラメータに
 intel_rng.no_fwh_detect=1
を入れるといいらしい。ってことがすぐ分かった
http://forum.tinycorelinux.net/index.php?topic=12575.0

実際に入れて再起動するとと上記メッセージが
Intel 82802 RNG detected
に変わるのがわかる。
またlsmodでモジュールを見ると
intel_rng
がロードされているのがわかり
デバイス/dev/hwrng ができているのが分かる。

そこで/dev/hwrngの使い道だが
rng-tools
をインストールしてカーネルの疑似乱数とリンクさせて使うらしい

さっそくインストール
sudo apt-get install rng-tools
がインストールするだけでは動かなかった(rngdの起動に失敗する)
Starting Hardware RNG entropy gatherer daemon: fail.
となる。

そこで設定を見直す
sudo vi /etc/default/rng-tools
で設定を見ると
# Configuration for the rng-tools initscript
# $Id: rng-tools.default,v 1.1.2.5 2008-06-10 19:51:37 hmh Exp $

# This is a POSIX shell fragment

# Set to the input source for random data, leave undefined
# for the initscript to attempt auto-detection.  Set to /dev/null
# for the viapadlock and tpm drivers.
#HRNGDEVICE=/dev/hwrng
#HRNGDEVICE=/dev/null

# Additional options to send to rngd. See the rngd(8) manpage for
# more information.  Do not specify -r/--rng-device here, use
# HRNGDEVICE for that instead.
#RNGDOPTIONS="--hrng=intelfwh --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viakernel --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viapadlock --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=tpm --fill-watermark=90% --feed-interval=1"
となっているのが分かる。

最初の選択肢
#HRNGDEVICE=/dev/hwrng
#HRNGDEVICE=/dev/null
は/dev/hwrng に決まっているからいいとして二個目の選択肢
#RNGDOPTIONS="--hrng=intelfwh --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viakernel --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viapadlock --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=tpm --fill-watermark=90% --feed-interval=1"
はtpmを使うことにする
なぜか?このマシンはTPMがあるのを知っているからだ。

このマシンのdmesgを見ると
tpm_tis 00:0b: 1.2 TPM (device-id 0x1002, rev-id 2)
というログがある。これがTPMのモジュールだ
(TPMについてはWikipediaとか見てください)
この使い道だが
tpm-tools
をインストールするといいらしい。

さっそくインストール
sudo apt-get install tpm-tools
詳しい設定のしかたはこことか参照
http://www.grounation.org/index.php?post/2008/07/04/8-how-to-use-a-tpm-with-linux
手順としては
BIOSの設定
そのあと
sudo tpm_createek
sudo tpm_takeownership
でうまくいった。
うまくできたかどうかは
sudo tpm_getpubek
で鍵を表示するかどうかですぐに分かる

であらためてintel-rngの話にもどると
設定ファイルを
# Configuration for the rng-tools initscript
# $Id: rng-tools.default,v 1.1.2.5 2008-06-10 19:51:37 hmh Exp $

# This is a POSIX shell fragment

# Set to the input source for random data, leave undefined
# for the initscript to attempt auto-detection.  Set to /dev/null
# for the viapadlock and tpm drivers.
HRNGDEVICE=/dev/hwrng
#HRNGDEVICE=/dev/null

# Additional options to send to rngd. See the rngd(8) manpage for
# more information.  Do not specify -r/--rng-device here, use
# HRNGDEVICE for that instead.
#RNGDOPTIONS="--hrng=intelfwh --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viakernel --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viapadlock --fill-watermark=90% --feed-interval=1"
RNGDOPTIONS="--hrng=tpm --fill-watermark=90% --feed-interval=1"
と書き換えて
デーモン起動
sudo /etc/init.d/rng-tools start
こんどはあっさり成功します
Starting Hardware RNG entropy gatherer daemon: rngd.
でrngdが起動します。

これでマシンが疑似乱数から真の乱数(TRNG)に変わったのでとりあえずエントロピーをチェック
cat /proc/sys/kernel/random/entropy_avail
3190
妥当な数値では?
http://backslash.ddo.jp/wordpress/archives/620
http://field-notes.hatenablog.jp/entry/20101218/1292644497