Один ключ на двоих
В симметричном шифровании Алиса и Боб используют один и тот же секретный ключ — и для замка, и для отпирания.
Что значит «симметричное»
Все шифры из предыдущего раздела — Цезарь, подстановка, Виженер — симметричные. Это значит, что один и тот же ключ применяется и для шифрования, и для расшифровки. Если Алиса зашифровала сообщение ключом K, то Боб должен знать тот же K, чтобы прочитать.
Аналогия с обычным замком
Представь обычный навесной замок с одним ключом. Алиса запирает им сундук и отправляет Бобу. Чтобы открыть, Бобу нужен такой же ключ. Симметрия — в том, что ключ один и тот же с обеих сторон.
Плюсы симметричного шифрования
- Скорость. Симметричные алгоритмы очень быстрые — современный компьютер шифрует сотни мегабайт в секунду.
- Простота. Один ключ, понятная схема.
- Надёжность. Проверенные алгоритмы (AES) невозможно взломать перебором.
Главная проблема
Как Алисе передать Бобу секретный ключ, если канал связи прослушивает Ева?
Это называется проблемой обмена ключами. Нельзя просто отправить ключ вместе с сообщением — Ева перехватит и то, и другое. Нельзя продиктовать по телефону, если телефон тоже прослушивается. Эта проблема десятилетиями была головной болью криптографов, и решили её только асимметричные шифры (раздел 5).
Симуляция на Python
Покажем суть: один общий ключ, обе стороны им пользуются. Применим простой XOR-шифр (для учёбы, не для реальной защиты):
def encrypt(text, key):
return bytes(b ^ key for b in text.encode("utf-8"))
def decrypt(data, key):
return bytes(b ^ key for b in data).decode("utf-8")
shared_key = 77 # один секрет на двоих
ciphertext = encrypt("Atака на рассвете", shared_key)
print("Алиса зашифровала:", list(ciphertext)[:8], "...")
print("Боб расшифровал:", decrypt(ciphertext, shared_key))Вывод:
Алиса зашифровала: [12, 57, 174, 167, 184, 167, 99, 174] ... Боб расшифровал: Atака на рассвете
Ключ 77 понадобился обоим. Если Ева его узнает — всё пропало. Поэтому защита ключа важнее самого алгоритма.