CA5358:安全ではない暗号モードを使用しないでください
プロパティ | 値 |
---|---|
ルール ID | CA5358 |
Title | 安全ではない暗号モードを使用しないでください |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 8 では既定で有効 | いいえ |
原因
承認されていない次の安全でない暗号化モードのいずれかを使用しています。
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
規則の説明
これらのモードは、攻撃に対して脆弱であり、機密情報の漏えいを引き起こす可能性があります。 たとえば、ECB
を使用してプレーンテキスト ブロックを暗号化すると、常に同じ暗号テキストが生成されるため、2 つの暗号化されたメッセージが同一かどうかを簡単に判断できます。 承認済みのモードを使用すると、これらの不要なリスクを回避できます。
違反の修正方法
- 承認済みのモード (System.Security.Cryptography.CipherMode.CBC、System.Security.Cryptography.CipherMode.CTS) のみを使用します。
どのようなときに警告を抑制するか
次の場合は、このルールの警告を抑制できます。
- 暗号化の専門家が暗号モードの使用方法をレビューし、承認した。
- 参照される 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
};
}
}
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET