﻿# V5314\. OWASP\. Use of an outdated hash algorithm is not recommended\.

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

Уязвимости, связанные с использованием небезопасных алгоритмов шифрования, могут быть отнесены к следующей категории [OWASP Top 10 2021](https://owasp.org/Top10/):

* [A2: Cryptographic Failures](https://owasp.org/Top10/A02_2021-Cryptographic_Failures/)

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

```cpp
public String calculateHash(String input) {
    MessageDigest digest = null;

    try {
        digest = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException(e);
    }

    var output = digest.digest(input.getBytes(StandardCharsets.UTF_8));
    return Arrays.toString(output);
}
```

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

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

```cpp
public String calculateHash(String input) {
    MessageDigest digest = null;

    try {
        digest = MessageDigest.getInstance("SHA-256");
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException(e);
    }

    var output = digest.digest(input.getBytes(StandardCharsets.UTF_8));
    return Arrays.toString(output);
}
```

На [сайте Oracle](https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html) доступна документация по стандартным реализациям различных алгоритмов хеширования\. В случае хеширования в спецификации Java SE 21 присутствуют следующие небезопасные по современным стандартам алгоритмы:

* MD2
* MD5
* SHA1

Стоит отметить, что [JavaDoc по MessageDigest](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/MessageDigest.html) гарантирует наличие лишь алгоритмов SHA\-1 и SHA\-256 на каждой реализации Java platform\. На версиях Java до 11 в этом списке также присутствует MD5\.

На официальном сайте 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) представлены различные методики проверки приложения на наличие потенциальных уязвимостей, связанных с использованием небезопасных алгоритмов шифрования\.

## Дополнительные ссылки

* [Shattered](https://shattered.io/)