Почему нельзя расшифровать хеш

Многие используют хеш-алгоритмы в своей работе, но зачастую совершенно не понимают почему его нельзя расшифровать. На самом деле, эта тема достаточно интересная.

К слову, bcrypt основан на симметричном шифровании, но при этом в качестве ключа используется функция, позволяющая получить значение, которое невозможно дешифровать что делает невозможным дешифровку самой фразы.

Но семейство блочных хеш алгоритмов таких как MD5, SHA1, SHA2 построенны без генераци ключей и симметричного шифрования. Здесь у нас основная хитрость заключается в многораундовости и блочности шифрования. Это может позвучать сложно, но на деле это похоже на игру в шахматы — дешифровка оригинала невозможна подобно тому, как число возможных расположений фигур на доске через несколько ходов назад становится все большим и большим и его уже невозможно быстро восстановить, кроме как путем полного перебора.

Если углубится немного внутрь, то на примере MD5 мы имеем следующий алгоритм:

  1. сообщение выравнивается до определенной нужной длины (добавляются нули).
  2. инициализируются 4 переменные (A, B, C, D) с определенными, константными значениями.
  3. режем сообщение блоками по 512 бит, в каждой итерации с помощью нескольких раундов и побитовых операций (xor, or, and, not) изменяем переменные A B C D. На каждом блоке переменные меняются и перезаписываются.
  4. результирующим хешем становится последовательно считанные A B C D в битовом формате. Для удобства, на выходе готовые функции зачастую возвращают 16-ричную строку а не массив байтов.

Как видно из беглого описания алоритма, переменные с каждым раундом/блоком модифицируются как положения фигур на доске, что приводит к невозможности дешифровать оригинальную «позицию».

Если определенные части статьи не понятны, милости прошу в комментарии.

Click to rate this post!
[Total: 1 Average: 5]

Вам также может понравиться

About the Author: deniskoronets

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *