CarrierPony: приватный мессенджер на OpenPGP и своё реле

Логотип CarrierPony. Своё реле и OpenPGP Docker
Мессенджер без аккаунта на OpenPGP: чем он отличается от SimpleX, почему звонков нет и как поднять своё реле.

Реклама. ООО «ТАЙМВЭБ.КЛАУД», ИНН 7810945525.

Timeweb

CarrierPony — мессенджер без аккаунта, телефона и почты. Переписка и файлы запечатываются на вашем устройстве ключом OpenPGP, а сервер между вами только переносит конверт, который не может открыть. Ниже — чем он похож на SimpleX Chat, почему звонков в нём нет, и как поднять своё реле. Им можно пользоваться приватно и на сервере в России: текст сообщения до машины не доходит, его закрывает OpenPGP.

Что такое CarrierPony

Это молодой мессенджер одного независимого разработчика, из той же семьи, что и PGPony. Личность здесь — не номер и не логин, а пара ключей OpenPGP, которую приложение создаёт на телефоне: Ed25519 для подписи и Curve25519 для шифрования. Публичную половину вы отдаёте собеседнику при сопряжении. Закрытая остаётся на устройстве и покидает его только внутри зашифрованной резервной копии.

Сопряжение — это обмен приглашением или скан кода лично. После него у обоих один и тот же safety number, контрольное число от двух ключей. Пока вы его не сверили, связь держится на доверии к первому контакту: теоретически в середину мог встать кто-то другой. Сверили — чужой ключ уже не сможет притвориться вашим собеседником.

Дальше каждое сообщение и каждый файл подписываются вашим ключом и шифруются для ключа собеседника. Официальный предел файла — 50 МБ. Есть группы из тех, с кем вы уже сопряглись, и каналы: один публикует, подписчики читают и в канал не отвечают. На одном устройстве можно держать несколько личностей, у каждой свои ключи и свой ящик. Уже существующий ключ OpenPGP из GnuPG или PGPony можно импортировать.

Приложения есть для iPhone, Android и компьютера: macOS, Windows и Linux, в том числе ARM. Прямая сборка Android, не из магазина, дополнительно умеет везти конверты через SMS и через реле Nostr: оба пути выключены, пока вы их не включите. Настольное приложение сопрягается с телефоном по QR-коду. В каталоге F-Droid CarrierPony нет, отдельной ссылки туда нет. Опубликованные версии:

Пока телефон недоступен, конверт лежит на реле и удаляется после доставки. Реле по умолчанию — api.carrierpony.com. По документации сообщения на устройствах сами исчезают через 30 дней. Если оба собеседника в одной сети или прямая доставка доходит, конверт может пойти мимо реле сразу на устройство.

Звонков в CarrierPony нет

Голосовых и видеозвонков в CarrierPony сейчас нет. На сайте, в документации, в списке возможностей настольной версии и в API реле их нет: реле принимает конверт, отдаёт входящие и подтверждение доставки, отдельного вызова там не предусмотрено. Настольное приложение прямо перечисляет, что умеет телефон: личные чаты, группы, каналы, файлы, safety number и sealed sender. Звонков в этом списке нет.

У SimpleX Chat звонки есть, и для своего сервера их поднимают отдельно. Если вам нужна именно связь голосом на своей инфраструктуре, CarrierPony её не закроет. Это переписка и файлы.

CarrierPony и SimpleX

Снаружи они похожи. Нет аккаунта, номера и почты. Знакомство через приглашение. Сервер не получает открытый текст. Свой сервер можно поднять самому. Есть группы и передача файлов. На этом сходство кончается, и различия важнее.

  • У SimpleX нет долгого идентификатора пользователя: очереди одноразовые в том смысле, что сервер не ведёт учётную запись. У CarrierPony личность — это отпечаток ключа OpenPGP. Реле маршрутизирует конверты по этому отпечатку, так что стабильный криптографический адрес есть.
  • В SimpleX каждый может жить на своём сервере, а собеседник обращается к серверу адресата. В CarrierPony реле — отдельный мир: переписка идёт только с теми, у кого в приложении указан тот же адрес. Чужое реле, в том числе официальное, ваши конверты не примет.
  • SimpleX умеет звонки. CarrierPony — нет.
  • CarrierPony запечатывает конверт стандартом OpenPGP, его можно сверить с GnuPG, а ядро PGPonyCore опубликовано под Apache-2.0. У SimpleX свой протокол. Открытый стандарт — это плюс к прозрачности, не знак того, что молодое приложение уже прошло независимый аудит.
  • Своё реле CarrierPony не будит приложение из App Store и Google Play. Push завязан на ключи издателя, которых у вашего сервера нет. Сообщения приходят, когда приложение открыто и само забирает ящик. Это ограничение написано на странице self-host, его стоит прочитать до установки.
  • Файл в CarrierPony едет тем же реле, до 50 МБ. В SimpleX файлы идут отдельной службой XFTP.

SimpleX старше и уже обжит. Публичный репозиторий Android-клиента CarrierPony появился 22 августа 2026 года, реле на GitHub почти без сообщества. Ставить CarrierPony «вместо SimpleX, потому что оба без аккаунта» рано. Ставить его рядом, если вам нужен именно OpenPGP и вы готовы к молодому коду, — осмысленно. Как устроен свой сервер SimpleX, разобрано в отдельной статье. Matrix — другой класс: там комнаты и история на сервере, это не конверт на полчаса. Про него есть установка Synapse.

OpenPGP на своём сервере

Сообщение шифруется на телефоне до того, как попадёт на сервер. Реле хранит запечатанный конверт и не имеет закрытых ключей. Поэтому текст переписки не появляется от того, что машина стоит в России, в ЕС или у вас дома. OpenPGP не включается только «за рубежом». Арендодатель VPS, где бы он ни был, получает конверт, который не открывает.

Это не формула «сервер не знает ничего». Он видит отпечаток получателя, непрозрачный идентификатор сообщения, размер и время. При sealed sender отправитель спрятан внутрь шифрования: реле не должно узнать, кто послал конверт, только в какой ящик его положить. Содержимое остаётся закрытым. Метаданные доставки — нет.

Граница честная, её же описывает страница security проекта. CarrierPony защищает текст и файлы от сети и от самого реле. Он не защищает от вируса на разблокированном телефоне и от того, кто смотрит в экран. Пока safety number не сверен, сопряжение — доверие к первому контакту. Независимого аудита у CarrierPony нет, и молодой код сам разработчик помечает незаконченным: подпись к реле сейчас покрывает только одноразовый nonce, а не тело запроса, уборки старых устройств и отдельного задания на протухание конвертов ещё нет. Читать переписку это реле всё равно не может. Путать «конверт запечатан» и «проект уже зрелый» не стоит.

Что нужно до установки

Реле — единственная серверная часть. Клиенты остаются на телефонах и компьютерах. Для Docker-пути с официальной инструкции хватает машины с Linux, домена и свободных портов 80 и 443: сертификат забирает Caddy. Запись A на публичный IPv4 должна существовать до запуска, иначе сертификат не выпустится. Если есть IPv6, добавьте AAAA.

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

Установка Docker Engine

Пакеты ниже — с официальной страницы Install Docker Engine on Ubuntu. Для реле нужен и сам движок, и Compose: официальный запуск — это docker compose up -d. В набор входят docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin и docker-compose-plugin. Скрипт get.docker.com Docker относит к тестам и разработке, на сервер с перепиской его лучше не брать.

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world

hello-world должен напечатать приветствие и завершиться. Команда docker без sudo по умолчанию не работает. Для одного администратора на VPS это нормально.

Порты, которые Docker публикует наружу, обходят ufw и firewalld. У этого реле наружу смотрят 80 и 443. Правила для опубликованных портов вешают на цепочку DOCKER-USER. Подробности — в разделе Packet filtering and firewalls.

Своё реле

Источник — CarrierPony-Relay под Apache-2.0 и страница Run your own relay. Это небольшое PHP-приложение: MySQL хранит конверты, Caddy выпускает сертификат. Криптография сообщений живёт не здесь, а в PGPonyCore на устройствах.

git clone https://github.com/norsehorse-dev/CarrierPony-Relay.git
cd CarrierPony-Relay
cp .env.example .env

Откройте .env и замените три вещи. DOMAIN — ваш домен. MYSQL_ROOT_PASSWORD и MYSQL_PASSWORD — длинные свои пароли, не строки-примеры из .env.example. MYSQL_DATABASE и MYSQL_USER можно оставить carrierpony.

docker compose up -d

Первый запуск подтянет схему базы. Реле открывается по адресу https://ваш-домен. Порты 80 и 443 должны быть свободны: их занимает Caddy. Если на машине уже есть веб-сервер, этот способ с ним столкнётся.

Без Docker есть sudo ./install.sh для свежей Ubuntu или Debian: Apache, MySQL и PHP. Пошаговый ручной путь лежит в INSTALL.md того же репозитория. Для сервера, который вы не хотите смешивать с пакетами дистрибутива, официально рекомендуют Docker.

Адрес реле в приложении

В приложении откройте Settings, затем Relay, и впишите адрес своего реле. Пункт так и называется по-английски. То же самое можно задать при первом запуске, до сопряжения: так чище. Если сменить реле после того, как контакты уже есть, с ними придётся сопрягаться заново. Официальное реле и ваше между собой переписку не передают.

Фоновых уведомлений у такой установки не будет, если вы пользуетесь сборками из App Store и Google Play. Приложение забирает конверты, пока оно открыто. Своя сборка со своими ключами Apple и Google теоретически могла бы будить телефон, но это уже отдельный выпуск приложения, не настройка реле.

Что реле всё-таки видит

По README реле хранит шифротекст и минимум для доставки: отпечаток получателя, непрозрачный идентификатор, размер и метки времени. Устройство доказывает, что владеет ключом, подписью одноразового nonce. Имени, номера и текста там нет. Конверт удаляется, когда все зарегистрированные устройства получателя его подтвердили, или когда истекает его срок.

Sealed sender прячет отправителя внутрь конверта. Прямая доставка в одной сети убирает реле из пути целиком. Ни то ни другое не делает отпечаток получателя невидимым для сервера в те минуты, когда конверт всё-таки лежит на нём.

Молодой проект

Открытость здесь настоящая, но узкая по возрасту. Реле, Android-клиент и настольное приложение опубликованы под Apache-2.0. Криптоядро — PGPonyCore, то же, что у PGPony, с заявлением о совместимости с GnuPG. Это и есть плюс к прозрачности рядом с self-hosted: формат не выдуман вчера под одно приложение, код запечатывания можно прочитать.

Возраст другой. Публичный Android-репозиторий создан 22 августа 2026 года. Звёзд у реле почти нет, автор один. Сам README перечисляет защиту, которой ещё нет. Имеет смысл прочитать код и не ждать от него повадок SimpleX. Для переписки, где цена ошибки высока, зрелый SimpleX пока спокойнее. CarrierPony интересен тем, у кого OpenPGP — сознательный выбор, а не галочка в описании магазина.

Частые вопросы

Можно ли звонить?

Нет. Ни сайт, ни документация, ни реле не описывают голосовые или видеозвонки.

Имеет ли смысл сервер в России?

Для текста переписки — да. Конверт запечатан OpenPGP до отправки, и страна машины не открывает его. Метаданные доставки на этом сервере остаются. Сверьте safety number, иначе вы не знаете, чей ключ держите.

Обязательно ли своё реле?

Нет. Без настройки приложение ходит на api.carrierpony.com. Своё реле нужно, когда конверты должны лежать на вашей машине и все собеседники согласны указать её адрес.

Появятся ли уведомления?

На своём реле со сборками из магазинов — нет. Сообщения забираются, пока приложение открыто.

Рубрики: Docker Безопасность Веб-приложения
Подписаться на новые статьи (RSS)

Без почты и трекеров — только лента обновлений.

Также есть английская лента

Оцените статью
Добавить комментарий