この記事は次のように述べています
メルセンヌツイスターは非常に優れた疑似乱数ジェネレーターであるという事実にもかかわらず、非常に単純な理由から、それ自体では暗号的に安全ではありません。ジェネレータの将来のすべての状態は、ジェネレータが常に持つ状態から判断でき、その状態を提供するには、624個の32ビット出力または19,937個の1ビット出力で十分です。暗号化に役立つキーストリームを取得する1つの方法として、メルセンヌツイスターの出力でSHA-1などの暗号的に安全なハッシュ関数を使用することが推奨されています。
しかし、出力をダイジェストすると安全性が高まる理由については言及されていません。そして正直なところ、なぜそうなのかわかりません。メルセンヌツイスターの周期は2^19937-1ですが、私の推論は、線形合同法などの定期的なPRNGにも当てはまると思います。安全な一方向性関数hの特性により、hは単射関数と考えることができます(そうでない場合は衝突が発生する可能性があります)。したがって、定義域から範囲に値を1対1でマッピングするだけです。
この考えを念頭に置いて、ハッシュ値は元のメルセンヌツイスターが行ったのとまったく同じ定期的な動作を生成すると主張します。これは、1つの期間のすべての値を観察し、値が繰り返し開始された場合、将来のすべての値を完全に予測できることを意味します。
これは、パスワードベースの暗号化( PKCS#5 )に適用されるのと同じ原則に関連していると思います-パスワードのドメインは十分なエントロピーを提供しないため、パスワードをハッシュするだけでは追加のエントロピーは追加されません-それが必要な理由ですパスワードをハッシュする前にソルトします。ここでもまったく同じ原理が当てはまると思います。
最終的に私を納得させた1つの簡単な例:常に1の「乱数」を生成する非常に悪いPRNGがあるとします。次に、SHA-1が完全な一方向性関数であっても、SHA-1を出力に適用すると常に同じ値を生成するため、出力は以前と同じように予測可能になります。
それでも、その記事には真実があると信じたいので、確かに何かを見落としていたに違いありません。あなたは私を助けることができます?大部分、私は私の議論からシード値を省略しました-多分これは魔法が起こる場所ですか?