擬似乱数生成器の評価

12
擬似乱数生成器の評価 2015-08-10 大ビール大会 ハッシュタグ: #jjug 宮川 拓

Upload: taku-miyakawa

Post on 19-Aug-2015

505 views

Category:

Technology


2 download

TRANSCRIPT

擬似乱数生成器の評価

2015-08-10 大ビール大会

ハッシュタグ: #jjug

宮川 拓

@miyakawa_taku

JJUG幹事

SI屋で賃労働

尾上部屋の里山関のファンです

オレオレJVM言語Kinkを作っています

https://bitbucket.org/kink/kink

(型はないよ)

自己紹介 #jjug

2/12

#jjug要旨

Kinkの標準擬似乱数生成器として

WELL1024aというアルゴリズムを

採用しました

RubyやRなどで用いられている

Mersenne Twisterに比べて

よりバラけるから素敵らしいです

3/12

「乱数」の種類 #jjug

サイコロハードウェア乱数生成器

特殊なCPU命令

使用例 : SecureRandomの種を作る

真の乱数 : 数列が再現できない

擬似乱数 : 種を元に数列が再計算できる

暗号論的に安全な擬似乱数 そうでもない擬似乱数

java.util.SecureRandom java.util.Random

例 : 暗号鍵を作る 例 : シミュレーション

4/12

#jjug擬似乱数生成器の評価基準

速いこと

暗号論的に安全なこと(必要なら)

途中までの数列から以降が推測できない

途中の内部状態がバレてもそれ以前の

数列が推測できない

バラけること

5/12

バラけるってなにさ

#jjug

6/12

バラけかたの見方(かんたん版) #jjug

乱数列→ 31 41 59 26 53 58 97 93 23 84 ...

x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 ...

(x i , y i )を二次元平面にプロットしてみる

7/12

それなりの擬似乱数 #jjug

gl ibcのrand()

下位10ビット

だいたい

バラけてそう

8/12

なんか日本地図が

見える気がする

よくない擬似乱数 #jjug

昔のUnixの

rand()

下位10ビット

これはひどい

9/12

ドット柄で

シャレオツ

#jjugバラけかたの見方(☆本格的☆)

dieharderコマンド:

バイト列を入力に取る

入力がどれくらいバラけているか、

複数種類のテストを流す .

中のアルゴリズムを勘案せず、

ブラックボックス的にテストする

10/12

#jjugdieharderの結果

110

112

112

99

112

4

2

2

6

2

9

114

Well1024a

glibc

Mersenne Twister

JavaのRandom

昔のUnix

glibc

PASSED WEAK FAILED

パッと見赤いのは厳しい

でも、青けりゃいいってもんじゃないみたい

(アルゴリズムの中身を見てないので)

11/12

#jjug続きはWebで!

http://d.hatena.ne.jp/miyakawa_taku/2

0141231

12/12