乱数の話なので、fj.comp.securityに振っちゃいます。


kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:

> 河野真治 @ 琉球大学情報工学です。
> 
> In article <86ver9j4z2.fsf@bsd2.4bn.ne.jp>, Yoshitaka Ikeda <ikeda@4bn.ne.jp> writes
> > /dev/randomって実際にどう実装されているのか興味があります。
> > pgpみたいに、キーボードのタイプ間隔とかをりようしてるんですかね?
> 
> そういう時は、source でしょ!
> 
>     http://www.intel.com/design/chipsets/manuals/298029.htm
> 
> つう感じでハードウェアで生成することも出来るようです。熱雑音
> かなんかを使うんじゃなかったかな。

とりあえず、FreeBSDのサーバのmanあたりからつらつらと探してみました。

/dev/randomの初期化の部分で、ident_hardware()という関数を呼んでます。
/usr/src/sys/dev/randomを呼んでみると、
1.とりあえずデフォルトはYarrow(PRNG)を使う。
2.CyrixのC3(Nehemiahコア)ならCPUのハードウェア乱数発生機能を使う。
という感じになってます。(ちゃんと読みきってはいませんが。)


ところで、上記のintelのURLですが、82802というチップのプログラミング
マニュアルにみえますが、82802はi820系チップセット用のFirmware Hub
だそうです。(i810Eでも乱数生成器は積んでいるようですが)

http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/hw_random.txt
には、いくつかのハードウェア乱数生成器に対応したドライバがある
みたいですね。
#Linuxマシンも1台くらい用意しておいた方がいいかなぁ。
#FreeBSDなら4台もあるんですが。

> Fedora core だと、/etc/rc.sysinit に、
>     # Initialize pseudo-random number generator
>     if [ -f "/var/lib/random-seed" ]; then
>        cat /var/lib/random-seed > /dev/urandom
>     else
>        touch /var/lib/random-seed
>     fi
>     chmod 600 /var/lib/random-seed
>     dd if=/dev/urandom of=/var/lib/random-seed count=1 bs=512 2>/dev/null
> とかいうのが...

/dev/urandomデバイスは、入力を元に新しい乱数値をデバイス出力として持つ、
でいいんですよね?

インストール時に/var/lib/random-seedを適切に作らないと、
途中、他からの入力が無い限り、起動した回数で決まった値に
なりそうな気がするんですが。

 
> おいおい〜 shutdown 時にも書き込んで欲しいぞ...

他になんかのタイミングで書き込んでるとか...


-- 
I LOVE SNOOPY!  でつ
Yoshitaka Ikeda mailto:ikeda@4bn.ne.jp
My Honeypot: honey@4bn.ne.jp  <-don't send this address