diff --git a/src/pages/posts/2026/encrypted_XMPP.md b/src/pages/posts/2026/encrypted_XMPP.md
index 12b8e71..40e199e 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 the time, the proprietary messenger kept making life harder
+At that time, the proprietary messenger once again made 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**, 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.
+Хочу также отметить,
+что я буду использовать слово Client для обозначения конкретных инстансов
+приложений на пользовательских устройствах. В документации, связанной с OMEMO
+для этого использвется термин Device, но мне он кажется запутывающим:
+в реальности на одном устройстве может быть несколько независимых клиентов.
## Basic Concepts
-This section introduces some basic ideas behind end-to-end encryption.
+Here I'm going to explain some basic ideas behind e2e.
-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.
+Если основные концепции и терминология вам знакомы,
+то можете смело пропустить этот раздел
+и перейти к особенностям их практического применения касательно XMPP.
+
+Или даже сразу перейти к описанию workflow, которого я придерживаюсь сам.
### Trade-offs Between Safety and Convenience
@@ -108,240 +108,247 @@ is actually based on XMPP, but incompatibly altered and defederated.
### Keys, Fingerprints and Trust
-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.
+OMEMO построен вокруг Double Ratchet Algorithm.
+Там внутри всё очень интересно,
+но нам для практического применения важно только то,
+что каждый клиент пользователя хранит в себе какие-то там ключи,
+и умеет получать из них какой-то там хэш,
+который принято называть fingerprint.
-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.
+Ключи обычно как-то автоматически управляются XMPP клиентом
+и в норме вам никогда не стоит трогать их руками.
+Возможно, вам лучше даже и не знать, как они выглядят.
+Единственное, что с ними нужно делать --
+держать в секрете и бэкапить при необходимости.
-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.
+Фингерпринт позволяет отличать конкретный
+клиент собеседника и быть уверенным, что его не подмененили.
+Список фингерпринтов для конкретного аккаунта
+не является чем-то секретным:
+клиентские приложения сами анонсируют свои фингерпнинты на сервере
+и автоматически пополняют список чужих.
+Значение имеют только те,
+которые вы пометили как фингерпринты довереных клиентов.
-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.
+В идеале, человек должен лично при встрече
+или по уже довереному и безопасному каналу связи
+сказать вам "Да, фингерпринт XXX принадлежит моему устройству"
+и только после этого вы помечаете XXX доверенным.
+Обычно в интерфейсе это просто проставление чекбокса или сканирование QR-кода.
-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.
+Некоторые клиенты для удобства пользователя
+довериют любым новым фингерпринтам контактов по-умолчанию,
+но я не стал бы рекомендовать использовать такую политику,
+это легкомысленно и небезопасно.
+Политики доверия или недоверия
+можно посмотреть или поменять в настройках вашего клиента.
-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 творит какую-то магию с жонглированием ключами и
+ни один клиент, кроме перечисленных в списке на момент зашифровки,
+не сможет его впоследствии расшифровать.
+Передать как-то доверие в прошлое, увы, невозможно.
-## Practical Aspects of OMEMO and XMPP
+## Реалии OMEMO и XMPP
+## Особенности OMEMO и XMPP
### Chat History
-In theory, XMPP supports server-side message history storage via
-**XEP-0313: Message Archive Management**.
+Вообще, XMPP поддерживает хранение истории переписок на сервере.
+За это отвечает **XEP-0313: Message Archive Management**.
-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.
+В реальности поддержка этого XEP,
+политика хранения истории и особенно сроки хранения сообщений
+зависят от конкретного сервера.
+Рассчитывать по-умолчанию на бессрочное хранение всех переписок не стоит.
-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.
+В конечном счёте,
+ответственность за хранение переписок лежит исключительно на вас
+и это разумное место для применения local-first подхода.
+С практической точки зрения
+проще всего рассматривать серверный архив сообщений
+как некоторый кэш, который выручит вас по возвращении
+из непродолжительного офлайна
+или поможет с синхронизацей текущей переписки между разными устройствами.
### 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
+До его внедрения можно было переключиться с телефона на лэптоп
+и пялиться в загруженную историю переписки,
+состоящей только из входящих сообщений от собеседника.
+Отправка своих же сообщений ещё и самому себе
+на уровне протокола -- это довольно неочевидная фича.
-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.
+Тут важно упомянуть, что при использовании e2e шифрования,
+упомянутая выше концепция доверенных отпечатков пальцев
+распространяется и на свои клиенты тоже.
-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.
+Для бесшовной синхронизации исходящих сообщений
+все ваши клиенты должны считать фингерпринты друг друга доверенными,
+иначе можно столкнуться с ситуацией,
+когда не получается прочитать своё же сообщение.
+
+Логичное, но неприятное следствие:
+Новый клиент или старый,
+который не был в списке доверенных на момент отправки сообщений,
+получит историю из MAM, но не сможет её расшифровать.
+Да, даже ваши сообщения.
+Теоретически, перепаковка сообщений
+на старых доверенных клиентах вроде как возможна,
+но на практике, никто такое пока не имплементировал
+и важные вещи придётся пересылать вручную.
### 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 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.
+OMEMO был задуман как решение, которое после настройки не требует какого-то
+дополнительного вмешательства.
+Можно считать, что этой заявленной цели удалось достичь
+и при наличии базового понимания работы протокола и регулярном онлайне
+никаких сюрпризов быть не должно.
-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
-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.
+Представим, что у меня есть аккаунт jid@some.server и несколько устройств:
+телефон, ноутбук и настольный компьютер.
+Сначала я опишу воркфлоу общими словами,
+а потом дам уточнения про использование конкретных приложений.
-### 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.
+Потом я должен на каждом своём устройстве добавить остальные:
+телефон должен считать все мои компьютеры доверенными устройствами,
+а компьютеры доверять друг другу и телефону.
-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/
+Фингерпринты публичные,
+их можно даже разместить у себя на какой-нибудь личной странице.
+Вот, например, моя: https://oddsquat.org/about/keys/
### Start the Conversation in Person
-Let’s say I meet Alice,
-we start talking, and decide to continue the conversation online.
+Предположим, я встретил Алису и мы решили обменяться контактами.
+Я открыл на телефоне специальный QR-код,
+затем Алиса считала его своим клиентом.
+В этот QR-код уже зашиты фингерпринты всех моих устройств, так что
+дополнительных действий не требуется.
+Аналогично, я своим мобильным клиентом считываю QR-код с экрана Алисы.
-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.
+Предположим, что мы начали обсуждать что-то с Бобом где-то в сети
+(на форуме, в федиверсе, не важно) и решили продолжить обсуждение в мессенджере.
-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).
+Боб инициирует переписку, я слепо доверяю первому устройству,
+с которого он мне написал и уже потом мы обмениваемся в переписке
+фингерпринтами остальных наших устройств, если они есть.
+Такая стратегия называется ToFu.
-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.
+Опять же Боб может убедиться, что я это я с помощью моей страницы с ключами,
+а я могу убедиться, что Боб на форуме -- тот же самый Боб, попросив его
+прислать мне фингерпринты прямо в личных сообщениях на том же самом форуме или
+отдельно посредством 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.
+Если я по каким-либо причинам потеряю любое из своих устройств
+или зачем-то удалю один из своих приватных ключей,
+то первым делом я должен исключить такой клиент из списка доверенных
+на остальных моих устройствах.
-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.
+После актуализации моих личных списков доверенных устройств
+стоит сообщить об изменениях моим собеседникам по довереным каналам.
+Я могу просто попросить Алису считать мой новый QR-код при следующей встрече,
+а Бобу отправить сообщение о том,
+что утраченому устройству доверять больше не стоит,
+настоящих сообщений с него уже никогда не придёт.
## Client Applications
-This section describes how OMEMO is used in specific client applications
-that I personally use.
+Этот раздел описывает особенности применения OMEMO для конкретных клиентов,
+которыми я пользуюсь сам.
-### Conversations and Forks
+### Conversations, Monocles and Other Forks
-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.
+Conversation - это современное полнофункциональное чат-приложение.
+Оно поддерживает всё, что должно поддерживать:
+переписки, звонки, отправку фотографий и файлов.
+У него есть несколько форков, в которых UX может отличаться,
+но core-фичи работают абсолютно одинаково.
-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.
+На экране с информацией о конакте (в том числе и о своём аккаунте)
+можно увидеть список фингерпринтов,
+вручную отметить галочкой доверенные или отозвать доверие.
-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.
+Правило большого пальца - сканируй QR-код при каждом удобном случае.
### Dino
-Dino is a lightweight GTK-based GUI client.
+Это лёгкий GUI-клиент, построенный на GTK фреймвоке.
+Опять же, все вопросы доверия и недоверия
+можно легко решить на экране "Детали контакта" с помощью чекбоксов.
-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.
+К сожалению, по умолчанию, Dino настроен на автоматическое доверие
+новым фингерпринтам, я рекомендую эту функцию отключить.
### Profanity
-Profanity is a powerful TUI client
-where everything is controlled through a built-in command system.
+Это могучий TUI-клиент,
+где всё-всё-всё реализовано через встроенную систему команд.
-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.
+Если вы зачем-то намерены им пользоваться,
+то ниже вас ожидает небольшой читшит по использованию OMEMO,
+но я настойчиво рекомендую ознакомиться с полной документацией самостоятельно.
-- Generate a key and add your other clients:
+- Генерация ключа и добавление своих устройств:
```text
/omemo gen
/omemo trust me@some.server some-cool-fingerprint-01
@@ -349,26 +356,26 @@ However, I strongly recommend reading the full documentation.
/omemo qrcode
```
-- View the list of your own or someone else’s fingerprints:
+- Увидеть список своих или чужих fingerprint'ов:
```text
/omemo fingerprint me@some.server
/omemo fingerprint alice@another.server
```
- Trusted ones will be marked as `trusted`.
+ Доверенные будут помечены как `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
```