CA5351: не используйте ослабленные алгоритмы шифрования
Свойство | Значение |
---|---|
Идентификатор правила | CA5351 |
Заголовок | Не используйте неисправные криптографические алгоритмы |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | 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())
{
...
}