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 + ```