Симметричное и асимметричное шифрование простыми словами
Основы3 минРедакция Innovialabs
Коротко
В симметричном шифровании один и тот же ключ и запирает, и отпирает данные — это быстро, но ключ нужно как-то безопасно передать. В асимметричном есть пара ключей: открытый для шифрования или проверки подписи и закрытый для расшифровки или подписи. На практике их комбинируют: асимметрия помогает договориться о ключе, а симметрия шифрует сами данные.
Короткий ответ
Симметричное шифрование — это сейф с одним ключом. Кто закрыл, тот и открывает тем же ключом, и копия ключа должна быть у каждого, кто имеет доступ. Самый распространённый алгоритм — AES.
Асимметричное шифрование — это почтовый ящик с прорезью. Бросить письмо (зашифровать) может любой, у кого есть адрес, — это открытый ключ. Достать письмо может только владелец ключа от ящика — это закрытый ключ. Популярные алгоритмы — RSA и ECC (криптография на эллиптических кривых).
Сравнение
| Симметричное (AES) | Асимметричное (RSA, ECC) | |
|---|---|---|
| Ключи | Один общий секрет | Пара: открытый и закрытый |
| Скорость | Очень быстрое, подходит для больших объёмов | Заметно медленнее, используется для небольших данных |
| Главная сложность | Как безопасно передать ключ | Как убедиться, что открытый ключ принадлежит нужному человеку |
| Типичное применение | Шифрование трафика, дисков, файлов, баз | Обмен ключами, цифровые подписи, сертификаты |
У ECC ключи короче, чем у RSA при сопоставимой стойкости, поэтому эллиптические кривые сейчас часто выбирают для новых систем и мобильных устройств.
Почему их используют вместе
Симметричное шифрование быстрое, но упирается в вопрос: как передать ключ собеседнику, если канал прослушивается? Асимметричное решает эту задачу, но слишком медленное, чтобы шифровать им видео или большие файлы.
Поэтому почти везде работает гибридная схема:
- С помощью асимметричной криптографии стороны безопасно договариваются об общем секрете.
- Из него получают сессионный симметричный ключ.
- Все данные дальше шифруются быстрым симметричным алгоритмом.
Цифровая подпись
Асимметричные ключи умеют работать и «наоборот». Владелец подписывает данные закрытым ключом, а любой может проверить подпись открытым ключом.
Аналогия — восковая печать с уникальным перстнем: поставить её может только владелец перстня, а узнать печать может любой. Подпись доказывает две вещи:
- авторство — данные подписал владелец закрытого ключа;
- целостность — после подписи в данных не изменилось ни одного бита.
Подписи используются в сертификатах сайтов, обновлениях программ и приложений, электронном документообороте, коммитах в Git.
Хеширование — это не шифрование
Хеш-функция (например, SHA-256) превращает любые данные в короткий «отпечаток» фиксированной длины. Это как мясорубка: из фарша не собрать обратно кусок мяса.
| Шифрование | Хеширование | |
|---|---|---|
| Обратимость | Можно расшифровать, зная ключ | Необратимо |
| Ключ | Нужен | Не нужен |
| Зачем | Скрыть данные и потом прочитать | Проверить целостность или сравнить, не храня оригинал |
Пароли пользователей нужно хешировать, а не шифровать: сайту не нужно знать пароль, достаточно проверить, совпадает ли хеш. Для паролей используют специальные медленные алгоритмы с «солью» — Argon2, bcrypt, scrypt, — а не быстрые вроде SHA-256 или устаревшего MD5.
Где это работает каждый день
- HTTPS. Браузер проверяет сертификат сайта по цифровой подписи, затем стороны с помощью асимметричного обмена ключами (обычно на эллиптических кривых) договариваются о сессионном ключе, и дальше трафик шифруется симметрично — например, AES.
- Мессенджеры со сквозным шифрованием. Устройства собеседников обмениваются открытыми ключами и выводят общие секреты, а сами сообщения шифруются симметрично. Ключи регулярно обновляются, чтобы утечка одного не раскрыла всю переписку.
- Хранение данных. Шифрование дисков на ноутбуках и телефонах, бэкапов и полей в базе данных — это AES или аналоги. Главный вопрос здесь — где хранить ключ, чтобы он не лежал рядом с данными.
- SSH и вход по ключам. Сервер проверяет, что у вас есть закрытый ключ, не требуя его передачи.
Частые ошибки
- Придумывать собственный алгоритм шифрования вместо проверенных библиотек.
- Хранить ключи шифрования в коде или рядом с зашифрованными данными.
- Шифровать пароли обратимо или хешировать их быстрым алгоритмом без соли.
- Путать кодирование (Base64) с шифрованием: Base64 ничего не скрывает.