CA5373:廃止されたキー派生関数を使用しません
プロパティ | 値 |
---|---|
ルール ID | CA5373 |
Title | 廃止されたキー派生関数を使用しません |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 8 では既定で有効 | いいえ |
原因
暗号強度の弱い脆弱なキー派生メソッド System.Security.Cryptography.PasswordDeriveBytes および/または Rfc2898DeriveBytes.CryptDeriveKey が、キーを生成するために使用されています。
規則の説明
この規則では、弱いキー派生メソッド System.Security.Cryptography.PasswordDeriveBytes と Rfc2898DeriveBytes.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);
}
}
.NET