Раздел 18. Групповое E2EE
Почему шифровать группу сложнее, чем диалог; подход sender keys и идея MLS; что происходит с ключами при добавлении и удалении участника.
В диалоге всё просто: Алиса и Боб через X3DH (Extended Triple Diffie–Hellman) добыли один общий секрет, дальше Double Ratchet крутит ключи — два человека, один защищённый канал. А теперь добавим в чат ещё 50 человек. Сквозное шифрование — E2EE (End-to-End Encryption — «шифрование от конца до конца») — в группе устроено заметно сложнее, и этот раздел объясняет, почему и что с этим делают.
Почему группа сложнее диалога
Корень сложности один: шифровать приходится для каждого получателя отдельно. В диалоге получатель один. В группе их много — и наивное решение выглядит так: Алиса берёт своё сообщение и шифрует его отдельно под каждого участника (зашифровать для Боба, отдельно для Кати, отдельно для Димы…).
Для маленькой группы терпимо. Но это не масштабируется: в группе на N человек одно сообщение превращается в N шифрований, и так на каждое сообщение. Группа на 1000 человек — тысяча шифрований на одно сообщение от одного отправителя. Неподъёмно.
Аналогия: представь, что одно и то же секретное письмо ты переписываешь и отдельно запечатываешь для каждого из 50 друзей — и так заново при каждом сообщении.
Sender keys: как сделать дёшево
Решение — sender keys («ключи отправителя»). Идея: вместо того чтобы шифровать каждое сообщение заново под каждого, у каждого отправителя есть свой групповой ключ. Он один раз раздаёт этот ключ всем участникам (через уже готовые защищённые попарные каналы из Разделов 15–16), а дальше шифрует каждое сообщение этим ключом только один раз — и все участники уже могут его расшифровать, ведь копия ключа у них есть.
Конкретно по шагам:
- Алиса создаёт свой ключ отправителя.
- Один раз рассылает его каждому участнику по защищённым личным каналам.
- Дальше каждое сообщение шифрует этим ключом однократно.
- Каждый участник расшифровывает своей копией ключа.
То есть дорогую попарную раздачу платим один раз (при распространении ключа), а потом шифрование каждого сообщения — дёшево. Так устроено сквозное шифрование больших групп в WhatsApp.
Аналогия: ты раздаёшь друзьям по копии ключа от своего личного сейфа один раз. Потом просто кладёшь каждое сообщение в один сейф, и все открывают его своими копиями ключа.
Что происходит при смене состава
Самое каверзное — когда участники приходят и уходят.
Добавили участника. Новому нужно дать текущие ключи отправителя, чтобы он мог читать новые сообщения. Старую историю до его прихода он, как правило, читать не должен — поэтому старые ключи ему не дают.
Убрали участника — вот это дорого. Загвоздка: у вышедшего остаётся копия ключей отправителя, которые ему раздали раньше. Если ничего не делать, он сможет читать и будущие сообщения. Поэтому оставшиеся участники должны перевыдать (сменить) ключи отправителя: сгенерировать новые и заново раздать всем, кто остался. Старый ключ вышедшего к новым сообщениям больше не подходит.
Аналогия с сейфом: если кто-то ушёл из группы, он унёс копию ключа. Значит, надо сменить замок и раздать новые ключи всем оставшимся.
Почему это плохо масштабируется и при чём тут MLS
Проблема: каждый выход участника запускает перевыдачу ключей всем оставшимся. В больших группах с частой сменой состава (люди постоянно входят-выходят) это лавина операций.
На это придумали MLS (Messaging Layer Security — «безопасность на уровне сообщений») — современный стандартный протокол специально для группового сквозного шифрования. Его главная идея без математики: вместо того чтобы раздавать ключи каждому по списку (это операций по числу участников, N), MLS раскладывает участников в «дерево». Благодаря этому добавление, удаление и перевыдача ключей стоят примерно по высоте дерева — то есть около log N вместо N. Перевыдать ключи в группе на 10 000 человек становится дёшево, а не «десять тысяч операций».
Это и есть направление, в котором движется защищённое групповое общение.
Связки с курсом
- Раздел 11 (fan-out): доставка в группу — это размножение, а групповое E2EE добавляет сверху ещё и шифрование под каждого.
- Раздел 10 (мультидевайс): у каждого участника может быть несколько устройств, и шифровать надо под каждое устройство — это умножает сложность ещё раз.
- Раздел 17: не случайно секретные чаты Telegram — только 1-на-1: групповое сквозное шифрование заметно тяжелее.
Вопросы интервьюера (с разбором)
«Почему групповое сквозное шифрование сложнее личного?» Образец: «Потому что шифровать надо под каждого получателя, а в группе их много. Наивно одно сообщение превращается в N отдельных шифрований — по числу участников, и так на каждое сообщение. В диалоге получатель один, поэтому всё просто; в группе эта стоимость умножается.»
«Что происходит с ключами, когда участник выходит из группы?» Образец: «У вышедшего остаётся копия групповых ключей, которые ему раздали раньше. Чтобы он не читал будущие сообщения, оставшиеся участники перевыдают ключи отправителя — генерируют новые и заново раздают всем, кто остался. Старый ключ вышедшего к новым сообщениям уже не подходит. Это как сменить замок и раздать новые ключи.»
«Как это масштабируется на большие группы?» Образец: «Базовый приём — sender keys: дорогую попарную раздачу платим один раз, дальше шифруем каждое сообщение однократно. Но смена состава всё равно требует перевыдачи ключей всем, и в больших группах это дорого. Для масштаба используют MLS — он раскладывает участников в дерево, и перевыдача ключей стоит около log N вместо N, поэтому работает даже на десятки тысяч участников.»
#мессенджер #безопасность #групповое-e2ee #sender-keys #mls #подготовка-к-интервью