Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA5373 |
| Заголовок | Не использовать устаревшую функцию формирования ключа |
| Категория | Безопасность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Для создания ключа используются криптографически слабые методы формирования ключей System.Security.Cryptography.PasswordDeriveBytes и (или) Rfc2898DeriveBytes.CryptDeriveKey.
Описание правила
Это правило обнаруживает вызов методов наследования слабых ключей System.Security.Cryptography.PasswordDeriveBytes и Rfc2898DeriveBytes.CryptDeriveKey.
Метод System.Security.Cryptography.PasswordDeriveBytes использовал слабый алгоритм PBKDF1.
Rfc2898DeriveBytes.CryptDeriveKey не использует число итераций и соль из объекта Rfc2898DeriveBytes, что делает его слабым.
Устранение нарушений
При формировании ключа на основе пароля следует использовать алгоритм PBKDF2 с хэшированием SHA-2. Для этого можно использовать Rfc2898DeriveBytes.GetBytes.
Когда лучше отключить предупреждения
Отключите это предупреждение только после тщательной проверки и принятия риска, связанного с использованием PBKDF1.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение
На момент написания этой статьи следующий пример псевдокода иллюстрирует шаблон, обнаруживаемый этим правилом.
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes, string algname, string alghashname, int keySize, byte[] rgbIV)
{
rfc2898DeriveBytes.CryptDeriveKey(algname, alghashname, keySize, rgbIV);
}
}
Решение
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
{
rfc2898DeriveBytes.GetBytes(1);
}
}