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


CA5351: не используйте неисправные алгоритмы шифрования

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

Примечание.

Это предупреждение последний раз обновлялось в ноябре 2015 г.

Причина

Функции хэширования, такие как MD5 , и алгоритмы шифрования, такие как DES и RC2 , могут представлять значительный риск и приводить к раскрытию конфиденциальных сведений методами простых атак, таких как атаки методом подбора и хэш-конфликты.

Перечисленные ниже алгоритмы шифрования подвержены действию известных криптоаналитических атак. Криптографический хэш-алгоритм MD5 подвержен действию атак хэш-конфликтов. В зависимости от использования хэш-конфликт может привести к имитации, подделке или другим атакам на системы, которые зависят от уникального криптографического результата функции хэширования. Алгоритмы шифрования DES и RC2 подвержены действию криптоаналитических атак, которые могут привести к случайному раскрытию зашифрованных данных.

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

Ослабленные алгоритмы шифрования не считаются безопасными, и их использование не рекомендуется. Хэш-алгоритм MD5 восприимчив к известным атакам коллизий, хотя конкретная уязвимость может варьироваться в зависимости от контекста. Особенно уязвимыми являются хэш-алгоритмы, используемые для обеспечения целостности данных (например, с помощью подписи файла или цифрового сертификата). В этом контексте злоумышленники могут создать два отдельных комплекта данных, чтобы можно было заменить безопасные данные вредоносными без изменения хэш-значения или аннулирования связанной цифровой подписи.

Для алгоритмов шифрования:

  • шифрованиеDES содержит небольшой размер ключа, который может быть принудительно применен менее чем за день;

  • шифрованиеRC2 уязвимо к атакам, связанным с ключом, когда злоумышленник обнаруживает математические связи между всеми значениями ключа.

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

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

Используйте более криптографически надежные варианты.

  • Для MD5 используйте хэши в семействе SHA-2 (например SHA512, SHA384, SHA256).

  • Для DES и RC2 используйте шифрование Aes .

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

Не отключайте предупреждение из этого правила, если его не проверил криптограф.

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

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

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

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

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

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

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

Следующие примеры псевдокода иллюстрируют шаблон, обнаруживаемый этим правилом, и возможные альтернативы.

Нарушение хэширования MD5

using System.Security.Cryptography;
...
var hashAlg = MD5.Create();

Решение.

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

Нарушение шифрования RC2

using System.Security.Cryptography;
...
RC2 encAlg = RC2.Create();

Решение.

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}

Нарушение шифрования DES

using System.Security.Cryptography;
...
DES encAlg = DES.Create();

Решение.

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}