BigCrushはTestU01にある統計的乱数の検定バッテリーのうちの1つで、他にもSmallCrushとCrushがあり、精度と計算時間に応じて好きなバッテリーを選んで使えるようになっています。BigCrushが一番厳しい検定でもって検定していて、計算も時間がかかります。TestU01自体はMarsagliaのdiehard検定などを乱数の専門家でなくても利用しやすい形にしたライブラリです。
- TestU01のBigCrushがどのような検定をするのかは、ユーザガイドに書かれています。それぞれの検定の中身は統計的仮説検定や確率論、情報理論の知識がないと正確に把握できないと思います。
- TestU01のBigCrushをパスした乱数生成法はその意味でもってまともな乱数が作れるということです。TestU01のBigCrushをパスしたからといってパスしていないものより絶対良いと言う保証はありませんが、参考にはなります。
- どの種類のMersenne TwisterがTestU01のBigCrushにパスする・しないのかは知りませんが、もし、Mersenne Twisterよりも速く、BigCrushをパスする乱数生成法があるなら、BigCrushを指標とする意味でMersenne Twisterより使い勝手が良いと言えます。しかし、BigCrushではチェックできない乱数の性質も数多くあるので、BigCrushをパスしたからといって飛びつくのは危険だと思います。そもそもこういう検定のセットは特定の乱数生成方法を合格するように作ることができてしまうので、気をつけなければいけません。BigCrushが公平だと思うなら、信じれば良いと思います。
ちなみにMarsagliaのbirthday spacings testは誕生日攻撃と関係性がないわけではないですが、統計的に見て乱数であるかどうかの統計的検定であって、乱数の暗号的な安全性とは関係ないです。とりあえずモンテカルロ法使いまくりますとかでないかぎり、Mersenne Twisterかxorshift128+かxoshiro256**などを現時点では使えば良いと思います。
Mersenne twisterからxorshift128+に変えた例: https://v8.dev/blog/math-random
ほかにもO'NeilのPCGなどがありますが、論文の形になっておらず、専門家による評価が作者以外のものがあまりないので、自分で判断できない身としては、なんとも言えません。実用上で使用している人もいるようです。その辺の事情をブログに上げている研究者もいるようです。
https://lemire.me/blog/2017/08/15/on-melissa-oneills-pcg-random-number-generator/
と思いましたがxorshift128+が検定を通らない話は最近論文にしたようですね。
https://arxiv.org/abs/1810.05313
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/16 13:48