June 11, 2020

Атомарные свопы для приватных транзакций (CoinSwap)

В конце мая известный разработчик в области Bitcoin Privacy (JoinMarket и Electrum Personal Server) и автор одноимённой статьи на Bitcoin Wiki, Крис Бельчер, опубликовал проект развития идеи CoinSwap. Как и CoinJoin эта идея была предложена Грегори Максвеллом, довольно давно. Проект привлёк ещё больше внимания после гранта Human Rights Foundation (HRF) в объёме 50 000$, пожертвованного в целях улучшения приватности Биткоина. Фонд собирается опубликовать информацию о втором в 50 000$ гранте вскоре. HRF сыграл координирующую роль для неизвестного жертвователя, пожелавшего финансировать развитие Биткоина как свободной от цензуры цифровой валюты.

Свопы и Миксы

CoinSwap позволяет использовать технологию, лежащую в основе атомистических свопов для улучшения приватности пользователей Биткоина. Если CoinJoin направлен на разрушение строгих связей между отправителем и получателем транзакции в цепочке, то CoinSwap позволяет специфически работать с эвристикой "Все входы в транзакцию принадлежат одной персоне", также как и "Сдача возвращается в кошелёк отправителя".

Простейшая схема CoinJoin. Явно определяемые входы "запутываются" в процессе выполнения протокола и связи между входами и выходами схемы CoinJoin приобретают вероятностный характер: в идеальном случае невозможно точно определить кому принадлежит выход.

CoinSwap работает отличным от CoinJoin методом и похожим на атомистический своп с тем исключением, что контрагенты меняют свои монеты — на чужие, и не происходит какого-либо обмена Биткоинов на альткоины.

Алиса получает монеты Боба:

Alice's Address 1 ----> CoinSwap Address 1 ----> Bob's Address 1

Боб получает монеты Алисы:

Bob's Address 2 ----> CoinSwap Address 2 ----> Alice's Address 2

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

Секретный компонент

Инновация CoinSwap предложенного Бельчером состоит в использовании многосторонней подписи на эллиптических кривых. В то время, когда схема была предложена Максвеллом, не существовало практически эффективных методов (протоколов) формирования многосторонней вычислений/подписи (MPC, multiparty computation). Сегодня мы уже имеем некоторое количество библиотек в разной степени готовности, самое главное — открытых, которые выполняют эту задачу. Например, провайдер услуг облачного хранения Fireblocks открыл в публичный доступ свой эффективный протокол MPC. Этим протоколом могут пользоваться любые разработчики или компании.

Оригинальная идея Максвелла опиралась на использование мультиподписи 2-из-2 , которая в Биткоине является де-факто смарт-контрактом и нуждается в двух подписях, для того, чтобы транзакция была корректной. При использовании мультиподписи 2-из-2 в Биткоине оригинальный CoinSwap обладает двумя недостаками:

  1. Размер транзакции выше по сравнению с обычной транзакцией,
  2. Транзакции имеют специфический скрипт траты, благодаря которым их можно было бы выделить. Мультисиг 2-из-2 в целом не является частой комбинацией в блокчейне Биткоина.

Бельчер предполагает, что более популярная схема 2-из-3 могла бы иметь лучшую степень приватности, но тогда бы размер транзакции дополнительно увеличился. Вместо этого, на роль "мультисига" идеально подошла бы многосторонняя подпись на основе ECDSA . Такая подпись формировала бы ничем не отличающийся скрипт траты, аналогичный обычной биткоин-транзакции, в добавок к более компактному смарт-контракту. Даже Legacy-формат (p2pkh) адресов мог бы быть совместим с CoinSwap, что даёт ещё более широкие возможности по маскировке транзакции (хотя и ценой более дорогой транзакции) и совместимости клиентами Биткоина старых, до SegWit версий. Использование ECDSA и мимикрия под обычные Биткоин-транзакции значительно увеличивает анонимное множество даже по сравнению с использованием Schnorr. Совершенно точно, что на ранних этапах внедрения Schnorr будет крайне редок. Спустя 3 года использования в протоколе мы имеем адаптацию SegWit на уровне только 60% не смотря на очевидные достойнства экономии места в блоке. Как замечает автор Schnorr в конфигурации одиночной подписи и скрипта p2wpkh не имеет достойнств по сравнению с обычной ECDSA, поэтому динамика его внедрения в экосистему ожидается ещё более низкой.

Полное описание CoinSwap содержит достаточное количество технических ньюансов: например пулы ликвидности (как в CoinJoin) и роутинг свопов (подобно платежам в сети Lightning Network) — для снижения зависимости контрагентов друг от друга и запутывания следа между произвольными участниками свопа. Пулы ликвидности состоят из участников "мейкеров", которые наперёд предоставляют свои монеты для свопа. Для того, чтобы избежать Сибилл-атаки, т.е. создания фальшивых индивидуальностей, которые контролируются одним атакующим лицом, Бельчер предлагает использовать Fidelity bonds, которые он уже собирался использовать для своего проекта JoinMarket. Большой проблемой в JoinMarket была низкая стоимость входа для того, кто хотел бы атаковать CoinJoin через фальшивых "мейкеров" с известным множеством адресов. Необходимо отметить, что этой атаке в целом подвержены все CoinJoin схемы. Fidelity bonds также позволяют сделать сделку "кооперативной" и решить проблему первого шага со стороны мейкера. Атомистические свопы также имеют похожую проблему, они также не лишены перекоса в механизме инициатив, при котором ход сделки может быть нарушен, скажем, из-за резкого колебания курсов.

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

Будущее проекта

Бельчер намерен реализовать CoinSwap как библиотеку на языке программирования Rust. Эта библиотека затем может быть адаптирована для любых других приложений и позволит уже имеющимся кошелькам реализовывать свопы и предусмотреть их в интерфейсе. Идея имеет общие черты с проектом Мэтта Коралло rust-lightning — встраиваемой библиотеки Lightning Network. По-видимому реализация CoinSwap отвлечёт Бельчера от разработки JoinMarket. По сравнению с протоколом CoinJoin, CoinSwap приблизительно в 10 раз экономнее, поэтому продолжение разработки вряд ли имеет смысл. Транзакции CoinSwap имеют лучшие характеристики приватности, потому что они ничем не отличаются от обычных транзакций.

Сегодня трудно оценить перспективность CoinSwap в смысле внедрения в другие приложения. Не заметна например широкая адаптация библиотеки libwally Blockstream в Биткоин-кошельках, поскольку для разработчиков видимо важны нативные библиотеки при разработке кошельков или встраивании кошельков в другие проекты (на самом деле мы не знаем пока ничего о таких проектах, кроме известных проектов игр с использованием токенов Liquid). Сам по себе новый протокол повышения приватности использования Биткоин важен и по-видимому имеет значительную экономическую инициативу по сравнению с CoinJoin. За пределами известной атаки на Wasabi, когда кластеры, связанные с кошельком были деанонимизированы через адрес сдачи, и биржи отказывались принимать монеты из данных кластеров, CoinJoin в целом никак не защищены от Sybill атак. Это означает, что Chainanalysis или похожие компании в целом могут просто держать набор приложений и кошельков в пуле CoinJoin для частичного раскрытия пользователей. Они могут и работать друг на друга, осуществляя взаимовыгодный обмен информацией о выходах компаний для взаимной выгоды, таким образом коллективно атакуя все реализации CoinJoin. Согласно исследованиям Samourai Wallet, хороший CoinJoin сопряжёт со значительными накладными расходами, монеты должы подготавливаться (pre-mix этап), смешиваться, и правильно тратиться (post-mix). Некоторые из этих этапов могут не заметны в силу удобных интерфейсов, но pre-mix стадии иногда требуют дополнительных транзакций. CoinSwap и PayJoin работают проще и дешевле, по-нашему мнению, за ними будущее.

Поддержите автора! Шлите ваши 1000 сатоши, используя эту LNURL ссылку

LNURL1DP68GURN8GHJ7MRWW3UXYMM59E3XJEMNW4HZU7RE0GHKCMN4WFKZ7URP0YLH2UM9WFHXZMT9843NXUPSWFESSLK458

Используя страничку, либо просто пользователю @c3p0rs через @lntxbot.

Если вы ещё не знаете как использовать сатоши в Лайтнинг сети, прочитайте руководство для кошелька BLW или исследуйте Телеграм-бот @lntxbot.