Payjoin - це протокол, який вирішує багато проблем одним пострілом, використовуючи простий, розумний трюк для побудови транзакцій Bitcoin. Він розроблений, щоб вирішити найбільшу проблему конфіденційності Bitcoin, але він також може допомогти вирішити проблеми масштабування, а отже, допомогти людям заощадити на комісіях. Він особливо сумісний з вузлами Lightning Network, оскільки його поточна конструкція має вимогу до жвавості для одержувача транзакції, що означає, що одержувач повинен бути онлайн (так само, як вузол Lightning) під час отримання платежу. У майбутньому навіть ця вимога буде скасована, щоб його можна було використовувати в автономному режимі. Його легко інтегрувати в програмне забезпечення гаманця, і він може відкривати багато блискавичних каналів одночасно під час здійснення платежів, і він пасивний, тому ви можете насолоджуватися перевагами, навіть не підозрюючи про це. Переваги конфіденційності Payjoin багаторівневі, тому навіть якщо ним користується лише невеликий відсоток людей, кожен може отримати переваги конфіденційності. І, мабуть, найкраще те, що PayJoin не вимагає хардфорку або софт-форку. Він може і використовувався з Біткойн, і фактично був доступний з першої версії програмного забезпечення Біткойн.
Payjoin є похідним від Coinjoin. Coinjoin старіший і також вимагає більше онлайн-взаємодії, а це означає, що користувачі повинні активно взаємодіяти з ним, щоб використовувати його, що обов'язково знизить зручність використання та перешкоджатиме прийняттю. Однак, незважаючи на це, прийняття CoinJoin на сьогоднішній день було набагато вищим, ніж у PayJoin, хоча переваги та простота використання PayJoin більш очевидні. Для розробників складний, незрозумілий напрямок не дозволяє прийняти його програмним забезпеченням гаманця.
Payjoin існує вже багато років і, враховуючи:
Він має багато переваг, згаданих вище
Можливість забезпечення пасивного, ненав'язливого інтерфейсу користувача
Наскільки легко провайдерам гаманців інтегрувати його
Чому payjoin повільно впроваджується у великих масштабах?
Зокрема, чому протокол Coinjoin, який вимагає більшої взаємодії, складніший у використанні та дорожчий, але натомість має більше поширення?
У цій статті ми розглянемо поточні атаки на конфіденційність Bitcoin, історію PayJoin з точки зору конфіденційності, як працює PayJoin і чому він може надати стільки переваг, не змінюючи Bitcoin, і, нарешті, поточне прийняття. Якщо payjoin може значно покращити конфіденційність, масштабованість і допомогти заощадити на комісіях, то невеликі зусилля гаманця для його інтеграції будуть того варті.
Чому конфіденційність важлива для біткойнів
Перш ніж обговорювати важливість payjoin, ми повинні зрозуміти важливість конфіденційності. Якщо вам більше не потрібно, щоб я вас переконував, то ви можете перейти відразу до наступного розділу, щоб дізнатися про історію та про те, як працює Pyajon.
У західних демократіях сама важливість приватності невимовна, оскільки її переваги все ще здаються невидимими для людей. Важко переконливо пояснити, чому конфіденційність важлива (особливо в умовах вищих витрат або більших незручностей), якщо вони ніколи не відчувають поганих наслідків того, що погані люди мають занадто багато інформації про них, або тому, що це вимагає від людей думати про довгострокові наслідки цих вторгнень.
Звичайно, конфіденційність здається чимось, що хвилює все більше і більше людей (в теорії), але вони, як правило, рідко підходять до неї активно, з дуже низькими тригерними бар'єрами і без компромісів щодо зручності. Тому технології, які хочуть захистити приватність людей, повинні бути розроблені таким чином, щоб бути максимально зручними та зручними.
Однорідність
Конфіденційність - не єдина проблема, яку payjoin може допомогти вирішити, але він був створений, щоб вирішити її. Люди вже давно скаржаться на притаманну біткойну відсутність конфіденційності, і біткойн-спільнота дуже серйозно ставиться до цієї проблеми. Біткойн призначений для полегшення прямих транзакцій один на один і стійкий до цензури. Однак, оскільки це дозволяє відстежувати майбутні платежі, це може призвести до дискримінації, коли певна сума грошей буде пов'язана з ідентичністю. Це руйнує однорідність – ступінь, до якого одні монети однієї і тієї ж валюти не відрізняються від інших в тій же кількості – і однорідність є основним атрибутом хороших грошей.
Якщо покупців можна буде відстежити, то не тільки монети, які зараз зберігаються у нелегальних осіб, будуть відкинуті, але й гаманці, які використовувалися в незаконних цілях, також можуть бути позначені, а потім відхилені торговцями, незалежно від того, чи придбав їх поточний власник цілком законним шляхом. Уявіть, що ви не можете використати гроші, які у вас є, щоб купити молоко, тому що воно було використано кимось для покупки наркотиків, а вони кажуть: «Ваші гроші не чисті», чи справедливо це по відношенню до вас? Чи повинні ви бути покарані за чужий гріх? Що б ви зробили з монетами? Вам здаватиметься, що гроші нічого не варті, тому що їх зберігання лише зашкодить вашій купівельній спроможності. І немає ніякого сенсу, щоб одна частина монет ( «чисті гроші») коштувала б дорожче іншої. Один долар повинен дорівнювати іншому, яким би він не був, інакше здатність такої монети передавати вартість буде порушена.
Кримінальна плутанина
Часто лунають приниження біткойнів і конфіденційності, які говорять, що конфіденційність потрібна тільки злочинцям. Це схоже на «якщо ти не робиш щось погане, бери і тобі нема чого приховувати». Це легко спростувати:
Дуже мало людей готові вести пряму трансляцію свого купання та відвідування туалету онлайн. Це тому, що це злочин? Це просто показує, що кожен хоче щось приховати, і що приховування не обов'язково є неправильним.
У більш широкому сенсі, уряд зобов'язаний надати юридичне визначення того, що є злочином, але це визначення завжди може змінюватися. Якщо люди не вільні в приватному житті, то вони не будуть вільні володіти чим-небудь, тому що їх дії будуть жорстко обмежені навколишнім соціальним середовищем (і навіть уряд буде брати безпосередню участь). Навіть якщо він робить щось цілком законне, на людей вказують і постійно атакують. Недоторканність приватного життя – це право вибірково розкривати себе.
На додаток до цієї спрощеної, самоочевидної обурливої заяви, насправді правопорушники, на відміну від переважної більшості законослухняних громадян, готові погодитися на високу ціну за недоторканність приватного життя, так що заходи, які ставлять під загрозу базову конфіденційність, набагато шкідливіші для звичайних людей, ніж для злочинців. Навіть якщо уряд не зробить погану роботу, використовуючи заходи з обмеженням конфіденційності для затримання злочинців, а замість цього «вибирає» і вибірково шпигує за громадянами, результат буде той самий. Якщо громадянин скаже щось, що не подобається людям при владі (а те, що не подобається людям при владі, може бути однаковим щодня), то ЦА буде вибірково заарештовано і завдано шкоди.
Нарешті, прагнення до приватності – це не просто страх перед тим, що уряд перевищить свої повноваження. Він також має практичні питання, безпеку та честь. Якщо хтось може дізнатися, скільки у вас грошей, де ви живете, наскільки важко вкрасти ваші речі? Подумайте, скільки місць в Інтернеті вам потрібно ввести свою адресу, платіжні реквізити, фотографії і так далі. Чи довіряєте ви всім, хто керує цими сайтами, у безпеці вашої особистої інформації? Довіряти їм не варто, тому що навіть найкращі системи можуть вийти з ладу, і злочинці будуть готові платити великі суми грошей хакерам, щоб підірвати системи та вкрасти цю цінну інформацію.
Конфіденційність та демократія
У будь-якій тоталітарній державі обов'язковою умовою контролю над громадянами є знання мови громадян, інформаційних каналів, фінансової діяльності. Без цього розуміння неможливо знати, що атакувати, а що зупинити, тому що немає можливості маніпулювати наративом і ще більше посилювати контроль. Якщо уряд не має надійного доступу до цієї інформації, він не може націлюватися на громадянина стільки, скільки хоче. У тоталітарних суспільствах минулого, таких як Радянський Союз і нацистська Німеччина, вони корумпували приватне життя людей і недовірливі стосунки в їхніх сім'ях, промиваючи їм мізки, змушуючи їх повідомляти про заперечення, висловлені членами їхніх сімей у приватних розмовах. Коли з грошима трапляються такі ж заходи, що порушують конфіденційність, це ще страшніше, ніж мова. Припинення фінансування є дуже ефективним засобом боротьби з політичним інакомисленням.
Конфіденційність біткойнів вразлива
«Не витрачайте кризу даремно. "
– Макіавеллі
Саме в ім'я боротьби зі злочинністю (теракт ХАМАС) спекулюють новими регуляторними заходами, щоб охарактеризувати методи захисту конфіденційності в біткойнов як незаконні.
10 жовтня 2023 року Wall Street Journal опублікував статтю, в якій повідомлялося, що ХАМАС отримав $130 млн фінансування через криптовалюту. Через тиждень сенатор Елізабет Уоррен написала відкритого листа президенту Байдену, в якому закликала його до 31 жовтня зайнятися питанням про те, як його виконавча влада реагує на «терористичне використання криптовалюти», посилаючись на Wall Street Journal як на доказ нагальної необхідності такого регулювання. Лист підписали 29 зі 100 членів Сенату, а також 76 членів Палати представників. Цікаво, що 19 жовтня, через два дні після відправлення листа, Мережа боротьби з фінансовими злочинами (FCE) опублікувала пропозицію врегулювати обфускацію криптовалют на предмет ризиків відмивання грошей. У пропозиції перераховані методи, що використовуються для заплутування потоку транзакцій:
«Використання програмного або алгоритмічного коду для координації, управління або маніпулювання структурою транзакції: Цей підхід передбачає використання програмного забезпечення для координації транзакцій двох або більше людей, щоб ці транзакції об'єднувалися для отримання кількох можливих виходів з одного скоординованого входу, тим самим заплутуючи унікальність кожної транзакції та зменшуючи ймовірність ідентифікації особи, яка бере участь у кожній транзакції».
Це визначення включає як coinjoin, так і payjoin, хоча опис «використання алгоритмічного коду» досить широкий, щоб охопити довільні транзакції, і тому допускає довільну цензуру.
Але стаття Wall Street Journal, яка надавала погляд на відкритий лист і намагалася захистити таке регулювання, дуже неправильно витлумачила дані — фактична сума, яка дійсно мала відношення до ХАМАСу, становила лише 450 000 доларів. Криптовалюти ніколи не були основним джерелом фінансування ХАМАСу. Сам ХАМАС дав зрозуміти, що не хоче отримувати кошти через біткоїн, який можна відстежити.
За іронією долі, регуляторні заходи, які зараз пропонуються, нібито для боротьби з терористичними угрупованнями, мають найменший вплив на терористичні угруповання, і найбільше для звичайних людей, які хочуть використовувати біткойн та інші криптовалюти.
Немає сумнівів, що битва за права на конфіденційність біткойнов вже ведеться в Сполучених Штатах, і передбачається, що вона буде проходити під виглядом протидії іноземним міркуванням національної безпеки. Що ще важливіше, відтепер розуміти технології, що зберігають конфіденційність у біткойнах, і почати використовувати їх для боротьби зі спробами послабити їх.
«Що б ми не хотіли, ми повинні захищати своє право на приватність».
1. Форма транзакції Bitcoin
Для того, щоб зрозуміти, що робить payjoin і як це працює, необхідно зрозуміти, як виглядають транзакції Bitcoin. Кожен біткойн пов'язаний з деякими входами та виходами. Вихідні дані визначають, на який публічний ключ або «адресу» надсилаються ці біткоїни. Вхідні дані визначають "джерело" коштів транзакції, тобто попередній вихід, який використовується для створення транзакції (і її новий вихід). Хороша аналогія полягає в тому, що ми використовуємо різні номінали готівки для оплати. Припустимо, ви хочете заплатити 25 доларів за вечерю в ресторані і 5 доларів за офіціанта, в цілому 30 доларів (це вихід вашої транзакції, дві різні «порції» грошей двом різним людям – ресторану і офіціанту).
Отже, як ви платите? Припустимо, у вас в руках стільки нотаток (тобто ваші дані):
1 аркуш номіналом 20 юанів
2 аркуші по 10 доларів США
5 аркушів по 5 юанів
Так, при складанні цієї угоди ви можете використовувати 1 купюру номіналом 20 доларів і 2 банкноти номіналом 5 доларів, одна з яких коштує 5 доларів, а інша віддається тільки офіціанту:
! [Оплата в ресторані] (https://img.jinse.cn/7133642_watermarknone.png)
Зверніть увагу на важливий аспект, який нам недоречно проводити аналогію з готівкою: $20 і $5 тут зіллються в одне ціле. Це більше схоже на те, що ви переплавляєте два шматки золота в більший, щоб ви могли заплатити необхідну суму, а не віддавати кілька золотих самородків. Біткойн дозволяє розділяти та об'єднувати вхідні дані, щоб отримати бажаний результат.
Ви також можете використовувати 2 банкноти номіналом 10 доларів і 2 банкноти номіналом 5 доларів, наприклад:
! [Оплата в ресторані] (https://img.jinse.cn/7133643_watermarknone.png)
Або навіть використовувати 6 аркушів за 5 доларів:
! [Оплата в ресторані] (https://img.jinse.cn/7133644_watermarknone.png)
Поки ми не витратимо наші гроші, ці окремі "нотатки" Bitcoin називаються "Невитрачені виходи транзакцій (UTXO)". Назва звучить дивно, але якщо ви витратите час на те, щоб подумати про це, ви зрозумієте, що це досить точно – це «результати» (виходи) деяких угод, і вони ще не були витрачені на іншу транзакцію. Вихідні дані транзакції, які ще не були витрачені, - це вихідні дані, які ви можете витратити. Отже, насправді, UTXO – це як паперові гроші у вашому гаманці. Після того, як вони були витрачені, вони стають введенням транзакції, а потім виходом іншої транзакції (готівка в чужому гаманці), і ви більше не можете їх витратити, однак запис витраченої вами нотатки залишається в блокчейні назавжди.
На відміну від готівки, біткойн-транзакції вимагають дозволу відправника, щоб бути дійсними. Це досягається за допомогою цифрового підпису відправника, який також є доказом того, що він мав намір витратити кошти. Дійсний підпис (тобто підпис, який збігається з адресою UTXO) має бути представлений у вхідних даних транзакції, які використовують UTXO. Наявність підпису «розблоковує» цей UTXO і вказує на те, що власник цього UTXO має намір витратити його на таку транзакцію.
На наступному зображенні показана реальна транзакція, яка була підтверджена блокчейном 1 раз на момент написання статті:
! [Приклад реальної транзакції з 1 входом і трьома виходами, один з яких є комісією] (https://img.jinse.cn/7133645_watermarknone.png)
Як ви можете бачити, наведена вище транзакція зайняла 1 вхід і створила 2 виходи, один з яких представляв реальний платіж, а інший майже напевно був відправлений назад вкладнику як зміна. Різниця між входом і виходом - це комісія, яка йде майнеру, який видобув блок, який першим підтвердив транзакцію.
Цей «режим UTXO» дуже потужний. Оскільки кожна транзакція має вхід і вихід, і оскільки вихід однієї транзакції стає входом іншої наступної транзакції, ми в кінцевому підсумку отримуємо ланцюжок транзакцій, які можуть відстежувати передачу права власності на Bitcoin. Оскільки пропозиція біткойнів обмежена, і через цей факт, що він має ключову «неінфляційну» характеристику, важливо мати можливість перевірити, скільки біткойнів знаходиться в обігу (або «невитрачено») в будь-який час, і модель UTXO може бути використана в oc.
Це також є джерелом занепокоєння щодо конфіденційності Bitcoin. Кожна транзакція має свою історію. Усі біткоїни, які вам передаються, і куди ви їх надсилаєте, легко відстежити. Вся система явно розроблена для підтримки цієї функції, хоча вона не має наміру відстежувати людей. У цій системі ваша єдина справжня розмінна монета – ніколи не пов'язувати свою справжню особу з публічним ключем, що дуже важко зробити в епоху масового стеження.
Історичні витоки Payjoin
Незначна помилка Сатоші Накамото
Коли Сатоші Накамото опублікував технічний документ Bitcoin у 2008 році, він зрозумів, що занепокоєння щодо конфіденційності пов'язане з вимогою оприлюднювати кожну транзакцію, що суперечить вимозі зберігати її конфіденційність.
Він висунув дві пропозиції, щоб уникнути прив'язки реальних ідентичностей до транзакцій:
Зберігайте анонімність відкритого ключа
Не використовуйте публічні ключі повторно
Це все хороша порада, але для: 1) важко гарантувати, що наша справжня особистість повністю ізольована від наших платежів, якщо тільки ми не будемо вкрай обережні при здійсненні платежів в Інтернеті; Для 2), навіть якщо публічний ключ не використовується повторно, трекеру не важко визначити, які публічні ключі належать тій чи іншій особі, якщо вихідні дані, згенеровані з декількох ключів, витрачаються разом на наступні платежі. Ці пропозиції, навіть якщо вони зібрані разом, є важкими для прийняття та недосконалими рішеннями.
Після цих пропозицій Сатоші Накамото зробив ще одну маленьку помилку, перебільшивши слабкість своєї системи:
«В якості додаткового брандмауера для кожної транзакції повинна використовуватися нова пара ключів, щоб гарантувати, що вони не вказують на спільного власника. Деякі асоціації все ще неминучі, і транзакції з декількома входами неминуче вказуватимуть на те, що всі вхідні дані належать одному власнику. Ризик полягає в тому, що якщо власник відкритого ключа буде розкрито, асоціація може викрити інші транзакції, що належать тому ж власнику. "
Гіпотеза Сатоші і всі приклади, які ми показали досі, передбачають, що всі вхідні дані для транзакції належать одному власнику. Іншими словами, всі «банкноти», витрачені на транзакцію, надходять з вашого гаманця, що є розумним припущенням, але не обов'язково вірним. Ця гіпотеза називається «входження в тотожність підказок власності». Майже справедливо для будь-якої транзакції, яка також є основою моніторингу ончейн-активності.
Coinjoin
На початку 2013 року Грегорі Максвелл зіграв цікаву гру на форумах 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 є одним з найефективніших і широко поширених рішень для конфіденційності Bitcoin, але він також має деякі суттєві недоліки:
Інтерактивність: Coinjoin вимагає інтенсивної взаємодії з боку учасників, які повинні погодитися на рівний номінал виходу, і всі вони повинні надати свої підписи протягом певного періоду часу. Потреба у важкій взаємодії створює тертя для користувачів, що, у свою чергу, перешкоджає її прийняттю більшою кількістю користувачів.
Централізовані координатори: Wasabi та Whirlpool наразі є найпопулярнішими методами Coinjoin. Вони також стягують комісію за координаційну роботу, яку вони виконують, яка не включає комісію за підтвердження блоку, яка надається майнерам для участі в транзакції (що досить високо через велику кількість даних підпису, що використовуються в транзакціях coinjoin). Join Market є прикладом неузгодженого сервісу, але компроміс полягає в тому, що він вимагає більшої взаємодії з користувачем.
Вимагає кількох записів для посилення конфіденційності: Для кращої конфіденційності звичайною рекомендацією є участь у кількох об'єднаннях монет (оскільки одна участь може дати небагато, оскільки анонімний набір занадто малий). Але багаторазові взаємодії вимагають часу, збільшують взаємодію та платять більше комісій.
Coinjoin виглядає не зовсім так, як звичайна транзакція: транзакції Coinjoin мають певну, впізнавану особливість: кілька входів від кількох сторін дають кілька виходів одного номіналу. Це означає, що якщо ваша монета була ідентифікована до того, як ви взяли участь у coinjoin, сторожовий пес також буде в coinjoin, поки ви не візьмете участь. Вони можуть не знати, куди пішли ваші кошти або що ви зробили після приєднання до coin, але вони знають, скільки у вас є і скільки ви брали участь у coinjoin
Очевидно, що через ці обмеження CoinJoin не є найкращим рішенням для конфіденційності Bitcoin, особливо для більш пасивних користувачів, які хочуть схему конфіденційності за замовчуванням.
Через кілька років з'явився кращий сценарій результату, який не вимагав будь-яких додаткових кроків з боку сторін, що беруть участь у транзакції, був простим один на один, не вимагав централізованого координатора або маркетплейсу (і, отже, економив час і гроші) і виглядав так само, як і звичайна транзакція: Payjoin.
Payjoin складається з ряду більш ранніх нововведень, давайте подивимося.
БІП-21
Важливим покращенням користувацького досвіду (UX) для раннього Bitcoin став BIP-21. "BIP" - це абревіатура від "Bitcoin Upgrade Proposal" і містить набір критеріїв, які або вимагають консенсусних змін у протоколі Bitcoin (наприклад, хард або софт-форки), або надають корисну інформацію та методи взаємодії з Bitcoin.
BIP-21 – це стандарт, який визначає використання URI та спрощує процес взаємодії з Біткойном шляхом натискання на посилання або сканування QR-коду для ініціювання платежу. Також визначено невелику кількість параметрів запиту, таких як сума, тег і повідомлення, тому клієнтське програмне забезпечення може легко отримувати та аналізувати їх, забезпечуючи кращу взаємодію з користувачем. Ось приклад URI BIP-21 з кількома параметрами:
Важливо, що цей стандарт є розширюваним, ви можете створювати власні параметри запиту, а також розробляти нові стандарти на його основі. Наприклад, на додаток до вашої біткойн-адреси, ви також можете додати спеціальний параметр під назвою lightning, який надає вам спосіб отримувати гроші в мережі Lightning Network, щоб користувачі могли платити вам у будь-який спосіб:
! [BIP-21 з блискавкою] (https://img.jinse.cn/7133648_watermarknone.png)
Цей потужний і гнучкий BIP виявився дуже корисним при включенні концепцій coinjoin.
Оплата кінцевій точці (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», була реалізована Сатоші Накамото в ранній версії програмного забезпечення Bitcoin. Однак цей підхід створює серйозну дилему конфіденційності, тому від нього відмовилися в наступних версіях програмного забезпечення Bitcoin.
Bustapay
Пізніше того ж місяця Райан Хавер запропонував покращену версію P2EP у списку розсилки розробників Bitcoin і формалізував BIP під назвою «Bustapay». Ця версія спрощує оригінальний протокол P2EP, і заради простоти та усуває частину складнощів, він вважає, що простота необхідна для повсюдного доступу.
Пропозиція Bustapay все ще має деякі серйозні проблеми, які потребують доопрацювання, і протокол не такий повний, як мав би бути. Але це ще один крок у правильному напрямку, і його зосередженість на простоті інтеграції гаманців є критично важливим кроком, особливо для повільної та обережної екосистеми розробників біткойнів. Хоча Bustapay ніколи не просувався, він був останнім попередником сьогоднішньої пропозиції payjoin – ми готові до інтеграції гаманця, позитивних змін у транзакціях у мережі.
Пропозиція Payjoin
Нарешті, в середині 2019 року концепції Bustapay і P2EP були додатково вдосконалені і вдосконалені Ніколя Форьє (засновник BTCPayServer) і Кукксом, щоб сформувати BIP-78 під назвою «A Simple Payjoin Proposal».
З розумінням передумов протоколу, який породив payjoin, сенс і мета резюме на початку цієї пропозиції зрозумілі:
«Цей документ пропонує протокол для двох сторін для переговорів про транзакцію coinjoin під час здійснення платежу».
Пропозиція надає набагато більш сувору інформацію, ніж попередні методи, вказуючи, як побудувати транзакцію cojoin між відправником і одержувачем, розриваючи нитку ідентичності власності вхідних транзакцій, і є простою, гнучкою та недорогою.
Як працює Payjoin
Припустимо, Аліса хоче заплатити Бобу 1,1 BTC, а потім компанія з моніторингу блокчейна бачить транзакцію на кшталт цього:
! [Приклад евристики припущення про спільну власність] (https://img.jinse.cn/7133650_watermarknone.png)
Вони можуть подумати, що Аліса заплатила Бобу 0,5 BTC, а потім перевела решту грошей собі в якості здачі, і все:
! [Приклад, який припускає, що була використана евристика власності загального входу] (https://img.jinse.cn/7133651_watermarknone.png)
І в більшості випадків немає нічого поганого в тому, щоб так думати! Адже здача, як правило, йде більшими номіналами, а 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.jinse.cn/7133653_watermarknone.png)
2. Відправник створює сформований, трансляційний PSBT, який надсилається на кінцеву точку одержувача, використовуючи лише власні вхідні дані, яких повністю достатньо для оплати. Цей PSBT називається «початковим PSBT».
3. Одержувач змінює PSBT, щоб включити власні вхідні дані, підписує власні вхідні дані та надсилає змінений PSBT назад відправнику. Одержувач не змінює жодних входів або виходів відправника. Ця PSBT називається "Payjoin Offer".
4. Відправник підтверджує пропозицію, потім повторно підписує свої дані, щоб завершити всю транзакцію і, нарешті, транслювати її в мережу.
Незалежно від того, де була допущена помилка в процесі, наприклад, одержувач не має UTXO, який можна використовувати для створення пропозиції PayJoin, то ЦА потрібно лише транслювати початковий PSBT, що є звичайною транзакцією. Незважаючи на те, що всі вхідні дані для цієї транзакції надходять від одного власника, і лише достатня кількість людей використовує payjoin, ви не можете зробити висновок, що обидві сторони не payjoin, і спостерігачеві доведеться припустити, що всі платять, а потім придумати інший спосіб відстеження платежу.
Численні переваги Payjoin
Розберіть більше підказок для спостереження
Припущення про ідентичність власності не єдине, яке може бути порушено payjoin, що впливає на конфіденційність. BIP-78 вказує на дві інші підказки, які можуть бути використані для ідентифікації власника:
Ідентифікація зміни за відкритим ключем скрипту:
У біткойнах відкритий ключ скрипта - це "скрипт блокування", який визначає умови, за яких сума біткойнів може бути витрачена. Він називається «відкритим ключем скрипта», оскільки умова блокування вимагає дійсного підпису, який збігається з відкритим ключем (адресою), щоб розблокувати його. Іншими словами, розблокувати його може лише особа, яка керує закритим ключем пов'язаного відкритого ключа цього UTXO.
Існує кілька типів відкритих ключів скриптів, таких як: P2PKH, P2WPKH, P2SH, P2TR. Загалом, гаманці використовують один і той самий відкритий ключ скрипта для всіх транзакцій, тому вихідні дані змін (кошти, надіслані відправнику назад відправником собі на додаток до платежів та комісій), швидше за все, використовуватимуть той самий тип відкритого ключа сценарію, що й вхідні дані відправника, а вихідні дані, надіслані одержувачу, швидше за все, використовуватимуть інший тип. Це означає, що UTXO, які використовують той самий тип сценарію в одній транзакції, можуть бути ідентифіковані як такі, що потенційно належать відправнику, тобто припускаючи, що вихідні дані, надіслані одержувачу, будуть іншого типу.
BIP-78 визначає метод, який дозволяє одержувачу використовувати тільки той же тип відкритого ключа скрипта, що і відправник, який розриває вищевказаний потік, який може розкрити вихід платежу і вихід зміни.
Ідентифікація здачі та оплата за сумою платежу (ціле число):
Зазвичай, будь ласка, промежина, платіть друг завжди буде вибирати ціле число, тому що це буде набагато природніше. Якби Боб стягував плату з Аліси (а вони не стягували біткойн за фіатною ціною, яка була б «ближчою до цілого числа»), то він, швидше за все, стягував би набір e, наприклад 0,0001, замість нецілого числа, наприклад 0,00010231. Якщо один з виходів транзакції є цілим числом, то, швидше за все, це платіжний вихід, а нецілочисельний вихід є виведенням змін (принаймні на даний момент).
Payjoin також описує спосіб, за допомогою якого одержувач може розірвати цей потік, додавши додатковий цілочисельний вихід при побудові пропозиції Payjoin.
Асиметричні переваги досягаються за рахунок об'єднання більш широкої групи
Як згадувалося раніше, одним з головних недоліків coinjoin з точки зору конфіденційності є те, що: 1) транзакції coinjoin легко відрізнити від звичайних транзакцій; 2) Дуже мало людей будуть займатися coinjoin спеціально, і це не стосується звичайної торгівлі. Це створює проблему однорідності біткойна, тому що, швидше за все, деякі люди подумають, що викарбувані гроші забруднені, тому що саме хтось має безглузду ідею про те, що «прагнення до конфіденційності дорівнює злому наміру». Звичайно, якщо більшість транзакцій або навіть лише певний відсоток транзакцій є приватними, то транзакції, спрямовані на пошук конфіденційності, непомітні.
Payjoin виглядає як будь-яка інша транзакція, тому вона нічим не примітна. Сторонні спостерігачі навіть не мають причин розглядати таку транзакцію, оскільки вона не демонструє наміру заплутати платіж і змінити результати.
Оскільки це виглядає як щось інше, навіть незначні переваги впровадження payjoin означають, що конфіденційність кожного буде важче порушити, оскільки відстежувані потенційні клієнти швидко стають ненадійними. Адам Гібсон (засновник JoinMarket та експерт з конфіденційності Bitcoin) дуже добре підсумовує:
«Навіть якщо ви дуже обережні, ці транзакції PayJoin нічим не відрізняються від звичайних платежів [...] Що ж, ось у чому крута річ: припустимо, що невелике впровадження цієї технології також буде спостерігатися. Скажімо, 5% транзакцій використовують цей метод. Справа в тому, що ніхто точно не знає, які 5% є транзакціями PayJoin. Це велике досягнення [...] , тому що це означає, що всі платежі, включаючи ті, які не використовують Payjoin, отримують переваги конфіденційності!"
Оздоблення UTXO
Очевидно, що і PayJoin, і його піонери прагнуть вирішити проблеми конфіденційності. Але у використанні payjoin є і відмінна сторона, і BIP-78 дає зрозуміти: UTXO прибирання.
Сатоші Накамото запропонував використовувати адресу чайових для кожної транзакції отримання, що призвело до того, що гаманець користувача мав багато UTXO для керування. Коли ці UTXO використовуються як вхідні дані для генерації нової транзакції (за умови, що це не транзакція coinjoin або payjo), така транзакція коштує великих комісій. Оскільки комісії стягуються на основі обсягу транзакції (кількості байтів) (що відповідає блоковому простору, який є дефіцитним ресурсом), більша кількість вхідних даних означає більші транзакції та більшу комісію.
Важливо зазначити, що використання payjoin для сортування UTXO не обов'язково заощаджує комісію, оскільки кожен UTXO, який з'являється в мережі, все одно повинен буде сплачувати комісію. Однак він розподіляє ці комісії на тривалий період часу та надає можливість пакетувати UTXO під час оплати. Пакетна обробка робить організацію UTXO дешевшою (ніж якби вам довелося ініціювати транзакцію спеціально з метою організації). Це також полегшує зв'язування UTXO та займає менше місця на жорсткому диску. Крім того, гаманці можуть реалізувати спосіб автоматизації та згладжування організації UTXO, дозволяючи одержувачам заздалегідь вказувати, які UTXO вони хочуть організувати за низькими комісіями.
Lightning Network та PayJoin: матч, створений у природі
Використовуйте Payjoin, щоб відкрити канал Lightning
Lightning Network (LN) — це рішення рівня 2, побудоване на Bitcoin, яке виводить транзакції за межі ланцюга для миттєвих розрахунків із надзвичайно низькою комісією, таким чином різко збільшуючи пропускну здатність транзакцій, конфіденційність і дозволяючи Bitcoin вводити нові варіанти використання (наприклад, «мікроплатежі»). Він використовує мережу платіжних каналів між вузлами для маршрутизації платежів, пересилаючи кошти звідти, звідки вони походять, до місця призначення. Ці канали вимагають, щоб кожен оператор вузла заблокував певну «ліквідність» (біткойни) зі своїми контрагентами каналу, яка потім може перетікати між вузлом і його контрагентами каналу. Кількість біткоїнів, які ви можете витратити в каналі, обмежена тим, скільки ліквідності є на вашій стороні каналу.
Коли справа доходить до обслуговування вузла Lightning, більша частина складності пов'язана з відкриттям цих каналів і управлінням ліквідністю кожного каналу. Залучення нових користувачів є однією з найбільших проблем, оскільки потрібно зробити так багато кроків. Припустимо, Аліса хоче відкрити канал з Бобом, і вона встановила новий вузол Lightning, але вона ще не отримала фінансування. Потім їй потрібно зробити наступне:
Надішліть ончейн-транзакцію, щоб поповнити свій новостворений гаманець Lightning Wallet принаймні достатньою кількістю коштів для відкриття каналу, і дочекайтеся підтвердження транзакції (принаймні 10 хвилин)
Використовуйте її програмне забезпечення Lightning Wallet, щоб домовитися про транзакцію з Бобом, щоб відкрити канал і дочекатися його підтвердження
Як мінімум, Алісі доводиться платити дві комісії за обробку та чекати близько 10 хвилин на кожну транзакцію, що виснажливо.
! [Процес відкриття каналу Lightning] (https://img.jinse.cn/7133654_watermarknone.png)
Payjoin спрощує цей процес і допомагає Алісі заощадити гроші: Аліса може поповнити гаманець Lightning Wallet і відкрити канал за одну транзакцію.
У цьому сценарії Аліса заздалегідь налаштовує кінцеву точку отримання payjoin з деталями каналу, який вона хоче відкрити: скільки біткойнів заблокувати і якого опонента відкрити канал. Потім, використовуючи гаманець, який підтримує payjoin, хтось (включаючи Алісу) може відправити початковий PSBT на кінцеву точку, домовитися про транзакцію payjoin, і кінцева точка зробить необхідні виклики API, щоб відкрити канал з вузлом Боба.
Іншими словами, відправник (у цьому випадку Аліса) зв'язується з кінцевою точкою Аліси, щоб отримати payjoin, створює транзакцію та надсилає кошти безпосередньо на вихід мультипідпису 2 з 2 Боба та Аліси, таким чином створюючи канал блискавки між двома вузлами. Це перетворює весь процес в транзакцію:
! [Канал блискавки з Payjoin] (https://img.jinse.cn/7133655_watermarknone.png)
Цікаво знати, що як відкриття каналу Lightning, так і payjoin мають вимоги до живого (хоча, принаймні, payjoin не буде потрібно протягом тривалого часу), а це означає, що всі учасники повинні бути онлайн на момент транзакції. Це дуже обмежує порівняно з ончейн-транзакціями Bitcoin (які вимагають, щоб платник був онлайн лише на момент оплати). Однак це також дозволяє двом наборам протоколів ідеально поєднуватися один з одним.
Наприклад, Lightning Network — це чудовий спосіб покращити конфіденційність, зберігаючи платежі поза мережею, і це може значно покращити здатність Bitcoin використовуватися як засіб обміну (тобто його фактично можна використовувати для покупки предметів повсякденного вжитку) без шкоди для його збереження вартості. Однак необхідність відкриття каналу в ланцюжку також означає, що кошти, які ви використовуєте для відкриття каналу, а також люди, які відкривають канал разом з вами, залишать слід у ланцюжку. З причин, які ми вже обговорювали, payjoin може заплутати та знищити багато підказок шпигунів.
Це також спрощує роботу, оскільки користувачам потрібно буде ініціювати лише одну транзакцію замість двох, стає швидшим, оскільки їм потрібно чекати лише на підтвердження однієї транзакції, і дешевшим, оскільки їм потрібно сплатити лише одну комісію. По суті, такий підхід дозволяє відкривати відразу кілька каналів. Ви можете скласти список вузлів, на яких ви хочете відкрити канал, налаштувати його в кінцеву точку отримання BIP-21 payjoin, а потім увімкнути все це відразу і автоматично при отриманні платежів, і вам потрібно буде дочекатися лише одного підтвердження та однієї комісії за оплату. Абсолютно!
Вже є проект, що реалізує цю ідею під назвою "Nolooking", який дозволяє перерахувати набір публічних ключів, а потім відкрити кілька каналів Lightning Channel одночасно *пакетами)! Це дозволяє Алісі відкривати канал не тільки з Бобом, але і з Бобом, Керол і Діною, за допомогою всього однієї ончейн транзакції! Цікаво подумати про те, що в майбутньому в гаманцях Lightning за замовчуванням буде ввімкнено payjoin, а де-факто користувацький досвід полягає в тому, що ви просто вибираєте свого торгового партнера, ініціюєте одну транзакцію Bitcoin, і все готово! Як це дивно?
Нескладно уявити, що це спростить впровадження блискавичних каналів самостійного зберігання. Було б цікаво, якби програмне забезпечення Lightning Wallet могло мати кнопку «швидкого запуску», де користувачі просто вводять, скільки біткойнів вони хочуть заблокувати (тобто скільки ліквідності вони хочуть), встановлювати значення за замовчуванням для відкриття невеликої кількості каналів розумного розміру та трохи жертвувати маршрутизацією та комісіями. Для досвідчених користувачів просто надайте кнопку «Я знаю, що роблю».
Слабкі сторони
Будь-який протокол має слабкі місця, і PayJoin не є винятком.
Основна проблема полягає у вимозі жвавості (нетворкінгу). У поточній реалізації веб-сервер одержувача payjoin повинен бути фінансово застрахований при побудові транзакції, оскільки відправник і одержувач домовляються про остаточну транзакцію (яка, звичайно, запрограмована). Це може обмежити впровадження мерчант-серверів, а також вузлів Lightning, які є єдиними людьми, які мають стимул залишатися в мережі. З точки зору користувача, було б краще, якби транзакція могла бути відправлена в будь-який час, незалежно від того, чи був сервер одержувача онлайн чи ні.
Інший, менш ймовірний, але більш небезпечний недолік полягає в тому, що якщо сервер payjoin (тобто сервер одержувача) знаходиться на незахищеному сервері, вихідні дані одержувача можуть бути підроблені під час роботи (перед передачею назад відправнику), що призведе до крадіжки коштів, що належать одержувачу.
Однак, як ми скажемо далі, були запропоновані рішення для вирішення обох цих проблем.
Нарешті, ще одна слабкість протоколу PayJoin полягає в тому, що він стикається з бар'єром для прийняття, оскільки гаманцям доводиться докладати зусиль для його інтеграції. Особлива проблема полягає в тому, що ідеальним інтерфейсом користувача за замовчуванням має бути payjoin. Як гаманець відправника, так і гаманець одержувача спробують отримати payjoin безпосередньо, без необхідності відкривати їх користувачеві в налаштуваннях конфіденційності. Найкраща конфіденційність – це впровадити конфіденційність за замовчуванням, тому що, якщо ви попросите користувачів вжити активних заходів, вони можуть занепасти духом. Отже, для того, щоб payjoin був прийнятий звичайним користувачем, він повинен мати плавний досвід, який йому не потрібно намагатися зрозуміти. У гаманці він повинен бути включений за замовчуванням. Майте на увазі, що протокол вже має вбудовану реакцію на збої payjoin: він повертається до звичайної транзакції без ручного втручання користувача.
Не потрібна плата на стороні сервера
Ден Гулд (Dan Gould) представив проект BIP для версії 2 payjoins, що дозволяє виконувати payjoins як в асинхронному, так і в безсерверному сценаріях. Ця безсерверна плата вирішить проблему, пов'язану з необхідністю присутності одержувача онлайн під час отримання платежу, а також пов'язані з цим проблеми безпеки на стороні сервера. Оскільки постійно ввімкнений сервер-одержувач payjoin може бути найбільшою перешкодою для прийняття користувачами payjoin, впровадження цього BIP може принести значні переваги для впровадження payjoin, а також для пасивної конфіденційності Bitcoin.
Стан впровадження Payjoin
Станом на кінець 2023 року впровадження PayJoin все ще відносно низьке, але воно продовжує зростати з моменту свого створення у 2018 році. Оскільки payjoin в даний час доступний і не вимагає будь-яких змін консенсусу Bitcoin, єдиною перешкодою є написання гаманця, який його підтримує; А інструменти, які допомагають розробникам, вдосконалюються з кожним днем. Payjoin Dev Kit (PDK) — це нова реалізація payjoin із модулями, які гаманці можуть використовувати для інтеграції payjoin. Він навіть складається з інструменту payjoin-cli, за допомогою якого ви можете використовувати командний рядок для створення payjoin. Ця бібліотека написана на Rust, але прив'язки, які дозволяють іншим мовам використовувати її, знаходяться в розробці.
Підтримка гаманця
BTCPayServer і JoinMarket вже підтримують надсилання та отримання payjoin, хоча і не за замовчуванням. BlueWallet, Sparrow, Wasabi та BitMask підтримують надсилання. Кілька інших гаманців підтримують його через плагін, включаючи Bitcoin Core. Існують також активні піарники, які намагаються інтегрувати payjoin в Mutiny Wallet. Поточний стан усиновлення наведено тут.
Payjoin і майбутнє Bitcoin
Адам Гібсон вже говорив, що навіть якщо лише 5% ончейн-транзакцій побудовані за допомогою payjoin, це може мати великий вплив на конфіденційність Bitcoin. Нам потрібно лише перетнути поріг, якого достатньо, щоб аналітична фірма з упевненістю припустила, що вона може правильно інтерпретувати транзакцію. Як тільки їхні методи шпигунства за нами будуть зламані, нерозумні, довільні та зловмисні обмеження, накладені тими, хто не розуміє переваг конфіденційності Біткойн і не має наміру захищати наші права, стануть неактуальними.
І, як ми бачили, завдяки численним можливостям, які надасть PayJoin, це не просто рішення для конфіденційності, це також масштабований і спільний протокол транзакцій, який дозволяє використовувати цікаві цілі, такі як економія комісій, кілька блискавичних каналів для однієї транзакції тощо. Переваги, які він може принести Біткойн, безмежні, і їх можна реалізувати зараз, не змінюючи сам Біткойн.
Так чого ж ми чекаємо?
Ні
Якщо ви хочете підтримати або зробити свій внесок у PayJoin, приєднуйтесь до Discord, зробіть нам пожертву або дізнайтеся про payjoin.org.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Payjoin з кращими біткойнами
Автор: Брендон Лукас, Джерело: BTC Study
Payjoin - це протокол, який вирішує багато проблем одним пострілом, використовуючи простий, розумний трюк для побудови транзакцій Bitcoin. Він розроблений, щоб вирішити найбільшу проблему конфіденційності Bitcoin, але він також може допомогти вирішити проблеми масштабування, а отже, допомогти людям заощадити на комісіях. Він особливо сумісний з вузлами Lightning Network, оскільки його поточна конструкція має вимогу до жвавості для одержувача транзакції, що означає, що одержувач повинен бути онлайн (так само, як вузол Lightning) під час отримання платежу. У майбутньому навіть ця вимога буде скасована, щоб його можна було використовувати в автономному режимі. Його легко інтегрувати в програмне забезпечення гаманця, і він може відкривати багато блискавичних каналів одночасно під час здійснення платежів, і він пасивний, тому ви можете насолоджуватися перевагами, навіть не підозрюючи про це. Переваги конфіденційності Payjoin багаторівневі, тому навіть якщо ним користується лише невеликий відсоток людей, кожен може отримати переваги конфіденційності. І, мабуть, найкраще те, що PayJoin не вимагає хардфорку або софт-форку. Він може і використовувався з Біткойн, і фактично був доступний з першої версії програмного забезпечення Біткойн.
Payjoin є похідним від Coinjoin. Coinjoin старіший і також вимагає більше онлайн-взаємодії, а це означає, що користувачі повинні активно взаємодіяти з ним, щоб використовувати його, що обов'язково знизить зручність використання та перешкоджатиме прийняттю. Однак, незважаючи на це, прийняття CoinJoin на сьогоднішній день було набагато вищим, ніж у PayJoin, хоча переваги та простота використання PayJoin більш очевидні. Для розробників складний, незрозумілий напрямок не дозволяє прийняти його програмним забезпеченням гаманця.
Payjoin існує вже багато років і, враховуючи:
Чому payjoin повільно впроваджується у великих масштабах?
Зокрема, чому протокол Coinjoin, який вимагає більшої взаємодії, складніший у використанні та дорожчий, але натомість має більше поширення?
У цій статті ми розглянемо поточні атаки на конфіденційність Bitcoin, історію PayJoin з точки зору конфіденційності, як працює PayJoin і чому він може надати стільки переваг, не змінюючи Bitcoin, і, нарешті, поточне прийняття. Якщо payjoin може значно покращити конфіденційність, масштабованість і допомогти заощадити на комісіях, то невеликі зусилля гаманця для його інтеграції будуть того варті.
Чому конфіденційність важлива для біткойнів
Перш ніж обговорювати важливість payjoin, ми повинні зрозуміти важливість конфіденційності. Якщо вам більше не потрібно, щоб я вас переконував, то ви можете перейти відразу до наступного розділу, щоб дізнатися про історію та про те, як працює Pyajon.
У західних демократіях сама важливість приватності невимовна, оскільки її переваги все ще здаються невидимими для людей. Важко переконливо пояснити, чому конфіденційність важлива (особливо в умовах вищих витрат або більших незручностей), якщо вони ніколи не відчувають поганих наслідків того, що погані люди мають занадто багато інформації про них, або тому, що це вимагає від людей думати про довгострокові наслідки цих вторгнень.
Звичайно, конфіденційність здається чимось, що хвилює все більше і більше людей (в теорії), але вони, як правило, рідко підходять до неї активно, з дуже низькими тригерними бар'єрами і без компромісів щодо зручності. Тому технології, які хочуть захистити приватність людей, повинні бути розроблені таким чином, щоб бути максимально зручними та зручними.
Однорідність
Конфіденційність - не єдина проблема, яку payjoin може допомогти вирішити, але він був створений, щоб вирішити її. Люди вже давно скаржаться на притаманну біткойну відсутність конфіденційності, і біткойн-спільнота дуже серйозно ставиться до цієї проблеми. Біткойн призначений для полегшення прямих транзакцій один на один і стійкий до цензури. Однак, оскільки це дозволяє відстежувати майбутні платежі, це може призвести до дискримінації, коли певна сума грошей буде пов'язана з ідентичністю. Це руйнує однорідність – ступінь, до якого одні монети однієї і тієї ж валюти не відрізняються від інших в тій же кількості – і однорідність є основним атрибутом хороших грошей.
Якщо покупців можна буде відстежити, то не тільки монети, які зараз зберігаються у нелегальних осіб, будуть відкинуті, але й гаманці, які використовувалися в незаконних цілях, також можуть бути позначені, а потім відхилені торговцями, незалежно від того, чи придбав їх поточний власник цілком законним шляхом. Уявіть, що ви не можете використати гроші, які у вас є, щоб купити молоко, тому що воно було використано кимось для покупки наркотиків, а вони кажуть: «Ваші гроші не чисті», чи справедливо це по відношенню до вас? Чи повинні ви бути покарані за чужий гріх? Що б ви зробили з монетами? Вам здаватиметься, що гроші нічого не варті, тому що їх зберігання лише зашкодить вашій купівельній спроможності. І немає ніякого сенсу, щоб одна частина монет ( «чисті гроші») коштувала б дорожче іншої. Один долар повинен дорівнювати іншому, яким би він не був, інакше здатність такої монети передавати вартість буде порушена.
Кримінальна плутанина
Часто лунають приниження біткойнів і конфіденційності, які говорять, що конфіденційність потрібна тільки злочинцям. Це схоже на «якщо ти не робиш щось погане, бери і тобі нема чого приховувати». Це легко спростувати:
На додаток до цієї спрощеної, самоочевидної обурливої заяви, насправді правопорушники, на відміну від переважної більшості законослухняних громадян, готові погодитися на високу ціну за недоторканність приватного життя, так що заходи, які ставлять під загрозу базову конфіденційність, набагато шкідливіші для звичайних людей, ніж для злочинців. Навіть якщо уряд не зробить погану роботу, використовуючи заходи з обмеженням конфіденційності для затримання злочинців, а замість цього «вибирає» і вибірково шпигує за громадянами, результат буде той самий. Якщо громадянин скаже щось, що не подобається людям при владі (а те, що не подобається людям при владі, може бути однаковим щодня), то ЦА буде вибірково заарештовано і завдано шкоди.
Нарешті, прагнення до приватності – це не просто страх перед тим, що уряд перевищить свої повноваження. Він також має практичні питання, безпеку та честь. Якщо хтось може дізнатися, скільки у вас грошей, де ви живете, наскільки важко вкрасти ваші речі? Подумайте, скільки місць в Інтернеті вам потрібно ввести свою адресу, платіжні реквізити, фотографії і так далі. Чи довіряєте ви всім, хто керує цими сайтами, у безпеці вашої особистої інформації? Довіряти їм не варто, тому що навіть найкращі системи можуть вийти з ладу, і злочинці будуть готові платити великі суми грошей хакерам, щоб підірвати системи та вкрасти цю цінну інформацію.
Конфіденційність та демократія
У будь-якій тоталітарній державі обов'язковою умовою контролю над громадянами є знання мови громадян, інформаційних каналів, фінансової діяльності. Без цього розуміння неможливо знати, що атакувати, а що зупинити, тому що немає можливості маніпулювати наративом і ще більше посилювати контроль. Якщо уряд не має надійного доступу до цієї інформації, він не може націлюватися на громадянина стільки, скільки хоче. У тоталітарних суспільствах минулого, таких як Радянський Союз і нацистська Німеччина, вони корумпували приватне життя людей і недовірливі стосунки в їхніх сім'ях, промиваючи їм мізки, змушуючи їх повідомляти про заперечення, висловлені членами їхніх сімей у приватних розмовах. Коли з грошима трапляються такі ж заходи, що порушують конфіденційність, це ще страшніше, ніж мова. Припинення фінансування є дуже ефективним засобом боротьби з політичним інакомисленням.
Конфіденційність біткойнів вразлива
Саме в ім'я боротьби зі злочинністю (теракт ХАМАС) спекулюють новими регуляторними заходами, щоб охарактеризувати методи захисту конфіденційності в біткойнов як незаконні.
10 жовтня 2023 року Wall Street Journal опублікував статтю, в якій повідомлялося, що ХАМАС отримав $130 млн фінансування через криптовалюту. Через тиждень сенатор Елізабет Уоррен написала відкритого листа президенту Байдену, в якому закликала його до 31 жовтня зайнятися питанням про те, як його виконавча влада реагує на «терористичне використання криптовалюти», посилаючись на Wall Street Journal як на доказ нагальної необхідності такого регулювання. Лист підписали 29 зі 100 членів Сенату, а також 76 членів Палати представників. Цікаво, що 19 жовтня, через два дні після відправлення листа, Мережа боротьби з фінансовими злочинами (FCE) опублікувала пропозицію врегулювати обфускацію криптовалют на предмет ризиків відмивання грошей. У пропозиції перераховані методи, що використовуються для заплутування потоку транзакцій:
Це визначення включає як coinjoin, так і payjoin, хоча опис «використання алгоритмічного коду» досить широкий, щоб охопити довільні транзакції, і тому допускає довільну цензуру.
Але стаття Wall Street Journal, яка надавала погляд на відкритий лист і намагалася захистити таке регулювання, дуже неправильно витлумачила дані — фактична сума, яка дійсно мала відношення до ХАМАСу, становила лише 450 000 доларів. Криптовалюти ніколи не були основним джерелом фінансування ХАМАСу. Сам ХАМАС дав зрозуміти, що не хоче отримувати кошти через біткоїн, який можна відстежити.
За іронією долі, регуляторні заходи, які зараз пропонуються, нібито для боротьби з терористичними угрупованнями, мають найменший вплив на терористичні угруповання, і найбільше для звичайних людей, які хочуть використовувати біткойн та інші криптовалюти.
Немає сумнівів, що битва за права на конфіденційність біткойнов вже ведеться в Сполучених Штатах, і передбачається, що вона буде проходити під виглядом протидії іноземним міркуванням національної безпеки. Що ще важливіше, відтепер розуміти технології, що зберігають конфіденційність у біткойнах, і почати використовувати їх для боротьби зі спробами послабити їх.
1. Форма транзакції Bitcoin
Для того, щоб зрозуміти, що робить payjoin і як це працює, необхідно зрозуміти, як виглядають транзакції Bitcoin. Кожен біткойн пов'язаний з деякими входами та виходами. Вихідні дані визначають, на який публічний ключ або «адресу» надсилаються ці біткоїни. Вхідні дані визначають "джерело" коштів транзакції, тобто попередній вихід, який використовується для створення транзакції (і її новий вихід). Хороша аналогія полягає в тому, що ми використовуємо різні номінали готівки для оплати. Припустимо, ви хочете заплатити 25 доларів за вечерю в ресторані і 5 доларів за офіціанта, в цілому 30 доларів (це вихід вашої транзакції, дві різні «порції» грошей двом різним людям – ресторану і офіціанту).
Отже, як ви платите? Припустимо, у вас в руках стільки нотаток (тобто ваші дані):
Так, при складанні цієї угоди ви можете використовувати 1 купюру номіналом 20 доларів і 2 банкноти номіналом 5 доларів, одна з яких коштує 5 доларів, а інша віддається тільки офіціанту:
! [Оплата в ресторані] (https://img.jinse.cn/7133642_watermarknone.png)
Зверніть увагу на важливий аспект, який нам недоречно проводити аналогію з готівкою: $20 і $5 тут зіллються в одне ціле. Це більше схоже на те, що ви переплавляєте два шматки золота в більший, щоб ви могли заплатити необхідну суму, а не віддавати кілька золотих самородків. Біткойн дозволяє розділяти та об'єднувати вхідні дані, щоб отримати бажаний результат.
Ви також можете використовувати 2 банкноти номіналом 10 доларів і 2 банкноти номіналом 5 доларів, наприклад:
! [Оплата в ресторані] (https://img.jinse.cn/7133643_watermarknone.png)
Або навіть використовувати 6 аркушів за 5 доларів:
! [Оплата в ресторані] (https://img.jinse.cn/7133644_watermarknone.png)
Поки ми не витратимо наші гроші, ці окремі "нотатки" Bitcoin називаються "Невитрачені виходи транзакцій (UTXO)". Назва звучить дивно, але якщо ви витратите час на те, щоб подумати про це, ви зрозумієте, що це досить точно – це «результати» (виходи) деяких угод, і вони ще не були витрачені на іншу транзакцію. Вихідні дані транзакції, які ще не були витрачені, - це вихідні дані, які ви можете витратити. Отже, насправді, UTXO – це як паперові гроші у вашому гаманці. Після того, як вони були витрачені, вони стають введенням транзакції, а потім виходом іншої транзакції (готівка в чужому гаманці), і ви більше не можете їх витратити, однак запис витраченої вами нотатки залишається в блокчейні назавжди.
На відміну від готівки, біткойн-транзакції вимагають дозволу відправника, щоб бути дійсними. Це досягається за допомогою цифрового підпису відправника, який також є доказом того, що він мав намір витратити кошти. Дійсний підпис (тобто підпис, який збігається з адресою UTXO) має бути представлений у вхідних даних транзакції, які використовують UTXO. Наявність підпису «розблоковує» цей UTXO і вказує на те, що власник цього UTXO має намір витратити його на таку транзакцію.
На наступному зображенні показана реальна транзакція, яка була підтверджена блокчейном 1 раз на момент написання статті:
! [Приклад реальної транзакції з 1 входом і трьома виходами, один з яких є комісією] (https://img.jinse.cn/7133645_watermarknone.png)
Як ви можете бачити, наведена вище транзакція зайняла 1 вхід і створила 2 виходи, один з яких представляв реальний платіж, а інший майже напевно був відправлений назад вкладнику як зміна. Різниця між входом і виходом - це комісія, яка йде майнеру, який видобув блок, який першим підтвердив транзакцію.
Цей «режим UTXO» дуже потужний. Оскільки кожна транзакція має вхід і вихід, і оскільки вихід однієї транзакції стає входом іншої наступної транзакції, ми в кінцевому підсумку отримуємо ланцюжок транзакцій, які можуть відстежувати передачу права власності на Bitcoin. Оскільки пропозиція біткойнів обмежена, і через цей факт, що він має ключову «неінфляційну» характеристику, важливо мати можливість перевірити, скільки біткойнів знаходиться в обігу (або «невитрачено») в будь-який час, і модель UTXO може бути використана в oc.
Це також є джерелом занепокоєння щодо конфіденційності Bitcoin. Кожна транзакція має свою історію. Усі біткоїни, які вам передаються, і куди ви їх надсилаєте, легко відстежити. Вся система явно розроблена для підтримки цієї функції, хоча вона не має наміру відстежувати людей. У цій системі ваша єдина справжня розмінна монета – ніколи не пов'язувати свою справжню особу з публічним ключем, що дуже важко зробити в епоху масового стеження.
Історичні витоки Payjoin
Незначна помилка Сатоші Накамото
Коли Сатоші Накамото опублікував технічний документ Bitcoin у 2008 році, він зрозумів, що занепокоєння щодо конфіденційності пов'язане з вимогою оприлюднювати кожну транзакцію, що суперечить вимозі зберігати її конфіденційність.
Він висунув дві пропозиції, щоб уникнути прив'язки реальних ідентичностей до транзакцій:
Це все хороша порада, але для: 1) важко гарантувати, що наша справжня особистість повністю ізольована від наших платежів, якщо тільки ми не будемо вкрай обережні при здійсненні платежів в Інтернеті; Для 2), навіть якщо публічний ключ не використовується повторно, трекеру не важко визначити, які публічні ключі належать тій чи іншій особі, якщо вихідні дані, згенеровані з декількох ключів, витрачаються разом на наступні платежі. Ці пропозиції, навіть якщо вони зібрані разом, є важкими для прийняття та недосконалими рішеннями.
Після цих пропозицій Сатоші Накамото зробив ще одну маленьку помилку, перебільшивши слабкість своєї системи:
Гіпотеза Сатоші і всі приклади, які ми показали досі, передбачають, що всі вхідні дані для транзакції належать одному власнику. Іншими словами, всі «банкноти», витрачені на транзакцію, надходять з вашого гаманця, що є розумним припущенням, але не обов'язково вірним. Ця гіпотеза називається «входження в тотожність підказок власності». Майже справедливо для будь-якої транзакції, яка також є основою моніторингу ончейн-активності.
Coinjoin
На початку 2013 року Грегорі Максвелл зіграв цікаву гру на форумах 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.jinse.cn/7133646_watermarknone.png)
Коли є лише 3 учасники, перевага конфіденційності не обов'язково є значною, особливо тому, що інші учасники можуть деанонімізувати себе (співвіднести свою справжню особу) у наступних транзакціях, але це можна покращити кількома раундами coinjoin або використанням більшого набору анонімності.
Підводячи підсумок, можна сказати, що coinjoin - це транзакція, створена з використанням входів і виходів від декількох сторін, так що іншим важко визначити, який вихід кому належить.
Для більш детального ознайомлення з тим, як створити транзакцію Coinjoin і які інструменти доступні, ознайомтеся з цим посібником.
Coinjoin є одним з найефективніших і широко поширених рішень для конфіденційності Bitcoin, але він також має деякі суттєві недоліки:
Очевидно, що через ці обмеження CoinJoin не є найкращим рішенням для конфіденційності Bitcoin, особливо для більш пасивних користувачів, які хочуть схему конфіденційності за замовчуванням.
Через кілька років з'явився кращий сценарій результату, який не вимагав будь-яких додаткових кроків з боку сторін, що беруть участь у транзакції, був простим один на один, не вимагав централізованого координатора або маркетплейсу (і, отже, економив час і гроші) і виглядав так само, як і звичайна транзакція: Payjoin.
Payjoin складається з ряду більш ранніх нововведень, давайте подивимося.
БІП-21
Важливим покращенням користувацького досвіду (UX) для раннього Bitcoin став BIP-21. "BIP" - це абревіатура від "Bitcoin Upgrade Proposal" і містить набір критеріїв, які або вимагають консенсусних змін у протоколі Bitcoin (наприклад, хард або софт-форки), або надають корисну інформацію та методи взаємодії з Bitcoin.
BIP-21 – це стандарт, який визначає використання URI та спрощує процес взаємодії з Біткойном шляхом натискання на посилання або сканування QR-коду для ініціювання платежу. Також визначено невелику кількість параметрів запиту, таких як сума, тег і повідомлення, тому клієнтське програмне забезпечення може легко отримувати та аналізувати їх, забезпечуючи кращу взаємодію з користувачем. Ось приклад URI BIP-21 з кількома параметрами:
! [BIP-21 Простий] (https://img.jinse.cn/7133647_watermarknone.png)
Важливо, що цей стандарт є розширюваним, ви можете створювати власні параметри запиту, а також розробляти нові стандарти на його основі. Наприклад, на додаток до вашої біткойн-адреси, ви також можете додати спеціальний параметр під назвою lightning, який надає вам спосіб отримувати гроші в мережі Lightning Network, щоб користувачі могли платити вам у будь-який спосіб:
! [BIP-21 з блискавкою] (https://img.jinse.cn/7133648_watermarknone.png)
Цей потужний і гнучкий BIP виявився дуже корисним при включенні концепцій coinjoin.
Оплата кінцевій точці (P2EP)
Найраніший документ, який я знайшов, де згадується концепція payjoin, був від Blocksteam, опублікований у серпні 2018 року, з посиланням на семінар, який породив цю концепцію. Остаточну ідею в статті названо «Pay-to-Endpoint», оскільки вона поєднує в собі концепцію coinjoin з BIP-21, дозволяючи відправнику та одержувачу транзакції працювати разом, щоб забезпечити вхід у транзакцію через кінцеву точку мережі, сумісну з BIP-21, надану одержувачем. Наступна діаграма є прикладом того, як виглядає кінцева точка, надана приймачем:
! [Приклад P2EP] (https://img.jinse.cn/7133649_watermarknone.png)
На особливу увагу заслуговує параметр p2ep, який є кінцевою точкою мережі (в даному випадку адресою .onion, але це також може бути проста адреса http:// або будь-яка інша сумісна кінцева точка мережі), яка може надіслати сигнал на гаманець одержувача про те, що відправник готовий спробувати здійснити платіж P2EP. Якщо платіж P2EP виявиться невдалим, гаманець повернеться відправнику і запросить звичайний платіж на певну адресу, і використовуватиме лише введені відправником дані.
Оскільки вхідний внесок координується через P2EP і не дає «зіпсованого» результату рівного номіналу, як coinjoin, транзакції payjoin важче ідентифікувати.
Ідея є великим кроком у правильному напрямку, але вона все ще перебуває в зародковому стані, вона ще не завершена, і потрібно усунути деякі додаткові складнощі.
Не по темі: Pay-to-IP Сатоші Накамото
Різновид цієї ідеї, названа «Pay-to-IP», була реалізована Сатоші Накамото в ранній версії програмного забезпечення Bitcoin. Однак цей підхід створює серйозну дилему конфіденційності, тому від нього відмовилися в наступних версіях програмного забезпечення Bitcoin.
Bustapay
Пізніше того ж місяця Райан Хавер запропонував покращену версію P2EP у списку розсилки розробників Bitcoin і формалізував BIP під назвою «Bustapay». Ця версія спрощує оригінальний протокол P2EP, і заради простоти та усуває частину складнощів, він вважає, що простота необхідна для повсюдного доступу.
Пропозиція Bustapay все ще має деякі серйозні проблеми, які потребують доопрацювання, і протокол не такий повний, як мав би бути. Але це ще один крок у правильному напрямку, і його зосередженість на простоті інтеграції гаманців є критично важливим кроком, особливо для повільної та обережної екосистеми розробників біткойнів. Хоча Bustapay ніколи не просувався, він був останнім попередником сьогоднішньої пропозиції payjoin – ми готові до інтеграції гаманця, позитивних змін у транзакціях у мережі.
Пропозиція Payjoin
Нарешті, в середині 2019 року концепції Bustapay і P2EP були додатково вдосконалені і вдосконалені Ніколя Форьє (засновник BTCPayServer) і Кукксом, щоб сформувати BIP-78 під назвою «A Simple Payjoin Proposal».
З розумінням передумов протоколу, який породив payjoin, сенс і мета резюме на початку цієї пропозиції зрозумілі:
Пропозиція надає набагато більш сувору інформацію, ніж попередні методи, вказуючи, як побудувати транзакцію cojoin між відправником і одержувачем, розриваючи нитку ідентичності власності вхідних транзакцій, і є простою, гнучкою та недорогою.
Як працює Payjoin
Припустимо, Аліса хоче заплатити Бобу 1,1 BTC, а потім компанія з моніторингу блокчейна бачить транзакцію на кшталт цього:
! [Приклад евристики припущення про спільну власність] (https://img.jinse.cn/7133650_watermarknone.png)
Вони можуть подумати, що Аліса заплатила Бобу 0,5 BTC, а потім перевела решту грошей собі в якості здачі, і все:
! [Приклад, який припускає, що була використана евристика власності загального входу] (https://img.jinse.cn/7133651_watermarknone.png)
І в більшості випадків немає нічого поганого в тому, щоб так думати! Адже здача, як правило, йде більшими номіналами, а 0,5 є скоріше «цілим числом» і частіше використовується в платежах (порівняно з 1,1).
Вони також можуть задатися питанням, чому Аліса використовувала введення, яке не було необхідним (і 0.8, і 0.3 зайві), але вони ніколи не можуть бути впевнені, що це не звичайна транзакція, і вони не можуть зробити висновок, чому було використано додаткове введення - можливо, Аліса просто перебирає свій гаманець для подальшого управління. Це можливо payjoin, але навіть якщо ви так думаєте, який UTXO належить Алісі, а який Бобу? Оскільки більшість транзакцій не є payjoin, вони, швидше за все, помилково подумають, що це не транзакція payjoin.
Однак Аліса розумна і хоче захистити свою конфіденційність, і вона знає про payjoin, тому просить Боба також надати інформацію для транзакції. Боб погодився, тому він створив транзакцію, яка коштувала один (або більше) UTXO як вхідні дані, і відправив її назад Алісі. Якщо в угоді не виникне проблем з Алісою, то вона транслюватиме її в мережу. Насправді угода виглядає приблизно так:
! [Приклад транзакції payjoin] (https://img.jinse.cn/7133652_watermarknone.png)
До тих пір, поки спостерігачі за ланцюжком припускають, що всі вхідні дані надходять від Аліси (як в першому прикладі, і вони надходять зараз), вони будуть дико помилятися щодо того, які вхідні дані належать Алісі і Боб!
Цікаво, що і Аліса, і Боб пропонують переваги конфіденційності для всіх. Оскільки, на відміну від CoinJoin, ця транзакція більше схожа на звичайну транзакцію, і поки достатня кількість людей використовує PayJoin, спостерігач не може визначити, які транзакції є нормальними. Зриваючи спостерігачів, Аліса і Боб також роблять кожну транзакцію трохи підозрілою. Поки це робитиме достатня кількість людей, усі транзакції стануть підозрілими. Конфіденційність у мережі часто є грою з числами, і чим більше людей бере участь, тим кращою буде конфіденційність для всіх.
У цьому випадку Аліса та Боб співпрацювали, щоб створити транзакцію, використовуючи відповідні вхідні дані для захисту конфіденційності. Звичайно, весь процес підозріло автоматизований (а насправді автоматизований).
У BIP-78 весь процес більш формально визначається наступним чином:
! [Приклад PJ] (https://img.jinse.cn/7133653_watermarknone.png) 2. Відправник створює сформований, трансляційний PSBT, який надсилається на кінцеву точку одержувача, використовуючи лише власні вхідні дані, яких повністю достатньо для оплати. Цей PSBT називається «початковим PSBT». 3. Одержувач змінює PSBT, щоб включити власні вхідні дані, підписує власні вхідні дані та надсилає змінений PSBT назад відправнику. Одержувач не змінює жодних входів або виходів відправника. Ця PSBT називається "Payjoin Offer". 4. Відправник підтверджує пропозицію, потім повторно підписує свої дані, щоб завершити всю транзакцію і, нарешті, транслювати її в мережу.
Незалежно від того, де була допущена помилка в процесі, наприклад, одержувач не має UTXO, який можна використовувати для створення пропозиції PayJoin, то ЦА потрібно лише транслювати початковий PSBT, що є звичайною транзакцією. Незважаючи на те, що всі вхідні дані для цієї транзакції надходять від одного власника, і лише достатня кількість людей використовує payjoin, ви не можете зробити висновок, що обидві сторони не payjoin, і спостерігачеві доведеться припустити, що всі платять, а потім придумати інший спосіб відстеження платежу.
Численні переваги Payjoin
Розберіть більше підказок для спостереження
Припущення про ідентичність власності не єдине, яке може бути порушено payjoin, що впливає на конфіденційність. BIP-78 вказує на дві інші підказки, які можуть бути використані для ідентифікації власника:
У біткойнах відкритий ключ скрипта - це "скрипт блокування", який визначає умови, за яких сума біткойнів може бути витрачена. Він називається «відкритим ключем скрипта», оскільки умова блокування вимагає дійсного підпису, який збігається з відкритим ключем (адресою), щоб розблокувати його. Іншими словами, розблокувати його може лише особа, яка керує закритим ключем пов'язаного відкритого ключа цього UTXO.
Існує кілька типів відкритих ключів скриптів, таких як: P2PKH, P2WPKH, P2SH, P2TR. Загалом, гаманці використовують один і той самий відкритий ключ скрипта для всіх транзакцій, тому вихідні дані змін (кошти, надіслані відправнику назад відправником собі на додаток до платежів та комісій), швидше за все, використовуватимуть той самий тип відкритого ключа сценарію, що й вхідні дані відправника, а вихідні дані, надіслані одержувачу, швидше за все, використовуватимуть інший тип. Це означає, що UTXO, які використовують той самий тип сценарію в одній транзакції, можуть бути ідентифіковані як такі, що потенційно належать відправнику, тобто припускаючи, що вихідні дані, надіслані одержувачу, будуть іншого типу.
BIP-78 визначає метод, який дозволяє одержувачу використовувати тільки той же тип відкритого ключа скрипта, що і відправник, який розриває вищевказаний потік, який може розкрити вихід платежу і вихід зміни.
Зазвичай, будь ласка, промежина, платіть друг завжди буде вибирати ціле число, тому що це буде набагато природніше. Якби Боб стягував плату з Аліси (а вони не стягували біткойн за фіатною ціною, яка була б «ближчою до цілого числа»), то він, швидше за все, стягував би набір e, наприклад 0,0001, замість нецілого числа, наприклад 0,00010231. Якщо один з виходів транзакції є цілим числом, то, швидше за все, це платіжний вихід, а нецілочисельний вихід є виведенням змін (принаймні на даний момент).
Payjoin також описує спосіб, за допомогою якого одержувач може розірвати цей потік, додавши додатковий цілочисельний вихід при побудові пропозиції Payjoin.
Асиметричні переваги досягаються за рахунок об'єднання більш широкої групи
Як згадувалося раніше, одним з головних недоліків coinjoin з точки зору конфіденційності є те, що: 1) транзакції coinjoin легко відрізнити від звичайних транзакцій; 2) Дуже мало людей будуть займатися coinjoin спеціально, і це не стосується звичайної торгівлі. Це створює проблему однорідності біткойна, тому що, швидше за все, деякі люди подумають, що викарбувані гроші забруднені, тому що саме хтось має безглузду ідею про те, що «прагнення до конфіденційності дорівнює злому наміру». Звичайно, якщо більшість транзакцій або навіть лише певний відсоток транзакцій є приватними, то транзакції, спрямовані на пошук конфіденційності, непомітні.
Payjoin виглядає як будь-яка інша транзакція, тому вона нічим не примітна. Сторонні спостерігачі навіть не мають причин розглядати таку транзакцію, оскільки вона не демонструє наміру заплутати платіж і змінити результати.
Оскільки це виглядає як щось інше, навіть незначні переваги впровадження payjoin означають, що конфіденційність кожного буде важче порушити, оскільки відстежувані потенційні клієнти швидко стають ненадійними. Адам Гібсон (засновник JoinMarket та експерт з конфіденційності Bitcoin) дуже добре підсумовує:
Оздоблення UTXO
Очевидно, що і PayJoin, і його піонери прагнуть вирішити проблеми конфіденційності. Але у використанні payjoin є і відмінна сторона, і BIP-78 дає зрозуміти: UTXO прибирання.
Сатоші Накамото запропонував використовувати адресу чайових для кожної транзакції отримання, що призвело до того, що гаманець користувача мав багато UTXO для керування. Коли ці UTXO використовуються як вхідні дані для генерації нової транзакції (за умови, що це не транзакція coinjoin або payjo), така транзакція коштує великих комісій. Оскільки комісії стягуються на основі обсягу транзакції (кількості байтів) (що відповідає блоковому простору, який є дефіцитним ресурсом), більша кількість вхідних даних означає більші транзакції та більшу комісію.
Важливо зазначити, що використання payjoin для сортування UTXO не обов'язково заощаджує комісію, оскільки кожен UTXO, який з'являється в мережі, все одно повинен буде сплачувати комісію. Однак він розподіляє ці комісії на тривалий період часу та надає можливість пакетувати UTXO під час оплати. Пакетна обробка робить організацію UTXO дешевшою (ніж якби вам довелося ініціювати транзакцію спеціально з метою організації). Це також полегшує зв'язування UTXO та займає менше місця на жорсткому диску. Крім того, гаманці можуть реалізувати спосіб автоматизації та згладжування організації UTXO, дозволяючи одержувачам заздалегідь вказувати, які UTXO вони хочуть організувати за низькими комісіями.
Lightning Network та PayJoin: матч, створений у природі
Використовуйте Payjoin, щоб відкрити канал Lightning
Lightning Network (LN) — це рішення рівня 2, побудоване на Bitcoin, яке виводить транзакції за межі ланцюга для миттєвих розрахунків із надзвичайно низькою комісією, таким чином різко збільшуючи пропускну здатність транзакцій, конфіденційність і дозволяючи Bitcoin вводити нові варіанти використання (наприклад, «мікроплатежі»). Він використовує мережу платіжних каналів між вузлами для маршрутизації платежів, пересилаючи кошти звідти, звідки вони походять, до місця призначення. Ці канали вимагають, щоб кожен оператор вузла заблокував певну «ліквідність» (біткойни) зі своїми контрагентами каналу, яка потім може перетікати між вузлом і його контрагентами каналу. Кількість біткоїнів, які ви можете витратити в каналі, обмежена тим, скільки ліквідності є на вашій стороні каналу.
Коли справа доходить до обслуговування вузла Lightning, більша частина складності пов'язана з відкриттям цих каналів і управлінням ліквідністю кожного каналу. Залучення нових користувачів є однією з найбільших проблем, оскільки потрібно зробити так багато кроків. Припустимо, Аліса хоче відкрити канал з Бобом, і вона встановила новий вузол Lightning, але вона ще не отримала фінансування. Потім їй потрібно зробити наступне:
Як мінімум, Алісі доводиться платити дві комісії за обробку та чекати близько 10 хвилин на кожну транзакцію, що виснажливо.
! [Процес відкриття каналу Lightning] (https://img.jinse.cn/7133654_watermarknone.png)
Payjoin спрощує цей процес і допомагає Алісі заощадити гроші: Аліса може поповнити гаманець Lightning Wallet і відкрити канал за одну транзакцію.
У цьому сценарії Аліса заздалегідь налаштовує кінцеву точку отримання payjoin з деталями каналу, який вона хоче відкрити: скільки біткойнів заблокувати і якого опонента відкрити канал. Потім, використовуючи гаманець, який підтримує payjoin, хтось (включаючи Алісу) може відправити початковий PSBT на кінцеву точку, домовитися про транзакцію payjoin, і кінцева точка зробить необхідні виклики API, щоб відкрити канал з вузлом Боба.
Іншими словами, відправник (у цьому випадку Аліса) зв'язується з кінцевою точкою Аліси, щоб отримати payjoin, створює транзакцію та надсилає кошти безпосередньо на вихід мультипідпису 2 з 2 Боба та Аліси, таким чином створюючи канал блискавки між двома вузлами. Це перетворює весь процес в транзакцію:
! [Канал блискавки з Payjoin] (https://img.jinse.cn/7133655_watermarknone.png)
Цікаво знати, що як відкриття каналу Lightning, так і payjoin мають вимоги до живого (хоча, принаймні, payjoin не буде потрібно протягом тривалого часу), а це означає, що всі учасники повинні бути онлайн на момент транзакції. Це дуже обмежує порівняно з ончейн-транзакціями Bitcoin (які вимагають, щоб платник був онлайн лише на момент оплати). Однак це також дозволяє двом наборам протоколів ідеально поєднуватися один з одним.
Наприклад, Lightning Network — це чудовий спосіб покращити конфіденційність, зберігаючи платежі поза мережею, і це може значно покращити здатність Bitcoin використовуватися як засіб обміну (тобто його фактично можна використовувати для покупки предметів повсякденного вжитку) без шкоди для його збереження вартості. Однак необхідність відкриття каналу в ланцюжку також означає, що кошти, які ви використовуєте для відкриття каналу, а також люди, які відкривають канал разом з вами, залишать слід у ланцюжку. З причин, які ми вже обговорювали, payjoin може заплутати та знищити багато підказок шпигунів.
Це також спрощує роботу, оскільки користувачам потрібно буде ініціювати лише одну транзакцію замість двох, стає швидшим, оскільки їм потрібно чекати лише на підтвердження однієї транзакції, і дешевшим, оскільки їм потрібно сплатити лише одну комісію. По суті, такий підхід дозволяє відкривати відразу кілька каналів. Ви можете скласти список вузлів, на яких ви хочете відкрити канал, налаштувати його в кінцеву точку отримання BIP-21 payjoin, а потім увімкнути все це відразу і автоматично при отриманні платежів, і вам потрібно буде дочекатися лише одного підтвердження та однієї комісії за оплату. Абсолютно!
Вже є проект, що реалізує цю ідею під назвою "Nolooking", який дозволяє перерахувати набір публічних ключів, а потім відкрити кілька каналів Lightning Channel одночасно *пакетами)! Це дозволяє Алісі відкривати канал не тільки з Бобом, але і з Бобом, Керол і Діною, за допомогою всього однієї ончейн транзакції! Цікаво подумати про те, що в майбутньому в гаманцях Lightning за замовчуванням буде ввімкнено payjoin, а де-факто користувацький досвід полягає в тому, що ви просто вибираєте свого торгового партнера, ініціюєте одну транзакцію Bitcoin, і все готово! Як це дивно?
Нескладно уявити, що це спростить впровадження блискавичних каналів самостійного зберігання. Було б цікаво, якби програмне забезпечення Lightning Wallet могло мати кнопку «швидкого запуску», де користувачі просто вводять, скільки біткойнів вони хочуть заблокувати (тобто скільки ліквідності вони хочуть), встановлювати значення за замовчуванням для відкриття невеликої кількості каналів розумного розміру та трохи жертвувати маршрутизацією та комісіями. Для досвідчених користувачів просто надайте кнопку «Я знаю, що роблю».
Слабкі сторони
Будь-який протокол має слабкі місця, і PayJoin не є винятком.
Основна проблема полягає у вимозі жвавості (нетворкінгу). У поточній реалізації веб-сервер одержувача payjoin повинен бути фінансово застрахований при побудові транзакції, оскільки відправник і одержувач домовляються про остаточну транзакцію (яка, звичайно, запрограмована). Це може обмежити впровадження мерчант-серверів, а також вузлів Lightning, які є єдиними людьми, які мають стимул залишатися в мережі. З точки зору користувача, було б краще, якби транзакція могла бути відправлена в будь-який час, незалежно від того, чи був сервер одержувача онлайн чи ні.
Інший, менш ймовірний, але більш небезпечний недолік полягає в тому, що якщо сервер payjoin (тобто сервер одержувача) знаходиться на незахищеному сервері, вихідні дані одержувача можуть бути підроблені під час роботи (перед передачею назад відправнику), що призведе до крадіжки коштів, що належать одержувачу.
Однак, як ми скажемо далі, були запропоновані рішення для вирішення обох цих проблем.
Нарешті, ще одна слабкість протоколу PayJoin полягає в тому, що він стикається з бар'єром для прийняття, оскільки гаманцям доводиться докладати зусиль для його інтеграції. Особлива проблема полягає в тому, що ідеальним інтерфейсом користувача за замовчуванням має бути payjoin. Як гаманець відправника, так і гаманець одержувача спробують отримати payjoin безпосередньо, без необхідності відкривати їх користувачеві в налаштуваннях конфіденційності. Найкраща конфіденційність – це впровадити конфіденційність за замовчуванням, тому що, якщо ви попросите користувачів вжити активних заходів, вони можуть занепасти духом. Отже, для того, щоб payjoin був прийнятий звичайним користувачем, він повинен мати плавний досвід, який йому не потрібно намагатися зрозуміти. У гаманці він повинен бути включений за замовчуванням. Майте на увазі, що протокол вже має вбудовану реакцію на збої payjoin: він повертається до звичайної транзакції без ручного втручання користувача.
Не потрібна плата на стороні сервера
Ден Гулд (Dan Gould) представив проект BIP для версії 2 payjoins, що дозволяє виконувати payjoins як в асинхронному, так і в безсерверному сценаріях. Ця безсерверна плата вирішить проблему, пов'язану з необхідністю присутності одержувача онлайн під час отримання платежу, а також пов'язані з цим проблеми безпеки на стороні сервера. Оскільки постійно ввімкнений сервер-одержувач payjoin може бути найбільшою перешкодою для прийняття користувачами payjoin, впровадження цього BIP може принести значні переваги для впровадження payjoin, а також для пасивної конфіденційності Bitcoin.
Стан впровадження Payjoin
Станом на кінець 2023 року впровадження PayJoin все ще відносно низьке, але воно продовжує зростати з моменту свого створення у 2018 році. Оскільки payjoin в даний час доступний і не вимагає будь-яких змін консенсусу Bitcoin, єдиною перешкодою є написання гаманця, який його підтримує; А інструменти, які допомагають розробникам, вдосконалюються з кожним днем. Payjoin Dev Kit (PDK) — це нова реалізація payjoin із модулями, які гаманці можуть використовувати для інтеграції payjoin. Він навіть складається з інструменту payjoin-cli, за допомогою якого ви можете використовувати командний рядок для створення payjoin. Ця бібліотека написана на Rust, але прив'язки, які дозволяють іншим мовам використовувати її, знаходяться в розробці.
Підтримка гаманця
BTCPayServer і JoinMarket вже підтримують надсилання та отримання payjoin, хоча і не за замовчуванням. BlueWallet, Sparrow, Wasabi та BitMask підтримують надсилання. Кілька інших гаманців підтримують його через плагін, включаючи Bitcoin Core. Існують також активні піарники, які намагаються інтегрувати payjoin в Mutiny Wallet. Поточний стан усиновлення наведено тут.
Payjoin і майбутнє Bitcoin
Адам Гібсон вже говорив, що навіть якщо лише 5% ончейн-транзакцій побудовані за допомогою payjoin, це може мати великий вплив на конфіденційність Bitcoin. Нам потрібно лише перетнути поріг, якого достатньо, щоб аналітична фірма з упевненістю припустила, що вона може правильно інтерпретувати транзакцію. Як тільки їхні методи шпигунства за нами будуть зламані, нерозумні, довільні та зловмисні обмеження, накладені тими, хто не розуміє переваг конфіденційності Біткойн і не має наміру захищати наші права, стануть неактуальними.
І, як ми бачили, завдяки численним можливостям, які надасть PayJoin, це не просто рішення для конфіденційності, це також масштабований і спільний протокол транзакцій, який дозволяє використовувати цікаві цілі, такі як економія комісій, кілька блискавичних каналів для однієї транзакції тощо. Переваги, які він може принести Біткойн, безмежні, і їх можна реалізувати зараз, не змінюючи сам Біткойн.
Так чого ж ми чекаємо?
Ні
Якщо ви хочете підтримати або зробити свій внесок у PayJoin, приєднуйтесь до Discord, зробіть нам пожертву або дізнайтеся про payjoin.org.