Перейти к содержанию

Hashing


Хэширование - способ кодирования открытого текста с применением односторонней функции. Результатом хэширования является кодированный текст определенной, всегда одинаковой длины.

Существует множество различных функций хэширования отличающихся не только длиной результирующего текста, но и используемым алгоритмом кодирования: MD5, различные варианты SHA(0,1,3,128,256,512), Стрибог (ГОСТ 34.11-2018), NTLM и др.

Хэширование широко применяется в информационных технологиях. 2 основные задачи хэштрования это:

  • сохранение пользовательских паролей
  • проверка целостности файлов.

Кроме того, хэширование используется в электронной подписи для увеличения её быстродействия (подписывается не весь файл, а только его хэш.)

В виду того, что результат работы хэш функции всегда имеет одинаковую длину, могут возникать случаи коллизии (одинаковый результирующий текст при разных открытых текстах). Хорошая хэш функция имеет большую стойкость к коллизии.

Так как хэширование есть процесс применения односторонней функции, результирующее сообщение нельзя просто расшифровать обратно.

Единственным действенным способом получения исходного значения качественной хэш функции (к которым уже нельзя отнести MD5 и SHA-1, к примеру) является bruteforce с использованием радужных таблиц - которые содержат в себе открытый текст и его хэш.

Для противодействия брутфорсу, а также колизиям, используется соль.

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