Хеширование, шифрование и кодировку объединяет связь с преобразованием информации. Для начала разберемся, что такое кодировка и в чем отличие кодирования от шифрования.
Кодирование
Кодирование — это способ представить данные в другом виде. Двоичный код — последовательность нулей и единиц — пример кодирования. Число, символ алфавита, эмоджи, картинку или звук можно закодировать в виде единиц и нулей.
Пример кодирования данных из повседневной жизни — перевод с русского языка на английский. Говоря «thank you», мы кодируем чувство благодарности в последовательность символов, понятную получателю — прохожему в европейском городе.
👉Читайте также наши статьи:
- Что такое SSL-сертификат
- Нужен ли SSL-сертификат моему сайту
- Как работает SSL-сертификат
- Перевод сайта на HTTPS
Шифрование
В отличие от кодирования, шифрование данных не просто видоизменяет информацию, но делает ее недоступной для третьих сторон. В шифровании используются ключи, известные только отправителю и получателю. Только сопоставив зашифрованный текст с ключом, можно получить исходную информацию.
Один из первых примеров шифрования в истории — шифр Цезаря, или шифр со сдвигом. Берем алфавит и ключ — порядковый номер буквы, с которой будет начинаться шифроалфавит. Например, мы собираемся зашифровать слово «сегодня». Ключ, который мы выбрали — 3. Это значит, что шифроалфавит начинается с буквы Г. Осталось сопоставить обычный алфавит с шифроалфавитом и заменить буквы обычного русского алфавита на буквы шифроалфавита. В результате получится слово «фижсзрв».
Из этого примера следует, что ключ нужно хранить в секрете. Потому что если кому-то станет известно, что наше сообщение написано при помощи шифра Цезаря со сдвигом 3, вся секретность переписки улетучится.
Поэтому перед людьми всегда стояла проблема передачи ключей.
В 1976 два математика Диффи и Хеллман придумали алгоритм, с которым позволяет две стороны в реальном времени создают общий ключ, передавая только его частички, и никогда не отправляя его полностью по сети. Алгоритм получил название «DH», а его модификация «DHE» сейчас используется повсеместно. Даже ваш браузер с Яндекс.Дзен скорее всего создавали ключ по «DHE».
По-своему решили проблему передачи ключа и трое математиков в 1977 году Ривест, Шамир и Адлеман. По первым буквам их фамилий и был назван алгоритм «RSA».
В RSA-шифровании участвует не один, а два ключа, один из которых секретный, приватный, хранится на устройстве, а второй, публичный, передается любому желающему. По этому принципу работают SSL-сертификаты. Внутри SSL-сертификата — публичный ключ, а его пара — приватный, хранится на хостинг-сервере и доступен только владельцу сайта.
Классификация шифрования
Итак, нам понятно, что формула секретной коммуникации = алгоритм + ключ. Теперь поговорим о видах шифрования в зависимости от количества ключей и не только.
Симметричное шифрование
Это самый понятный и самый старый способ зашифровать информацию. Шифр Цезаря, о котором мы говорили выше — пример симметричного шифрования. Его суть в том, что для шифрования и дешифровки используется один и тот же ключ. Если мы возьмем засекреченное слово «фижсзрв» и сопоставим его с шифроалфавитом со сдвигом 3, получится «сегодня».
Асимметричное шифрование
Асимметричное шифрование изобрели те три математика, о которых мы уже говорили: Ривест, Шамир и Адлеман. Его отличие в том, что для шифрования и дешифровки данных используют два ключа: приватный и публичный. Эти ключи математически тождественны, то есть обозначают одно и то же число. К примеру, публичный ключ — это число «15», а приватный ключ — выражение «5×3».
Для SSL-сертификатов длина публичного и приватного ключа огромна и начинается от 2048 бит.
Публичный ключ находится внутри SSL-сертификата и любой браузер получает его от сервера при подключении к сайту. Приватный ключ хранится на сервере и никогда не передается по сети.
Если браузер хочет отправить серверу зашифрованное сообщение, он берет публичный ключ из сертификата, шифрует им данные и отправляет серверу. Дешифровать информацию сможет только тот, у кого есть математическое тождество публичного ключа, а именно приватный ключ. Сервер берет свой приватный ключ и получает исходное сообщение.
То есть то, что зашифровано публичным ключом, дешифровать можно только приватным, и наоборот.
Обратимое шифрование
Обратимое шифрование предполагает, что из зашифрованной последовательности символов можно получить исходное сообщение, как в шифре Цезаря.
Необратимое шифрование
При необратимом шифровании, после того, как данные зашифрованы, исходное сообщение получить невозможно. Такие алгоритмы не используется с целью секретной переписки. У них другая роль, например, служить эталоном нетронутости информации. По-другому необратимое шифрование называют хешированием.
Хеширование
Мы выяснили, в чем разница между хешированием и шифрованием — зашифрованное сообщение можно дешифровать и получить исходный текст. С хешированным так не получится.
Хеширование данных — приведение любого блока информации к строке с фиксированной длиной. Эта строка — хеш, или хеш-сумма. Хеш файла или сообщения — эталон, который может подтвердить, что информация не была повреждена или подменена в процессе передачи.
Например, у нас есть сообщение «съешь еще этих мягких французских булок, да выпей чаю». Мы хотим передать его получателю и быть уверенными, что он получил именно то сообщение, которое мы отправляли, буква в букву. Для этого к сообщению добавляется хеш.
Хеш нашего предложения с использованием самой популярной хеш-функции SHA-256 даст строку «630b603a3eebf288439d243468bbb55c1ccc0982d70a2d7e79499601d233dcc2».
Теперь получатель сообщения тоже должен посчитать хеш. Если хеш-суммы совпадут, значит текст не был видоизменен.
Хеширование данных используется на сайтах, чтобы проверить правильность паролей, которые мы вводим для входа в личный кабинет. Владельцы сайтов из соображений безопасности не хранят пароли пользователей в открытом виде. Когда клиент отправляет сайту пароль в первый раз, сайт сохраняет не сам пароль, а его хеш-сумму. Дальше при каждом новом логине пользователя, сайт сверяет сохраненный хеш с хеш-суммой только что введенного пароля. Если они не совпадают, мы видим сообщение «неверный логин/пароль».
Шпаргалка: чем отличается кодирование от шифрования и что такое хеширование
Кодирование — представление информации в другом виде: перевод числа из десятичной системы в двоичную, перевод слова с английского языка на русский.
Шифрование — представление информации в другом виде с целью ее засекретить: шифр Цезаря, шифр с подменой.
Хеширование — необратимое приведение информации в другой вид с целью получения «уникального отпечатка», по которому можно проверить целостность данных.
Статья была полезной? Будем благодарны за репост 😉