CA5373:廃止されたキー派生関数を使用しません

プロパティ
ルール ID CA5373
Title 廃止されたキー派生関数を使用しません
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

暗号強度の弱い脆弱なキー派生メソッド System.Security.Cryptography.PasswordDeriveBytes および/または Rfc2898DeriveBytes.CryptDeriveKey が、キーを生成するために使用されています。

規則の説明

この規則では、弱いキー派生メソッド System.Security.Cryptography.PasswordDeriveBytesRfc2898DeriveBytes.CryptDeriveKey の呼び出しを検出します。 System.Security.Cryptography.PasswordDeriveBytes で弱いアルゴリズム PBKDF1 が使用されました。 Rfc2898DeriveBytes.CryptDeriveKey では、脆弱さをもたらす、Rfc2898DeriveBytes オブジェクトからの反復回数およびソルトを使用しません。

違反の修正方法

パスワードベースのキー派生では、PBKDF2 アルゴリズムと SHA-2 ハッシュを使用する必要があります。 Rfc2898DeriveBytes.GetBytes を使用して実現できます。

どのようなときに警告を抑制するか

PBKDF1 の使用に関連するリスクが慎重にレビューされ、受け入れられている場合は、警告を抑制します。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

疑似コードの例

違反

この記事の執筆時点では、次の擬似コード サンプルはこの規則によって検出されたパターンを示しています。

using System;
using System.Security.Cryptography;
class TestClass
{
    public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes, string algname, string alghashname, int keySize, byte[] rgbIV)
    {
        rfc2898DeriveBytes.CryptDeriveKey(algname, alghashname, keySize, rgbIV);
    }
}

解決策

using System;
using System.Security.Cryptography;
class TestClass
{
    public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
    {
        rfc2898DeriveBytes.GetBytes(1);
    }
}