diff --git a/src/pages/posts/2026/encrypted_XMPP.md b/src/pages/posts/2026/encrypted_XMPP.md
index 40e199e..12b8e71 100644
--- a/src/pages/posts/2026/encrypted_XMPP.md
+++ b/src/pages/posts/2026/encrypted_XMPP.md
@@ -15,7 +15,7 @@ description: 'Secure and private messaging with XMPP and OMEMO encryption.'
I find it funny that twenty years ago I was already trying
to promote XMPP over ICQ to my classmates.
-At that time, the proprietary messenger once again made life harder
+At the time, the proprietary messenger kept making life harder
for users of alternative clients.
That’s when I realized that I prefer protocols over services.
@@ -50,21 +50,21 @@ it on a dedicated page by Daniel Gultsch.
-Хочу также отметить,
-что я буду использовать слово Client для обозначения конкретных инстансов
-приложений на пользовательских устройствах. В документации, связанной с OMEMO
-для этого использвется термин Device, но мне он кажется запутывающим:
-в реальности на одном устройстве может быть несколько независимых клиентов.
+**Client**, in this post,
+means a specific instance of an XMPP application on a user device.
+
OMEMO-related documentation uses the term Device,
+but I find it potentially confusing:
+in practice, a single physical device can run multiple independent clients.
## Basic Concepts
-Here I'm going to explain some basic ideas behind e2e.
+This section introduces some basic ideas behind end-to-end encryption.
-Если основные концепции и терминология вам знакомы,
-то можете смело пропустить этот раздел
-и перейти к особенностям их практического применения касательно XMPP.
-
-Или даже сразу перейти к описанию workflow, которого я придерживаюсь сам.
+If you're already familiar with the concepts and terminology,
+you can skip ahead to how end-to-end encryption affects the XMPP user experience
+or jump straight to the step-by-step workflow I personally use.
### Trade-offs Between Safety and Convenience
@@ -108,247 +108,240 @@ is actually based on XMPP, but incompatibly altered and defederated.
### Keys, Fingerprints and Trust
-OMEMO построен вокруг Double Ratchet Algorithm.
-Там внутри всё очень интересно,
-но нам для практического применения важно только то,
-что каждый клиент пользователя хранит в себе какие-то там ключи,
-и умеет получать из них какой-то там хэш,
-который принято называть fingerprint.
+OMEMO is based on the Double Ratchet Algorithm.
+While the internal details are quite interesting,
+for practical purposes it's enough to know that
+each client stores some cryptographic keys
+and can derive a hash from them, commonly called a fingerprint.
-Ключи обычно как-то автоматически управляются XMPP клиентом
-и в норме вам никогда не стоит трогать их руками.
-Возможно, вам лучше даже и не знать, как они выглядят.
-Единственное, что с ними нужно делать --
-держать в секрете и бэкапить при необходимости.
+Keys are usually managed automatically by the XMPP client,
+and in normal use you should never need to handle them manually.
+In fact, you probably don’t even need to know what they look like.
-Фингерпринт позволяет отличать конкретный
-клиент собеседника и быть уверенным, что его не подмененили.
-Список фингерпринтов для конкретного аккаунта
-не является чем-то секретным:
-клиентские приложения сами анонсируют свои фингерпнинты на сервере
-и автоматически пополняют список чужих.
-Значение имеют только те,
-которые вы пометили как фингерпринты довереных клиентов.
+A fingerprint lets you identify a specific client of your contact
+and verify that it hasn’t been spoofed.
+Fingerprints for an account are not secret:
+clients publish their own fingerprints to the XMPP server
+and automatically receive the fingerprints of others.
+Only fingerprints you explicitly mark as trusted are relevant.
-В идеале, человек должен лично при встрече
-или по уже довереному и безопасному каналу связи
-сказать вам "Да, фингерпринт XXX принадлежит моему устройству"
-и только после этого вы помечаете XXX доверенным.
-Обычно в интерфейсе это просто проставление чекбокса или сканирование QR-кода.
+In an ideal scenario, the contact should confirm in person
+or through an already trusted and secure communication channel
+that the fingerprint belongs to their device,
+and only then you mark it as trusted.
+In most XMPP clients this is simply done by ticking a checkbox
+or by scanning a QR code.
-Некоторые клиенты для удобства пользователя
-довериют любым новым фингерпринтам контактов по-умолчанию,
-но я не стал бы рекомендовать использовать такую политику,
-это легкомысленно и небезопасно.
-Политики доверия или недоверия
-можно посмотреть или поменять в настройках вашего клиента.
+The list of trusted fingerprints is used at the moment a message is sent.
+Behind the scenes, OMEMO performs a certain amount of key management,
+and only the clients that are present in the trusted list
+at the time of encryption will be able to decrypt the message later.
-Список доверенных фингерпринтов используется в момент отправки сообщения:
-OMEMO творит какую-то магию с жонглированием ключами и
-ни один клиент, кроме перечисленных в списке на момент зашифровки,
-не сможет его впоследствии расшифровать.
-Передать как-то доверие в прошлое, увы, невозможно.
+It's important to understand that trust cannot be applied retroactively:
+it's not possible to "extend" trust to new clients
+after a message has already been encrypted and sent.
-## Реалии OMEMO и XMPP
-## Особенности OMEMO и XMPP
+## Practical Aspects of OMEMO and XMPP
### Chat History
-Вообще, XMPP поддерживает хранение истории переписок на сервере.
-За это отвечает **XEP-0313: Message Archive Management**.
+In theory, XMPP supports server-side message history storage via
+**XEP-0313: Message Archive Management**.
-В реальности поддержка этого XEP,
-политика хранения истории и особенно сроки хранения сообщений
-зависят от конкретного сервера.
-Рассчитывать по-умолчанию на бессрочное хранение всех переписок не стоит.
+In practice, support for this XEP,
+as well as retention policies and message lifetime,
+depends on the specific server.
+You should never assume that all conversations are stored
+indefinitely by default.
+From a practical standpoint,
+the server-side MAM archive is better considered a cache:
+it can help you handle recent messages after a short period offline
+or synchronize conversations across multiple devices.
-В конечном счёте,
-ответственность за хранение переписок лежит исключительно на вас
-и это разумное место для применения local-first подхода.
+At the end of the day, keeping your chat history is your responsibility,
+and this is a good place to apply a local-first approach.
-С практической точки зрения
-проще всего рассматривать серверный архив сообщений
-как некоторый кэш, который выручит вас по возвращении
-из непродолжительного офлайна
-или поможет с синхронизацей текущей переписки между разными устройствами.
### Synchronisation
-За бесшовное переключение между клиентами отвечает
+Seamless switching between clients is handled by
**XEP-0280: Message Carbons**.
-До его внедрения можно было переключиться с телефона на лэптоп
-и пялиться в загруженную историю переписки,
-состоящей только из входящих сообщений от собеседника.
-Отправка своих же сообщений ещё и самому себе
-на уровне протокола -- это довольно неочевидная фича.
+Before its introduction, only incoming messages were synced between devices,
+while your own outgoing messages were not.
+Protocol-level mirroring of your own messages
+is a rather non-obvious feature :D
-Тут важно упомянуть, что при использовании e2e шифрования,
-упомянутая выше концепция доверенных отпечатков пальцев
-распространяется и на свои клиенты тоже.
+It's important to note that with end-to-end encryption,
+the concept of trusted fingerprints also applies to your own clients.
+For seamless synchronisation of outgoing messages,
+all your clients must trust each other's fingerprints.
+A new client,
+or an old one that was not trusted at the time messages were sent,
+will receive the full history from MAM but will not be able to decrypt it.
+
Yes, even your own messages.
-Для бесшовной синхронизации исходящих сообщений
-все ваши клиенты должны считать фингерпринты друг друга доверенными,
-иначе можно столкнуться с ситуацией,
-когда не получается прочитать своё же сообщение.
-
-Логичное, но неприятное следствие:
-Новый клиент или старый,
-который не был в списке доверенных на момент отправки сообщений,
-получит историю из MAM, но не сможет её расшифровать.
-Да, даже ваши сообщения.
-Теоретически, перепаковка сообщений
-на старых доверенных клиентах вроде как возможна,
-но на практике, никто такое пока не имплементировал
-и важные вещи придётся пересылать вручную.
+In theory, re-encrypting messages on already trusted clients
+could solve this issue, but no XMPP client implements it yet.
+So in practice you may need to manually resend
+some data to a new device.
### Message Correction
-Тут же стоит отметить, что такие простые и понятные на первый взгляд фичи
-как редактирование и удаление сообщений вообще-то полагаются на
-клиентский код и могут не сработать у вашего собеседника так,
-как вы этого ожидаете.
-Ими можно пользоваться,
-это удобно и некоторые клиенты их отлично поддерживают,
-но полагаться на них для сокрытия чего-либо не стоит.
+It’s worth keeping in mind that
+features that seem simple and straightforward at first glance,
+such as message editing and deletion,
+actually rely on client-side implementation
+and may not behave for your recipient the way you expect.
+
+They’re fine to use and are well supported in some clients,
+but you shouldn’t rely on them to hide anything.
### Maintenance
-OMEMO был задуман как решение, которое после настройки не требует какого-то
-дополнительного вмешательства.
-Можно считать, что этой заявленной цели удалось достичь
-и при наличии базового понимания работы протокола и регулярном онлайне
-никаких сюрпризов быть не должно.
+OMEMO was designed as a set-it-and-forget-it solution,
+and it mostly succeeds in that goal.
+If you have a basic understanding of how the protocol works
+and check in online from time to time,
+there shouldn’t be any surprises.
-Всё обслуживание заключается в регулярных бэкапах и
-уведомлении своих контактов о фингерпринтах,
-которые стоит добавить в список доверенных или убрать из него.
-В нашем локальном хакспейсе мы даже проводим для этого регулярные события =)
+All maintenance comes down to making regular backups
+and notifying your contacts
+when fingerprints are added or no longer valid
+so they can keep their trust list up to date.
-## Step-by-step guide
+## Step-by-step Guide
-Представим, что у меня есть аккаунт jid@some.server и несколько устройств:
-телефон, ноутбук и настольный компьютер.
-Сначала я опишу воркфлоу общими словами,
-а потом дам уточнения про использование конкретных приложений.
+Let’s say I have a XMPP account, me@some.server,
+and a few devices: a phone, a laptop, and a desktop computer.
+First I’ll describe my mindset at a high level,
+then I’ll add some notes about specific clients.
-Я предпочитаю следовать такому майндсету:
-С одной стороны,
-у меня есть мобильное устройство,
-которое всегда со мной и практические всегда онлайн:
-на нём я храню полную историю переписок и получаю уведомления в реальном
-времени.
-С другой стороны, у меня есть несколько десктопных приложений:
-я открываю их только когда мне нужно обсудить что-нибудь с использованием
-клавиатуры или копи-пастинга.
-Мне нравится думать о них, как о приложениях-сателлитах.
+### Client Roles
+
+On the one hand, I have my phone.
+It’s almost always with me and almost always online.
+That’s where I keep the full chat history and get real-time notifications.
+
+On the other hand, I have a couple of desktop applications.
+I only open them when I need to discuss something using my keyboard
+or move some text between devices.
+I like to think of them as ad-hoc or satellite clients.
### Before the Start
-Первым делом мне нужно сгенерировать на каждом устройстве приватные ключи.
-Обычно это происходит автоматически.
+First, enable OMEMO encryption on every client if it isn't enabled by default.
+The client will usually generate the keys and fingerprint automatically.
-Потом я должен на каждом своём устройстве добавить остальные:
-телефон должен считать все мои компьютеры доверенными устройствами,
-а компьютеры доверять друг другу и телефону.
+The next step is to add all clients to the trust list on each device:
+my phone should trust all my computers,
+and my computers should trust each other as well as my phone.
-Фингерпринты публичные,
-их можно даже разместить у себя на какой-нибудь личной странице.
-Вот, например, моя: https://oddsquat.org/about/keys/
+Fingerprints do not have to be secret, so they can be published on
+your website or even on social media profiles.
+Here is my page with the fingerprints:
+https://oddsquat.org/about/keys/
### Start the Conversation in Person
-Предположим, я встретил Алису и мы решили обменяться контактами.
-Я открыл на телефоне специальный QR-код,
-затем Алиса считала его своим клиентом.
-В этот QR-код уже зашиты фингерпринты всех моих устройств, так что
-дополнительных действий не требуется.
-Аналогично, я своим мобильным клиентом считываю QR-код с экрана Алисы.
+Let’s say I meet Alice,
+we start talking, and decide to continue the conversation online.
-Теперь мы оба уверены, что в переписке будем участвовать именно мы,
-а все наши сообщения будут доступны на всех наших устройствах и только на них.
+I open a special QR code on my phone, and Alice scans it with her client.
+This QR code already contains the fingerprints of all my devices,
+so no extra steps are needed.
+
+Then I do the same and scan the QR code from Alice’s screen
+with my mobile client.
+
+Now we are both sure that it’s really us in the conversation,
+and that all messages will be available on all our devices and only on them.
### Start the Conversation Online
-Предположим, что мы начали обсуждать что-то с Бобом где-то в сети
-(на форуме, в федиверсе, не важно) и решили продолжить обсуждение в мессенджере.
+Let’s say Bob and I start discussing something
+on a forum or in the Fediverse,
+and then decide to move to XMPP.
-Боб инициирует переписку, я слепо доверяю первому устройству,
-с которого он мне написал и уже потом мы обмениваемся в переписке
-фингерпринтами остальных наших устройств, если они есть.
-Такая стратегия называется ToFu.
+Bob starts the chat. I trust the first device he messages me from,
+and then we exchange fingerprints for our other devices, if we have any.
+This approach is called TOFU (Trust On First Use).
-Опять же Боб может убедиться, что я это я с помощью моей страницы с ключами,
-а я могу убедиться, что Боб на форуме -- тот же самый Боб, попросив его
-прислать мне фингерпринты прямо в личных сообщениях на том же самом форуме или
-отдельно посредством email, например.
+Bob can confirm it’s really me using my page with fingerprints.
+I can confirm it’s really him by asking him to send his fingerprints
+in a private message on the same forum or via email.
-В идеальном случае,
-у Боба тоже есть какая-то публичная страница с фингерпринтами.
-Тогда мы оба можем независимо убедиться,
-что мы именно те, за кого себя выдаём =)
+Ideally, Bob also has a public page with his fingerprints.
+That way, we can both independently verify
+that we are who we say we are.
### New or Lost Devices
-Если я решил начать использовать
-какое-то новое устройство или установить куда-нибудь
-ещё одно клиентское приложение,
-то первым делом я должен добавить его в список доверенных клиентов
-на остальных моих существующих устройствах.
+If I start using a new device or install another client application,
+the first thing I do is add it to the list of trusted clients
+on my existing devices.
-Если я по каким-либо причинам потеряю любое из своих устройств
-или зачем-то удалю один из своих приватных ключей,
-то первым делом я должен исключить такой клиент из списка доверенных
-на остальных моих устройствах.
+If I lose one of my devices or delete any private keys,
+the first thing I do is remove the corresponding client
+from the trusted list on my other devices.
-После актуализации моих личных списков доверенных устройств
-стоит сообщить об изменениях моим собеседникам по довереным каналам.
-Я могу просто попросить Алису считать мой новый QR-код при следующей встрече,
-а Бобу отправить сообщение о том,
-что утраченому устройству доверять больше не стоит,
-настоящих сообщений с него уже никогда не придёт.
+Once I’ve updated all my personal lists,
+I should inform my contacts about changes via trusted channels.
+
+I can simply ask Alice to scan my new QR code the next time we meet,
+and send Bob a message introducing my new client or letting him know
+that the lost device is no longer trusted
+and that no real messages will ever come from it again.
## Client Applications
-Этот раздел описывает особенности применения OMEMO для конкретных клиентов,
-которыми я пользуюсь сам.
+This section describes how OMEMO is used in specific client applications
+that I personally use.
-### Conversations, Monocles and Other Forks
+### Conversations and Forks
-Conversation - это современное полнофункциональное чат-приложение.
-Оно поддерживает всё, что должно поддерживать:
-переписки, звонки, отправку фотографий и файлов.
-У него есть несколько форков, в которых UX может отличаться,
-но core-фичи работают абсолютно одинаково.
+Conversations is a modern, fully featured chat application for Android.
+It supports everything a messaging app should support:
+chats, voice calls, and sharing photos and files.
-На экране с информацией о конакте (в том числе и о своём аккаунте)
-можно увидеть список фингерпринтов,
-вручную отметить галочкой доверенные или отозвать доверие.
+There are several forks of it where the UI or UX may differ,
+but the core features work exactly the same.
+I personally use Monocles Chat.
-Упростить все эти рутинные вещи призвана система с QR-кодами:
-прямо на главном можно показать свой код или считать чужой.
-Так верификация устройств при личной встрече становится простой и ненапряжной.
+On the Contact Details screen (including your own account),
+you can see a list of published fingerprints
+and manually mark them as trusted or revoke trust.
-Правило большого пальца - сканируй QR-код при каждом удобном случае.
+To simplify all these routine operations, a QR-code-based system is used:
+You can show your own QR code or scan other people’s codes
+directly from the main screen.
+This makes device verification during in-person meetings simple and effortless.
### Dino
-Это лёгкий GUI-клиент, построенный на GTK фреймвоке.
-Опять же, все вопросы доверия и недоверия
-можно легко решить на экране "Детали контакта" с помощью чекбоксов.
+Dino is a lightweight GTK-based GUI client.
-К сожалению, по умолчанию, Dino настроен на автоматическое доверие
-новым фингерпринтам, я рекомендую эту функцию отключить.
+It can be considered a fully functional one,
+although some non-essential features are still not supported or implemented.
+For example,
+it is not possible to clear local chat history using built-in methods :D
+
+Trust and untrust decisions can be easily managed
+in the Encryption tab of the Conversation Details window.
+
+It is important to note that, by default, Dino is configured
+to automatically trust new fingerprints.
+I recommend disabling this feature.
### Profanity
-Это могучий TUI-клиент,
-где всё-всё-всё реализовано через встроенную систему команд.
+Profanity is a powerful TUI client
+where everything is controlled through a built-in command system.
-Если вы зачем-то намерены им пользоваться,
-то ниже вас ожидает небольшой читшит по использованию OMEMO,
-но я настойчиво рекомендую ознакомиться с полной документацией самостоятельно.
+If you somehow intend to use it,
+below you will find a small cheat sheet for using OMEMO.
+However, I strongly recommend reading the full documentation.
-- Генерация ключа и добавление своих устройств:
+- Generate a key and add your other clients:
```text
/omemo gen
/omemo trust me@some.server some-cool-fingerprint-01
@@ -356,26 +349,26 @@ Conversation - это современное полнофункциональн
/omemo qrcode
```
-- Увидеть список своих или чужих fingerprint'ов:
+- View the list of your own or someone else’s fingerprints:
```text
/omemo fingerprint me@some.server
/omemo fingerprint alice@another.server
```
- Доверенные будут помечены как `trusted`.
+ Trusted ones will be marked as `trusted`.
-- Начать зашифрованный диалог:
+- Start an encrypted conversation:
```text
/omemo start alice@another.server
```
-- Добавить чужой фингерпринт в список доверенных:
+- Add fingerprints to the trusted list:
```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
```
-- Перестать доверять кокретному клиенту:
+- Revoke trust for a specific client:
```text
/omemo untrust alice@another.server some-cool-fingerprint-02
```