web-dev-qa-db-ja.com

RNGCryptoServiceProviderによって生成されたキーでPBKDF2を使用するメリットはありますか?

RNGCryptoServiceプロバイダーを使用して固定長の32バイト(256ビット)パスワードを生成し、そのパスワードにRfc2898DeriveBytesを使用して暗号化キーを取得するプログラムがあります。

ただし、システムリソースを節約するために、元のパスワードを使用することを考えていました。 RNGCryptoServiceProviderによって生成された256ビットのパスワードでRfc2898DeriveBytesを使用するメリットはないのでしょうか。 256ビットはアルゴリズム(AES-256)のキーサイズなので、パスワードを変更せずに使用できます。 RNGは暗号的に安全で、キーを直接生成できますか?

5
Razick

「PBKDF2」は「パスワードベース」を意味する「PB」で始まります。これはpasswords用です。パスワードは単なる文字列ではありません。これは、人間が覚えて入力できる一連の文字です。キーとして(暗号的に強力なPRNGを使用して)生成する必要がある256ビットのキーは、文字としてエンコードしてもパスワードではありません。

別の言い方をすれば、PBKDF2の機能の中核はパスワードの固有の弱点に対処することです。パスワードは人間の頭脳で管理できるため、弱くてブルートフォースになる可能性があります。適切な暗号化キー(RNGCryptoServiceProviderで生成したものなど)にはこの弱点がないため、PBKDF2は必要ありません。

今では接線的な使用があります。PBKDF2はPBだけでなく、 [〜#〜] kdf [〜#〜] でもあります。設定可能な出力長があります。そのため、ソースキーが必要なものより短い場合、KDF、特にPBKDF2は、必要なだけのキーマテリアルを取得するのに便利です。たとえば、256ビットのキーがありますが、整合性をチェックするにはおよびを暗号化する必要があり、そのためには256ビットにする必要があります。 -ビットAESキーおよびHMACの256ビットキー。 256ビットのマスターキーを512ビットのキーマテリアルに変換するには、KDFが必要です。ただし、PBKDF2は、パスワード固有の特異性(入力は文字であり、ビットではありません。saltが必要です)は、そのような仕事のための一般。 SSL/TLS このようなジョブには、「PRF」と呼ばれるカスタム関数(SSLは暗号技術者にとって注目度の高いターゲットであるため、徹底的に調査されています)を使用します。

4
Thomas Pornin

はい、そうです。暗号化キーとしてCSPRNGを使用して生成されたランダムに生成された256ビットのパスワードを使用しても問題はありません。

RNGCryptoServiceProviderはWindows CSPRNG CryptGenRandomを直接呼び出すため、キーが安全なRNGで生成されていることを確認できます。

3
user10211