posts: encrypted_XMPP: update draft

This commit is contained in:
He4eT 2026-04-07 10:58:06 +02:00
commit e2cabe34dc

View file

@ -51,7 +51,18 @@ it on a&nbsp;<a
href='https://contrapunctus.codeberg.page/the-quick-and-easy-guide-to-xmpp.html'
target='_blank'>dedicated page by Daniel Gultsch</a>.
## Trade-offs Between Safety and Convenience
## Basic Concepts
Here I'm going to explain some basic ideas behind e2e.
Вы можете пропустить этот раздел
Если основные концепции и терминология вам знакомы,
то можете смело пропустить этот раздел
и перейти к особенностям их практического применения касательно XMPP.
Или даже сразу перейти к описанию workflow, которого я придерживаюсь сам.
### Trade-offs Between Safety and Convenience
Unfortunately, things that are truly secure are rarely convenient.
They often require some initial efforts and a bit of ongoing attention.
@ -90,3 +101,91 @@ In general, the XMPP experience today
could be described as a "WhatsApp with benefits and frictions".
It's kinda ironic, considering that WhatsApps protocol
is actually based on XMPP, but incompatibly altered and defederated.
### Keys, Fingerprints and Trust
Как и положено любому ассиметричному шифрованию,
в OMEMO используются приватные и публичные ключи.
Приватные обычно как-то автоматически управляются XMPP клиентом
и в норме вам никогда не стоит трогать их руками.
Возможно, вам лучше даже и не знать,
как они выглядят.
Публичные ключи принято называть отпечатками пальцев.
Список фингерпринтов для конкретного аккаунта
не является чем-то секретным или важным.
Клиентские приложения сами анонсируют свои фингерпнинты
и обычно автоматически пополняют список чужих.
Значение имеют только те фингерпринты, которые вы пометили как довереные.
В идеале, человек должен лично при встрече
или по уже довереному и безопасному каналу связи
сказать вам "Да, фингерпринт XXX принадлежит моему устройству"
и только после этого вы помечаете XXX доверенным.
Обычно в интерфейсе это просто проставление чекбокса или сканирование QR-кода.
Политику доверия и недоверия можно поменять в настройках вашего клиента,
некоторые клиенты для удобства довериют любым новым фингерпринтам по умолчанию,
но я не стал бы рекомендовать использовать такую политику.
Список доверенных фингерпринтов используется в момент отправки сообщения:
ни один клиент, кроме перечисленных в списке на момент зашифровки,
не сможет его впоследствии расшифровать.
Передать как-то доверие в прошлое невозможно.
## Реалии OMEMO и XMPP
### Chat History and Synchronisation
Вообще, XMPP поддерживает хранение истории переписок на сервере.
За это отвечает `XEP-0313: Message Archive Management`.
В реальности поддержка этого XEP,
политика хранения истории и особенно сроки хранения сообщений
зависят от конкретного сервера.
Рассчитывать на бессрочное по-умолчанию хранение всех переписок не стоит.
Чаще всего ответственность за хранение переписок лежит исключительно на вас
и это разумное место для применения local-first подхода.
С практической точки зрения
проще всего рассматривать серверный архив сообщений
как некоторый кэш, который выручит вас по возвращении
из непродолжительного офлайна
или поможет с синхронизацей текущей переписки между разными устройствами.
За бесшовное переключение между клиентами отвечает
`XEP-0280: Message Carbons`.
До его внедрения можно было переключиться с телефона на лэптоп
и пялиться в загруженную историю переписки,
состоящей только из входящих сообщений от собеседника.
Отправка своих же сообщений ещё и самому себе -- это довольно неочевидная фича.
Важно, что при использовании e2e шифрования,
упомянутая выше концепция доверенных отпечатков пальцев
распространяется и на свои клиенты тоже!
Для бесшовной синхронизации исходящих сообщений
все ваши клиенты должны считать фингерпринты друг друга доверенными,
иначе можно столкнуться с ситуацией,
когда не получается прочитать своё же сообщение.
Логичное, но неприятное следствие:
Новый клиент, который не был в списке доверенных на момент отправки сообщений,
получив лог из MAM не сможет их расшифровать.
Теоретически, перепаковка сообщений
на старых доверенных клиентах вроде как возможна,
но на практике, никто такое не имплементировал.
Если вы хотите использовать больше чем одно клиентское приложение,
на одном или нескольких устройствах,
то прежде чем общаться с кем-либо,
нужно авторизоваться во всех своих клиентах
и добавить в каждый из них все фингерпринты всех остальных.
Так вы никогда не столкнётесь с раздражающей ситуацией,
когда не можете прочитать сообщения, которые сами же кому-то отправляли.
## Mindset
## Before the Start
## Checking the Keys
## In case of fire