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


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

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

Примечание.

Это предупреждение последний раз обновлялось в ноябре 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())
{
  ...
}