﻿# V5613\. OWASP\. Use of outdated cryptographic algorithm is not recommended\.

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

Уязвимости, связанные с использованием небезопасных алгоритмов шифрования, могут быть отнесены к следующим категориям [OWASP Top Ten 2017](https://owasp.org/www-project-top-ten/2017/):

* [A2: Broken Authentication](https://owasp.org/www-project-top-ten/2017/A2_2017-Broken_Authentication.html)
* [A3: Sensitive Data Exposure](https://owasp.org/www-project-top-ten/2017/A3_2017-Sensitive_Data_Exposure)

Рассмотрим пример:

```cpp
private static string CalculateSha1(string text, Encoding enc)
{
  var buffer = enc.GetBytes(text);
  using var cryptoTransformSha1 = new SHA1CryptoServiceProvider(); // <=
  
  var hash = BitConverter.ToString(cryptoTransformSha1.ComputeHash(buffer))
                         .Replace("-", string.Empty);

  return hash.ToLower();
}
```

При проверке фрагмента анализатор сформирует предупреждение о том, что использование алгоритма SHA1 не рекомендуется\. В данном случае проблема алгоритма состоит в наличии широко известных проблем с коллизией\. Таким образом, его использование не является безопасным\.

Вместо устаревших алгоритмов следует использовать более современные\. В примере, представленном выше, одним из решений может быть замена SHA1 на SHA256:

```cpp
private static string CalculateSha256(string text, Encoding enc)
{
  var buffer = enc.GetBytes(text);
  using var cryptoTransformSha256 = new SHA256CryptoServiceProvider();

  var hash = BitConverter.ToString(cryptoTransformSha256.ComputeHash(buffer))
                         .Replace("-", string.Empty);

  return hash.ToLower();
}
```

На [сайте Microsoft](https://docs.microsoft.com/en-us/dotnet/standard/security/cryptography-model) доступна документация по стандартным реализациям различных алгоритмов шифрования\. Как правило, классы, реализующие устаревшие алгоритмы, отмечены в документации специальным предупреждением\. Ниже приведены некоторые из них:

* [DES](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.des?view=net-5.0)
* [RC2](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rc2?view=net-5.0)
* [Rijndael](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rijndael?view=net-5.0)
* [TripleDES](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.tripledes?view=net-5.0)
* [DSA](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.dsa?view=net-5.0)
* [RIPEMD160](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.ripemd160?view=netframework-4.8)
* [HMACRIPEMD160](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.hmacripemd160?view=netframework-4.8)
* [HMACMD5](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.hmacmd5?view=net-5.0)
* [HMACSHA1](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.hmacsha1?view=net-5.0)
* [MD5](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5?view=net-5.0)
* [SHA1](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.sha1?view=net-5.0)

Использование классов, наследующих указанные, также не рекомендуется\.

На официальном сайте OWASP по [ссылке](https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/09-Testing_for_Weak_Cryptography/04-Testing_for_Weak_Encryption) представлены различные методики проверки приложения на наличие потенциальных уязвимостей, связанных с использованием небезопасных алгоритмов шифрования\.