Concurrent Clean : 乱数生成器

Cleanに付属している乱数生成器はMersenne Twisterだけなのだけれど、暗号学的に安全な乱数生成器もあるほうがいいのではないかなと思って調査中。
Wikipediaに名前の挙がっている Blum-Blum-Shub法と Fortuna法の2つを調査。
線形合同法のようなより軽い乱数生成器もあると便利なのかなぁ。

      • -

Fortuna法は、/dev/randomなどで使われる乱数生成器のアルゴリズムらしい。Linuxで使うことができるらしい。以前のアルゴリズムはYarrowというアルゴリズムがあって、Mac OS XFreeBSDで使われているそうな。
http://en.wikipedia.org/wiki/Fortuna_%28PRNG%29
http://www.linux.or.jp/JM/html/LDP_man-pages/man4/random.4.html

      • -

ライブラリとして作るなら、Blum-Blum-Shub法の方が適切なのかな。
あと、/dev/randomへ簡単にアクセスするためのライブラリがあると便利かも。Windowsでは、何を使うのだろう?
http://en.wikipedia.org/wiki/Blum_Blum_Shub

      • -

Blum-Blum-Shubの実装のサンプルとしてGMPBBSというツールのソースを読んでいます。
http://firefly.is-a-geek.org/gmpbbs/
これは、GMPという任意精度数の演算ライブラリを使っているので、そちらも確認。
http://www.swox.com/gmp/

      • -

実用的には、/dev/randomへのアクセスライブラリがあれば十分かも。

      • -

http://en.wikipedia.org/wiki/Pseudorandom_number_generator
でリンクされていた
http://www.acsac.org/2003/papers/79.pdf
がよくまとまっているような気がするので、読んでみる。