В связи с активным наступлением разного рода облаков и интернет-сервисов, где собственные данные становятся уже не совсем и собственные, озадачился я независимым инструментом для общения с друзьями, коллегами и родственниками, обеспечивающим приватность и контроль за данными.

Выбор пал на открытый протокол обмена сообщениями XMPP, который обеспечивает обмен сообщениями, изображениями и файлами с другими пользователями. Отличительной особенностью данной системы является ее распределенная сущность, любой может запустить свой собственный XMPP сервер, при этом пользователи этого сервера могут свободно взаимодействовать с пользователями на других серверах. Чем-то эта идеалогия напоминает электронную почту, знакомый всем email. Самому протоколу XMPP уже сто лет в обед, имеются и некоторые родовые проблемы, которые до сих пор до конца не исправлены, но достойных альтернатив я пока не нашел.

Пользователь при регистрации на сервере XMPP получает учетную запись вида username@ochat.org и может использовать ее для входа с любого количества клиентов.

Безопасность передаваемых данных можно обеспечить end-to-end шифрованием, самым удобным в использовании из которых является протокол OMEMO.

В качестве клиента для Android рекомендую Conversations. Для Desktop мне больше всего понравился Gajim, есть версии для Linux и Windows. Оба имеют открытый исходный код. Conversations можно установить через Play Market (приложение платное), или бесплатно собрать из исходного кода. Сделать это довольно просто:

  • Download and install the Android SDK
  • Install the Google Repository and the latest SDK tools with the Android SDK Manager
  • Check out the source code using
  • git clone https://github.com/siacs/Conversations.git
  • Compile with ./gradlew assembleFreeDebug
  • Your APK will be at build/outputs/apk/Conversations-$version-free-debug.apk

В случае с Gajim необходимо немного пошаманить. Первым делом, для установки самой свежей версии, необходимо добавить в систему официальный репозиторий проекта (я предпочитаю ночные сборки), для Ubuntu/Debian:

Добавить ключ GPG: 
wget -q https://gajim.org/gajim.key -O - | apt-key add - 
Добавить репозиторий: 
sudo sh -c "echo deb ftp://ftp.gajim.org/debian unstable main > /etc/apt/sources.list.d/gajim.list" 
Обновить репозиторий: 
sudo apt-get update 
И установить Gajim выполнив: 
sudo apt-get install gajim-nightly

И установить плагин OMEMO. Для версии Gajim старше 1.0.0 сделать это можно через встроенный Plugin Manager, предварительно установив пакеты зависимостей:

sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
sudo apt-get install python3-setuptools
sudo apt-get install python3-cryptography
sudo apt-get install python3-axolotl
Перезапустить Gajim и активировать OMEMO в Gajims PluginManager

В конфигурации плагина необходимо сгенерировать ключ, который будет привязан к конкретному экземпляру клиента, а также Fingerprint (отпечаток) ключа, который необходимо передать собеседникам для вашей аутентификации. Сделать это можно через qr-код или проверив вручную. По умолчанию клиент Conversations при получении первого сообщения вслепую помечает отпечаток как "доверенный", а при изменении его в дальнейшем - выдает предупреждение.

Например, для моего JID pavel@ochat.org страница настройки плагина выглядит следующим образом:

Selection_029

После обмена отпечатками ключа, все сообщения передаются в зашифрованном виде между конечными точками, а отправитель однозначно удостоверяется.

Selection_031

Значок замка рядом с сообщением подтверждает безопасность передаваемых данных.

Selection_032

Если заниматься разворачиванием собственного сервера не хочется, можно использовать один из множества существующих. Например, вот один из списков публичных активных серверов: https://list.jabber.at/.