Сегодня хотелось бы уделить внимание двум понятиям, которые в умах среднестатистических (и даже более продвинутых) пользователей зачастую тождественны:
- шифрование
- хеширование.
Шифрование
Шифрование является довольно старым способом защиты информации от третьих лиц. Так, ещё более двух тысячелетий назад Гай Юлий Цезарь применял шифр (названный в его честь) для обмена сообщениями со своими генералами. Суть этого шифрования весьма проста:
1. Берётся исходный текст.
2. Каждый символ заменяется на символ, стоящий на 3 позиции далее (или ранее) в алфавите. Например, Б->Д, Я->В.
3. Получатель текста без проблем дешифрировал полученный шифр, зная ключ шифрования.
Существует два типа шифрования:
- симметричное - когда ключ для шифрования и расшифровывания совпадают
- шифрование на основе открытых ключей использует различные ключи для того чтобы зашифровать (открытый ключ) и расшифровать информацию (закрытый ключ).
Хеширование
Хеширование намного моложе понятия шифрования и получило своё распространение благодаря развитию ЭВМ.
Хеширование с помощью хэш-функции преобразует первоначальную символьную последовательность (ключ) в битовую строку определённой длины. Например, пароли от сайтов не хранятся в базе данных в открытом виде - хранится лишь хеш (хеш-сумма -
результат хеширования) пароля. Когда вы вводите пароль для входа на сайт, ввёденные вами символы хешируются и сравниваются со значением в базе данных.
Самые популярные алгоритмы хэширования: MD5 (устаревший, имеющий определённые недостатки), SHA-алгоритмы (SHA-256 можно назвать эталонным).
Используется в блокчейн-технологиях, цифровой подписи.
Ключевые отличия между хешированием и шифрованием
- Зашифрованное сообщение имеет адресата, который сможет расшифровать послание и получить необходимую информацию. Захешированная информация не имеет получателя, её невозможно "расшифровать" и узнать что-то из неё.
- Отдельно стоить выделить такое понятие как "коллизии" - ситуации, при которых хеш-сумма для разных первоначальных последовательностей символов совпадает. Таким образом каждой захешированной последовательности однозначно ставится только один хеш, но при этом каждому хешу соответствует неограниченное множество первоначальных последовательностей. В случае шифрования взаимная однозначность соблюдается в обе стороны.
Благодарю за прочтение, в дальнейшем хотелось бы затронуть затронуть и другие аспекты безопасности данных.
Также советую к прочтению статью про блокчейн-технологии и биткоин.