128/256 ビットの乱数を生成できる疑似乱数生成アルゴリズムを探しています。セキュリティと暗号化の整合性は重要ではありません。シンプルさとパフォーマンスが何よりも重視されます。理想的には、アルゴリズムが最新の携帯電話プラットフォームで使用できるようになります。そのようなアルゴリズムをお勧めできますか? それは実現可能ですか?前もって感謝します!
3 に答える
SFMT: SIMD 指向の Fast Mersenne Twister を試す必要があります。
この PRNG は、プロセッサが提供するベクトル命令を利用して、128 ビット整数を生成するように設計されています。
この PRNG の詳細については、私が回答した別の投稿 (SFMT:最高の疑似乱数ジェネレーター) をご覧ください。
完全な説明については、SFMT をダウンロードできる公式ページを参照してください: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
http://burtleburtle.net/bob/rand/smallprng.html
これは小さく (状態の 128 ビット)、高速であり、現時点で利用可能なすべての汎用統計テストに合格します。これまでの回答でリンクされている他のすべての PRNG は、迅速にテストに失敗します。MWC ベースの PRNG は多くのテストに失敗しますが、SFMT はバイナリ マトリックス ランク/線形複雑度タイプのテストのみに失敗します。
他の人が言ったように、128 ビットを取得するには、連続した 32 ビット出力を連結するだけです。通常の出力関数が生成する PRNG 状態から、より多くのビットを強制的に抽出しないでください。通常、出力品質が大幅に低下します。
シンプルさが最優先事項である場合は、この記事のジェネレーターをご覧ください。ジェネレーターの心臓部は、わずか 2 行のコードです。これは Mersenne Twister のような最先端のものではありませんが、より単純であり、優れた統計的特性を備えています。