Криптография вокруг нас
Криптография защищает пароли, сообщения и соединения. Начнём с трёх понятий: хеш, соль и обмен ключами.
При чём тут безопасность: большинство утечек паролей опасны именно из-за неправильного хеширования. А без обмена ключами не было бы HTTPS.
Хеш-функция
Хеш — «отпечаток» данных фиксированной длины. Например, SHA-256 превращает любой файл в 256-битное значение.
Свойства: одинаковые данные дают одинаковый хеш; малейшее изменение — совсем другой хеш; по хешу нельзя восстановить исходные данные. Хеши проверяют целостность файлов и образов дисков.
Пароли хранят хешами
Сайт хранит не сам пароль, а его хеш. При входе хеширует введённое и сравнивает.
Но простые быстрые хеши уязвимы: злоумышленник заранее считает хеши миллионов популярных паролей (радужные таблицы) и находит совпадения в украденной базе.
Соль
Соль — случайная строка, уникальная для каждого пользователя, которую добавляют к паролю перед хешированием и хранят рядом с хешем.
Одинаковые пароли у разных людей дают разные хеши, а готовые таблицы становятся бесполезны. Для паролей используют специальные медленные алгоритмы: bcrypt, scrypt, Argon2 — они сильно замедляют перебор.
Обмен ключами
Как договориться о секретном ключе, если канал прослушивают? Обмен ключами Диффи — Хеллмана позволяет двум сторонам получить общий секрет, обмениваясь только открытыми данными.
Подслушивающий видит весь обмен, но вычислить ключ не может. На этой идее построено установление ключей в TLS.
Главное за урок
- Хеш — односторонний отпечаток данных; проверяет целостность.
- Пароли хранят медленными хешами с уникальной солью.
- Диффи — Хеллман даёт общий секрет по открытому каналу.