Чем симметричное шифрование отличается от асимметричного и что такое цифровая подпись?
- Что такое открытый и закрытый ключ?
- Как работает цифровая подпись?
- Почему TLS использует оба вида шифрования?
Симметричное — один общий ключ шифрует и расшифровывает (AES): быстро, но ключ надо как-то передать. Асимметричное — пара ключей: открытый знают все, закрытый — только владелец (RSA, ECC): медленно, но не нужно делиться секретом.
- Шифрование для получателя — его открытым ключом, расшифровать может только он
- Подпись — закрытым ключом автора, проверить может любой его открытым ключом
- На практике гибрид: асимметрия договаривается о ключе, данные шифрует симметрия
А ещё Подпись даёт подлинность и целостность, но не секретность
Подробно
Симметричное шифрование. Обе стороны знают один ключ. Алгоритмы — AES (с аппаратным ускорением — гигабайты в секунду), ChaCha20. Режимы важны: современный стандарт — AEAD (AES-GCM, ChaCha20-Poly1305), который шифрует и одновременно защищает от подмены. Проблема — распределение ключей: как договориться о ключе с сервером, которого видишь впервые, если канал прослушивается.
Асимметричное шифрование. У каждого пара: открытый ключ публикуется, закрытый хранится в секрете. Что зашифровано открытым, расшифровывается только закрытым. Алгоритмы — RSA, эллиптические кривые (ECDH, Ed25519). Операции в сотни и тысячи раз медленнее симметричных и ограничены по размеру данных.
Обмен ключами. Протокол Диффи — Хеллмана (сейчас на эллиптических кривых, X25519): стороны обмениваются открытыми значениями и независимо получают одинаковый общий секрет, который по сети не передавался. Из него выводится симметричный ключ сессии.
Цифровая подпись — обратное использование пары: автор вычисляет хеш сообщения и «подписывает» его закрытым ключом; любой проверяет подпись открытым ключом. Это доказывает, что сообщение создал владелец закрытого ключа и оно не менялось. Применения: сертификаты TLS (удостоверяющий центр подписывает сертификат сайта), JWT с RS256/ES256 (сервис авторизации подписывает, остальные проверяют без доступа к секрету), подпись релизов и коммитов, обновлений приложений.
Гибридная схема — так работают TLS, PGP, мессенджеры: асимметричная криптография для обмена ключом и подписи, симметричная — для данных.
Откуда доверие к открытому ключу. Злоумышленник может подсунуть свой открытый ключ (атака «человек посередине»). Поэтому ключ связывают с владельцем: сертификаты и цепочки доверия (PKI), сверка отпечатков (SSH при первом подключении, коды безопасности в мессенджерах).
Практика: не изобретать свою криптографию, брать готовые библиотеки и высокоуровневые API (libsodium, cryptography), хранить ключи в KMS или хранилище секретов, ротировать.
Пример
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
private = Ed25519PrivateKey.generate()
public = private.public_key()
sig = private.sign(b"release-1.4.2.tar.gz sha256=…")
public.verify(sig, b"release-1.4.2.tar.gz sha256=…") # без исключения — подпись вернаЧто хотят услышать
- Один ключ против пары ключей, плюсы и минусы.
- Кто каким ключом шифрует и кто каким подписывает.
- Гибридная схема и обмен ключами.
- Проблема доверия к открытому ключу и сертификаты — плюс.
Частые ошибки
- «Подпись — это шифрование закрытым ключом» как буквальное описание — для современных схем это не так, это отдельная операция.
- Считать асимметричное шифрование «более надёжным» и шифровать им данные целиком.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Асимметричное шифрование быстрее симметричного, поэтому им шифруют данные
- ✗Подпись создаётся открытым ключом получателя и проверяется его закрытым
- ✓Симметричное — общий ключ; асимметричное — пара; подпись — закрытым ключом автора
- ✗Закрытый ключ публикуют, чтобы все могли шифровать сообщения владельцу
Что спросят дальше
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.