CA5358:安全ではない暗号モードを使用しないでください

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

原因

承認されていない次の安全でない暗号化モードのいずれかを使用しています。

規則の説明

これらのモードは、攻撃に対して脆弱であり、機密情報の漏えいを引き起こす可能性があります。 たとえば、ECB を使用してプレーンテキスト ブロックを暗号化すると、常に同じ暗号テキストが生成されるため、2 つの暗号化されたメッセージが同一かどうかを簡単に判断できます。 承認済みのモードを使用すると、これらの不要なリスクを回避できます。

違反の修正方法

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

次の場合は、このルールの警告を抑制できます。

  • 暗号化の専門家が暗号モードの使用方法をレビューし、承認した。
  • 参照される CipherMode が暗号化操作に使用されない。

警告を抑制する

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

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

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

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

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

疑似コードの例

ECB を Mode プロパティに割り当てる

using System.Security.Cryptography;

class ExampleClass {
    private static void ExampleMethod () {
        RijndaelManaged rijn = new RijndaelManaged
        {
            Mode = CipherMode.ECB
        };
    }
}

値 ECB の使用

using System;
using System.Security.Cryptography;

class ExampleClass
{
    private static void ExampleMethod()
    {
        Console.WriteLine(CipherMode.ECB);
    }
}

解決策

using System.Security.Cryptography;

class ExampleClass {
    private static void ExampleMethod () {
        RijndaelManaged rijn = new RijndaelManaged
        {
            Mode = CipherMode.CBC
        };
    }
}