mt_rand()
PHPの結果は暗号的に強力ではないため、セキュリティの目的でPHPを使用するべきではないことを私は知っています。しかし、多くのPHPコードはまさにそれを実行するか、より適切なランダム性のソースが利用できない場合のフォールバックとして使用します。
それで、それはどれほど悪いですか?mt_rand
シードにはどのようなランダム性のソースが使用されますか?mt_rand
また、暗号化アプリケーションには他にセキュリティ上の問題がありますか?
mt_rand()
PHPの結果は暗号的に強力ではないため、セキュリティの目的でPHPを使用するべきではないことを私は知っています。しかし、多くのPHPコードはまさにそれを実行するか、より適切なランダム性のソースが利用できない場合のフォールバックとして使用します。
それで、それはどれほど悪いですか?mt_rand
シードにはどのようなランダム性のソースが使用されますか?mt_rand
また、暗号化アプリケーションには他にセキュリティ上の問題がありますか?
PHP 5.4ではmt_rand
、最初に使用されたときに自動的にシードされます(PHPソース)。シード値は、現在のタイムスタンプ、PHPプロセスPID、およびPHPの内部LCGによって生成された値の関数です。以前のバージョンのPHPのソースを確認しませんでしたが、ドキュメントには、このシードアルゴリズムがPHP5.2.1以降で使用されていることが示されています。
背後にあるRNGアルゴリズムmt_rand
は、メルセンヌツイスターです。それが暗号化アプリケーションには完全に不適切であることが明確に文書化されているため(残念ながら、PHPドキュメントページにはありません)、「どれほど悪い」かについて話すことは実際には意味がありません。暗号強度のランダム性が必要な場合は、文書化された暗号強度ジェネレーターを使用してください。
更新: crypto.SEからのこの質問もご覧になることをお勧めします。