ワンタイム パスワードを生成する方法を決定するために、いくつかの調査を行っています。私がこれまでに遭遇した資料に基づいて、誰もがランダム/疑似ランダムキーを使用してハッシュ関数と暗号関数を使用しています。基本的なランダム機能をワンタイム パスワードとして使用できないのはなぜですか? パスワードの生成がサーバーでのみ発生する必要があり、(テキスト経由で) クライアントに送信される場合、そのアプローチに欠点はありますか?
2 に答える
4
非暗号化 PRNG は安全に設計されていません。一般的な弱点は次のとおりです。
- 小さすぎる種。たとえば、.net は 31 ビット整数を使用しますが、これは数秒で列挙できます。攻撃者はいくつかの出力を観察し、期待に一致しないシードを排除します。シードが 1 つになると、将来のすべての出力を予測できます。
- 予測可能な種。例えば時間。これは、予測可能な出力に直接つながるか、少なくとも考慮すべきシードの数を絞り込みます。たとえば、時間がミリ秒単位で、RNG が 20 ミリ秒に初期化されたときを攻撃者が知っている場合、シードを推測して出力を予測する可能性は 1/20 です。
- 十分な出力があれば、攻撃者は PRNG の内部状態を回復したり、将来の出力を予測したりできます。これは、 Mersenne Twisterのようなアルゴリズムの場合です。
=> 代わりに暗号化 PRNG を使用してください。/dev/urandom
Linux とCryptGenRandom
Windows で。言語にこれらのラッパーが組み込まれている場合は、それらを使用してください。Java では、それがSecureRandom
クラスです。
于 2015-08-17T11:19:24.773 に答える