Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | 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())
{
...
}