CA5350:脆弱な暗号アルゴリズムを使用しないでください

プロパティ
ルール ID CA5350
Title 脆弱な暗号アルゴリズムを使用しないでください
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

Note

この警告の最終更新は 2015 年 11 月です。

原因

TripleDES などの暗号化アルゴリズムと SHA1RIPEMD160 などのハッシュ アルゴリズムは脆弱であると見なされています。

これらの暗号化アルゴリズムは、最新の暗号化アルゴリズムほどにはセキュリティが保証されません。 暗号ハッシュ アルゴリズム SHA1RIPEMD160 は、最新のハッシュ アルゴリズムよりも耐衝突性が低くなります。 暗号化アルゴリズム TripleDES は、最新の暗号化アルゴリズムよりもセキュリティ ビットの数が少なくなっています。

規則の説明

現在、さまざまな理由で弱い暗号化アルゴリズムとハッシュ関数が使用されていますが、保護対象のデータの機密性を保証するためにこれらを使用しないでください。

この規則がトリガーされるのは、コードで 3DES、SHA1、RIPEMD160 のいずれかのアルゴリズムが検出され、ユーザーに警告がスローされるときです。

違反の修正方法

暗号強度の高いオプションを使用します。

  • TripleDES 暗号化の場合、 Aes 暗号化を使用します。

  • SHA1 または RIPEMD160 のハッシュ関数の場合、SHA-2 ファミリのいずれか (SHA512SHA384SHA256など) を使用します。

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

データに必要な保護レベルがセキュリティ保証を必要としない場合には、この規則による警告を抑制してください。

警告を抑制する

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

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

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

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

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

疑似コードの例

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

SHA-1 ハッシュ違反

using System.Security.Cryptography;
...
var hashAlg = SHA1.Create();

解決方法:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

RIPEMD160 ハッシュ違反

using System.Security.Cryptography;
...
var hashAlg = RIPEMD160Managed.Create();

解決方法:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

TripleDES 暗号化違反

using System.Security.Cryptography;
...
using (TripleDES encAlg = TripleDES.Create())
{
  ...
}

解決方法:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}