Dandelion++ простими словами: ретрансляція stem і fluff

· 5 хв читання

Dandelion++ — це спосіб ретрансляції нових транзакцій у одноранговій мережі, за якого ті, хто спостерігає за мережею, не можуть легко визначити, який комп’ютер їх надіслав. У цьому посібнику пояснено, яку проблему він розв’язує, як працюють його фази stem і fluff, що стаття 2018 року додала до початкової конструкції і як Blocknet використовує його для кожного платежу.

Що таке Dandelion++?

Коротка відповідь

Dandelion++ — це протокол ретрансляції транзакцій, який приховує, яка нода створила транзакцію. Нова транзакція спочатку рухається вздовж «стебла» (stem), передаючись від однієї ноди до однієї наступної протягом кількох кроків. Потім вона переходить у фазу поширення (fluff) і розходиться по всій мережі, ніби почавшись від ноди, далекої від справжнього відправника.

Назва походить від форми шляху: тонке стебло, а потім пухнасте насіння, що розлітається на всі боки. Dandelion++ опублікували 2018 року Джулія Фанті, Шайлеш Боджа Венкатакрішнан, Сур’я Бакші, Бредлі Денбі, Шруті Бхаргава, Ендрю Міллер і Прамод Вішванат у Proceedings of the ACM on Measurement and Analysis of Computing Systems (препринт на arXiv) і представили на ACM SIGMETRICS 2018. Він удосконалює пропозицію тієї самої групи 2017 року — Dandelion.

Чому трансляція транзакції розкриває, звідки вона прийшла?

Повідомлення з транзакцією не містить вашої IP-адреси. Її розкриває спосіб поширення. У типовій криптовалютній мережі нода, яка створює транзакцію, надсилає її всім своїм пірам, ті надсилають її своїм, і вона розходиться від джерела кільцями.

Дослідники показали, що ці хвилі можна виміряти. 2014 року Бірюков, Ховратович і Пустогаров, а окремо від них Коші, Коші й Макденієл запустили «супервузол», який підключався майже до кожної доступної ноди Bitcoin і записував, коли кожна транзакція надходила від кожного піра. Нода, яка першою доставляла транзакцію, часто й була тією, що її створила. Стаття про Dandelion++ називає це оцінювачем першого шпигуна (first-spy estimator): припустити, що перша чесна нода, яка доставила транзакцію, і є її джерелом. Він простий і добре працює проти лавинного поширення.

Додавання випадкових затримок перед тим, як кожна нода передасть транзакцію далі, — так Bitcoin Core робить за схемою під назвою diffusion — робить таймінги шумнішими. Дослідження Dandelion пішло іншим шляхом і змінило саму форму шляху.

Як працюють фази stem і fluff?

Коротка відповідь

У фазі стебла (stem) кожна нода передає транзакцію рівно одному піру. На кожному кроці нода підкидає зважену монетку: зазвичай вона продовжує стебло, іноді переходить у фазу fluff. У фазі поширення (fluff) транзакція транслюється всім пірам, як зазвичай, тож спостерігачі бачать, що вона поширюється від ноди, яка запустила fluff.

Крок за кроком:

  1. Ваша нода починає стебло. Вона надсилає нову транзакцію лише одному піру.
  2. Кожен ретранслятор вирішує. Пір або пересилає її ще одному піру (stem), або транслює її (fluff).
  3. Фаза fluff розносить транзакцію всюди. Від ноди, яка запустила fluff, транзакція звичайним чином заповнює мережу й досягає майнерів.

Шпигун, що спостерігає за багатьма нодами, тепер бачить, що хвиля починається з ноди, яка запустила fluff, а вона може бути за багато кроків від вас. Довжина стебла випадкова, тож шпигун не може просто відрахувати назад фіксовану кількість кроків. Стаття оцінює очікувану довжину стебла як 1/q, де q — імовірність переходу у фазу fluff на кожному кроці. За q = 0,1 стебло в середньому має близько десяти кроків.

Що Dandelion++ змінив порівняно з Dandelion?

Конструкція Dandelion 2017 року надсилала стебла вздовж однієї лінії ретрансляторів і доводила сильні результати за трьох припущень: кожна нода дотримується правил, кожна нода надсилає одну транзакцію і кожна нода використовує Dandelion. Стаття 2018 року показала, як шпигуни, що порушують ці припущення, можуть дізнатися більше, а потім змінила конструкцію так, щоб гарантії зберігалися й проти них. Протокол працює епохами, кожна нода переходить до нової епохи «приблизно кожні 10 хвилин», і в межах кожної епохи використовує чотири механізми:

Механізм Що він робить
Приблизно 4-регулярний граф ретрансляції Кожна нода вибирає до двох своїх вихідних з’єднань як ретранслятори, утворюючи мережу переплетених шляхів замість однієї лінії.
Одне ребро для власних транзакцій Нода надсилає кожну створену нею транзакцію тим самим вихідним ребром, тож надсилання кількох транзакцій не розкриває більше.
Псевдовипадкова ретрансляція У кожній епосі нода є або ретранслятором, або дифузором для всіх транзакцій, які отримує у фазі стебла, і зіставляє кожне вхідне ребро з вихідним.
Резервні таймери Нода, яка надіслала чи ретранслювала транзакцію стебла, чекає випадковий час, щоб побачити її у фазі fluff, і транслює її сама, якщо цього не сталося.

Щодо вибору q, симуляції у статті показали, що утримання q на рівні 0,2 або нижче обмежує те, що шпигун може здобути, маніпулюючи графом ретрансляції. Автори запустили свою реалізацію в робочій мережі Bitcoin і вибрали q = 0,1 або q = 0,2, щоб поширення вкладалося в їхню цільову межу 4,5 секунди.

Dandelion запропонували для Bitcoin як BIP 156. Monero додав Dandelion++ у версії 0.16, випущеній у травні 2020 року.

Як Blocknet використовує Dandelion++?

Кожна нода Blocknet ретранслює транзакції через Dandelion++, і нічого вмикати не потрібно. Коли ви надсилаєте BNT, ваша нода спершу перевіряє транзакцію й додає її до власного пулу пам’яті (mempool), а потім передає маршрутизатору Dandelion++. Ось параметри в демоні:

Параметр Значення Що це означає
Імовірність стебла 0,9 Кожен ретранслятор продовжує стебло в 90% випадків і переходить у фазу fluff у 10% випадків (q = 0,1), тобто те саме q, яке перевіряли в статті.
Епоха 10 хвилин Маршрути стебла перетасовуються кожні 10 хвилин.
Таймер ембарго 45 секунд Якщо ваша транзакція до цього часу не повернулася до вашої ноди у фазі fluff, ваша нода транслює її сама.

Як рухається платіж Blocknet:

Як Dandelion++ поєднується з іншими засобами конфіденційності Blocknet?

Dandelion++ працює на мережевому рівні: він захищає зв’язок між транзакцією та комп’ютером, який її надіслав. Конфіденційність у блокчейні, яка робить Blocknet приватною монетою, захищає те, що каже сама транзакція: кільце CLSAG із 16 виходів на кожному вході приховує відправника, одноразові стелс-адреси приховують отримувача, а зобов’язання Педерсена з доказами діапазону Bulletproofs приховують суми. Цей захист обов’язковий, тож кожна транзакція виглядає однаково ще до того, як Dandelion++ її передасть.

Два рівні доповнюють один одного. Кільцеві підписи приховують, який вихід заплатив, а Dandelion++ приховує, яка нода транслювала платіж. Стаття Як Blocknet зберігає платежі приватними розбирає кожен рівень у блокчейні, а Що таке Blocknet? дає загальний огляд, зокрема про оплату за іменем із Blocknet ID.

Щоб отримати власні BNT для надсилання, їх можна намайнити вдома. Скористайтеся посібником з майнінгу Blocknet, щоб завантажити seine, спрямувати його на bntpool.com і отримувати виплати на адресу свого гаманця або @name.

Поширені запитання

Чи приховує Dandelion++ мою IP-адресу?

Він приховує від спостерігачів, розкиданих по мережі, яка нода започаткувала транзакцію. Транзакція широко поширюється лише після переходу у фазу fluff, за кілька кроків від вас. Ваш перший пір у стеблі бачить, що транзакція надійшла від вашої ноди, але повідомлення стебла виглядають однаково, створила нода транзакцію чи лише передає її далі, тож він не може цього визначити.

Чим Dandelion відрізняється від Dandelion++?

Dandelion (2017) запровадив фази стебла (stem) і поширення (fluff) уздовж однієї лінії ретрансляторів. Dandelion++ (2018) зберігає дві фази й посилює їх проти шпигунів, які порушують правила. Він використовує граф, у якому кожна нода вибирає два ретранслятори, надсилає власні транзакції одним фіксованим ребром, вибирає нові ретранслятори кожної епохи й додає резервний таймер.

Які криптовалюти використовують Dandelion++?

Monero додав Dandelion++ у версії 0.16, випущеній у травні 2020 року, а Blocknet ретранслює через нього кожну транзакцію. Dandelion спершу запропонувала для Bitcoin як BIP 156 та сама дослідницька група. Будь-яка монета, побудована на одноранговій мережі, може його впровадити, бо він змінює лише те, як ноди передають одна одній нові транзакції.

Які параметри Dandelion++ використовує Blocknet?

Ноди Blocknet продовжують стебло з імовірністю 0,9 на кожному кроці, тож транзакція переходить у фазу fluff з імовірністю 10% на кожному ретрансляторі. Маршрути стебла змінюються кожні 10 хвилин. Якщо ваша власна транзакція не повернулася до вашої ноди у фазі fluff протягом 45 секунд, ваша нода транслює її сама, тож транзакція завжди потрапляє в мережу.