У механізмі майнінгу біткоїна виявили баг, що впливає на складність мережі
Дослідник Лоїк Морель повідомив про баг у механізмі коригування складності біткоїна, який теоретично дає змогу маніпулювати часом і прискорювати генерацію блоків.
В алгоритмі майнінгу біткоїна з моменту запуску мережі існує обчислювальна помилка, пов’язана з механізмом перерахунку складності. На це звернув увагу дослідник Лоїк Морель. За його словами, проблема виникає під час визначення часу, за який було згенеровано попередній період із 2016 блоків.
Суть полягає в тому, що вузли мережі порівнюють часові мітки першого і останнього блоку періоду. Такий підхід виглядає логічним, однак фактично враховує лише 2015 інтервалів між блоками замість 2016. Через це виникає так звана “помилка зміщення на одиницю”, яка створює невелику похибку, близько 0,05% у бік завищення складності.
Як працює потенційна атака
Головний ризик пов’язаний не стільки з похибкою, скільки з тим, що періоди коригування складності не перекриваються. Це відкриває можливість для маніпуляції часовими мітками блоків.
За описом дослідника, майнер із великою часткою хешрейту може навмисно занижувати часові мітки більшості блоків у періоді, а для останнього, встановлювати максимально допустиме значення. У результаті система “вважає”, що блоки генерувалися довше, ніж насправді, і автоматично знижує складність майнінгу.
Повторюючи цю процедуру кілька разів поспіль, зловмисник теоретично здатен суттєво спростити видобуток блоків. У крайніх сценаріях це може призвести до генерації кількох блоків за секунду замість стандартних 10 хвилин на блок.
Наслідки та можливе рішення
Такий сценарій може мати серйозні наслідки для мережі: перевантаження блокчейну, зростання кількості реорганізацій і зниження надійності підтверджень транзакцій. Крім того, це відкриває можливість швидкого накопичення винагороди за блоки.
Для усунення проблеми запропоновано оновлення у форматі софтфорку. Ініціатива передбачає обмеження для часових міток: перший блок нового періоду не повинен випереджати останній блок попереднього більш ніж на дві години. Це має відновити безперервність між періодами та унеможливити маніпуляції.