diff --git a/src/pages/posts/2026/encrypted_XMPP.md b/src/pages/posts/2026/encrypted_XMPP.md
index ae4eb8c..40e199e 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.
@@ -51,7 +50,23 @@ it on a dedicated page by Daniel Gultsch.
-## Trade-offs Between Safety and Convenience
+Хочу также отметить,
+что я буду использовать слово Client для обозначения конкретных инстансов
+приложений на пользовательских устройствах. В документации, связанной с OMEMO
+для этого использвется термин Device, но мне он кажется запутывающим:
+в реальности на одном устройстве может быть несколько независимых клиентов.
+
+## 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 +105,277 @@ 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 построен вокруг Double Ratchet Algorithm.
+Там внутри всё очень интересно,
+но нам для практического применения важно только то,
+что каждый клиент пользователя хранит в себе какие-то там ключи,
+и умеет получать из них какой-то там хэш,
+который принято называть fingerprint.
+
+Ключи обычно как-то автоматически управляются XMPP клиентом
+и в норме вам никогда не стоит трогать их руками.
+Возможно, вам лучше даже и не знать, как они выглядят.
+Единственное, что с ними нужно делать --
+держать в секрете и бэкапить при необходимости.
+
+Фингерпринт позволяет отличать конкретный
+клиент собеседника и быть уверенным, что его не подмененили.
+Список фингерпринтов для конкретного аккаунта
+не является чем-то секретным:
+клиентские приложения сами анонсируют свои фингерпнинты на сервере
+и автоматически пополняют список чужих.
+Значение имеют только те,
+которые вы пометили как фингерпринты довереных клиентов.
+
+В идеале, человек должен лично при встрече
+или по уже довереному и безопасному каналу связи
+сказать вам "Да, фингерпринт XXX принадлежит моему устройству"
+и только после этого вы помечаете XXX доверенным.
+Обычно в интерфейсе это просто проставление чекбокса или сканирование QR-кода.
+
+Некоторые клиенты для удобства пользователя
+довериют любым новым фингерпринтам контактов по-умолчанию,
+но я не стал бы рекомендовать использовать такую политику,
+это легкомысленно и небезопасно.
+Политики доверия или недоверия
+можно посмотреть или поменять в настройках вашего клиента.
+
+Список доверенных фингерпринтов используется в момент отправки сообщения:
+OMEMO творит какую-то магию с жонглированием ключами и
+ни один клиент, кроме перечисленных в списке на момент зашифровки,
+не сможет его впоследствии расшифровать.
+Передать как-то доверие в прошлое, увы, невозможно.
+
+## Реалии OMEMO и XMPP
+## Особенности OMEMO и XMPP
+
+### Chat History
+
+Вообще, XMPP поддерживает хранение истории переписок на сервере.
+За это отвечает **XEP-0313: Message Archive Management**.
+
+В реальности поддержка этого XEP,
+политика хранения истории и особенно сроки хранения сообщений
+зависят от конкретного сервера.
+Рассчитывать по-умолчанию на бессрочное хранение всех переписок не стоит.
+
+В конечном счёте,
+ответственность за хранение переписок лежит исключительно на вас
+и это разумное место для применения local-first подхода.
+
+С практической точки зрения
+проще всего рассматривать серверный архив сообщений
+как некоторый кэш, который выручит вас по возвращении
+из непродолжительного офлайна
+или поможет с синхронизацей текущей переписки между разными устройствами.
+
+### Synchronisation
+
+За бесшовное переключение между клиентами отвечает
+**XEP-0280: Message Carbons**.
+До его внедрения можно было переключиться с телефона на лэптоп
+и пялиться в загруженную историю переписки,
+состоящей только из входящих сообщений от собеседника.
+Отправка своих же сообщений ещё и самому себе
+на уровне протокола -- это довольно неочевидная фича.
+
+Тут важно упомянуть, что при использовании e2e шифрования,
+упомянутая выше концепция доверенных отпечатков пальцев
+распространяется и на свои клиенты тоже.
+
+Для бесшовной синхронизации исходящих сообщений
+все ваши клиенты должны считать фингерпринты друг друга доверенными,
+иначе можно столкнуться с ситуацией,
+когда не получается прочитать своё же сообщение.
+
+Логичное, но неприятное следствие:
+Новый клиент или старый,
+который не был в списке доверенных на момент отправки сообщений,
+получит историю из MAM, но не сможет её расшифровать.
+Да, даже ваши сообщения.
+Теоретически, перепаковка сообщений
+на старых доверенных клиентах вроде как возможна,
+но на практике, никто такое пока не имплементировал
+и важные вещи придётся пересылать вручную.
+
+### Message Correction
+
+Тут же стоит отметить, что такие простые и понятные на первый взгляд фичи
+как редактирование и удаление сообщений вообще-то полагаются на
+клиентский код и могут не сработать у вашего собеседника так,
+как вы этого ожидаете.
+Ими можно пользоваться,
+это удобно и некоторые клиенты их отлично поддерживают,
+но полагаться на них для сокрытия чего-либо не стоит.
+
+### 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
+ ```