Привет, Хабр!

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

Краткая предыстория. Как вы уже знаете, наш мессенджер функционирует на собственном блокчейне, и в нем реализованы переводы нескольких криптовалют в чатах. Добавлю: связи между кошельками публичны. Поэтому факт переписки и перевода токенов доступен и подтвержден в блокчейне. А ведь иногда именно факт общения (или перевода средств) может быть компрометирующим! Все ведь помнят «Трех мушкетеров» и подвески королевы, да?



Наши пользователи указали нам на то, что пора устранить эту «лазейку в приватности». Так что мы, во-первых, убрали транзакции сообщений и сервисные транзакции из нашего обозревателя блоков. Поэтому обычный пользователь уже сейчас не может установить факт переписки между двумя номерами.

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

Принцип работы: собрать и поделить


Мы решили использовать технологию, похожую на ту, что используют популярные анонимные криптовалюты: Z-Cash, Monero и другие.

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

Миксер копит сообщения и переводы, и рассылает их адресатам со своего адреса. Пользователь Б получит сообщение не от пользователя А, а от миксера.

Чем больше людей пользуются сервисом, тем большую анонимность он дает. Когда у миксера много входящих и исходящих транзакций, сложно отследить, на какой именно адрес пользователь А отправил сообщение. Кроме того, миксер будет делать промежуточные транзакции между внутренними кошельками.

Никому нельзя верить


В Интернете нельзя доверять никому, в том числе миксеру. Поэтому мы сделали так, чтобы посредник не мог расшифровать текст сообщения – только адрес получателя. Это достигается тем, что сообщение шифруется два раза.

Классический механизм отправки


Механизм отправки через миксер

Поясню словами, как происходит процесс.

  1. Алиса первый раз шифрует ключом Боба текст сообщения.
  2. Потом добавляет адрес Боба и шифрует еще раз ключом Миксера.
  3. Миксер может расшифровать только свою часть и получить адрес Боба.
  4. После этого Миксер добавляет к зашифрованному Алисой сообщению ее адрес и шифрует ключом Боба.
  5. Боб извлекает сообщение из блокчейна, при первой расшифровке он узнает отправителя, при второй — текст сообщения.

Однако миксер знает адреса отправителей и получателей, и потенциально есть риск раскрытия этой информации. При кибер-паранойе высшего левела можно защититься на 146%, используя систему из нескольких миксеров.

Еще немного высокой кухни


Криптовалютные платежи внутри нашего мессенджера тоже можно будет делать через миксер. Так будет скрыта связь между кошельками. Отправитель указывает сумму перевода, адреса и максимальную задержку по времени, а миксер отправляет токены частями и в разное время. Он будет собирать транзакции нескольких пользователей и делать транзакции между внутренними кошельками, и таким образом скроет связи между получателями и отправителями.



При этом криптовалюта будет какое-то время храниться на его кошельках. Поэтому миксеру придется доверять. Чтобы мошенничать было невыгодно, мы введем плату за регистрацию публичных миксеров и сделаем рейтинги.

У основателей миксера будет выбор, делать ли его публичным (доступным для всех), при этом брать плату за транзакции и получать прибыль. Либо не регистрировать его в общем реестре.Тогда миксер будет анонимным, но и получать профит от транзакций он не будет. Это вариант для тех, кто хочет настроить сервис для себя – например, для переписки сотрудников компании.

Если мы успешно внедрим концепт, чуть позже сделаю «технический» пост на эту же тему.

Комментарии (2)


  1. Tangeman
    25.02.2019 19:22

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

    Если в схеме будут задействованы несколько миксеров (и они принадлежат разным владельцам), то вероятность мошенничества резко возрастает (у мошенников обычно не бывает проблем чуть-чуть заплатить системе чтобы обобрать её клиентов), не говоря уже о том что доверять сразу пачке разных сервисов с разными владельцами сложнее чем одному, не говоря уже о том что они должны будут между собой договориться, а если владелец один — то вероятность утечки от их количества не сильно зависит.

    Теперь вопрос — кто, вероятней всего, действительно готов будет пойти на соответствующие риски и дополнительные затраты ради анонимности?

    И второй вопрос — что помешает соответствующим службам (или просто чрезмерно любопытным) раскрутить свою «честную» сеть миксеров, но бесшумно пользоваться собранными данными?


  1. eup
    27.02.2019 01:05

    Интересная реализация миксера, жалко только, что она не исключает trusted third party. Trusted third parties are security [privacy] holes.

    технологию, похожую на ту, что используют популярные анонимные криптовалюты: Z-Cash, Monero и другие.

    Нет. В существующих криптовалютах, миксеры, в лучшем случае, имеют аналоги в виде интерактивного CoinJoin, когда желающие смешать свои UTXO в рамках транзакции, договариваются друг с другом о том, как её сконструировать. В перечисленных монетах, Monero, Z-Cash либо тех, что построены на Mimblewimble (Grin, BEAM) анонимность достигается отнюдь не за счёт обфускации входов и выходов транзакций, а за счёт того, что:

    • Та или иная реализация Confidential Transactions: адреса видны, но количества передаваемых монет сокрыты в гомоморфных Pedersen Commitment-ах, к которым добавлен ZKP rangeproof для доказательства того, что количество передаваемых монет неотрицательно. В Monero, к тому же, применяются кольцевые подписи для обфускации адресов (RingCT)
    • Правила консенсуса реализованы в виде арифметической цепочки, над которой формируется доказательство с нулевым разглашением о следовании этим правилам (Z-Cash)
    • Ни адреса, ни количества передаваемых монет не раскрываются (схема Mimblewimble). Проверка правил консенсуса сводится к гомоморфному суммированию комиссии, количеств на входе и на выходе, которое даёт ноль и к проверке range proof-ов транзакций.

    Кроме того, в монетах, позволяющих применять агрегацию транзакций (Bitcoin после введения Schnorr-подписей), Grin, BEAM можно выполнять аналог CoinJoin ещё на этапе распространения транзакции по сети (stem-фаза протокола Dandelion).

    Таким образом, многие монеты в наши дни уже давно отошли от устаревшей идеи обфусцировать входы и выходы транзакций путём интерактивного конструирования транзакции (которое, к тому же, ещё и подразумевает доверие к третьей стороне). Сторонние сервисы для заметания следов использовать не стоит.