Payjoin — это протокол, который решает многие проблемы одним выстрелом, используя простой и умный трюк для создания транзакций Bitcoin. Он предназначен для решения самой большой проблемы конфиденциальности Биткойна, но он также может помочь решить проблемы масштабирования и, следовательно, помочь людям сэкономить на комиссиях. Он особенно совместим с узлами Lightning Network, потому что его текущая конструкция имеет требование к активности для получателя транзакции, что означает, что получатель должен быть онлайн (так же, как и узел Lightning) при получении платежа. В будущем даже это требование будет отменено, чтобы его можно было использовать в автономном режиме. Его легко интегрировать в программное обеспечение кошелька, и он может открывать множество каналов Lightning одновременно при совершении платежей, и он пассивен, поэтому вы можете пользоваться преимуществами, даже не подозревая об этом. Преимущества конфиденциальности Payjoin многоуровневы, поэтому, даже если только небольшой процент людей использует его, каждый может получить преимущества конфиденциальности. И, возможно, лучше всего то, что PayJoin не требует хардфорка или софтфорка. Он может использоваться и использовался с Биткойном, и фактически был доступен с первой версии программного обеспечения Биткойна.
Payjoin является производной от Coinjoin. Coinjoin является более старым и также требует большего онлайн-взаимодействия, а это означает, что пользователи должны активно участвовать в его использовании, что обязательно снизит удобство использования и будет препятствовать принятию. Однако, несмотря на это, принятие CoinJoin на сегодняшний день было намного выше, чем у PayJoin, хотя преимущества и простота использования PayJoin более очевидны. Для разработчиков сложное, неясное направление не позволяет ему быть принятым программным обеспечением кошельков.
Payjoin существует уже много лет и, принимая во внимание:
У него есть многие преимущества, упомянутые выше
Возможность обеспечить пассивный, ненавязчивый пользовательский интерфейс
Насколько легко провайдерам кошельков интегрировать его
Почему payjoin медленно внедряется в больших масштабах?
В частности, почему протокол Coinjoin, который требует большего взаимодействия, сложнее в использовании и дороже, но вместо этого имеет более широкое распространение?
В этой статье мы рассмотрим текущие атаки на конфиденциальность Биткойна, историю PayJoin с точки зрения конфиденциальности, как работает PayJoin и почему он может предоставить так много преимуществ, не меняя Биткойн, и, наконец, текущее принятие. Если payjoin может значительно улучшить конфиденциальность, масштабируемость и помочь сэкономить на комиссиях, то небольшие усилия кошелька по его интеграции будут того стоить.
Почему конфиденциальность важна для биткоина
Прежде чем обсуждать важность payjoin, мы должны понять важность конфиденциальности. Если вам больше не нужно, чтобы я вас убеждал, то вы можете сразу перейти к следующему разделу, чтобы узнать об истории и о том, как работает Pyajoin.
В западных демократиях важность неприкосновенности частной жизни неописуема, поскольку ее преимущества до сих пор кажутся невидимыми для людей. Трудно убедительно объяснить, почему конфиденциальность важна (особенно в условиях более высоких затрат или больших неудобств), если они никогда не ощущают негативных последствий того, что плохие люди имеют слишком много информации о них, или потому, что это требует от людей думать о долгосрочных последствиях этих вторжений.
Конечно, кажется, что конфиденциальность — это то, о чем заботится все больше и больше людей (в теории), но они, как правило, редко подходят к ней активно, с очень низкими триггерными барьерами и без компромиссов в отношении удобства. Поэтому технологии, которые хотят защитить конфиденциальность людей, должны быть разработаны так, чтобы быть максимально удобными для пользователя и максимально удобными.
Однородность
Конфиденциальность — не единственная проблема, которую payjoin может помочь решить, но он был создан для ее решения. Люди уже давно жалуются на отсутствие конфиденциальности, присущее Биткойну, и сообщество Биткойна очень серьезно относится к этой проблеме. Биткойн предназначен для облегчения прямых транзакций один к одному и устойчив к цензуре. Однако, поскольку это позволяет отслеживать будущие платежи, это может привести к дискриминации, когда определенная сумма денег связана с личностью. Это разрушает однородность – степень, в которой одни монеты одной и той же валюты неотличимы от других в одном и том же количестве – а однородность является основным атрибутом хороших денег.
Если покупателей можно будет отследить, то не только монеты, которые сейчас находятся у нелегальных лиц, будут отвергнуты, но и кошельки, которые использовались в незаконных целях, также могут быть помечены, а затем отвергнуты торговцами, независимо от того, приобрел ли их нынешний держатель совершенно законными способами. Представьте себе, что вы не можете использовать деньги, которые у вас есть, чтобы купить молоко, потому что кто-то использовал их для покупки наркотиков, и они говорят: «Ваши деньги нечисты», справедливо ли это по отношению к вам? Должны ли вы быть наказаны за чужой грех? Что бы вы сделали с монетами? Вы будете чувствовать, что деньги ничего не стоят, потому что их хранение только повредит вашей покупательной способности. И нет никакого смысла в том, что одна часть монет («чистые деньги») будет стоить больше, чем другая. Один доллар должен быть равен другому, каким бы он ни был, иначе способность такой монеты передавать стоимость будет нарушена.
Криминальная путаница
Часто встречаются критики биткоина и конфиденциальности, которые говорят, что конфиденциальность нужна только преступникам. Это похоже на «если ты не делаешь что-то плохое, возьми это, и тебе нечего будет скрывать». Это легко опровергнуть:
Очень немногие люди готовы транслировать в прямом эфире свое купание и пользование туалетом в Интернете. Это потому, что это преступление? Это просто показывает, что все хотят что-то скрыть, и что прятаться не обязательно плохо.
В более широком смысле, ответственность за юридическое определение того, что представляет собой преступление, лежит на правительстве, но это определение всегда может быть изменено. Если люди не свободны в праве на частную жизнь, то они не будут свободны владеть чем-либо, потому что их действия будут сильно ограничены окружающей социальной средой (и даже государство будет принимать в этом непосредственное участие). Даже если она делает что-то совершенно законное, на людей указывают пальцем и постоянно на них нападают. Неприкосновенность частной жизни – это право выборочно раскрывать себя.
В дополнение к этому упрощенному, самоочевидному возмутительному утверждению, на самом деле правонарушители, в отличие от подавляющего большинства законопослушных граждан, готовы согласиться на высокую цену за неприкосновенность частной жизни, так что меры, которые ставят под угрозу элементарную неприкосновенность частной жизни, наносят гораздо больший вред обычным людям, чем преступникам. Даже если правительство не будет плохо использовать меры по ограничению конфиденциальности для поимки преступников, а вместо этого будет «выбирать и выбирать» и выборочно шпионить за гражданами, результат будет таким же. Если гражданин говорит что-то, что не нравится людям, находящимся у власти (а то, что не нравится людям, находящимся у власти, может быть одним и тем же каждый день), то ТА будет выборочно арестован и ему будет нанесен вред.
Наконец, стремление к неприкосновенности частной жизни – это не просто страх перед тем, что правительство превысит свои полномочия. У него также есть практические проблемы, вопросы безопасности и чести. Если кто-то может узнать, сколько у вас денег, где вы живете, насколько сложно украсть ваши вещи? Подумайте о том, в скольких местах в интернете вам придется вводить свой адрес, платежные реквизиты, фотографии и так далее. Доверяете ли вы всем, кто управляет этими сайтами, в том, что касается безопасности вашей личной информации? Вы не должны доверять им, потому что даже самые лучшие системы могут дать сбой, и преступники будут готовы заплатить большие суммы денег хакерам, чтобы они взорвали системы и украли эту ценную информацию.
Неприкосновенность частной жизни и демократия
В любом тоталитарном государстве обязательным условием контроля над гражданами является «знание» речи граждан, их информационных каналов и финансовой деятельности. Без этого понимания невозможно узнать, что атаковать, а что остановить, потому что нет никакого способа манипулировать нарративом и еще больше усилить контроль. Если у правительства нет надежного доступа к этой информации, оно не может нацеливаться на гражданина столько, сколько ему хочется. В тоталитарных обществах прошлого, таких как Советский Союз и нацистская Германия, они развращали частную жизнь людей и не доверяли отношениям в их семьях, промывая им мозги, заставляя сообщать о возражениях, выраженных членами их семей в частных беседах. Когда те же самые меры, нарушающие неприкосновенность частной жизни, происходят с деньгами, это еще страшнее, чем речь. Прекращение финансирования является очень эффективным средством борьбы с политическим инакомыслием.
Конфиденциальность биткоина уязвима
«Не тратьте впустую кризис, это в самый раз. "
– Макиавелли
Именно во имя борьбы с преступностью (теракт ХАМАСа) обсуждаются новые меры регулирования, чтобы охарактеризовать методы защиты конфиденциальности в Биткойне как незаконные.
10 октября 2023 года издание Wall Street Journal опубликовало статью, в которой сообщалось, что ХАМАС получил финансирование в размере 130 миллионов долларов через криптовалюту. Неделю спустя сенатор Элизабет Уоррен написала открытое письмо президенту Байдену, призвав его до 31 октября решить вопрос о том, как его исполнительная власть реагирует на «террористическое использование криптовалюты», сославшись на Wall Street Journal в качестве доказательства острой необходимости такого регулирования. Письмо подписали 29 из 100 членов Сената, а также 76 членов Палаты представителей. Любопытно, что 19 октября, через два дня после отправки письма, Сеть по борьбе с финансовыми преступлениями (FCE) опубликовала предложение по регулированию обфускации криптовалют для рисков отмывания денег. В предложении перечислены методы, используемые для сокрытия потока транзакций:
«Использование программного или алгоритмического кода для координации, управления или манипулирования структурой транзакции: Этот подход предполагает использование программного обеспечения для координации транзакций двух или более людей, так что эти транзакции объединяются для получения нескольких возможных выходов из одного скоординированного входа, тем самым скрывая уникальность каждой транзакции и снижая вероятность идентификации лица, участвующего в каждой транзакции».
Это определение включает в себя как coinjoin, так и payjoin, хотя описание «использование алгоритмического кода» достаточно широко, чтобы охватить произвольные транзакции, и, следовательно, допускает произвольную цензуру.
Но статья в Wall Street Journal, в которой была представлена точка зрения на открытое письмо и предпринята попытка защитить такое регулирование, очень сильно неверно интерпретировала данные — реальная сумма, которая действительно имела отношение к ХАМАСу, составляла всего 450 000 долларов. Криптовалюты никогда не были основным источником финансирования ХАМАСа. Сам ХАМАС ясно дал понять, что не хочет получать средства через биткоин, который можно отследить.
По иронии судьбы, регулирующие меры, которые сейчас предлагаются, якобы для борьбы с террористическими группировками, оказывают наименьшее влияние на террористические группировки и больше всего на обычных людей, которые хотят использовать биткоин и другие криптовалюты.
Нет никаких сомнений в том, что битва за права биткоина на неприкосновенность частной жизни уже идет в Соединенных Штатах, и можно предвидеть, что она будет проходить под видом противодействия иностранным соображениям национальной безопасности. Что еще более важно, с этого момента разберитесь в технологиях, сохраняющих конфиденциальность в Биткойне, и начните использовать их для борьбы с попытками ослабить их.
«Чего бы мы ни хотели, мы должны защищать наше право на неприкосновенность частной жизни».
1. Форма биткоин-транзакции
Для того, чтобы понять, что делает payjoin и как он работает, необходимо понять, как выглядят транзакции Bitcoin. Каждый биткоин связан с определенными входами и выходами. Выходные данные определяют, на какой публичный ключ, или «адрес», отправляются эти биткойны. Входные данные определяют «источник» средств транзакции, т.е. предыдущий выход, использованный для создания транзакции (и его новый выход). Хорошей аналогией является то, что мы используем разные номиналы наличных денег для оплаты. Допустим, вы хотите заплатить $25 за ужин в ресторане и $5 за официанта, итого $30 (это результат вашей транзакции, две разные «порции» денег двум разным людям – ресторану и официанту).
Так как же вы платите? Предположим, что у вас в руке так много банкнот (т.е. ваших входных данных):
1 лист 20 юаней
2 листа по $10
5 листов по 5 юаней
Итак, при построении этой сделки вы можете использовать 1 купюру по 20 долларов и 2 купюры по 5 долларов, одна из которых 5 долларов и одна выдается только официанту:
! [Оплата в ресторане] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-4a2caad01b-dd1a6f-cd5cc0.webp)
Обратите внимание на важный аспект, который нам не подходит для проведения аналогии с наличными: $20 и $5 здесь сольются в одно целое. Это больше похоже на то, что вы переплавляете два куска золота в один большой, чтобы заплатить за нужную сумму, а не отдаете несколько золотых самородков. Биткойн позволяет разделять и объединять входы, чтобы получить желаемый результат.
Вы также можете использовать 2 банкноты номиналом 10 долларов и 2 банкноты номиналом 5 долларов, например:
! [Оплата в ресторане] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-0a70c8526f-dd1a6f-cd5cc0.webp)
Или даже использовать 6 листов за 5 долларов:
! [Оплата в ресторане] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-441fc7aa70-dd1a6f-cd5cc0.webp)
До тех пор, пока мы не потратим свои деньги, эти отдельные «банкноты» биткоина будут называться «неизрасходованными выходами транзакций (UTXO)». Название звучит странно, но если вы потратите время на то, чтобы подумать над ним, вы поймете, что оно довольно точное – это «результаты» (выходы) некоторых сделок, и они еще не были потрачены на другую транзакцию. Выходные данные транзакции, которые еще не были израсходованы, — это выход, который можно потратить. Так что, на самом деле, UTXO — это как бумажные деньги в вашем кошельке. После того, как они были потрачены, они становятся входом транзакции, а затем выходом другой транзакции (наличные в чужом кошельке), и вы больше не можете их тратить, однако запись о потраченной вами заметке остается в блокчейне навсегда.
В отличие от наличных денег, транзакции с биткойнами требуют разрешения отправителя, чтобы быть действительными. Это достигается с помощью цифровой подписи отправителя, которая также служит доказательством того, что он намеревался потратить средства. Действительная подпись (т. е. подпись, совпадающая с адресом UTXO) должна быть представлена во входных данных транзакции, использующих UTXO. Наличие подписи «разблокирует» этот UTXO и говорит о том, что владелец этого UTXO намерен потратить его на такую транзакцию.
На следующем изображении показана реальная транзакция, которая была подтверждена блокчейном 1 раз на момент написания статьи:
! [Пример реальной транзакции с 1 входом и тремя выходами, один из которых является комиссией] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-c006e2488a-dd1a6f-cd5cc0.webp)
Как вы можете видеть, приведенная выше транзакция взяла 1 вход и создала 2 выхода, один из которых представляет собой реальный платеж, а другой почти наверняка отправляется обратно покупателю в качестве сдачи. Разница между входом и выходом — это комиссия, которая идет майнеру, который добыл блок, который первым подтвердил транзакцию.
Этот «режим UTXO» очень мощный. Поскольку каждая транзакция имеет вход и выход, и поскольку выход одной транзакции становится входом другой последующей транзакции, мы получаем цепочку транзакций, которые могут отслеживать передачу права собственности на биткойн. Поскольку предложение биткойнов ограничено, и из-за того факта, что он имеет ключевую «неинфляционную» характеристику, важно иметь возможность проверять, сколько биткойнов находится в обращении (или «не израсходовано») в любое время, и модель UTXO может быть использована в OC.
Это также является источником проблем с конфиденциальностью Биткойна. Каждая транзакция имеет свою историю. Все биткойны, которые вам вручают, и куда вы их отправляете, легко отследить. Вся система специально разработана для поддержки этой функции, хотя она не предназначена для отслеживания отдельных лиц. В этой системе ваш единственный реальный козырь заключается в том, чтобы никогда не связывать свою настоящую личность с вашим открытым ключом, что очень трудно сделать в эпоху массовой слежки.
Исторические истоки Payjoin
Маленькая ошибка Сатоши Накамото
Когда Сатоши Накамото опубликовал «белую книгу» биткоина в 2008 году, он понял, что проблемы с конфиденциальностью возникают из-за требования, чтобы каждая транзакция была общедоступной, что противоречило требованию сохранить ее конфиденциальность.
Он выдвинул два предложения, чтобы избежать привязки реальной личности к транзакциям:
Сохраняйте анонимность открытого ключа
Не используйте открытые ключи повторно
Все это хорошие советы, но для 1) трудно гарантировать, что наша настоящая личность полностью изолирована от наших платежей, если только мы не будем предельно осторожны при совершении платежей в Интернете; Во-вторых, даже если публичный ключ не используется повторно, трекеру не составит труда определить, какие публичные ключи какому лицу принадлежат, при условии, что вывод, сгенерированный из нескольких ключей, расходуется вместе в последующих платежах. Эти предложения, даже если они собраны вместе, сложны в принятии и несовершенны.
После этих предложений Сатоши Накамото допустил еще одну маленькую ошибку, преувеличив слабость своей системы:
«В качестве дополнительного брандмауэра для каждой транзакции следует использовать новую пару ключей, чтобы гарантировать, что они не указывают на общего владельца. Некоторые связи по-прежнему неизбежны, и транзакции с несколькими входами неизбежно будут указывать на то, что все входные данные принадлежат одному и тому же владельцу. Риск заключается в том, что если владелец открытого ключа будет раскрыт, ассоциация может раскрыть другие транзакции, принадлежащие тому же владельцу. "
Гипотеза Сатоши и все примеры, которые мы показали до сих пор, подразумевает, что все входные данные транзакции принадлежат одному и тому же владельцу. Другими словами, все «банкноты», потраченные на транзакцию, поступают из вашего кошелька, что является разумным предположением, но не обязательно верным. Эта гипотеза называется «ввод идентичности подсказок о праве собственности». Практически верно для любой транзакции, которая также является основой мониторинга ончейн-активности.
Присоединение к монетам
В начале 2013 года Грегори Максвелл (Gregory Maxwell) провел интересную игру на форумах bitcointalk.org, где предложил свой собственный UTXO (стоимостью 1 BTC) и свой адрес, а также спросил, может ли кто-нибудь создать новую транзакцию, используя этот UTXO в качестве входных данных. Если создатель такой транзакции отправляет ему менее 1 BTC, он забирает у него часть денег, а если он отправляет ему более 1 BTC, это дает ему дополнительные деньги, но если отправленная ему сумма не больше и меньше 1 BTC, то это эквивалентно использованию его средств (и адреса) для дополнительной конфиденциальности, потому что ввод выглядит так, как если бы это был собственный UTXO создателя транзакции, но это не так. Когда один из выходов Максвелла израсходован и отправлен обратно на его адрес, он предоставляет еще один UTXO, чтобы другие могли продолжить игру. С точки зрения аналитической фирмы, занимающейся анализом блокчейн-активности, это заставило бы их думать, что Максвелл выглядит богатым! Поскольку его адреса являются публичными, и многие UTXO используются для создания транзакций, содержащих эти адреса, любой аналитик, который анализирует эти транзакции и предполагает, что все входные данные для транзакций исходят от одного и того же человека, предположит, что у Максвелла много-много биткойнов (больше, чем он на самом деле владеет), отсюда и заголовок его поста: «Я действительно богат!»
Конечно, игра не является частной, так как Максвелл разместил свое обращение на публичном форуме, но она предлагает очень важную концепцию, которая возникает. Как говорит Максвелл:
«Многие ошибочно полагают, что если транзакция стоит нескольких адресов, это означает, что все они принадлежат одному и тому же человеку. Это верно в целом, но это не обязательно так: люди могут сотрудничать друг с другом, чтобы вместе построить сделку, и существует безопасный и недоверительный подход. "
В следующем посте в том же году Мэввелл официально изложил эту идею в концепции, которую он назвал «Coinjoin»:
«Размышляя об истории владения биткойнами, вы можете подумать о транзакции, которая стоит нескольких различных скриптовых открытых ключей, как о праве собственности на объединение этих средств, и, следовательно, предположить: как они могут быть потрачены вместе, если один и тот же человек не контролирует их?
[......]
Это предположение неверно. В одной и той же транзакции не доказывается, что право собственности на эти средства одно и то же (хотя статус-кво в основном верен), и вот почему Coinjoin может быть достигнут:
подписи являются по одной для каждого входа и полностью независимы друг от друга, даже в рамках одной транзакции. Это означает, что пользователи Биткойна могут договориться о том, чтобы потратить набор входов и произвести набор выходов, затем каждый из них подпишет транзакцию отдельно, а затем объединит свои подписи. До тех пор, пока все не предоставят свою подпись, транзакция не будет действительной, не будет принята сетью, и никто не подпишет транзакцию, которая их не устраивает. "
Это означает, что, по сути, любое количество людей может сотрудничать для создания транзакций, каждый из которых предоставляет и подписывает свой собственный вклад, не беспокоясь о том, что чьи-то средства будут украдены.
Затем он представил еще одно преимущество транзакций coinjoin, которое заключается в том, что транзакции могут обрабатываться пакетами, что позволяет экономить на комиссиях: вы можете найти других людей, которые также хотят инициировать платежи, когда вы хотите заплатить, и создавать транзакции вместе:
«Ту же идею можно было бы использовать более непринужденно. Если вы хотите инициировать платеж, найдите других людей, которые также хотят заплатить, и создайте совместный платеж вместе. Это не только повысит конфиденциальность, но и уменьшит размер ваших транзакций и, следовательно, упростит распространение по сети (и с более низкими комиссиями), а дополнительная конфиденциальность является преимуществом. "
В конце концов, conjoin — это протокол, в котором его использует достаточное количество людей, все выигрывают, и каждый получает от него преимущества конфиденциальности:
«Такая сделка внешне неотличима от сделки, созданной с помощью обычного метода. В результате, до тех пор, пока эти транзакции достаточно широко распространены, они будут повышать конфиденциальность даже тех, кто не использует технологию, потому что ввод и смешивание больше не могут использоваться в качестве убедительного доказательства того же контроля. "
В качестве конкретного примера предположим, что мы нашли 3 человека, которые хотят принять участие в coinjoin. Они заранее договорились смешать 0,1 биткоина, и они могли получить преимущество конфиденциальности в виде получения 3 одинаковых выходов, что сделало невозможным для других определить, от кого пришел каждый из трех адресов. Для аналитика связь между адресом изменения и входными данными по-прежнему очень ясна, но неясно, чей выход является выходом этих трех равных сумм.
Когда есть только 3 участника, преимущество конфиденциальности не обязательно значительно, особенно потому, что другие участники могут деанонимизировать себя (коррелировать со своей реальной личностью) в последующих транзакциях, но это может быть улучшено несколькими раундами присоединения к монетам или использованием большего набора анонимности.
Подводя итог, можно сказать, что coinjoin — это транзакция, созданная с использованием входов и выходов от нескольких сторон, так что другим трудно определить, какой выход кому принадлежит.
Для более подробного рассмотрения того, как создать транзакцию Coinjoin и какие инструменты доступны, ознакомьтесь с этим руководством.
Coinjoin является одним из наиболее эффективных и широко распространенных решений для обеспечения конфиденциальности Биткойна, но у него также есть некоторые существенные недостатки:
Интерактивность: Coinjoin требует интенсивного взаимодействия со стороны участников, которые должны согласиться на равный номинал выхода, и все они должны предоставить свои подписи в течение определенного периода времени. Необходимость интенсивного взаимодействия создает трения для пользователей, что, в свою очередь, препятствует его принятию большим количеством пользователей.
Централизованные координаторы: Wasabi и Whirlpool в настоящее время являются самыми популярными методами Coinjoin. Они также взимают комиссию за координационную работу, которую они выполняют, которая не включает в себя плату за подтверждение блока, которая предоставляется майнерам для участия в транзакции (которая довольно высока из-за большого количества данных подписи, используемых в транзакциях coinjoin). Join Market является примером нескоординированного сервиса, но компромисс заключается в том, что он требует большего взаимодействия с пользователем.
Требует нескольких записей для усиления конфиденциальности: Для лучшей конфиденциальности обычно рекомендуется участвовать в нескольких присоединениях монет (так как одно участие может привести к небольшой прибыли из-за небольшого набора анонимных вкладов). Но несколько взаимодействий требуют времени, увеличивают взаимодействие и платят больше гонораров.
Coinjoin не совсем похож на обычную транзакцию: транзакции Coinjoin имеют определенную, узнаваемую особенность: несколько входов от нескольких сторон приводят к нескольким выходам одного и того же номинала. Это означает, что если ваша монета была идентифицирована до того, как вы приняли участие в coinjoin, сторожевой таймер также будет находиться в coinjoin до тех пор, пока вы не приняли участие. Они могут не знать, куда ушли ваши средства или что вы сделали после присоединения к монете, но они знают, сколько у вас есть и сколько вы участвовали в coinjoin
Очевидно, что из-за этих ограничений CoinJoin не является окончательным решением для обеспечения конфиденциальности Биткойна, особенно для более пассивных пользователей, которые хотят схему конфиденциальности по умолчанию.
Несколько лет спустя появился лучший результат, который не требовал от сторон, участвующих в сделке, предпринимать какие-либо дополнительные шаги, был простым, не требовал централизованного координатора или торговой площадки (и, следовательно, экономил время и деньги) и выглядел так же, как и обычная транзакция: Payjoin.
Payjoin состоит из ряда более ранних нововведений, давайте посмотрим.
ВВП-21
Важным улучшением пользовательского опыта (UX) для ранних Биткойнов был BIP-21. «BIP» — это аббревиатура от «Bitcoin Upgrade Proposal» и содержит набор критериев, которые либо требуют согласованных изменений в протоколе Bitcoin (например, хард- или софтфорки), либо предоставляют полезную информацию и методы для взаимодействия с биткоином.
BIP-21 — это стандарт, который определяет использование URI и упрощает процесс взаимодействия с биткоином путем перехода по ссылке или сканирования QR-кода для инициирования платежа. Также определено небольшое количество параметров запроса, таких как сумма, тег и сообщение, поэтому клиентское программное обеспечение может легко извлекать и анализировать их, обеспечивая лучшее взаимодействие с пользователем. Ниже приведен пример URI BIP-21 с несколькими параметрами:
Важно отметить, что этот стандарт является расширяемым, вы можете создавать пользовательские параметры запроса, и на его основе могут быть разработаны новые стандарты. Например, в дополнение к вашему биткойн-адресу вы также можете добавить пользовательский параметр под названием lightning, который предоставляет вам способ получения денег в сети Lightning, чтобы пользователи могли платить вам любым способом:
! [BIP-21 с Lightning] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-568740308b-dd1a6f-cd5cc0.webp)
Этот мощный и гибкий BIP оказался весьма полезным при внедрении концепций из coinjoin.
Pay-to-Endpoint(P2EP)
Самый ранний документ, в котором я нашел упоминание концепции payjoin, был опубликован на сайте Blocksteam в августе 2018 года со ссылкой на семинар, который породил эту концепцию. В статье окончательная идея называется «Pay-to-Endpoint», потому что она сочетает в себе концепцию coinjoin с BIP-21, позволяя отправителю и получателю транзакции работать вместе, чтобы обеспечить входные данные для транзакции через конечную точку сети, совместимую с BIP-21, предоставленную получателем. На следующей схеме показан пример того, как выглядит конечная точка, предоставляемая получателем:
Особого внимания заслуживает параметр p2ep, который представляет собой конечную точку сети (в данном случае адрес .onion, но это также может быть простой адрес http:// или любая другая совместимая конечная точка сети), которая может послать сигнал на кошелек получателя о том, что отправитель готов попытаться совершить платеж P2EP. Если платеж P2EP не удался, кошелек вернется отправителю и запросит обычный платеж на определенный адрес, и будет использовать только входные данные отправителя.
Поскольку входной вклад координируется через P2EP и не приводит к «испорченному» выходу равного номинала, как coinjoin, транзакции payjoin идентифицировать сложнее.
Идея является большим шагом в правильном направлении, но она все еще находится в зачаточном состоянии, она не завершена, и некоторые дополнительные сложности должны быть устранены.
Не по теме: Pay-to-IP Сатоши Накамото
Вариация этой идеи, получившая название «Pay-to-IP», была фактически реализована Сатоши Накамото в «самой ранней версии» программного обеспечения Биткойна. Однако этот подход представляет собой серьезную дилемму конфиденциальности, поэтому от него отказались в последующих версиях программного обеспечения Биткойна.
Бустапай
Позже в том же месяце Райан Хавер предложил улучшенную версию P2EP в списке рассылки разработчиков биткоина и формализовал BIP под названием «Bustapay». Эта версия упрощает оригинальный протокол P2EP, и ради простоты и устранения некоторых сложностей, он считает, что простота необходима для повсеместного доступа.
Предложение Bustapay все еще имеет некоторые серьезные проблемы, которые необходимо уточнить, а протокол не так полон, как должен быть. Но это еще один шаг в правильном направлении, и его ориентация на простоту интеграции кошельков является критически важным шагом, особенно для медленной и осторожной экосистемы разработчиков биткоина. Хотя Bustapay никогда не продвигался, он был последним предшественником сегодняшнего предложения payjoin - мы готовы к интеграции кошельков, положительным изменениям в транзакциях в сети.
Предложение Payjoin
Наконец, в середине 2019 года концепции Bustapay и P2EP были доработаны и усовершенствованы Николя Форье (основателем BTCPayServer) и Kukks, чтобы сформировать BIP-78 под названием «Простое предложение Payjoin».
При понимании предыстории протокола, который послужил основанием для payjoin, смысл и цель резюме, приведенного в начале этого предложения, ясны:
«В этом документе предлагается протокол для двух сторон для согласования транзакции coinjoin при совершении платежа. "
Предложение предоставляет гораздо более точную информацию, чем предыдущие методы, указывая, как построить транзакцию coinjoin между отправителем и получателем, разрывая нить идентичности владения входными данными транзакции, и является простым, гибким и недорогим.
Как работает Payjoin
Допустим, Алиса хочет заплатить Бобу 1,1 BTC, а затем компания, занимающаяся мониторингом блокчейна, видит транзакцию, подобную этой:
! [Пример, предполагающий эвристику владения общим входом] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-ca34b5b6d3-dd1a6f-cd5cc0.webp)
Они могут подумать, что Алиса заплатила Бобу 0,5 BTC, а остальные деньги перевела себе в качестве сдачи, и все:
! [Пример, предполагающий, что использовалась эвристика владения общим вводом] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-28843c7745-dd1a6f-cd5cc0.webp)
И в большинстве случаев нет ничего плохого в том, чтобы так думать! Ведь сдача обычно бывает в более крупных купюрах, а 0,5 — это скорее «целое число» и чаще используется в платежах (по сравнению с 1,1).
Они также могут задаться вопросом, почему Алиса использовала ввод, который не был необходим (и 0,8, и 0,3 являются избыточными), но они никогда не могут быть уверены, что это не обычная транзакция, и они не могут сделать вывод, почему был использован дополнительный ввод - возможно, Алиса просто организует свой кошелек так, чтобы она могла управлять им позже. Это может быть payjoin, но даже если вы так думаете, какой UTXO принадлежит Алисе, а какой Бобу? Узнать это невозможно. Поскольку большинство транзакций не являются payjoin, они, скорее всего, ошибочно подумают, что это не payjoin транзакция.
Тем не менее, Алиса умна и хочет защитить свою конфиденциальность, и она знает о payjoin, поэтому она просит Боба также предоставить входные данные для транзакции. Боб согласился, поэтому он создал транзакцию, которая стоила одного (или нескольких) UTXO в качестве входных данных, и отправил ее обратно Алисе. Если в сделке нет проблем с Алисой, то она транслирует это в сеть. На самом деле сделка выглядит примерно так:
До тех пор, пока наблюдатели за цепочками будут считать, что все входные данные поступают от Алисы (как в первом примере, и так оно и есть сейчас), они будут сильно ошибаться в том, какие входы принадлежат Алисе и Бобу!
Интересно, что и Алиса, и Боб предлагают преимущества конфиденциальности для всех. Потому что, в отличие от CoinJoin, эта транзакция больше похожа на обычную транзакцию, и до тех пор, пока достаточное количество людей использует PayJoin, наблюдатель не может определить, какие транзакции являются нормальными. Мешая наблюдателям, Алиса и Боб также делают каждую транзакцию немного подозрительной. До тех пор, пока достаточное количество людей будет делать это, все транзакции будут становиться подозрительными. Конфиденциальность в блокчейне часто является игрой чисел, и чем больше людей вовлечено, тем лучше будет конфиденциальность для всех.
В этом случае Алиса и Боб совместно создали транзакцию, используя свои входные данные для защиты конфиденциальности. Конечно, весь процесс подозрительно автоматизирован (и на самом деле является автоматизированным).
В BIP-78 весь процесс более формально определен следующим образом:
Получатель предоставляет отправителю URI BIP-21 с параметром запроса pj=, указывающим на конечную точку/сервер сети, на который можно отправить «Частично подписанную транзакцию Bitcoin (PSBT)». Эта конечная точка может использовать протокол HTTPS, . OnJoin или любой другой протокол, использующий шифрование удостоверений, например:
! [Пример PJ] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-d33ce79c42-dd1a6f-cd5cc0.webp)
2. Отправитель создает сформированный, транслируемый PSBT, который отправляется на конечную точку получателя, используя только собственные входные данные, полностью достаточные для оплаты. Этот PSBT называется «начальным PSBT».
3. Получатель изменяет PSBT, чтобы включить в него свои собственные данные, подписывает свой собственный ввод и отправляет измененный PSBT обратно отправителю. Получатель не изменяет ни один из входных или выходных данных отправителя. Этот PSBT называется «Payjoin Offer».
4. Отправитель подтверждает предложение, затем повторно подписывает свои данные, чтобы завершить всю транзакцию и, наконец, передать ее в сеть.
Независимо от того, где в процессе была допущена ошибка, например, у получателя нет UTXO, который можно использовать для создания предложения Payjoin, TA нужно только транслировать начальную PSBT, что является обычной транзакцией. Несмотря на то, что все входные данные для этой транзакции поступают от одного и того же владельца, и только достаточное количество людей используют payjoin, вы не можете заключить, что обе стороны не payjoinin, и наблюдатель должен будет предположить, что все payjoining, а затем придумать другой способ отслеживания платежа.
Множество преимуществ Payjoin
Разбейте больше улик для слежки
Предположение об идентичности владельца — не единственное, что может быть нарушено payjoin и влияет на конфиденциальность. BIP-78 указывает на две другие подсказки, которые могут быть использованы для идентификации владельца:
Идентификация изменения по публичному ключу скрипта:
В Биткойне публичный ключ скрипта — это «скрипт блокировки», который определяет условия, при которых сумма биткойнов может быть потрачена. Он называется «открытым ключом скрипта», потому что условие блокировки требует действительной подписи, совпадающей с открытым ключом (адресом) для его разблокировки. Другими словами, только человек, который контролирует закрытый ключ связанного открытого ключа этого UTXO, может разблокировать его.
Существует несколько типов скриптовых открытых ключей, таких как: P2PKH, P2WPKH, P2SH, P2TR. Как правило, кошельки используют один и тот же публичный ключ скрипта для всех транзакций, поэтому на выходе изменения (средства, отправленные отправителем обратно отправителю отправителем самому себе в дополнение к платежам и комиссиям), скорее всего, будет использоваться тот же тип публичного ключа скрипта, что и на входе отправителя, а на выходе, отправленном получателю, скорее всего, будет использоваться другой тип. Это означает, что UTXO, использующие один и тот же тип скрипта в одной и той же транзакции, могут быть идентифицированы как потенциально принадлежащие отправителю, т. е. предполагая, что выход, отправленный получателю, будет другого типа.
BIP-78 определяет метод, который позволяет получателю использовать только тот же тип открытого ключа скрипта, что и отправитель, что нарушает вышеуказанный поток, который может предоставить выход платежа и вывод изменения.
Идентификация сдачи и оплаты по сумме платежа (целое число):
Обычно, пожалуйста, промежность, платите другу всегда будет выбирать целое число, потому что это будет гораздо естественнее. Если бы Боб взимал плату с Алисы (а они не взимали плату за биткоин по фиатной цене, которая «ближе к целому числу»), то он, скорее всего, взимал бы набор e, например, 0,0001, а не нецелое число, такое как 0,00010231. Если один из выходов транзакции является целым числом, то, скорее всего, это выход платежа, а нецелочисленный выход — выход изменения (по крайней мере, на данный момент).
Payjoin также описывает способ, с помощью которого получатель может прервать этот поток, добавив дополнительные целочисленные выходные данные при создании предложения Payjoin.
Асимметричные выгоды достигаются за счет объединения более широкой группы
Как упоминалось ранее, одним из основных недостатков coinjoin с точки зрения конфиденциальности является то, что 1) транзакции coinjoin легко отличить от обычных транзакций, и 2) мало кто делает это специально, чего нельзя сказать о регулярных транзакциях. Это создает проблему однородности Биткойна, потому что вполне вероятно, что некоторые люди будут думать, что чеканные деньги загрязнены, потому что у кого-то есть эта нелепая идея, что «стремление к конфиденциальности равно злому умыслу». Конечно, если большинство транзакций или даже определенный процент транзакций являются частными, то транзакции, направленные на обеспечение конфиденциальности, незаметны.
Payjoin выглядит так же, как и любая другая транзакция, поэтому ничем не примечательна. У сторонних наблюдателей даже нет оснований смотреть на такую транзакцию, потому что она не показывает намерения запутать платеж и изменить выходы.
Поскольку это выглядит как что-то другое, даже незначительные преимущества внедрения payjoin означают, что конфиденциальность каждого будет сложнее нарушить, поскольку отслеживаемые лиды быстро становятся ненадежными. Адам Гибсон (один из основателей JoinMarket и эксперт по конфиденциальности биткоина) очень хорошо резюмирует:
«Даже если вы очень осторожны, эти транзакции PayJoin ничем не отличаются от обычных платежей [...] Что ж, вот что интересно: предположим, что небольшое внедрение этой технологии также будет наблюдаться. Допустим, 5% транзакций используют этот метод. Дело в том, что никто точно не знает, какие 5% составляют транзакции PayJoin. Это большое достижение [...] , потому что это означает, что все платежи, включая те, которые не используют Payjoin, получают преимущества конфиденциальности!»
Финишная обработка UTXO
Очевидно, что и PayJoin, и его первопроходцы привержены решению проблем конфиденциальности. Но у использования payjoin есть и замечательная сторона, и BIP-78 ясно дает это понять: очистка UTXO.
Сатоши Накамото предложил использовать адрес чаевых для каждой транзакции получения, что привело к тому, что кошелек пользователя стал иметь множество UTXO, которыми нужно управлять. Когда эти UTXO используются в качестве входных данных для создания новой транзакции (при условии, что это не транзакция coinjoin или payjoin), такая транзакция стоит больших комиссий. Поскольку плата взимается в зависимости от объема транзакции (количества байтов) (соответствующего пространству блока, которое является дефицитным ресурсом), большее количество входных данных приравнивается к более крупным транзакциям и большим комиссиям.
Важно отметить, что использование payjoin для сортировки UTXO не обязательно экономит комиссии, поскольку каждый UTXO, который появляется в сети, все равно должен будет платить комиссию. Тем не менее, он распределяет эти сборы на длительный период времени и предоставляет возможность пакетировать UTXO в момент оплаты. Пакетная обработка удешевит организацию UTXO (чем если бы вам пришлось инициировать транзакцию специально для целей сортировки). Это также упрощает связывание UTXO и занимает меньше места на жестком диске. Кроме того, кошельки могут реализовать способ автоматизации и упрощения организации UTXO, позволяя получателям заранее указывать, какие UTXO они хотят организовать с низкими комиссиями.
Lightning Network и Payjoin: совпадение, созданное в природе
Используйте Payjoin для открытия канала Lightning
Lightning Network (LN) — это решение уровня 2, построенное на основе Биткойна, которое переводит транзакции вне блокчейна для мгновенного урегулирования с очень низкими комиссиями, тем самым значительно увеличивая пропускную способность транзакций, конфиденциальность и позволяя Биткойну войти в новые варианты использования (такие как «микроплатежи»). Он использует сеть платежных каналов между узлами для маршрутизации платежей, пересылая средства из места их происхождения в места назначения. Эти каналы требуют, чтобы каждый оператор узла заблокировал некоторую «ликвидность» (биткойны) со своими контрагентами канала, которая затем может перетекать между узлом и его контрагентами по каналу. Количество биткойнов, которые вы можете потратить в канале, ограничено количеством ликвидности на вашей стороне канала.
Когда дело доходит до обслуживания узла Lightning, большая часть сложностей связана с открытием этих каналов и управлением ликвидностью каждого канала. Адаптация новых пользователей — одна из самых больших болевых точек, потому что для этого нужно пройти очень много этапов. Допустим, Алиса хочет открыть канал с Бобом, и она установила новый узел Lightning, но она еще не получила финансирование. Затем ей нужно сделать следующее:
Отправьте ончейн-транзакцию, чтобы пополнить свой только что созданный кошелек Lightning Wallet на сумму, достаточную для открытия канала, и дождитесь подтверждения транзакции (не менее 10 минут).
Используйте ее программное обеспечение Lightning Wallet, чтобы договориться о транзакции с Бобом, чтобы открыть канал и дождаться его подтверждения.
По крайней мере, Алисе приходится платить комиссию дважды и ждать около 10 минут для каждой транзакции, что утомительно.
! [Процесс открытия канала Lightning] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-1cabf5ff4a-dd1a6f-cd5cc0.webp)
Payjoin упрощает этот процесс и помогает Алисе экономить деньги: Алиса может пополнить кошелек Lightning и открыть канал за одну транзакцию.
В этом сценарии Алиса предварительно настраивает конечную точку получения payjoin с подробными сведениями о канале, который она хочет открыть: сколько биткоинов заблокировать и какого оппонента открыть канал. Затем, используя кошелек, поддерживающий payjoin, кто-то (включая Алису) может отправить первоначальный PSBT на конечную точку, согласовать транзакцию payjoin, и конечная точка выполнит необходимые вызовы API для открытия канала с узлом Боба.
Другими словами, отправитель (в данном случае Алиса) связывается с Алисой с конечной точкой, которая получает payjoin, создает транзакцию и отправляет средства непосредственно на выход Боба и Алисы с мультиподписью 2-из-2, создавая таким образом канал Lightning между двумя узлами. Это превращает весь процесс в транзакцию:
! [Канал Lightning с Payjoin] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-4c65326146-dd1a6f-cd5cc0.webp)
Интересно знать, что и открытие молниеносного канала, и payjoin имеют требования live (хотя, по крайней мере, payjoin не потребуется в течение длительного времени), что означает, что все участники должны быть онлайн в момент совершения транзакции. Это очень ограничительно по сравнению с транзакциями биткоина в сети (которые требуют, чтобы плательщик был онлайн только в момент оплаты). Тем не менее, это также позволяет двум наборам протоколов идеально сочетаться друг с другом.
Например, Lightning Network — это отличный способ улучшить конфиденциальность, сохраняя платежи вне сети, и он может значительно улучшить способность Биткойна использоваться в качестве средства обмена (т.е. его действительно можно использовать для покупки предметов первой необходимости) без ущерба для его средства сбережения. Однако необходимость открытия канала в сети также означает, что средства, которые вы используете для открытия канала, а также люди, которые открывают канал вместе с вами, оставят след в цепочке. По причинам, которые мы уже обсуждали, payjoin может запутать и уничтожить многие подсказки шпионов.
Это также упрощает задачу, поскольку пользователям нужно будет инициировать только одну транзакцию вместо двух, что станет быстрее, потому что им нужно будет ждать подтверждения только одной транзакции, и дешевле, потому что им нужно будет заплатить только одну комиссию. По сути, такой подход позволяет открывать сразу несколько каналов. Вы можете составить список узлов, на которых вы хотите открыть канал, настроить его как конечную точку приема payjoin BIP-21, а затем включить все сразу и автоматически при получении платежей, и вам нужно будет дождаться только одного подтверждения и одной комиссии за оплату. Совершенно!
Уже существует проект, реализующий эту идею, под названием "Nolooking", который позволяет перечислить набор открытых ключей, а затем открыть сразу несколько каналов Lightning *пакетами)! Это позволяет Алисе открыть канал не только с Бобом, но и с Бобом, Кэрол и Диной с помощью всего одной транзакции в сети! Интересно подумать: в будущем в кошельках Lightning по умолчанию будет включена функция payjoin, а пользовательский опыт де-факто заключается в том, что вы просто выбираете своего торгового партнера, инициируете одну транзакцию Bitcoin, и все готово! Разве это не удивительно?
Легко представить, что это упростило бы внедрение каналов Lightning с самостоятельным хранением. Было бы интересно, если бы программное обеспечение кошелька Lightning могло иметь кнопку «быстрого запуска», где пользователи могли бы просто вводить, сколько биткойнов они хотят заблокировать (т.е. сколько ликвидности они хотят), устанавливать значение по умолчанию для открытия небольшого количества каналов разумного размера и немного жертвовать маршрутизацией и комиссиями. Для продвинутых пользователей просто предоставьте кнопку «Я знаю, что делаю».
Слабые стороны
У любого протокола есть слабые места, и PayJoin не исключение.
Основная проблема заключается в требованиях к живости (сетевому взаимодействию). В текущей реализации веб-сервер payjoin получателя должен быть финансово застрахован при построении транзакции, так как отправитель и получатель согласовывают окончательную транзакцию (которая, конечно, запрограммирована). Это может ограничить внедрение торговых серверов, а также узлов Lightning, которые являются единственными людьми, у которых есть стимул оставаться в сети. С точки зрения пользователя, было бы еще лучше, если бы транзакция могла быть отправлена в любое время, независимо от того, был ли сервер получателя онлайн или нет.
Другая менее вероятная, но более опасная слабость заключается в том, что если сервер payjoin (т.е. сервер получателя) находится на незащищенном сервере, выходные данные получателя могут быть подделаны во время работы (перед передачей обратно отправителю), что приведет к краже средств, принадлежащих получателю.
Однако, как мы будем говорить далее, были предложены решения для решения обеих этих проблем.
Наконец, еще одним недостатком протокола PayJoin является то, что он сталкивается с препятствием для внедрения, поскольку кошельки должны приложить усилия для его интеграции. Особая сложность заключается в том, что идеальным пользовательским интерфейсом по умолчанию должен быть payjoin. И кошелек отправителя, и кошелек получателя будут пытаться подключиться к payjoin напрямую, без необходимости открываться пользователем в настройках конфиденциальности. Лучшая конфиденциальность — это реализовать конфиденциальность по умолчанию, потому что, если вы попросите пользователей предпринять активные действия, они могут быть обескуражены. Таким образом, для того, чтобы payjoin был принят среднестатистическим пользователем, должен быть плавный опыт, который ему не нужно пытаться понять. В кошельке он должен быть включен по умолчанию. Имейте в виду, что протокол уже имеет встроенную реакцию на сбои payjoin: он возвращается к обычной транзакции без ручного вмешательства пользователя.
Не требуется payjoin на стороне сервера
Дэн Гулд (Dan Gould) представил проект BIP для версии 2 payjoins, позволяющий выполнять payjoins как в асинхронном, так и в бессерверном сценариях. Это бессерверное payjoin решит проблему, связанную с требованием присутствия получателя в сети при получении платежа, и связанные с этим проблемы безопасности на стороне сервера. Поскольку постоянно включенный сервер получателя payjoin может быть самым большим препятствием для принятия пользователями payjoin, внедрение этого BIP может принести значительные преимущества для принятия payjoin, а также пассивной конфиденциальности Биткойна.
Состояние принятия Payjoin
По состоянию на конец 2023 года внедрение PayJoin все еще относительно невелико, но оно продолжает расти с момента его создания в 2018 году. Поскольку payjoin в настоящее время доступен и не требует каких-либо изменений консенсуса Биткойна, единственным препятствием является написание программного обеспечения кошелька, которое его поддерживает, а инструменты, помогающие разработчикам, совершенствуются с каждым днем. Payjoin Dev Kit (PDK) — это новая реализация payjoin с модулями, которые кошельки могут использовать для интеграции payjoin. Он даже состоит из инструмента payjoin-cli, с помощью которого вы можете использовать командную строку для создания payjoin. Эта библиотека написана на Rust, но привязки, позволяющие использовать ее другим языкам, находятся в разработке.
Поддержка кошельков
BTCPayServer и JoinMarket уже поддерживают отправку и получение payjoin, хотя и не по умолчанию. BlueWallet, Sparrow, Wasabi и BitMask поддерживают отправку. Несколько других кошельков поддерживают его через плагин, в том числе Bitcoin Core. Есть также активные PR, пытающиеся интегрировать payjoin в Mutiny Wallet. Текущее состояние усыновления приведено здесь.
Payjoin и будущее биткоина
Адам Гибсон уже заявил, что даже если только 5% транзакций в сети будут построены с использованием payjoin, это может оказать большое влияние на конфиденциальность биткоина. Нам нужно только пересечь порог, достаточный для того, чтобы аналитическая фирма с уверенностью предположила, что она может правильно интерпретировать транзакцию. Как только их методы шпионажа за нами будут сломаны, неразумные, произвольные и злонамеренные ограничения, налагаемые теми, кто не понимает преимуществ конфиденциальности Биткойна и не намерен защищать наши права, станут неактуальными.
И, как мы видели, из-за множества возможностей, которые принесет PayJoin, это не только решение для обеспечения конфиденциальности, но и масштабируемый и совместный протокол транзакций, который позволяет использовать его в интересных целях, таких как экономия комиссий, несколько каналов Lightning для одной транзакции и так далее. Преимущества, которые он может принести Биткойну, безграничны, и они могут быть реализованы сейчас, не меняя сам Биткойн.
Так чего же мы ждем?
Нет
Если вы хотите поддержать или внести свой вклад в PayJoin, присоединяйтесь к Discord, пожертвуйте нам или узнайте о payjoin.org.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Payjoin с лучшими биткойнами
Автор: Брэндон Лукас, Источник: BTC Study
Payjoin — это протокол, который решает многие проблемы одним выстрелом, используя простой и умный трюк для создания транзакций Bitcoin. Он предназначен для решения самой большой проблемы конфиденциальности Биткойна, но он также может помочь решить проблемы масштабирования и, следовательно, помочь людям сэкономить на комиссиях. Он особенно совместим с узлами Lightning Network, потому что его текущая конструкция имеет требование к активности для получателя транзакции, что означает, что получатель должен быть онлайн (так же, как и узел Lightning) при получении платежа. В будущем даже это требование будет отменено, чтобы его можно было использовать в автономном режиме. Его легко интегрировать в программное обеспечение кошелька, и он может открывать множество каналов Lightning одновременно при совершении платежей, и он пассивен, поэтому вы можете пользоваться преимуществами, даже не подозревая об этом. Преимущества конфиденциальности Payjoin многоуровневы, поэтому, даже если только небольшой процент людей использует его, каждый может получить преимущества конфиденциальности. И, возможно, лучше всего то, что PayJoin не требует хардфорка или софтфорка. Он может использоваться и использовался с Биткойном, и фактически был доступен с первой версии программного обеспечения Биткойна.
Payjoin является производной от Coinjoin. Coinjoin является более старым и также требует большего онлайн-взаимодействия, а это означает, что пользователи должны активно участвовать в его использовании, что обязательно снизит удобство использования и будет препятствовать принятию. Однако, несмотря на это, принятие CoinJoin на сегодняшний день было намного выше, чем у PayJoin, хотя преимущества и простота использования PayJoin более очевидны. Для разработчиков сложное, неясное направление не позволяет ему быть принятым программным обеспечением кошельков.
Payjoin существует уже много лет и, принимая во внимание:
Почему payjoin медленно внедряется в больших масштабах?
В частности, почему протокол Coinjoin, который требует большего взаимодействия, сложнее в использовании и дороже, но вместо этого имеет более широкое распространение?
В этой статье мы рассмотрим текущие атаки на конфиденциальность Биткойна, историю PayJoin с точки зрения конфиденциальности, как работает PayJoin и почему он может предоставить так много преимуществ, не меняя Биткойн, и, наконец, текущее принятие. Если payjoin может значительно улучшить конфиденциальность, масштабируемость и помочь сэкономить на комиссиях, то небольшие усилия кошелька по его интеграции будут того стоить.
Почему конфиденциальность важна для биткоина
Прежде чем обсуждать важность payjoin, мы должны понять важность конфиденциальности. Если вам больше не нужно, чтобы я вас убеждал, то вы можете сразу перейти к следующему разделу, чтобы узнать об истории и о том, как работает Pyajoin.
В западных демократиях важность неприкосновенности частной жизни неописуема, поскольку ее преимущества до сих пор кажутся невидимыми для людей. Трудно убедительно объяснить, почему конфиденциальность важна (особенно в условиях более высоких затрат или больших неудобств), если они никогда не ощущают негативных последствий того, что плохие люди имеют слишком много информации о них, или потому, что это требует от людей думать о долгосрочных последствиях этих вторжений.
Конечно, кажется, что конфиденциальность — это то, о чем заботится все больше и больше людей (в теории), но они, как правило, редко подходят к ней активно, с очень низкими триггерными барьерами и без компромиссов в отношении удобства. Поэтому технологии, которые хотят защитить конфиденциальность людей, должны быть разработаны так, чтобы быть максимально удобными для пользователя и максимально удобными.
Однородность
Конфиденциальность — не единственная проблема, которую payjoin может помочь решить, но он был создан для ее решения. Люди уже давно жалуются на отсутствие конфиденциальности, присущее Биткойну, и сообщество Биткойна очень серьезно относится к этой проблеме. Биткойн предназначен для облегчения прямых транзакций один к одному и устойчив к цензуре. Однако, поскольку это позволяет отслеживать будущие платежи, это может привести к дискриминации, когда определенная сумма денег связана с личностью. Это разрушает однородность – степень, в которой одни монеты одной и той же валюты неотличимы от других в одном и том же количестве – а однородность является основным атрибутом хороших денег.
Если покупателей можно будет отследить, то не только монеты, которые сейчас находятся у нелегальных лиц, будут отвергнуты, но и кошельки, которые использовались в незаконных целях, также могут быть помечены, а затем отвергнуты торговцами, независимо от того, приобрел ли их нынешний держатель совершенно законными способами. Представьте себе, что вы не можете использовать деньги, которые у вас есть, чтобы купить молоко, потому что кто-то использовал их для покупки наркотиков, и они говорят: «Ваши деньги нечисты», справедливо ли это по отношению к вам? Должны ли вы быть наказаны за чужой грех? Что бы вы сделали с монетами? Вы будете чувствовать, что деньги ничего не стоят, потому что их хранение только повредит вашей покупательной способности. И нет никакого смысла в том, что одна часть монет («чистые деньги») будет стоить больше, чем другая. Один доллар должен быть равен другому, каким бы он ни был, иначе способность такой монеты передавать стоимость будет нарушена.
Криминальная путаница
Часто встречаются критики биткоина и конфиденциальности, которые говорят, что конфиденциальность нужна только преступникам. Это похоже на «если ты не делаешь что-то плохое, возьми это, и тебе нечего будет скрывать». Это легко опровергнуть:
В дополнение к этому упрощенному, самоочевидному возмутительному утверждению, на самом деле правонарушители, в отличие от подавляющего большинства законопослушных граждан, готовы согласиться на высокую цену за неприкосновенность частной жизни, так что меры, которые ставят под угрозу элементарную неприкосновенность частной жизни, наносят гораздо больший вред обычным людям, чем преступникам. Даже если правительство не будет плохо использовать меры по ограничению конфиденциальности для поимки преступников, а вместо этого будет «выбирать и выбирать» и выборочно шпионить за гражданами, результат будет таким же. Если гражданин говорит что-то, что не нравится людям, находящимся у власти (а то, что не нравится людям, находящимся у власти, может быть одним и тем же каждый день), то ТА будет выборочно арестован и ему будет нанесен вред.
Наконец, стремление к неприкосновенности частной жизни – это не просто страх перед тем, что правительство превысит свои полномочия. У него также есть практические проблемы, вопросы безопасности и чести. Если кто-то может узнать, сколько у вас денег, где вы живете, насколько сложно украсть ваши вещи? Подумайте о том, в скольких местах в интернете вам придется вводить свой адрес, платежные реквизиты, фотографии и так далее. Доверяете ли вы всем, кто управляет этими сайтами, в том, что касается безопасности вашей личной информации? Вы не должны доверять им, потому что даже самые лучшие системы могут дать сбой, и преступники будут готовы заплатить большие суммы денег хакерам, чтобы они взорвали системы и украли эту ценную информацию.
Неприкосновенность частной жизни и демократия
В любом тоталитарном государстве обязательным условием контроля над гражданами является «знание» речи граждан, их информационных каналов и финансовой деятельности. Без этого понимания невозможно узнать, что атаковать, а что остановить, потому что нет никакого способа манипулировать нарративом и еще больше усилить контроль. Если у правительства нет надежного доступа к этой информации, оно не может нацеливаться на гражданина столько, сколько ему хочется. В тоталитарных обществах прошлого, таких как Советский Союз и нацистская Германия, они развращали частную жизнь людей и не доверяли отношениям в их семьях, промывая им мозги, заставляя сообщать о возражениях, выраженных членами их семей в частных беседах. Когда те же самые меры, нарушающие неприкосновенность частной жизни, происходят с деньгами, это еще страшнее, чем речь. Прекращение финансирования является очень эффективным средством борьбы с политическим инакомыслием.
Конфиденциальность биткоина уязвима
Именно во имя борьбы с преступностью (теракт ХАМАСа) обсуждаются новые меры регулирования, чтобы охарактеризовать методы защиты конфиденциальности в Биткойне как незаконные.
10 октября 2023 года издание Wall Street Journal опубликовало статью, в которой сообщалось, что ХАМАС получил финансирование в размере 130 миллионов долларов через криптовалюту. Неделю спустя сенатор Элизабет Уоррен написала открытое письмо президенту Байдену, призвав его до 31 октября решить вопрос о том, как его исполнительная власть реагирует на «террористическое использование криптовалюты», сославшись на Wall Street Journal в качестве доказательства острой необходимости такого регулирования. Письмо подписали 29 из 100 членов Сената, а также 76 членов Палаты представителей. Любопытно, что 19 октября, через два дня после отправки письма, Сеть по борьбе с финансовыми преступлениями (FCE) опубликовала предложение по регулированию обфускации криптовалют для рисков отмывания денег. В предложении перечислены методы, используемые для сокрытия потока транзакций:
Это определение включает в себя как coinjoin, так и payjoin, хотя описание «использование алгоритмического кода» достаточно широко, чтобы охватить произвольные транзакции, и, следовательно, допускает произвольную цензуру.
Но статья в Wall Street Journal, в которой была представлена точка зрения на открытое письмо и предпринята попытка защитить такое регулирование, очень сильно неверно интерпретировала данные — реальная сумма, которая действительно имела отношение к ХАМАСу, составляла всего 450 000 долларов. Криптовалюты никогда не были основным источником финансирования ХАМАСа. Сам ХАМАС ясно дал понять, что не хочет получать средства через биткоин, который можно отследить.
По иронии судьбы, регулирующие меры, которые сейчас предлагаются, якобы для борьбы с террористическими группировками, оказывают наименьшее влияние на террористические группировки и больше всего на обычных людей, которые хотят использовать биткоин и другие криптовалюты.
Нет никаких сомнений в том, что битва за права биткоина на неприкосновенность частной жизни уже идет в Соединенных Штатах, и можно предвидеть, что она будет проходить под видом противодействия иностранным соображениям национальной безопасности. Что еще более важно, с этого момента разберитесь в технологиях, сохраняющих конфиденциальность в Биткойне, и начните использовать их для борьбы с попытками ослабить их.
1. Форма биткоин-транзакции
Для того, чтобы понять, что делает payjoin и как он работает, необходимо понять, как выглядят транзакции Bitcoin. Каждый биткоин связан с определенными входами и выходами. Выходные данные определяют, на какой публичный ключ, или «адрес», отправляются эти биткойны. Входные данные определяют «источник» средств транзакции, т.е. предыдущий выход, использованный для создания транзакции (и его новый выход). Хорошей аналогией является то, что мы используем разные номиналы наличных денег для оплаты. Допустим, вы хотите заплатить $25 за ужин в ресторане и $5 за официанта, итого $30 (это результат вашей транзакции, две разные «порции» денег двум разным людям – ресторану и официанту).
Так как же вы платите? Предположим, что у вас в руке так много банкнот (т.е. ваших входных данных):
Итак, при построении этой сделки вы можете использовать 1 купюру по 20 долларов и 2 купюры по 5 долларов, одна из которых 5 долларов и одна выдается только официанту:
! [Оплата в ресторане] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-4a2caad01b-dd1a6f-cd5cc0.webp)
Обратите внимание на важный аспект, который нам не подходит для проведения аналогии с наличными: $20 и $5 здесь сольются в одно целое. Это больше похоже на то, что вы переплавляете два куска золота в один большой, чтобы заплатить за нужную сумму, а не отдаете несколько золотых самородков. Биткойн позволяет разделять и объединять входы, чтобы получить желаемый результат.
Вы также можете использовать 2 банкноты номиналом 10 долларов и 2 банкноты номиналом 5 долларов, например:
! [Оплата в ресторане] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-0a70c8526f-dd1a6f-cd5cc0.webp)
Или даже использовать 6 листов за 5 долларов:
! [Оплата в ресторане] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-441fc7aa70-dd1a6f-cd5cc0.webp)
До тех пор, пока мы не потратим свои деньги, эти отдельные «банкноты» биткоина будут называться «неизрасходованными выходами транзакций (UTXO)». Название звучит странно, но если вы потратите время на то, чтобы подумать над ним, вы поймете, что оно довольно точное – это «результаты» (выходы) некоторых сделок, и они еще не были потрачены на другую транзакцию. Выходные данные транзакции, которые еще не были израсходованы, — это выход, который можно потратить. Так что, на самом деле, UTXO — это как бумажные деньги в вашем кошельке. После того, как они были потрачены, они становятся входом транзакции, а затем выходом другой транзакции (наличные в чужом кошельке), и вы больше не можете их тратить, однако запись о потраченной вами заметке остается в блокчейне навсегда.
В отличие от наличных денег, транзакции с биткойнами требуют разрешения отправителя, чтобы быть действительными. Это достигается с помощью цифровой подписи отправителя, которая также служит доказательством того, что он намеревался потратить средства. Действительная подпись (т. е. подпись, совпадающая с адресом UTXO) должна быть представлена во входных данных транзакции, использующих UTXO. Наличие подписи «разблокирует» этот UTXO и говорит о том, что владелец этого UTXO намерен потратить его на такую транзакцию.
На следующем изображении показана реальная транзакция, которая была подтверждена блокчейном 1 раз на момент написания статьи:
! [Пример реальной транзакции с 1 входом и тремя выходами, один из которых является комиссией] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-c006e2488a-dd1a6f-cd5cc0.webp)
Как вы можете видеть, приведенная выше транзакция взяла 1 вход и создала 2 выхода, один из которых представляет собой реальный платеж, а другой почти наверняка отправляется обратно покупателю в качестве сдачи. Разница между входом и выходом — это комиссия, которая идет майнеру, который добыл блок, который первым подтвердил транзакцию.
Этот «режим UTXO» очень мощный. Поскольку каждая транзакция имеет вход и выход, и поскольку выход одной транзакции становится входом другой последующей транзакции, мы получаем цепочку транзакций, которые могут отслеживать передачу права собственности на биткойн. Поскольку предложение биткойнов ограничено, и из-за того факта, что он имеет ключевую «неинфляционную» характеристику, важно иметь возможность проверять, сколько биткойнов находится в обращении (или «не израсходовано») в любое время, и модель UTXO может быть использована в OC.
Это также является источником проблем с конфиденциальностью Биткойна. Каждая транзакция имеет свою историю. Все биткойны, которые вам вручают, и куда вы их отправляете, легко отследить. Вся система специально разработана для поддержки этой функции, хотя она не предназначена для отслеживания отдельных лиц. В этой системе ваш единственный реальный козырь заключается в том, чтобы никогда не связывать свою настоящую личность с вашим открытым ключом, что очень трудно сделать в эпоху массовой слежки.
Исторические истоки Payjoin
Маленькая ошибка Сатоши Накамото
Когда Сатоши Накамото опубликовал «белую книгу» биткоина в 2008 году, он понял, что проблемы с конфиденциальностью возникают из-за требования, чтобы каждая транзакция была общедоступной, что противоречило требованию сохранить ее конфиденциальность.
Он выдвинул два предложения, чтобы избежать привязки реальной личности к транзакциям:
Все это хорошие советы, но для 1) трудно гарантировать, что наша настоящая личность полностью изолирована от наших платежей, если только мы не будем предельно осторожны при совершении платежей в Интернете; Во-вторых, даже если публичный ключ не используется повторно, трекеру не составит труда определить, какие публичные ключи какому лицу принадлежат, при условии, что вывод, сгенерированный из нескольких ключей, расходуется вместе в последующих платежах. Эти предложения, даже если они собраны вместе, сложны в принятии и несовершенны.
После этих предложений Сатоши Накамото допустил еще одну маленькую ошибку, преувеличив слабость своей системы:
Гипотеза Сатоши и все примеры, которые мы показали до сих пор, подразумевает, что все входные данные транзакции принадлежат одному и тому же владельцу. Другими словами, все «банкноты», потраченные на транзакцию, поступают из вашего кошелька, что является разумным предположением, но не обязательно верным. Эта гипотеза называется «ввод идентичности подсказок о праве собственности». Практически верно для любой транзакции, которая также является основой мониторинга ончейн-активности.
Присоединение к монетам
В начале 2013 года Грегори Максвелл (Gregory Maxwell) провел интересную игру на форумах bitcointalk.org, где предложил свой собственный UTXO (стоимостью 1 BTC) и свой адрес, а также спросил, может ли кто-нибудь создать новую транзакцию, используя этот UTXO в качестве входных данных. Если создатель такой транзакции отправляет ему менее 1 BTC, он забирает у него часть денег, а если он отправляет ему более 1 BTC, это дает ему дополнительные деньги, но если отправленная ему сумма не больше и меньше 1 BTC, то это эквивалентно использованию его средств (и адреса) для дополнительной конфиденциальности, потому что ввод выглядит так, как если бы это был собственный UTXO создателя транзакции, но это не так. Когда один из выходов Максвелла израсходован и отправлен обратно на его адрес, он предоставляет еще один UTXO, чтобы другие могли продолжить игру. С точки зрения аналитической фирмы, занимающейся анализом блокчейн-активности, это заставило бы их думать, что Максвелл выглядит богатым! Поскольку его адреса являются публичными, и многие UTXO используются для создания транзакций, содержащих эти адреса, любой аналитик, который анализирует эти транзакции и предполагает, что все входные данные для транзакций исходят от одного и того же человека, предположит, что у Максвелла много-много биткойнов (больше, чем он на самом деле владеет), отсюда и заголовок его поста: «Я действительно богат!»
Конечно, игра не является частной, так как Максвелл разместил свое обращение на публичном форуме, но она предлагает очень важную концепцию, которая возникает. Как говорит Максвелл:
В следующем посте в том же году Мэввелл официально изложил эту идею в концепции, которую он назвал «Coinjoin»:
Это означает, что, по сути, любое количество людей может сотрудничать для создания транзакций, каждый из которых предоставляет и подписывает свой собственный вклад, не беспокоясь о том, что чьи-то средства будут украдены.
Затем он представил еще одно преимущество транзакций coinjoin, которое заключается в том, что транзакции могут обрабатываться пакетами, что позволяет экономить на комиссиях: вы можете найти других людей, которые также хотят инициировать платежи, когда вы хотите заплатить, и создавать транзакции вместе:
В конце концов, conjoin — это протокол, в котором его использует достаточное количество людей, все выигрывают, и каждый получает от него преимущества конфиденциальности:
В качестве конкретного примера предположим, что мы нашли 3 человека, которые хотят принять участие в coinjoin. Они заранее договорились смешать 0,1 биткоина, и они могли получить преимущество конфиденциальности в виде получения 3 одинаковых выходов, что сделало невозможным для других определить, от кого пришел каждый из трех адресов. Для аналитика связь между адресом изменения и входными данными по-прежнему очень ясна, но неясно, чей выход является выходом этих трех равных сумм.
! [Пример Coinjoin] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-2603112d99-dd1a6f-cd5cc0.webp)
Когда есть только 3 участника, преимущество конфиденциальности не обязательно значительно, особенно потому, что другие участники могут деанонимизировать себя (коррелировать со своей реальной личностью) в последующих транзакциях, но это может быть улучшено несколькими раундами присоединения к монетам или использованием большего набора анонимности.
Подводя итог, можно сказать, что coinjoin — это транзакция, созданная с использованием входов и выходов от нескольких сторон, так что другим трудно определить, какой выход кому принадлежит.
Для более подробного рассмотрения того, как создать транзакцию Coinjoin и какие инструменты доступны, ознакомьтесь с этим руководством.
Coinjoin является одним из наиболее эффективных и широко распространенных решений для обеспечения конфиденциальности Биткойна, но у него также есть некоторые существенные недостатки:
Очевидно, что из-за этих ограничений CoinJoin не является окончательным решением для обеспечения конфиденциальности Биткойна, особенно для более пассивных пользователей, которые хотят схему конфиденциальности по умолчанию.
Несколько лет спустя появился лучший результат, который не требовал от сторон, участвующих в сделке, предпринимать какие-либо дополнительные шаги, был простым, не требовал централизованного координатора или торговой площадки (и, следовательно, экономил время и деньги) и выглядел так же, как и обычная транзакция: Payjoin.
Payjoin состоит из ряда более ранних нововведений, давайте посмотрим.
ВВП-21
Важным улучшением пользовательского опыта (UX) для ранних Биткойнов был BIP-21. «BIP» — это аббревиатура от «Bitcoin Upgrade Proposal» и содержит набор критериев, которые либо требуют согласованных изменений в протоколе Bitcoin (например, хард- или софтфорки), либо предоставляют полезную информацию и методы для взаимодействия с биткоином.
BIP-21 — это стандарт, который определяет использование URI и упрощает процесс взаимодействия с биткоином путем перехода по ссылке или сканирования QR-кода для инициирования платежа. Также определено небольшое количество параметров запроса, таких как сумма, тег и сообщение, поэтому клиентское программное обеспечение может легко извлекать и анализировать их, обеспечивая лучшее взаимодействие с пользователем. Ниже приведен пример URI BIP-21 с несколькими параметрами:
! [BIP-21 Простой] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-16bce7b3b8-dd1a6f-cd5cc0.webp)
Важно отметить, что этот стандарт является расширяемым, вы можете создавать пользовательские параметры запроса, и на его основе могут быть разработаны новые стандарты. Например, в дополнение к вашему биткойн-адресу вы также можете добавить пользовательский параметр под названием lightning, который предоставляет вам способ получения денег в сети Lightning, чтобы пользователи могли платить вам любым способом:
! [BIP-21 с Lightning] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-568740308b-dd1a6f-cd5cc0.webp)
Этот мощный и гибкий BIP оказался весьма полезным при внедрении концепций из coinjoin.
Pay-to-Endpoint(P2EP)
Самый ранний документ, в котором я нашел упоминание концепции payjoin, был опубликован на сайте Blocksteam в августе 2018 года со ссылкой на семинар, который породил эту концепцию. В статье окончательная идея называется «Pay-to-Endpoint», потому что она сочетает в себе концепцию coinjoin с BIP-21, позволяя отправителю и получателю транзакции работать вместе, чтобы обеспечить входные данные для транзакции через конечную точку сети, совместимую с BIP-21, предоставленную получателем. На следующей схеме показан пример того, как выглядит конечная точка, предоставляемая получателем:
! [Пример P2EP] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-abd5791ea9-dd1a6f-cd5cc0.webp)
Особого внимания заслуживает параметр p2ep, который представляет собой конечную точку сети (в данном случае адрес .onion, но это также может быть простой адрес http:// или любая другая совместимая конечная точка сети), которая может послать сигнал на кошелек получателя о том, что отправитель готов попытаться совершить платеж P2EP. Если платеж P2EP не удался, кошелек вернется отправителю и запросит обычный платеж на определенный адрес, и будет использовать только входные данные отправителя.
Поскольку входной вклад координируется через P2EP и не приводит к «испорченному» выходу равного номинала, как coinjoin, транзакции payjoin идентифицировать сложнее.
Идея является большим шагом в правильном направлении, но она все еще находится в зачаточном состоянии, она не завершена, и некоторые дополнительные сложности должны быть устранены.
Не по теме: Pay-to-IP Сатоши Накамото
Вариация этой идеи, получившая название «Pay-to-IP», была фактически реализована Сатоши Накамото в «самой ранней версии» программного обеспечения Биткойна. Однако этот подход представляет собой серьезную дилемму конфиденциальности, поэтому от него отказались в последующих версиях программного обеспечения Биткойна.
Бустапай
Позже в том же месяце Райан Хавер предложил улучшенную версию P2EP в списке рассылки разработчиков биткоина и формализовал BIP под названием «Bustapay». Эта версия упрощает оригинальный протокол P2EP, и ради простоты и устранения некоторых сложностей, он считает, что простота необходима для повсеместного доступа.
Предложение Bustapay все еще имеет некоторые серьезные проблемы, которые необходимо уточнить, а протокол не так полон, как должен быть. Но это еще один шаг в правильном направлении, и его ориентация на простоту интеграции кошельков является критически важным шагом, особенно для медленной и осторожной экосистемы разработчиков биткоина. Хотя Bustapay никогда не продвигался, он был последним предшественником сегодняшнего предложения payjoin - мы готовы к интеграции кошельков, положительным изменениям в транзакциях в сети.
Предложение Payjoin
Наконец, в середине 2019 года концепции Bustapay и P2EP были доработаны и усовершенствованы Николя Форье (основателем BTCPayServer) и Kukks, чтобы сформировать BIP-78 под названием «Простое предложение Payjoin».
При понимании предыстории протокола, который послужил основанием для payjoin, смысл и цель резюме, приведенного в начале этого предложения, ясны:
Предложение предоставляет гораздо более точную информацию, чем предыдущие методы, указывая, как построить транзакцию coinjoin между отправителем и получателем, разрывая нить идентичности владения входными данными транзакции, и является простым, гибким и недорогим.
Как работает Payjoin
Допустим, Алиса хочет заплатить Бобу 1,1 BTC, а затем компания, занимающаяся мониторингом блокчейна, видит транзакцию, подобную этой:
! [Пример, предполагающий эвристику владения общим входом] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-ca34b5b6d3-dd1a6f-cd5cc0.webp)
Они могут подумать, что Алиса заплатила Бобу 0,5 BTC, а остальные деньги перевела себе в качестве сдачи, и все:
! [Пример, предполагающий, что использовалась эвристика владения общим вводом] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-28843c7745-dd1a6f-cd5cc0.webp)
И в большинстве случаев нет ничего плохого в том, чтобы так думать! Ведь сдача обычно бывает в более крупных купюрах, а 0,5 — это скорее «целое число» и чаще используется в платежах (по сравнению с 1,1).
Они также могут задаться вопросом, почему Алиса использовала ввод, который не был необходим (и 0,8, и 0,3 являются избыточными), но они никогда не могут быть уверены, что это не обычная транзакция, и они не могут сделать вывод, почему был использован дополнительный ввод - возможно, Алиса просто организует свой кошелек так, чтобы она могла управлять им позже. Это может быть payjoin, но даже если вы так думаете, какой UTXO принадлежит Алисе, а какой Бобу? Узнать это невозможно. Поскольку большинство транзакций не являются payjoin, они, скорее всего, ошибочно подумают, что это не payjoin транзакция.
Тем не менее, Алиса умна и хочет защитить свою конфиденциальность, и она знает о payjoin, поэтому она просит Боба также предоставить входные данные для транзакции. Боб согласился, поэтому он создал транзакцию, которая стоила одного (или нескольких) UTXO в качестве входных данных, и отправил ее обратно Алисе. Если в сделке нет проблем с Алисой, то она транслирует это в сеть. На самом деле сделка выглядит примерно так:
! [Пример транзакции payjoin] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-ba3b4aec83-dd1a6f-cd5cc0.webp)
До тех пор, пока наблюдатели за цепочками будут считать, что все входные данные поступают от Алисы (как в первом примере, и так оно и есть сейчас), они будут сильно ошибаться в том, какие входы принадлежат Алисе и Бобу!
Интересно, что и Алиса, и Боб предлагают преимущества конфиденциальности для всех. Потому что, в отличие от CoinJoin, эта транзакция больше похожа на обычную транзакцию, и до тех пор, пока достаточное количество людей использует PayJoin, наблюдатель не может определить, какие транзакции являются нормальными. Мешая наблюдателям, Алиса и Боб также делают каждую транзакцию немного подозрительной. До тех пор, пока достаточное количество людей будет делать это, все транзакции будут становиться подозрительными. Конфиденциальность в блокчейне часто является игрой чисел, и чем больше людей вовлечено, тем лучше будет конфиденциальность для всех.
В этом случае Алиса и Боб совместно создали транзакцию, используя свои входные данные для защиты конфиденциальности. Конечно, весь процесс подозрительно автоматизирован (и на самом деле является автоматизированным).
В BIP-78 весь процесс более формально определен следующим образом:
! [Пример PJ] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-d33ce79c42-dd1a6f-cd5cc0.webp) 2. Отправитель создает сформированный, транслируемый PSBT, который отправляется на конечную точку получателя, используя только собственные входные данные, полностью достаточные для оплаты. Этот PSBT называется «начальным PSBT». 3. Получатель изменяет PSBT, чтобы включить в него свои собственные данные, подписывает свой собственный ввод и отправляет измененный PSBT обратно отправителю. Получатель не изменяет ни один из входных или выходных данных отправителя. Этот PSBT называется «Payjoin Offer». 4. Отправитель подтверждает предложение, затем повторно подписывает свои данные, чтобы завершить всю транзакцию и, наконец, передать ее в сеть.
Независимо от того, где в процессе была допущена ошибка, например, у получателя нет UTXO, который можно использовать для создания предложения Payjoin, TA нужно только транслировать начальную PSBT, что является обычной транзакцией. Несмотря на то, что все входные данные для этой транзакции поступают от одного и того же владельца, и только достаточное количество людей используют payjoin, вы не можете заключить, что обе стороны не payjoinin, и наблюдатель должен будет предположить, что все payjoining, а затем придумать другой способ отслеживания платежа.
Множество преимуществ Payjoin
Разбейте больше улик для слежки
Предположение об идентичности владельца — не единственное, что может быть нарушено payjoin и влияет на конфиденциальность. BIP-78 указывает на две другие подсказки, которые могут быть использованы для идентификации владельца:
В Биткойне публичный ключ скрипта — это «скрипт блокировки», который определяет условия, при которых сумма биткойнов может быть потрачена. Он называется «открытым ключом скрипта», потому что условие блокировки требует действительной подписи, совпадающей с открытым ключом (адресом) для его разблокировки. Другими словами, только человек, который контролирует закрытый ключ связанного открытого ключа этого UTXO, может разблокировать его.
Существует несколько типов скриптовых открытых ключей, таких как: P2PKH, P2WPKH, P2SH, P2TR. Как правило, кошельки используют один и тот же публичный ключ скрипта для всех транзакций, поэтому на выходе изменения (средства, отправленные отправителем обратно отправителю отправителем самому себе в дополнение к платежам и комиссиям), скорее всего, будет использоваться тот же тип публичного ключа скрипта, что и на входе отправителя, а на выходе, отправленном получателю, скорее всего, будет использоваться другой тип. Это означает, что UTXO, использующие один и тот же тип скрипта в одной и той же транзакции, могут быть идентифицированы как потенциально принадлежащие отправителю, т. е. предполагая, что выход, отправленный получателю, будет другого типа.
BIP-78 определяет метод, который позволяет получателю использовать только тот же тип открытого ключа скрипта, что и отправитель, что нарушает вышеуказанный поток, который может предоставить выход платежа и вывод изменения.
Обычно, пожалуйста, промежность, платите другу всегда будет выбирать целое число, потому что это будет гораздо естественнее. Если бы Боб взимал плату с Алисы (а они не взимали плату за биткоин по фиатной цене, которая «ближе к целому числу»), то он, скорее всего, взимал бы набор e, например, 0,0001, а не нецелое число, такое как 0,00010231. Если один из выходов транзакции является целым числом, то, скорее всего, это выход платежа, а нецелочисленный выход — выход изменения (по крайней мере, на данный момент).
Payjoin также описывает способ, с помощью которого получатель может прервать этот поток, добавив дополнительные целочисленные выходные данные при создании предложения Payjoin.
Асимметричные выгоды достигаются за счет объединения более широкой группы
Как упоминалось ранее, одним из основных недостатков coinjoin с точки зрения конфиденциальности является то, что 1) транзакции coinjoin легко отличить от обычных транзакций, и 2) мало кто делает это специально, чего нельзя сказать о регулярных транзакциях. Это создает проблему однородности Биткойна, потому что вполне вероятно, что некоторые люди будут думать, что чеканные деньги загрязнены, потому что у кого-то есть эта нелепая идея, что «стремление к конфиденциальности равно злому умыслу». Конечно, если большинство транзакций или даже определенный процент транзакций являются частными, то транзакции, направленные на обеспечение конфиденциальности, незаметны.
Payjoin выглядит так же, как и любая другая транзакция, поэтому ничем не примечательна. У сторонних наблюдателей даже нет оснований смотреть на такую транзакцию, потому что она не показывает намерения запутать платеж и изменить выходы.
Поскольку это выглядит как что-то другое, даже незначительные преимущества внедрения payjoin означают, что конфиденциальность каждого будет сложнее нарушить, поскольку отслеживаемые лиды быстро становятся ненадежными. Адам Гибсон (один из основателей JoinMarket и эксперт по конфиденциальности биткоина) очень хорошо резюмирует:
Финишная обработка UTXO
Очевидно, что и PayJoin, и его первопроходцы привержены решению проблем конфиденциальности. Но у использования payjoin есть и замечательная сторона, и BIP-78 ясно дает это понять: очистка UTXO.
Сатоши Накамото предложил использовать адрес чаевых для каждой транзакции получения, что привело к тому, что кошелек пользователя стал иметь множество UTXO, которыми нужно управлять. Когда эти UTXO используются в качестве входных данных для создания новой транзакции (при условии, что это не транзакция coinjoin или payjoin), такая транзакция стоит больших комиссий. Поскольку плата взимается в зависимости от объема транзакции (количества байтов) (соответствующего пространству блока, которое является дефицитным ресурсом), большее количество входных данных приравнивается к более крупным транзакциям и большим комиссиям.
Важно отметить, что использование payjoin для сортировки UTXO не обязательно экономит комиссии, поскольку каждый UTXO, который появляется в сети, все равно должен будет платить комиссию. Тем не менее, он распределяет эти сборы на длительный период времени и предоставляет возможность пакетировать UTXO в момент оплаты. Пакетная обработка удешевит организацию UTXO (чем если бы вам пришлось инициировать транзакцию специально для целей сортировки). Это также упрощает связывание UTXO и занимает меньше места на жестком диске. Кроме того, кошельки могут реализовать способ автоматизации и упрощения организации UTXO, позволяя получателям заранее указывать, какие UTXO они хотят организовать с низкими комиссиями.
Lightning Network и Payjoin: совпадение, созданное в природе
Используйте Payjoin для открытия канала Lightning
Lightning Network (LN) — это решение уровня 2, построенное на основе Биткойна, которое переводит транзакции вне блокчейна для мгновенного урегулирования с очень низкими комиссиями, тем самым значительно увеличивая пропускную способность транзакций, конфиденциальность и позволяя Биткойну войти в новые варианты использования (такие как «микроплатежи»). Он использует сеть платежных каналов между узлами для маршрутизации платежей, пересылая средства из места их происхождения в места назначения. Эти каналы требуют, чтобы каждый оператор узла заблокировал некоторую «ликвидность» (биткойны) со своими контрагентами канала, которая затем может перетекать между узлом и его контрагентами по каналу. Количество биткойнов, которые вы можете потратить в канале, ограничено количеством ликвидности на вашей стороне канала.
Когда дело доходит до обслуживания узла Lightning, большая часть сложностей связана с открытием этих каналов и управлением ликвидностью каждого канала. Адаптация новых пользователей — одна из самых больших болевых точек, потому что для этого нужно пройти очень много этапов. Допустим, Алиса хочет открыть канал с Бобом, и она установила новый узел Lightning, но она еще не получила финансирование. Затем ей нужно сделать следующее:
По крайней мере, Алисе приходится платить комиссию дважды и ждать около 10 минут для каждой транзакции, что утомительно.
! [Процесс открытия канала Lightning] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-1cabf5ff4a-dd1a6f-cd5cc0.webp)
Payjoin упрощает этот процесс и помогает Алисе экономить деньги: Алиса может пополнить кошелек Lightning и открыть канал за одну транзакцию.
В этом сценарии Алиса предварительно настраивает конечную точку получения payjoin с подробными сведениями о канале, который она хочет открыть: сколько биткоинов заблокировать и какого оппонента открыть канал. Затем, используя кошелек, поддерживающий payjoin, кто-то (включая Алису) может отправить первоначальный PSBT на конечную точку, согласовать транзакцию payjoin, и конечная точка выполнит необходимые вызовы API для открытия канала с узлом Боба.
Другими словами, отправитель (в данном случае Алиса) связывается с Алисой с конечной точкой, которая получает payjoin, создает транзакцию и отправляет средства непосредственно на выход Боба и Алисы с мультиподписью 2-из-2, создавая таким образом канал Lightning между двумя узлами. Это превращает весь процесс в транзакцию:
! [Канал Lightning с Payjoin] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-4c65326146-dd1a6f-cd5cc0.webp)
Интересно знать, что и открытие молниеносного канала, и payjoin имеют требования live (хотя, по крайней мере, payjoin не потребуется в течение длительного времени), что означает, что все участники должны быть онлайн в момент совершения транзакции. Это очень ограничительно по сравнению с транзакциями биткоина в сети (которые требуют, чтобы плательщик был онлайн только в момент оплаты). Тем не менее, это также позволяет двум наборам протоколов идеально сочетаться друг с другом.
Например, Lightning Network — это отличный способ улучшить конфиденциальность, сохраняя платежи вне сети, и он может значительно улучшить способность Биткойна использоваться в качестве средства обмена (т.е. его действительно можно использовать для покупки предметов первой необходимости) без ущерба для его средства сбережения. Однако необходимость открытия канала в сети также означает, что средства, которые вы используете для открытия канала, а также люди, которые открывают канал вместе с вами, оставят след в цепочке. По причинам, которые мы уже обсуждали, payjoin может запутать и уничтожить многие подсказки шпионов.
Это также упрощает задачу, поскольку пользователям нужно будет инициировать только одну транзакцию вместо двух, что станет быстрее, потому что им нужно будет ждать подтверждения только одной транзакции, и дешевле, потому что им нужно будет заплатить только одну комиссию. По сути, такой подход позволяет открывать сразу несколько каналов. Вы можете составить список узлов, на которых вы хотите открыть канал, настроить его как конечную точку приема payjoin BIP-21, а затем включить все сразу и автоматически при получении платежей, и вам нужно будет дождаться только одного подтверждения и одной комиссии за оплату. Совершенно!
Уже существует проект, реализующий эту идею, под названием "Nolooking", который позволяет перечислить набор открытых ключей, а затем открыть сразу несколько каналов Lightning *пакетами)! Это позволяет Алисе открыть канал не только с Бобом, но и с Бобом, Кэрол и Диной с помощью всего одной транзакции в сети! Интересно подумать: в будущем в кошельках Lightning по умолчанию будет включена функция payjoin, а пользовательский опыт де-факто заключается в том, что вы просто выбираете своего торгового партнера, инициируете одну транзакцию Bitcoin, и все готово! Разве это не удивительно?
Легко представить, что это упростило бы внедрение каналов Lightning с самостоятельным хранением. Было бы интересно, если бы программное обеспечение кошелька Lightning могло иметь кнопку «быстрого запуска», где пользователи могли бы просто вводить, сколько биткойнов они хотят заблокировать (т.е. сколько ликвидности они хотят), устанавливать значение по умолчанию для открытия небольшого количества каналов разумного размера и немного жертвовать маршрутизацией и комиссиями. Для продвинутых пользователей просто предоставьте кнопку «Я знаю, что делаю».
Слабые стороны
У любого протокола есть слабые места, и PayJoin не исключение.
Основная проблема заключается в требованиях к живости (сетевому взаимодействию). В текущей реализации веб-сервер payjoin получателя должен быть финансово застрахован при построении транзакции, так как отправитель и получатель согласовывают окончательную транзакцию (которая, конечно, запрограммирована). Это может ограничить внедрение торговых серверов, а также узлов Lightning, которые являются единственными людьми, у которых есть стимул оставаться в сети. С точки зрения пользователя, было бы еще лучше, если бы транзакция могла быть отправлена в любое время, независимо от того, был ли сервер получателя онлайн или нет.
Другая менее вероятная, но более опасная слабость заключается в том, что если сервер payjoin (т.е. сервер получателя) находится на незащищенном сервере, выходные данные получателя могут быть подделаны во время работы (перед передачей обратно отправителю), что приведет к краже средств, принадлежащих получателю.
Однако, как мы будем говорить далее, были предложены решения для решения обеих этих проблем.
Наконец, еще одним недостатком протокола PayJoin является то, что он сталкивается с препятствием для внедрения, поскольку кошельки должны приложить усилия для его интеграции. Особая сложность заключается в том, что идеальным пользовательским интерфейсом по умолчанию должен быть payjoin. И кошелек отправителя, и кошелек получателя будут пытаться подключиться к payjoin напрямую, без необходимости открываться пользователем в настройках конфиденциальности. Лучшая конфиденциальность — это реализовать конфиденциальность по умолчанию, потому что, если вы попросите пользователей предпринять активные действия, они могут быть обескуражены. Таким образом, для того, чтобы payjoin был принят среднестатистическим пользователем, должен быть плавный опыт, который ему не нужно пытаться понять. В кошельке он должен быть включен по умолчанию. Имейте в виду, что протокол уже имеет встроенную реакцию на сбои payjoin: он возвращается к обычной транзакции без ручного вмешательства пользователя.
Не требуется payjoin на стороне сервера
Дэн Гулд (Dan Gould) представил проект BIP для версии 2 payjoins, позволяющий выполнять payjoins как в асинхронном, так и в бессерверном сценариях. Это бессерверное payjoin решит проблему, связанную с требованием присутствия получателя в сети при получении платежа, и связанные с этим проблемы безопасности на стороне сервера. Поскольку постоянно включенный сервер получателя payjoin может быть самым большим препятствием для принятия пользователями payjoin, внедрение этого BIP может принести значительные преимущества для принятия payjoin, а также пассивной конфиденциальности Биткойна.
Состояние принятия Payjoin
По состоянию на конец 2023 года внедрение PayJoin все еще относительно невелико, но оно продолжает расти с момента его создания в 2018 году. Поскольку payjoin в настоящее время доступен и не требует каких-либо изменений консенсуса Биткойна, единственным препятствием является написание программного обеспечения кошелька, которое его поддерживает, а инструменты, помогающие разработчикам, совершенствуются с каждым днем. Payjoin Dev Kit (PDK) — это новая реализация payjoin с модулями, которые кошельки могут использовать для интеграции payjoin. Он даже состоит из инструмента payjoin-cli, с помощью которого вы можете использовать командную строку для создания payjoin. Эта библиотека написана на Rust, но привязки, позволяющие использовать ее другим языкам, находятся в разработке.
Поддержка кошельков
BTCPayServer и JoinMarket уже поддерживают отправку и получение payjoin, хотя и не по умолчанию. BlueWallet, Sparrow, Wasabi и BitMask поддерживают отправку. Несколько других кошельков поддерживают его через плагин, в том числе Bitcoin Core. Есть также активные PR, пытающиеся интегрировать payjoin в Mutiny Wallet. Текущее состояние усыновления приведено здесь.
Payjoin и будущее биткоина
Адам Гибсон уже заявил, что даже если только 5% транзакций в сети будут построены с использованием payjoin, это может оказать большое влияние на конфиденциальность биткоина. Нам нужно только пересечь порог, достаточный для того, чтобы аналитическая фирма с уверенностью предположила, что она может правильно интерпретировать транзакцию. Как только их методы шпионажа за нами будут сломаны, неразумные, произвольные и злонамеренные ограничения, налагаемые теми, кто не понимает преимуществ конфиденциальности Биткойна и не намерен защищать наши права, станут неактуальными.
И, как мы видели, из-за множества возможностей, которые принесет PayJoin, это не только решение для обеспечения конфиденциальности, но и масштабируемый и совместный протокол транзакций, который позволяет использовать его в интересных целях, таких как экономия комиссий, несколько каналов Lightning для одной транзакции и так далее. Преимущества, которые он может принести Биткойну, безграничны, и они могут быть реализованы сейчас, не меняя сам Биткойн.
Так чего же мы ждем?
Нет
Если вы хотите поддержать или внести свой вклад в PayJoin, присоединяйтесь к Discord, пожертвуйте нам или узнайте о payjoin.org.