ответ

Никакой компании в цепочке.
Только математика, на публичном реестре.

Onym заменяет доверенного оператора четырьмя деталями: ключевой храповик на телефоне, доказательство членства в группе с нулевым разглашением, сменный транспорт и правила группы, закреплённые в публичном смарт-контракте. Вместе они скрывают содержимое сообщений и личность отправителя от сети. Что они не скрывают — указано в модели угроз.

математика в работе

Ключи не покидают телефон.
Чейн видит только доказательство.

доказательство
храповик
Цепочка одноразовых ключей, идущая только вперёд. Утечка одного ключа не вскрывает ни предыдущие сообщения, ни последующие.
свидетель секрет на устройстве
Подтверждение того, что вы в группе. Создаётся при вступлении, хранится на телефоне, никому не показывается.
автор при отправке
Когда вы отправляете сообщение, телефон собирает крошечное доказательство: «это отправил кто-то из группы».
верификатор в чейне
Публичный контракт проверяет доказательство. Он узнаёт, что оно валидно — и больше ни единого факта.

Отправитель доказывает «это отправил один из участников», не раскрывая, кто именно. Группа не узнаёт, кто. Транспорт видит шифротекст и тайминг, не содержание и не отправителя.

канал сменный

Релэи — это тупые трубы.
Меняйте их, как кабели.

Сегодня Onym идёт с Nostr и одинаково относится к тому, что появится завтра. Релэй видит мимо себя только непрозрачные блобы — ни отправителя, ни получателя, ни сообщения. Пользуйтесь стандартным, поднимите свой или одолжите у друга.

nostr.example
стандарт
релэй · публичный
uptime 99.97%
в полёте
your-relay.lan
свой
релэй · приватный
виден 4с назад
в полёте
friend.box
общий
релэй · по приглашению
uptime 99.4%
в полёте
+
добавить релэй

Каждый блоб выглядит одинаково для любого релэя. Поменяйте релэй — содержимое остаётся непрозрачным. Транспорт — это курьер с запечатанным конвертом и без обратного адреса.

правила — публично

Никакой консоли оператора.
Контракт, который может прочитать любой.

поверхность контракта
soroban · публично
addr CDQA…HZRW flavor sep-* лицензия mit переопределение нет
create_group(commitment, …) создаёт новую группу с начальным обязательством основатель
update_commitment(proof, new_commitment) любое изменение состояния — принять, исключить, голосование, смена роли zk-доказательство
verify_membership(proof, group_id) контракт сверяет доказательство с текущим обязательством проверка
bump_group_ttl(group_id) поддерживает хранилище группы живым между TTL реестра любой

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

выгода (и пределы)

Скрыто по конструкции.
Честно о том, что нет.

содержание сообщения (всегда, для всех вне группы)
какой участник группы отправил сообщение
реальный человек за идентичностью на блокчейне (только из блокчейна)
фраза восстановления, ключи, история (остаются на устройстве)

Что не скрыто — тайминг соединения, существование группы, диапазон размера группы, тайминг операций в блокчейне — указано в модели угроз.

четыре потока

Что происходит, по шагам,
когда вы нажимаете кнопку.

Создание идентичности

[устройство]                    [сеть]
  |
  | сгенерировать BIP-39 (128 бит)
  | вывести ключи secp256k1, Ed25519,
  |        X25519, BLS12-381
  | сохранить только на устройстве
  |
  | (трафика нет. идентичность локальна
  |  до первого действия.)

Создание группы

[основатель]      [релеер]            [Soroban-контракт]
  | выбрать group_id
  | вычислить commitment
  | подписать Soroban-auth
  |   для create_group
  |
  |--- отправить -->|
                       |-- Stellar tx+fee -->|
                                           | проверить auth
                                           | проверить ZK-доказ.
                                           | id не занят
                                           | сохранить commitment
                                           | emit GroupCreated
                       |<-- tx подтверждён ---|
  |<- подтверждено -|

Отправка сообщения

[отправитель]     [Nostr-релей]      [получатели]
  | зашифровать участникам
  | подписать ключом отправителя
  |
  |--- опубликовать -->|
                          |-- разослать -->|
                                            | расшифровать,
                                            | проверить подпись,
                                            | отрисовать

Действие участника (принять · голосование · обновление)

[участник]         [релеер]            [Soroban-контракт]
  | вычислить новый commitment
  | построить ZK-доказательство
  |   корректного перехода
  | БЕЗ подписи пользователя
  |
  |--- отправить -->|
                        |-- Stellar tx+fee -->|
                                            | проверить ZK-доказ.
                                            | c_old совпадает
                                            | сохранить c_new
                        |<-- tx подтверждён ---|
  |<- подтверждено -|

В каждом потоке участвует не более трёх сторон: ваше устройство, опционально релеер для оплаты комиссий Stellar, и Soroban-контракт в блокчейне. Релеер никогда не держит плейнтекст и не имеет права подписи. Контракт — единственное долговременное общее состояние.