擬似乱数生成ルーチン 「多段M系列法」
新開発の乱数で、次のような特徴があります。
- フリーソフトであり、修正BSDライセ
ンス類似のライセンスに従って、再配布できるものとします。
- ストリーム暗号に使うことを想定して作ったものですが、大規模シミュレーションのにも使えます。
- M系列乱数を元に作成したものであり、 既約多項式x1279+x861+1
を用いていますから、周期が21279-1
以上であることが期待されます。
- 32bit乱数を39個いっぺんに生成し、特殊な変換をしながら1個ずつ取り出します。
- M系列乱数を何段を積み重ねることができ、それにより暗号強度を格段に向上させられます。また、周期は、段数を積み重ねることに
よっていくらでも長くすることが出来ると思われます。下にあるのコードは、M系列乱数が1段のものと、10段積み重ねたものです。暗号に用いるときは、2
段以上にした方が安全です。
- ブロック暗号は、暗号強度を高めるために段数を増やすと、段数に比例して処理時間がかかりますが、「多段M系列法」は、段数を増やしても処理
時間はわずかに増えるだけです。ただし、上位の段が書き変わるとき、遅延が生じます。
- ワーキングメモリは、(40×段数)ワード程です。ただし、1ワードは32bit長とします。
- 乱数性は統計テストで確かめています。DIEHARD TESTでは、幾分乱数から外れた結果がでることがありますが、NIST
Special Publication
800-22rev1では良い結果がでています。以下にある検定レポートは、NIST
Special Publication
800-22rev1 の乱数テストを、1回のテストに使うデータを106bit
として、1000回のテストを行い、それら1000回を1つのテストとした結果の1つを掲載しました。ただし、テストの中のFFTは、FFTのプログラム
自体に問題があるので省略しました。
- シュミレーションに使う場合は、コード中で、#define DANSUU 1 と変更すると高速になります。