CA5358: не используйте небезопасные режимы шифров
Свойство | Значение |
---|---|
Идентификатор правила | CA5358 |
Заголовок | Не используйте небезопасные режимы шифрования |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Использование одного из следующих небезопасных режимов шифрования, которые не утверждены:
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
Описание правила
Эти режимы уязвимы для атак и могут привести к раскрытию конфиденциальной информации. Например, при использовании ECB
для шифрования блока в виде обычного текста всегда создается одинаковый шифр, поэтому можно легко определить идентичность двух зашифрованных сообщений. Использование утвержденных режимов позволяет избежать этих ненужных рисков.
Устранение нарушений
- Используйте только утвержденные режимы (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
};
}
}