Перейти до основного вмісту

Гра в реорганізації в Етеріумі на базі доказу частки (PoS)

Каспар Шварц-Шиллінг (Caspar Schwarz-Schilling) представляє дослідження щодо атак з реорганізації блоків в Етеріумі на базі доказу частки (PoS), охоплюючи вектори атак, механізми захисту та наявні пом'якшення на рівні протоколу.

Date published: 29 листопада 2022 р.

У цій презентації розглядаються типи реорганізацій блоків, можливі в Етеріумі на базі доказу частки (PoS), та заходи, розроблені для їх запобігання. Каспар Шварц-Шиллінг, дослідник з Robust Incentives Group у Фундації Ethereum, детально пояснює механіку ex-post та ex-ante реорганізацій, порівнюючи ландшафт безпеки між доказом виконання роботи (PoW) та доказом частки (PoS).

Ця стенограма є доступною копією оригінальної стенограми відео (opens in a new tab), опублікованої ЛісКон. Її було злегка відредаговано для зручності читання.

Вступ та передісторія (0:03)

Вітаю. Сьогодні я розповім про реорганізації, які можливі в Етеріумі на базі доказу частки (PoS).

Нещодавно я приєднався до Фундації Ethereum, зокрема до Robust Incentives Group. По суті, ми — дослідницька команда, зосереджена на всьому, що стосується стимулів. Я буду коротким — ця доповідь дуже насичена, а більшість наших робіт ви можете знайти на GitHub.

Два типи реорганізацій (0:44)

Сьогодні я хочу поговорити про реорганізації, і зокрема, я хочу окреслити два різні типи реорганізацій, які можливі у сфері Етеріуму на базі доказу частки (PoS).

З одного боку, ми маємо ex-post реорганізації, а з іншого — ex-ante реорганізації. Вибачте за дещо претензійні латинські назви, але вони чудово передають суть.

Ex-post реорганізації — це те, про що ми зазвичай думаємо, коли говоримо про реорганізації. Зловмисник бачить блок — якщо він цінний, він може спробувати його реорганізувати. Отже, на цій діаграмі ми бачимо, що блок N+1 — це блок, який зловмисник хоче вилучити шляхом реорганізації, і, будуючи на тому ж батьківському блоці N, якщо це спрацює, блок N+3 потім будується на блоці N+2. Це звичайна справа.

Тепер щодо ex-ante реорганізацій — вони трохи відрізняються. Ідея полягає в тому, що зловмиснику потрібно розпочати атаку ще до того, як він дізнається, який саме блок він збирається реорганізувати. Як це приблизно працює? На дуже високому рівні, блок N+1 будується поверх N, але не випускається одразу. Чесні вузли навіть не знають про існування N+1, тому вони продовжуватимуть будувати на N. Потім через певний механізм N+1 випускається, і N+3 може побачити, що N+1 лідирує, і побудуватися поверх нього, так що N+2 фактично вилучається через реорганізацію.

Ви можете запитати, навіщо взагалі робити таку реорганізацію. Що ж, тут все ще є MEV, який можна захопити. Якщо вам пощастить, блок N+2 має багато MEV — ви можете захопити його, просто скопіювавши вміст цього блоку. У гіршому випадку, ви маєте транзакції за два слоти, які можна прослухати.

Ex-post реорганізації в доказі виконання роботи (PoW) (2:49)

Перш ніж зануритися в ex-ante реорганізації, які є головною темою цієї доповіді, дозвольте мені коротко нагадати про ex-post реорганізації і, зокрема, почати з контексту доказу виконання роботи (PoW).

По суті, це короткий зміст публікації в блозі від звичних авторів — Георгіоса та Віталіка. Просто візьміть і прочитайте її, вона чудова.

Коротко кажучи, в Етеріумі на базі доказу виконання роботи (PoW) ex-post реорганізації є складними, але не неможливими. Майнер із 10% потужностей має відносно хороші шанси на майнінг кількох блоків поспіль, і якщо стимул достатньо високий — уявіть, що є один блок із MEV на суму 100 ETH, який можна захопити — тоді, можливо, навіть одновідсоткового шансу на успіх буде достатньо, щоб спроба реорганізації була виправданою.

Ex-post реорганізації в доказі частки (PoS) (3:39)

У доказі частки (PoS) це зовсім інша історія. Ми говоримо про абсурдну кількість необхідного стейку. Я розповім вам, як це можна було б зробити, просто щоб підкреслити, наскільки це неймовірно складно.

Можливо, спочатку трохи основ. Час в Етеріумі на базі доказу частки (PoS) вимірюється в слотах. Кожен слот триває 12 секунд. У кожному слоті є дві ролі: у вас є пропонувальник — рівно один пропонувальник — і комітет із тисяч учасників, які мають здійснювати атестацію блоків, про які вони дізнаються на P2P-рівні. Вони визначають голову ланцюга, запускаючи вибір форку, що, по суті, є функцією, яка приймає дерево блоків як вхідні дані та видає вам голову ланцюга.

Ви повинні здійснювати атестацію блоків, якщо отримуєте дійсний блок, або через чотири секунди після початку слота — залежно від того, що станеться раніше. Отже, якщо з якоїсь причини пропонувальник блоку N+1 перебуває офлайн і через чотири секунди після початку слота блоку немає, ви здійснюєте атестацію блоку N. Якщо ви отримуєте його вчасно, ви здійснюєте атестацію блоку N+1. Все просто.

Усі ці атестації надають вагу блокам, і ця вага використовується під час вибору форку для визначення останньої голови ланцюга.

Тепер давайте розглянемо реорганізацію одного блоку. На початку все йде як завжди — всі здійснюють атестацію блоку N, навіть зловмисник. Потім N+1 будується поверх N, і оскільки зловмисник не хоче надавати вагу блоку, який він намагається вилучити через реорганізацію, він натомість здійснює атестацію блоку N. Блок N набирає велику вагу, оскільки зловмисник має дві третини комітету — що означає, що йому потрібно контролювати, грубо кажучи, дві третини всього стейку.

Одна третина чесних учасників здійснила атестацію N+1, дві третини — N. Тепер з'являється блок N+2 — очевидно, зловмисник будує його на N і здійснює атестацію власного блоку. З точки зору чесних валідаторів, N+1 все ще лідирує за вагою, оскільки і N+1, і N+2 успадковують усю вагу блоку N, але N+1 також має цю одну третину атестацій, якої бракує N+2.

Якщо ми підрахуємо це — блок N+1 має атестації вартістю одна третина плюс одна третина, що дає дві третини, і блок N+2 також має дві третини. Для простоти припустимо, що нічия вирішується на користь зловмисника. Тоді N+3 побачить N+2 як лідера і побудується поверх нього.

Щоб дати вам уявлення про те, наскільки безглуздими є ці припущення — навіть якби у вас був стейкер із 65% часткою, ймовірність контролювати дві третини комітету в будь-якому заданому слоті становить 0.05%. Це доводить, що сила паралельних атестацій є реальною — ex-post реорганізації неймовірно складні, якщо не практично неможливі, в Етеріумі на базі доказу частки (PoS).

Механіка атаки ex-ante реорганізації (7:34)

Тепер я розповім про ex-ante реорганізації. Ця атака базується на статті Нойдера та інших. Нещодавно ми значно вдосконалили цю атаку. Ми також написали про це статтю і встигли завантажити її на arXiv якраз вчасно.

Також заздалегідь скажу — не хвилюйтеся, існують заходи пом'якшення. Вони будуть інтегровані до Злиття.

Як працює атака ex-ante реорганізації? Спочатку блок N — все як завжди, всі здійснюють його атестацію. Тепер ви є пропонувальником N+1. Ви пропонуєте його і приватно здійснюєте його атестацію за допомогою одного валідатора. Важливо, що ви тримаєте це в таємниці — ви не випускаєте його і не поширюєте на P2P-рівні.

Відбувається те, що чесні учасники не бачать блоку N+1, тому вони здійснюватимуть атестацію блоку N. У цьому й полягає хитрість — ви успадковуєте цю вагу, і вам не потрібно з нею боротися.

На мить припустимо нульову затримку. У слоті N+2 ми, як зловмисник, випускаємо блок N+1 і приватну атестацію одночасно. Чесні валідатори у слоті N+2 повинні здійснити атестацію блоку. Зі своєї точки зору вони бачать блок N+2 і блок N+1 із цією однією приватною атестацією. Якщо вони запустять вибір форку, вони виявлять, що блок N+1 має більшу вагу, ніж блок N+2, оскільки N+1 має приватну атестацію, якої немає у N+2. Навіть усі чесні валідатори фактично здійснять атестацію блоку N+1. У N+3, очевидно, N+1 буде розглядатися як голова ланцюга.

Затримка мережі та атака (10:25)

Я припустив нульову затримку, що, очевидно, не відповідає дійсності. Затримка існує — потрібен час для поширення блоків і повідомлень на P2P-рівні.

Зловмисник все ще може здійснити таку атаку, маючи багато вузлів у різних місцях P2P-топології. Коли чесний пропонувальник у слоті N+2 пропонує цей блок, ви дізнаєтеся про це на дуже ранньому етапі процесу поширення. У результаті ви можете випустити свій приватний блок з усіх цих різних місць так, щоб більшість дізналася про блок N+1 раніше, ніж про блок N+2 — це означає, що вони побачать, що блок N+1 лідирує за вагою, і фактично здійснять його атестацію.

Щоб ще раз підкреслити, що тут відбувається: у нас є пропонувальник з єдиним учасником атестації, якому вдається здійснити реорганізацію одного блоку. М'яко кажучи, не ідеально.

Стратегії балансування для довших реорганізацій (11:42)

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

Ви випускаєте свій приватний блок таким чином, щоб приблизно половина чесних вузлів дізналася про ваш приватний блок і атестацію до того, як вони дізнаються про блок N+2 — тому вони здійснюють атестацію вашого блоку. Ви хочете, щоб інша половина не почула про ваш блок до того, як вони здійснять атестацію N+2.

Тепер у вас половина чесного комітету здійснює атестацію N+1, а інша половина — N+2. Як це допомагає? Чесний комітет тепер нейтралізує один одного, і вам як зловмиснику навіть не потрібно з ними боротися — що, по суті, є здійсненням мрії зловмисника.

Пройдемося по діаграмі: блок N — все як завжди, блок N+1 — та сама історія, ви його не випускаєте. Чесні валідатори здійснюють атестацію блоку N. З'являється блок N+2, ви дізнаєтеся про нього рано і випускаєте блок N+1 з однією атестацією — «вирішальним голосом» — таким чином, що половина чесного комітету бачить його до, а половина — після. Половина віддає голос за N+1, інша половина — за N+2. Насправді ви хочете отримати розподіл з різницею в один голос, щоб N+2 мав на одну атестацію більше, тому N+3 будується на N+2 і продовжує реорганізацію.

Щоб завершити реорганізацію двох блоків: пропонується блок N+3, ви дізнаєтеся про нього рано, випускаєте блок N+1 і ваші дві атестації, що залишилися, наповнюючи P2P-рівень так, щоб більшість чесних учасників віддала голос за блок N+1 — таким чином, щоб він мав більшу вагу, ніж блок N+3, і N+4 був побудований поверх N+1.

Якщо подумати, здійснювати ці реорганізації за таких припущень відносно дешево. Навіть якщо у вас немає ідеального розподілу, оскільки P2P-рівень настільки великий, ви маєте розподіл ймовірностей, на який можете орієнтуватися так, що вартість атаки зростає пропорційно квадратному кореню з розміру комітету.

Пом'якшення через підсилення пропоузера (15:17)

Поговоримо про пом'якшення. У чому полягає основна ідея? Ми збираємося надати пропонувальнику трохи більше влади. Якщо дійсний блок надходить вчасно, давайте збільшимо вагу цього блоку на час дії слота (підсилення пропоузера). Після завершення цього слота ми відновлюємо звичайну оцінку LMD-GHOST, і все повертається до норми.

Отже, якщо блок N+2 запропоновано вчасно і він дійсний, цей блок отримає підсилення — скажімо, 80% від розміру комітету. Тепер ця мила маленька атестація N+1 від зловмисника не спрацює. У жодному разі.

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

Ідея полягає в тому, що з цим пом'якшенням атестації зловмисника повинні конкурувати з підсиленням, щоб переконати чесних валідаторів віддати голос так, як їм вигідно. Це руйнує стратегії балансування і фактично унеможливлює всі реорганізації взагалі. Хороша новина — є відкритий PR, тому, по суті, він буде інтегрований до Злиття.

Основні висновки (16:48)

Деякі основні висновки. Я розповів про відмінності між ex-post та ex-ante реорганізаціями. Я коротко окреслив різні ландшафти для реорганізацій у доказі виконання роботи (PoW) порівняно з доказом частки (PoS). Я показав вам, як здійснити ex-ante реорганізацію, але також, що важливо, як це виправити.

Якщо вас це зацікавило, є стаття — набагато детальніша, з більшою кількістю нюансів. Слайди будуть завантажені. Підходьте поспілкуватися, якщо вам цікаво, а також ви можете знайти мене у Twitter.

Сподіваюся, вам було цікаво. Дуже дякую.

Ця сторінка була корисною?