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