Yoshitaka Ikeda <ikeda@4bn.ne.jp> writes:


> 乱数の話なので、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のハードウェア乱数発生機能を使う。
> という感じになってます。(ちゃんと読みきってはいませんが。)

補足。FreeBSD 5.4-RELEASEの random(4) のHISTORYに記述がありました。
それによると
・randomデバイスはFreeBSD2.2で登場
・初期のバージョンはTheodore Ts'o'sのLunx用エントロピドライバの移植
・現在のバージョンはFreeBSD5.0でかきなおされたもの。
・Yarrowアルゴリズム(Schneierが設計)を実装
・ハードウェア実装は、現在のところVIAのC3 Nehemiahのみ
となっています。

一方、FreeBSD2.2.5-RELEASEの random(4) では、
・PGPのものをベースとしたエントロピ生成器
・キー入力間隔をベースとした入力と割り込み間隔をベースとした入力
・割り込み間隔は物によってはランダムではない
・エントロピを元にMD5で乱数生成
という記述があります。


ここらへん、
J. Viega et.al, "C/C++ セキュアプログラミングクックブック Volume.2",
オライリー・ジャパン, 2004
の4章 レシピII-4.19「エントロピーの評価と管理を行なう」が非常に参考に
なります。


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