私は、ウェブページ上で実行されるパスワードジェネレータを開発しています。.netの組み込み機能を使用していますRandom()
; 乱数を生成するために機能します。次に、文字列からさまざまな大文字/小文字と数字を選択するために使用されます。
私が疑問に思っているのは、使用するのがどれほど安全かということですRandom()
。パスワードを生成する機能。これらのパスワードは2分後に期限切れになり、ページはIPアドレスごとに3回しか生成できないことに注意してください。
Random
パスワードセキュリティが必要な場合は使用しないでください。
を使用しRNGCryptoServiceProvider
ます。
暗号化サービスプロバイダー(CSP)が提供する実装を使用して、暗号化乱数ジェネレーター(RNG)を実装します。このクラスは継承できません。
System.Random
安全ではありません。最大の弱点は、予測可能なソースからシードされた31ビットのシードしかないことです(Environment.TickCount
)。したがって、のインスタンスがいつ作成されたかを知っている攻撃者Random
は、可能なパスワードをほんの一握りに絞り込むことができます。
アルゴリズム自体も安全ではありません。それらのいくつかを観察することから、将来のアウトプットを予測することはおそらく可能です。
安全な乱数を生成するSystem.Security.Cryptography.RandomNumberGenerator
など、から派生したクラスを使用します。RNGCryptoServiceProvider
安全なランダム文字列を生成するには、C#でランダムな8文字の英数字の文字列を生成するにはどうすればよいですか?。そこにある他のほとんどの答えは安全ではないことに注意してください。