Сегодня
я расскажу вам о хеш-функциях. Скажете, звучит сложно, необычно? А
я уверен, что вы почти постоянно их применяете. Давайте разбираться.
Представьте:
вы переслали кому-то файл, по электронной почте, в мессенджере или через
облако, а человек, получивший его, сомневается, не потерялось ли что-то по
дороге. Или ещё пример: лежит на сервере какой-нибудь массив данных,
а злоумышленник, пробравшийся к ним, решил заменить в них часть информации. Это
не просто досадно, а прямо-таки опасно – а вдруг хакер нахимичил в программе
управления самолётом или банковской системе?
Как
убедиться, что файл в сохранности? Для этого и существует хеш-функция.
Это
программка, а точнее алгоритм, которая на основе входных данных –
то есть оригинального файла – выстраивает для последующей проверки уникальную
строчку. Способ похож на шифрование, только без возможности расшифровки.
Вот простейший алгоритм: посчитайте, сколько раз та или иная буква появляется в
тексте, и запишите все эти буквы и их количество. Скажем, для текста «Это
пример фразы, для которой считаем хеш» мы запишем «А2Д1Е2З1И2Й1К1Л1М2О4П1Р3С1Т3Ф1Х1Ч1Ш1Э2Я1Ы1». Это вроде и шифр, но восстановить
по нему исходный текст не получится, правда же? А вот если человек, который
получит от вас подобное сообщение, пропустит его через такой же шифр, то
строчка у него получится ровно та же. Так что при передаче файла можно для
надёжности дополнительно переслать и получившийся хеш для
проверки.
Строго
говоря, чтобы хеш совпал, можно сочинить и другую фразу с тем же количеством
определённых букв. И это уязвимое место такого способа. Но в современных
алгоритмах вероятность получить один и тот же хеш очень низка. Для некоторых
алгоритмов компьютеру понадобится миллиард лет, чтобы в конце
концов сгенерировать файл с идентичным хешем.
Где
используются хеш-функции? В первую очередь, для проверки целостности файлов
при установке нового приложения или программы на компьютер.
Кроме
того – для проверки пароля. Хранить пароль пользователя в системе
опасно, велика вероятность взлома. Так что в большинстве систем хранятся не
сами пароли, а их хеши, и, когда пользователь авторизуется, система
сверяет не вводимый пароль, а его вычисляемый хеш. Используются хеши и в
системе электронных подписей.
А
ещё оказалось, что некоторые алгоритмы значительно ускоряют поиск
записей в базе данных, если предварительно посчитать и сохранить хеши для всех
данных. Хеширование ускоряет и решение геометрических задачек
в компьютерной графике…
Наиболее
распространённые алгоритмы хеширования называются MD5 и SHA. Есть и наша, российская, разработка,
которая называется Стрибог (STREEBOG). На её основе строится
система государственных электронных подписей и обмен данными между
государственными учреждениями.
Текст: Мирослав АНДРУЩЕНКО
