Хеши, шифрование и подписи
Один инструмент прячет данные, другой только снимает отпечаток, третий доказывает авторство. Их путают — и системы ломаются.
Три инструмента путают постоянно, и эта путаница приводит к реальным утечкам. Хеш — это отпечаток пальца: он доказывает, что две вещи одинаковы, не показывая оригинал. Шифрование — это запертый ящик: оно прячет данные, чтобы нужный человек потом их открыл. Цифровая подпись — это сургучная печать: она доказывает, кто написал и что по дороге ничего не изменили. Разные задачи — разные инструменты.
Хеш-функция берёт любые данные и выдаёт значение фиксированной длины, всегда одинаковое для одинакового входа. Поменяй один символ — результат изменится целиком, и предсказать как нельзя. И обратно она не работает: по хешу восстановить вход невозможно. Именно из-за этого свойства пароли хранят хешами, а не текстом.
input hash of the input
--------------- --------------------------------
hello 2cf24dba5fb0a30e26e83b2ac5b9e29e...
HELLO 5d41402abc4b2a76b9719d911017c592...
hello! ce06092c8f0e3f0e2b8f6ec9c8f4b1f2...
one character changed -> a completely different hash
same input every time -> the same hash, alwaysХеш — это отпечаток, а не запертый ящик: он доказывает, что вход был тот же, и никогда не раскрывает сам вход.Шифрование — противоположность хешированию: оно задумано обратимым. Ключ превращает читаемый текст в нечитаемые байты, а правильный ключ возвращает их обратно. Именно из-за обратимости пароли так не хранят: если сервер может их расшифровать, сможет и тот, кто украдёт ключ. Шифрование — для данных в пути и для файлов, которые потом нужно снова прочитать.
Цифровая подпись отвечает на другой вопрос: не «что здесь написано», а «кто это написал и не изменилось ли это». Ты подписываешь закрытым ключом, который никогда не покидает твою машину; проверить подпись может любой по открытому ключу. На этом стоят сертификаты HTTPS, и поэтому страница загрузки может дать тебе проверить, что файл — тот самый, который выложили разработчики.
openssl dgst -sha256 -sign release.key -out app.sig app.bin
openssl dgst -sha256 -verify release.pub -signature app.sig app.binВесь шаблон в двух строках: подпись создаёт маленький файл .sig, проверка его принимает или отклоняет.Практика
Сопоставь каждый инструмент с задачей, для которой он на самом деле предназначен.
Подсказки
- Спроси про каждый инструмент: можно ли вернуть из него исходный текст?
- Отпечаток опознаёт, ящик прячет, подпись доказывает авторство.
15 XP
Два пользователя выбрали одинаковый пароль. Их хеши в базе выглядят совершенно по-разному. Почему?
Подсказки
- Соль лежит рядом с хешем, то есть секретом не является.
- Её задача — чтобы у двух людей с одинаковым паролем не оказалось одинакового сохранённого значения.
14 XP
Почему TLS использует обмен ключами, а не просто отправляет обеим сторонам один общий секретный ключ?
Подсказки
- Общий секрет должен сначала попасть к обеим сторонам — и эта дорога и есть слабое место.
- Подпись работает наоборот: ключ, доказывающий авторство, никогда не покидает владельца.
16 XP