次のコードは、PRNG(疑似乱数ジェネレーター)Random
クラスを使用して、本来使用されていた暗号化された安全性の代わりに、初期一時パスワードのパスワード文字を生成しますRNGCryptoServiceProvider
。
ただし、PRNGのシードを生成するためにを使用するため、セキュリティが問題にならないPRNGを使用する場合の一般的な方法のように、現在の時刻に基づいてシードするのではなく、何かRNGCryptoServiceProvider
価値があると思います。
私の質問は、パスワード生成システムを危険にさらし、新しいユーザーのパスワードを推測するために、この攻撃を行うのはどれほど簡単か難しいかということです。
// Generate 4 random bytes.
byte[] randomBytes = new byte[4];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(randomBytes);
// Convert 4 bytes into a 32-bit integer value.
int seed = (randomBytes[0] & 0x7f) << 24 | randomBytes[1] << 16 | randomBytes[2] << 8 | randomBytes[3];
// Now, this is real randomization.
Random random = new Random(seed);
次に、コードrandom.Next()
はパスワード文字列を入力するための文字を生成するために使用します。
免責事項:このコードは私の発明ではありません。それについて私を責めたり、それを修正する方法についての提案を提供したりしないでください。私はそれを修正する方法を知っています、そして私はそれが悪いことを知っています。そのように返信する時間を無駄にしないでください。この効果に対するコメントまたは回答は、スパムとしてフラグが付けられます。私はそれを私たちのコードで見つけただけで、その「セキュリティ」プロパティに興味があります。