擬似乱数生成ルーチン 「多段M系列法」


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

最初のページ に戻る