0

私のWebサービスでは、強力で文字列として表すことができるパスワードを生成する必要があります。現在、私System.Security.Cryptography.RandomNumberGeneratorはランダムバイトの十分な大きさの配列を使用して生成し(それが本当に十分に大きいと仮定しましょう)、base 64を使用してエンコードし、それをユーザーに返します。

このようにして、暗号化に適したPRNG(クラスではありません。クラスが問題ない理由の詳細についてはこの質問を参照してくださいRandomRandom使用して生成され、文字列として表して電子メールで送信できるランダムなパスワードを取得します。インターフェイスで入力するか、ユーザーが入力またはコピーして貼り付けます。

セキュリティの観点から、このスキームに本質的に何か問題がありますか?

4

2 に答える 2

3

セキュリティの観点からこのスキームに本質的な問題があるかどうかに関しては、電子メールでパスワードを送信すること自体がセキュリティ リスクであると考えます。電子メールが送信時に暗号化されている場合でも、制御できないメディアに保存されます。

さらに、生成しているパスワードの種類はユーザーに記憶されないため、付箋などに書き留めて、すべての人に見られる可能性が高くなります。

于 2012-04-28T15:16:25.433 に答える
2

RandomクラスとRandomNumberGeneratorクラスは基本的に疑似乱数ジェネレーターであり、アルゴリズムに基づいているため、出力のランダム性には制限があります。

ただし、 Randomと比較すると、RandomNumberGeneratorクラスは、ランダム性を確保するために他のかなりの数の環境パラメーター (http://en.wikipedia.org/wiki/CryptGenRandom) を使用するため、暗号学的に安全な疑似乱数ジェネレーターと見なされます。パラメータの一部は次のとおりです。

  • 現在のプロセス ID
  • 現在のスレッド ID
  • 起動時からのティック数
  • 現在時刻
  • 各種高精度パフォーマンスカウンター
  • ユーザーの環境ブロックの MD4 ハッシュ
  • 高精度の内部 CPU カウンター

ランダム性に関する興味深い読み物である次のリンクを参照してください。


あなたの場合のようにパスワードを生成するなどの通常の使用シナリオでは、RandomNumberGeneratorクラスの使用で十分です (http://msdn.microsoft.com/en-us/library/system.random.aspx):

「たとえば、ランダム パスワードの作成に適した暗号的に安全な乱数を生成するには、System.Security.Cryptography.RNGCryptoServiceProvider などの System.Security.Cryptography.RandomNumberGenerator から派生したクラスを使用します。」

于 2012-04-28T17:24:21.863 に答える