Бөлісу құралы:


CA5402: используйте CreateEncryptor со значением по умолчанию IV

Свойство Значение
Идентификатор правила CA5402
Заголовок Используйте CreateEncryptor с использованием вектора инициализации по умолчанию.
Категория Безопасность
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 Нет
Применимые языки C# и Visual Basic

Причина

rgbIV не может быть заданным по умолчанию при использовании System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor.

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

Для предотвращения атак перебором по словарю в симметричном шифровании всегда нужно использовать невоспроизводимый вектор инициализации.

Это правило похоже на правило CA5401, но анализ не может определить, что вектор инициализации, несомненно, является значением по умолчанию.

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

Используйте значение по умолчанию rgbIV явным образом, то есть используйте перегруженную версию System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor, не имеющую параметров.

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

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

  • Параметр rgbIV был сгенерирован System.Security.Cryptography.SymmetricAlgorithm.GenerateIV.
  • Вы уверены, что параметр rgbIV действительно является случайным и не воспроизводимым.
  • Вы уверены, что используется вектор инициализации.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

Примеры псевдокода

using System;
using System.Security.Cryptography;

class ExampleClass
{
    public void ExampleMethod(byte[] rgbIV)
    {
        AesCng aesCng  = new AesCng();
        Random r = new Random();

        if (r.Next(6) == 4)
        {
            aesCng.IV = rgbIV;
        }

        aesCng.CreateEncryptor();
    }
}

Решение

using System.Security.Cryptography;

class ExampleClass
{
    public void ExampleMethod()
    {
        AesCng aesCng  = new AesCng();
        aesCng.CreateEncryptor();
    }
}