Сквозное шифрование в мессенджерах

Сквозное шифрование (E2E) делает так, что даже сервер мессенджера не может прочитать твои сообщения.

Обычное шифрование против сквозного

При обычном шифровании (как в большинстве сайтов) данные защищены по пути до сервера, но на самом сервере они расшифровываются. Значит, владелец сервиса технически может их прочитать. При сквозном шифровании (end-to-end, E2E) сообщение шифруется на устройстве отправителя и расшифровывается только на устройстве получателя. Сервер передаёт лишь нечитаемый шифр-текст.

ОбычноеСквозное (E2E)
Кто может прочитатьОтправитель, сервер, получательТолько отправитель и получатель
Где расшифровкаНа сервереНа устройстве получателя

Как это устроено

E2E опирается на всё, что мы изучили. У каждого пользователя есть пара ключей: открытый и закрытый. Открытыми ключами устройства обмениваются, договариваются об общем секрете и дальше шифруют переписку. Закрытый ключ никогда не покидает устройство — поэтому сервер физически не имеет ключа для расшифровки.

Покажем идею

Сообщение шифруется ключом, который есть только у двух собеседников. Сервер видит лишь байты:

def device_encrypt(text, key):
    return bytes(b ^ key for b in text.encode("utf-8"))

shared = 99  # секрет только у Алисы и Боба

# Алиса шифрует на своём устройстве
ciphertext = device_encrypt("Встречаемся в 18:00", shared)
print("Сервер видит только:", list(ciphertext)[:6], "...")

# Сервер пытается прочитать БЕЗ ключа
server_view = ciphertext.decode("utf-8", "replace")
print("Что разобрал сервер:", server_view[:8])

# Боб расшифровывает на своём устройстве
bob = bytes(b ^ shared for b in ciphertext).decode("utf-8")
print("Боб прочитал:", bob)

Вывод:

Сервер видит только: [186, 209, 213, ...] ...
Что разобрал сервер: непонятные символы
Боб прочитал: Встречаемся в 18:00

Что E2E защищает, а что нет

  • Защищает: содержимое сообщений от сервера и злоумышленников в сети.
  • Не защищает: метаданные (кто, когда и кому писал — это сервер обычно видит).
  • Не защищает: от того, кто получил доступ к самому устройству.
Современные протоколы E2E (например, Signal Protocol) ещё и регулярно меняют ключи, чтобы при утечке одного ключа старая переписка осталась защищённой. Это свойство называют прямой секретностью.
Проверьте себя
1. Чем сквозное шифрование (E2E) отличается от обычного?
AE2E быстрее
BПри E2E сообщение расшифровывается только на устройстве получателя, и сервер его не читает
CE2E не использует ключи
DE2E работает только в браузере
2. Что сквозное шифрование обычно НЕ скрывает?
AТекст сообщения
BМетаданные: кто, когда и кому писал
CПрикреплённые фото
DГолосовые сообщения
Поддержать проект