mirror of
https://github.com/He4eT/oddsquat.git
synced 2026-05-04 12:27:23 +00:00
Compare commits
4 commits
05ac85af41
...
5da77a6fc6
| Author | SHA1 | Date | |
|---|---|---|---|
| 5da77a6fc6 | |||
| a3621507f6 | |||
| acfcf7e45e | |||
| e2cabe34dc |
1 changed files with 292 additions and 3 deletions
|
|
@ -38,8 +38,7 @@ and the practical aspects of using it.
|
||||||
|
|
||||||
**End-to-end encryption** is a way to keep your chats truly private.<br>
|
**End-to-end encryption** is a way to keep your chats truly private.<br>
|
||||||
Only you and the person you’re messaging can read the messages.
|
Only you and the person you’re messaging can read the messages.
|
||||||
Not even the server owner or your carrier has the keys
|
Not even the server owner has the keys needed to decrypt or modify them.
|
||||||
needed to decrypt or modify them.
|
|
||||||
|
|
||||||
**XMPP** is an extensible protocol for instant messaging.
|
**XMPP** is an extensible protocol for instant messaging.
|
||||||
It's open, decentralized, and mature.
|
It's open, decentralized, and mature.
|
||||||
|
|
@ -51,7 +50,23 @@ it on a <a
|
||||||
href='https://contrapunctus.codeberg.page/the-quick-and-easy-guide-to-xmpp.html'
|
href='https://contrapunctus.codeberg.page/the-quick-and-easy-guide-to-xmpp.html'
|
||||||
target='_blank'>dedicated page by Daniel Gultsch</a>.
|
target='_blank'>dedicated page by Daniel Gultsch</a>.
|
||||||
|
|
||||||
## 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.
|
Unfortunately, things that are truly secure are rarely convenient.
|
||||||
They often require some initial efforts and a bit of ongoing attention.
|
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".
|
could be described as a "WhatsApp with benefits and frictions".
|
||||||
It's kinda ironic, considering that WhatsApp’s protocol
|
It's kinda ironic, considering that WhatsApp’s protocol
|
||||||
is actually based on XMPP, but incompatibly altered and defederated.
|
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
|
||||||
|
```
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue