メルセンヌ・ツイスタ
↑ mersenne-random-pure64: Generate high quality pseudorandom numbers purely using a Mersenne Twister
↑ Sean Luke : Code
↑ Mersenne Twister in Java Script
↑ a Mersenne Twister implementation in javascript. Makes up for Math.random() not letting you specify a seed value. · GitHub
↑ Luiz Henrique de Figueiredo: Libraries and tools for Lua
↑
↑
↑ Search for "module:Math::Random::MT::Auto" - metacpan.org
↑ Pure-PHP Mersenne Twister
↑ R: Random Number Generation
↑ Mersenne twister
↑
↑
↑ Mersenne Twister - Random number generator · GitHub
↑
↑ Mersenne Twister in BASIC
多くのアプリケーションにとって、メルセンヌ・ツイスタは優れた疑似乱数生成法である。しかしながら、実際にプログラムで利用するにあたっては、いくつか留意すべき点がある。
暗号論的擬似乱数列生成器 (CSPRNG) ではない。 メルセンヌ・ツイスタは線形漸化式によって生成されるため、他の一般の疑似乱数生成法と同様に予測可能である。従って暗号用途で利用するには同様に、暗号学的ハッシュ関数のような非可逆な操作を通さなければならない。CryptMTやFubukiはメルセンヌ・ツイスタをベースとしているが、単純にその出力を鍵ストリームとして平文と合成しているわけではない。
内部ベクトルが大きい メルセンヌ・ツイスタは内部に623個の32ビット長の状態ベクトルを持つ。つまり、一般的な擬似乱数列生成器と比較して動作に必要なメモリ量(ワーキングメモリ)が大きい。開発者による実装では32ビット版で624ワード(2496バイト)のワーキングメモリを要する。 第三者による高速化を狙った実装(並列計算を行うなど)は、より多くのワーキングメモリを要する(例えば倍の4992バイトなど)。 内部ベクトルを初期化するシード(乱数種)として19936ビットという長い乱数が必要となるため、シードや物理乱数を擬似乱数や暗号学的ハッシュ関数で伸長し、場合によってはさらにシードや物理乱数でベクトルを撹拌することでこの問題と後述する0の量を解決する必要がある。 (当然であるが)メルセンヌ・ツイスタを初期化する擬似乱数にメルセンヌ・ツイスタを用いることはできない。初期化に使用するメルセンヌ・ツイスタを初期化する長いベクトルが用意できないからである。