Инженерный совет интернета (IETF) опубликовал черновик нового протокола — Message Layer Security (MLS). Его задача — обеспечить защищённую передачу сообщений между двумя устройствами. Он описывает абстрактные структуры данных, которые можно использовать не только в чат-приложениях, но и для работы с TLS 1.3 и JSON. Расскажем о принципах работы MLS.
Инженеры IETF выпустили два документа. Первый описывает требования к системе обмена сообщениями для реализации протокола MLS, а второй — сам протокол MLS.
Об архитектуре системы обмена сообщениями
Система обмена сообщениями (Messaging Service) включает в себя две службы, которые следят за безопасностью приема/передачи сообщений.
Первая — служба аутентификации (Authentication Service). Отвечает за сохранность личных данных — логина, номера телефона, а также уникальной пары ключей для идентификации клиентов.
Вторая — служба доставки (Delivery Service) — хранит и распределяет между клиентами ключи для обмена зашифрованными сообщениями. Служба доставки оперирует только теми данными, которые нужны для обмена сообщениями, и не трогает личные сведения об отправителях. Это ограничивает «след» метаданных на стороне сервера.
Во многих системах службы доставки и идентификации представлены одним логическим объектом или сервером. Однако в MLS это два отдельных компонента. Авторы решили разделить эти процессы, чтобы MLS можно было использовать вместе с открытыми протоколами авторизации, например OAuth.
Это дает еще одно преимущество. Даже если провайдер сервиса обмена сообщениями контролирует процессы аутентификации и доставки, метаданные будут надежно защищены. У провайдера не получится связать зашифрованные сообщения с открытыми ключами.
Как работает MLS
Пользователи системы обмена сообщениями объединяются в группы. Для создания группы участники «складывают» свои ключи UserInitKey и формируют секрет. UserInitKey представляет собой ключевую пару Диффи — Хеллмана и служит для инициализации отдельных пользователей.
Протокол задействует два типа двоичных деревьев. Первый — дерево Меркла (оно же дерево хешей) — служит для подтверждения подлинности операций, проводимых членами группы. Второй вид — Ratchet-дерево — используется для извлечения их секретов.
В группе можно проводить следующие базовые операции:
- Добавлять нового члена группы (создать диалог).
- Обновлять данные секрета участника группы.
- Удалять члена группы.
Если член группы А хочет создать диалог с B и C, он в первую очередь скачивает их ключи инициализации (InitKeys). После чего эти ключи используются для формирования сообщений GroupAdd, которые должны добавить членов B и C.
Сообщения GroupAdd рассылаются всей группе и обрабатываются по порядку B и C. Когда их ответы возвращаются к А, состояние группы обновляется и в нем отображаются «новоприбывшие». Любые другие сообщения, посылаемые участниками системы до принятия в группу, игнорируются.
В отличие от TLS и DTLS, новый протокол не содержит фазы «рукопожатия» как таковой. MLS использует так называемые сообщения рукопожатий (Handshake Messages). Участники переписки обмениваются ими каждый раз когда, нужно добавить или удалить нового члена группы.
Handshake Message инкапсулирует специальное сообщение об изменении состояния группы, а также включает в себя GroupInitKey, чтобы новый участник смог инициализироваться, и подписи одного из текущих членов группы вкупе с доказательством Меркла (чтобы убедиться в «подлинности» человека, поставившего подпись).
Что ждет MLS
В разработке архитектуры и требований к MLS приняли участие представители Google, Mozilla, Twitter, MIT, французского исследовательского института INRIA и платформы для общения Wire. Сам протокол создали люди из Cisco, Facebook, Google и Оксфордского университета.
/ фото Book Catalog CC
Судьбу протокола будут решать в следующем месяце, когда совет IETF соберется для очередного обсуждения черновых вариантов. Если все пойдет гладко, то через год MLS одобрят в IESG (Internet Engineering Steering Group), и он станет стандартом.
Автор: it_man