# Обзор популярных алгоритмов хеширования

Первую часть материала, где мы рассказали, что такое хеширование, [читайте здесь](https://notes.kraken-security.ru/kraken/krupicy-znanii/chto-takoe-kheshirovanie-i-kak-ego-ispolzuyut-v-ib). А теперь разберем некоторые из алгоритмов.

### MD5

Один из самых популярных алгоритмов хеширования. Его не рекомендуют сегодня для использования, потому что в нём есть несколько известных уязвимостей. Ключевая особенность — преобразует входные данные произвольной длины в хеш-значение с фиксированной длиной 128 бит.&#x20;

Поэтому его часто используют для проверки исходных данных. Любое изменение приведет к кардинально другому хеш-значению. Другие сферы применения: создание хеш-таблиц и проверка целостности данных в некритических системах.&#x20;

![Как работает MD5](https://proznaniya.media/wp-content/uploads/2023/04/algoritmy-heshirovaniya-dannyh.jpg)

| +                                                                                 | -                                                                                                                     |
| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| Быстрое и простое хеширование данных                                              | Небезопасен для криптографических задач, так как существуют атаки, которые позволяют создавать коллизии в хеш-функции |
| Может использоваться для проверки целостности данных и обнаружения подмены данных | Не рекомендуют для критических систем: электронных подписей, паролей                                                  |
| Поддержка в различных ОС и языках программирования                                |                                                                                                                       |

### SHA-1

Преобразует произвольные данные переменной длины в хеш-значение с фиксированной длиной 160 бит. Тоже устаревший алгоритм, и тоже не стоит использовать его для критических систем.&#x20;

![Как работает SHA-1](https://proznaniya.media/wp-content/uploads/2023/04/kakie-byvayut-algoritmy-heshirovaniya.jpg)

| +                                                                        | -                                                                                                                     |
| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| Надежное хеширование данных, используют для проверки целостности         | Небезопасен для криптографических задач, так как существуют атаки, которые позволяют создавать коллизии в хеш-функции |
| Быстрый и простой в использовании                                        | Не рекомендуют для критических систем: электронных подписей, паролей. SHA-1 надежнее MD5, но недостаточно безопасен   |
| Используется в некоторых стандартах и протоколах, например, в SSL и TLS. | Объявлен небезопасным, поэтому многие организации переходят на более современные и безопасные алгоритмы хеширования   |

#### SHA-2

Набор алгоритмов хеширования данных. В него входят хеш-функции с разными размерами выходных значений: SHA-224, SHA-256, SHA-384 и SHA-512.  Цифры — это количество бит. \
\
Больше размера выходного хеша → выше высокой стойкость к атакам. Но есть и минус: нужно будет больше мощностей. &#x20;

SHA-2 один из самых распространенных. Довольно безопасен для применения в криптографических целях. Но всё-таки есть атаки, которые могут создать коллизии. Благо, для них требуются огромные мощности, поэтому они не так страшны: их можно отражать.&#x20;

![Как работает SHA-2](https://proznaniya.media/wp-content/uploads/2023/04/chto-takoe-heshirovanie-dannyh.png)

|                                                                                                                |                                                                                            |
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Высокая стойкость к коллизиям, считается одним из наиболее безопасных алгоритмов                               | Медленнее некоторых других алгоритмов. Особенно это заметно при больших выходных значениях |
| Разные размеры выходных значений, поэтому можно выбрать вариант в зависимости от задачи                        | Есть атаки, которые создают коллизии. Но там нужны огромные мощности                       |
| Поддержка многими ОС и языками программирования                                                                |                                                                                            |
| Применяют для защиты данных, электронных подписей, проверки целостности и подлинности данных, хранения паролей |                                                                                            |

### SHA-3

Один из наиболее безопасных и современных алгоритмов хеширования данных. Из-за того, что он относительно новый — есть ограничения по поддержки в ОС и языках программирования.&#x20;

![Как работает SHA-3](https://proznaniya.media/wp-content/uploads/2023/04/algoritmov-heshirovaniya-dannyh-2.jpg)

| +                                                     | -                                                               |
| ----------------------------------------------------- | --------------------------------------------------------------- |
| Устойчив к атакам                                     | Относительно новый алгоритм: его ещё не все приняли и потестили |
| Высокая производительность на современных процессорах | Сложен для эксплуатации по сравнению с прошлыми алгоритмами     |
| Генерирует хеш-значения в зависимости от задачи       | Довольно медлительный: уступает, например, SHA-256              |
|                                                       | Для высокой скорости хеширования нужно специальное оборудование |

### BLAKE

Семья алгоритмов хеширования данных. BLAKE разработали специально обеспечения безопасности и эффективности в криптографических целях. Его чаще всего используют, когда нужно защитить данные, проверить целостность данных и электронных подписей.&#x20;

![Как работает BLAKE](https://proznaniya.media/wp-content/uploads/2023/04/kakie-byvayut-algoritmy-heshirovaniya.png)

| +                          | -                                                                                                                                     |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Высокая скорость           | BLAKE использовали меньше, чем SHA-1 и MD5. Он недостаточно изучен, и это вызывает осторожность при применении в критических системах |
| Высокая стойкость к атакам | Старые приложения не поддерживают BLAKE, поэтому могут быть проблемы при обмене данными между разными приложениями                    |
| Открытый исходный код      |                                                                                                                                       |

### Сравнение алгоритмов хеширования

Размер ключа → длина ключа алгоритма \
Размер блока → размер данных, которые алгоритм обрабатывает за один раз <br>

| Алгоритм | Размер хэша (бит)  | Размер блока (бит)             | Размер ключа (бит) | Скорость хэширования | Устойчивость к атакам | Сложность атаки                    |
| -------- | ------------------ | ------------------------------ | ------------------ | -------------------- | --------------------- | ---------------------------------- |
| MD5      | 128                | 512                            | –                  | Высокая              | Уязвим к коллизиям    | Можно атаковать за небольшое время |
| SHA-1    | 160                | 512                            | –                  | Высокая              | Уязвим к коллизиям    | Можно атаковать за небольшое время |
| SHA-2    | 224, 256, 384, 512 | 512, 1024                      | –                  | Высокая              | Безопасен             | Зависит от размера хэша            |
| SHA-3    | 224, 256, 384, 512 | 1152, 1088, 832, 576, 512, 288 | –                  | Средняя              | Безопасен             | Зависит от размера хэша            |
| BLAKE    | 224, 256, 384, 512 | 512, 1024                      | 256, 512           | Средняя              | Безопасен             | зависит от размера хеша и ключа    |
