From e2cabe34dc8c7fdaaac0616de3565999abe5c5b2 Mon Sep 17 00:00:00 2001 From: He4eT Date: Tue, 7 Apr 2026 10:58:06 +0200 Subject: [PATCH 1/4] posts: encrypted_XMPP: update draft --- src/pages/posts/2026/encrypted_XMPP.md | 101 ++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/src/pages/posts/2026/encrypted_XMPP.md b/src/pages/posts/2026/encrypted_XMPP.md index ae4eb8c..c3a0aa7 100644 --- a/src/pages/posts/2026/encrypted_XMPP.md +++ b/src/pages/posts/2026/encrypted_XMPP.md @@ -51,7 +51,18 @@ it on a dedicated page by Daniel Gultsch. -## 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 WhatsApp’s 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 From acfcf7e45e813a527797a8cb9548d4ead193a964 Mon Sep 17 00:00:00 2001 From: He4eT Date: Tue, 7 Apr 2026 13:34:59 +0200 Subject: [PATCH 2/4] posts: encrypted_XMPP: update draft --- src/pages/posts/2026/encrypted_XMPP.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/pages/posts/2026/encrypted_XMPP.md b/src/pages/posts/2026/encrypted_XMPP.md index c3a0aa7..ac920bf 100644 --- a/src/pages/posts/2026/encrypted_XMPP.md +++ b/src/pages/posts/2026/encrypted_XMPP.md @@ -159,11 +159,12 @@ is actually based on XMPP, but incompatibly altered and defederated. До его внедрения можно было переключиться с телефона на лэптоп и пялиться в загруженную историю переписки, состоящей только из входящих сообщений от собеседника. -Отправка своих же сообщений ещё и самому себе -- это довольно неочевидная фича. +Отправка своих же сообщений ещё и самому себе +на уровне протокола -- это довольно неочевидная фича. -Важно, что при использовании e2e шифрования, +Тут важно упомянуть, что при использовании e2e шифрования, упомянутая выше концепция доверенных отпечатков пальцев -распространяется и на свои клиенты тоже! +распространяется и на свои клиенты тоже. Для бесшовной синхронизации исходящих сообщений все ваши клиенты должны считать фингерпринты друг друга доверенными, @@ -172,18 +173,18 @@ is actually based on XMPP, but incompatibly altered and defederated. Логичное, но неприятное следствие: Новый клиент, который не был в списке доверенных на момент отправки сообщений, -получив лог из MAM не сможет их расшифровать. +получит историю из MAM, но не сможет её расшифровать. Теоретически, перепаковка сообщений на старых доверенных клиентах вроде как возможна, -но на практике, никто такое не имплементировал. +но на практике, никто такое пока не имплементировал. -Если вы хотите использовать больше чем одно клиентское приложение, -на одном или нескольких устройствах, -то прежде чем общаться с кем-либо, -нужно авторизоваться во всех своих клиентах -и добавить в каждый из них все фингерпринты всех остальных. -Так вы никогда не столкнётесь с раздражающей ситуацией, -когда не можете прочитать сообщения, которые сами же кому-то отправляли. +Тут же стоит отметить, что такие простые и понятные на первый взгляд фичи +как редактирование и удаление сообщений вообще-то полагаются на +клиентский код и могут не сработать у вашего собеседника так, +как вы этого ожидаете. +Ими можно пользоваться, +это удобно и некоторые клиенты их отлично поддерживают, +но полагаться на них для сокрытия чего-либо не стоит. ## Mindset ## Before the Start From a3621507f6f79423d2c8eed6019ccebdd9fbcd6c Mon Sep 17 00:00:00 2001 From: He4eT Date: Sun, 12 Apr 2026 11:44:39 +0200 Subject: [PATCH 3/4] posts: encrypted_XMPP: update draft --- src/pages/posts/2026/encrypted_XMPP.md | 66 ++++++++++++++++---------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/src/pages/posts/2026/encrypted_XMPP.md b/src/pages/posts/2026/encrypted_XMPP.md index ac920bf..80a4807 100644 --- a/src/pages/posts/2026/encrypted_XMPP.md +++ b/src/pages/posts/2026/encrypted_XMPP.md @@ -38,8 +38,7 @@ and the practical aspects of using it. **End-to-end encryption** is a way to keep your chats truly private.
Only you and the person you’re messaging can read the messages. -Not even the server owner or your carrier has the keys -needed to decrypt or modify them. +Not even the server owner has the keys needed to decrypt or modify them. **XMPP** is an extensible protocol for instant messaging. It's open, decentralized, and mature. @@ -55,7 +54,6 @@ it on a  Date: Sun, 12 Apr 2026 16:58:40 +0200 Subject: [PATCH 4/4] posts: encrypted_XMPP: update draft --- src/pages/posts/2026/encrypted_XMPP.md | 181 ++++++++++++++++++++++++- 1 file changed, 176 insertions(+), 5 deletions(-) diff --git a/src/pages/posts/2026/encrypted_XMPP.md b/src/pages/posts/2026/encrypted_XMPP.md index 80a4807..40e199e 100644 --- a/src/pages/posts/2026/encrypted_XMPP.md +++ b/src/pages/posts/2026/encrypted_XMPP.md @@ -50,6 +50,12 @@ it on a dedicated page by Daniel Gultsch. +Хочу также отметить, +что я буду использовать слово Client для обозначения конкретных инстансов +приложений на пользовательских устройствах. В документации, связанной с OMEMO +для этого использвется термин Device, но мне он кажется запутывающим: +в реальности на одном устройстве может быть несколько независимых клиентов. + ## Basic Concepts Here I'm going to explain some basic ideas behind e2e. @@ -144,6 +150,7 @@ OMEMO творит какую-то магию с жонглированием к Передать как-то доверие в прошлое, увы, невозможно. ## Реалии OMEMO и XMPP +## Особенности OMEMO и XMPP ### Chat History @@ -194,7 +201,7 @@ OMEMO творит какую-то магию с жонглированием к но на практике, никто такое пока не имплементировал и важные вещи придётся пересылать вручную. -### Message Editing +### Message Correction Тут же стоит отметить, что такие простые и понятные на первый взгляд фичи как редактирование и удаление сообщений вообще-то полагаются на @@ -204,7 +211,171 @@ OMEMO творит какую-то магию с жонглированием к это удобно и некоторые клиенты их отлично поддерживают, но полагаться на них для сокрытия чего-либо не стоит. -## Mindset -## Before the Start -## Checking the Keys -## In case of fire +### Maintenance + +OMEMO был задуман как решение, которое после настройки не требует какого-то +дополнительного вмешательства. +Можно считать, что этой заявленной цели удалось достичь +и при наличии базового понимания работы протокола и регулярном онлайне +никаких сюрпризов быть не должно. + +Всё обслуживание заключается в регулярных бэкапах и +уведомлении своих контактов о фингерпринтах, +которые стоит добавить в список доверенных или убрать из него. +В нашем локальном хакспейсе мы даже проводим для этого регулярные события =) + +## Step-by-step guide + +Представим, что у меня есть аккаунт jid@some.server и несколько устройств: +телефон, ноутбук и настольный компьютер. +Сначала я опишу воркфлоу общими словами, +а потом дам уточнения про использование конкретных приложений. + +Я предпочитаю следовать такому майндсету: +С одной стороны, +у меня есть мобильное устройство, +которое всегда со мной и практические всегда онлайн: +на нём я храню полную историю переписок и получаю уведомления в реальном +времени. +С другой стороны, у меня есть несколько десктопных приложений: +я открываю их только когда мне нужно обсудить что-нибудь с использованием +клавиатуры или копи-пастинга. +Мне нравится думать о них, как о приложениях-сателлитах. + +### Before the Start + +Первым делом мне нужно сгенерировать на каждом устройстве приватные ключи. +Обычно это происходит автоматически. + +Потом я должен на каждом своём устройстве добавить остальные: +телефон должен считать все мои компьютеры доверенными устройствами, +а компьютеры доверять друг другу и телефону. + +Фингерпринты публичные, +их можно даже разместить у себя на какой-нибудь личной странице. +Вот, например, моя: https://oddsquat.org/about/keys/ + +### Start the Conversation in Person + +Предположим, я встретил Алису и мы решили обменяться контактами. +Я открыл на телефоне специальный QR-код, +затем Алиса считала его своим клиентом. +В этот QR-код уже зашиты фингерпринты всех моих устройств, так что +дополнительных действий не требуется. +Аналогично, я своим мобильным клиентом считываю QR-код с экрана Алисы. + +Теперь мы оба уверены, что в переписке будем участвовать именно мы, +а все наши сообщения будут доступны на всех наших устройствах и только на них. + +### Start the Conversation Online + +Предположим, что мы начали обсуждать что-то с Бобом где-то в сети +(на форуме, в федиверсе, не важно) и решили продолжить обсуждение в мессенджере. + +Боб инициирует переписку, я слепо доверяю первому устройству, +с которого он мне написал и уже потом мы обмениваемся в переписке +фингерпринтами остальных наших устройств, если они есть. +Такая стратегия называется ToFu. + +Опять же Боб может убедиться, что я это я с помощью моей страницы с ключами, +а я могу убедиться, что Боб на форуме -- тот же самый Боб, попросив его +прислать мне фингерпринты прямо в личных сообщениях на том же самом форуме или +отдельно посредством email, например. + +В идеальном случае, +у Боба тоже есть какая-то публичная страница с фингерпринтами. +Тогда мы оба можем независимо убедиться, +что мы именно те, за кого себя выдаём =) + +### New or Lost Devices + +Если я решил начать использовать +какое-то новое устройство или установить куда-нибудь +ещё одно клиентское приложение, +то первым делом я должен добавить его в список доверенных клиентов +на остальных моих существующих устройствах. + +Если я по каким-либо причинам потеряю любое из своих устройств +или зачем-то удалю один из своих приватных ключей, +то первым делом я должен исключить такой клиент из списка доверенных +на остальных моих устройствах. + +После актуализации моих личных списков доверенных устройств +стоит сообщить об изменениях моим собеседникам по довереным каналам. +Я могу просто попросить Алису считать мой новый QR-код при следующей встрече, +а Бобу отправить сообщение о том, +что утраченому устройству доверять больше не стоит, +настоящих сообщений с него уже никогда не придёт. + +## Client Applications + +Этот раздел описывает особенности применения OMEMO для конкретных клиентов, +которыми я пользуюсь сам. + +### Conversations, Monocles and Other Forks + +Conversation - это современное полнофункциональное чат-приложение. +Оно поддерживает всё, что должно поддерживать: +переписки, звонки, отправку фотографий и файлов. +У него есть несколько форков, в которых UX может отличаться, +но core-фичи работают абсолютно одинаково. + +На экране с информацией о конакте (в том числе и о своём аккаунте) +можно увидеть список фингерпринтов, +вручную отметить галочкой доверенные или отозвать доверие. + +Упростить все эти рутинные вещи призвана система с QR-кодами: +прямо на главном можно показать свой код или считать чужой. +Так верификация устройств при личной встрече становится простой и ненапряжной. + +Правило большого пальца - сканируй QR-код при каждом удобном случае. + +### Dino + +Это лёгкий GUI-клиент, построенный на GTK фреймвоке. +Опять же, все вопросы доверия и недоверия +можно легко решить на экране "Детали контакта" с помощью чекбоксов. + +К сожалению, по умолчанию, Dino настроен на автоматическое доверие +новым фингерпринтам, я рекомендую эту функцию отключить. + +### Profanity + +Это могучий TUI-клиент, +где всё-всё-всё реализовано через встроенную систему команд. + +Если вы зачем-то намерены им пользоваться, +то ниже вас ожидает небольшой читшит по использованию OMEMO, +но я настойчиво рекомендую ознакомиться с полной документацией самостоятельно. + +- Генерация ключа и добавление своих устройств: + ```text + /omemo gen + /omemo trust me@some.server some-cool-fingerprint-01 + /omemo trust me@some.server another-cool-fingerprint + /omemo qrcode + ``` + +- Увидеть список своих или чужих fingerprint'ов: + ```text + /omemo fingerprint me@some.server + /omemo fingerprint alice@another.server + ``` + Доверенные будут помечены как `trusted`. + +- Начать зашифрованный диалог: + ```text + /omemo start alice@another.server + ``` + +- Добавить чужой фингерпринт в список доверенных: + ```text + /omemo trust alice@another.server some-cool-fingerprint-02 + /omemo trust alice@another.server some-cool-fingerprint-03 + /omemo trust bob@another.server some-cool-fingerprint-04 + ``` + +- Перестать доверять кокретному клиенту: + ```text + /omemo untrust alice@another.server some-cool-fingerprint-02 + ```