11

私はいくつかの C# コードを理解しようとしていPasswordDeriveBytesますSystem.Security.Cryptography

.NET docsでは、 PBKDF2 である「PKCS#5 v2.0 標準」として指定されたドキュメントの後半にある「PBKDF1 アルゴリズムの拡張」を使用すると述べていPasswordDeriveBytesます (私が知る限り)。私が見つけたネット上のどこでも(ここStack Exchangeを含む)、誰もが「Rfc2898DeriveBytesを使用してください。Password *は非推奨であり、PBKDF1を使用しています」と言っています。しかし、msdn.microsoft.comのドキュメントの唯一の違いは、Rfc* バージョンが特に PBKDF2 に言及しているように思われます。ここで、Password* は「PBKDF1 の拡張」および「PKCS#5 v 2.0」と述べています。

では、2 つのクラスの違い (存在する場合) と、PBKDF2 パスワード キーの派生に一方を使用する必要がある理由を教えてください。

現在、同じデータを処理し、明示的にPBKDF2を使用して動作する他のコードは、実際にPasswordDeriveBytesPBKDF2も使用するか、PBKDF2が特定の状況下でPBKDF1と単に互換性があることを示唆していますが、それがランダムなものの副作用ではなく、その理由を誰も本当に理解していなくても、物事は魔法のように機能します(そして最終的にはおそらく魔法のように見事に壊れます).

4

4 に答える 4

0

PKCS#5 v2.0では、PBKDF1 と PBKDF2 の両方が定義されています。PBKDF1 は下位互換性のために前者であり、新しいアプリケーションには PBKDF2 を使用することもお勧めします。後者が前者よりも優れている理由はわかりませんが、2 つの .NET クラスは異なるが相互運用可能なアルゴリズムを使用しているようです。(おそらく、入力 + KDF ではなく、結果のキーのみが交換されているためです。)

于 2011-08-17T15:06:13.340 に答える