Поделиться через


CA5358: не используйте небезопасные режимы шифров

Свойство Значение
Идентификатор правила CA5358
Заголовок Не используйте небезопасные режимы шифрования
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

Использование одного из следующих небезопасных режимов шифрования, которые не утверждены:

Описание правила

Эти режимы уязвимы для атак и могут привести к раскрытию конфиденциальной информации. Например, при использовании ECB для шифрования блока в виде обычного текста всегда создается одинаковый шифр, поэтому можно легко определить идентичность двух зашифрованных сообщений. Использование утвержденных режимов позволяет избежать этих ненужных рисков.

Устранение нарушений

Когда лучше отключить предупреждения

Можно отключить вывод предупреждений для этого правила в следующих случаях:

  • Специалисты по криптографии проанализировали и утвердили использование режима шифрования.
  • Указанный режим 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
        };
    }
}