«Ошибка нулевого дня» в механизме майнинга биткоина
Исследователь Лоик Морель обнаружил в коде биткоина давнюю вычислительную ошибку, связанную с механизмом корректировки сложности. Каждые две недели узлы сети пересчитывают этот показатель, чтобы блоки появлялись в среднем раз в десять минут. Для этого система сравнивает реальное время добычи последних 2016 блоков с целевым значением. Однако в алгоритме заложена неточность: при расчетах узел берет разницу между временем самого первого и самого последнего блока в цикле. Это приводит к тому, что учитывается только 2015 временных интервалов вместо необходимых 2016. Один блок в каждом периоде фактически выпадает из уравнения, что создает погрешность в 0,05% и делает сложность чуть выше нормы.
Основная опасность заключается в том, что из-за этого недочета периоды пересчета сложности не пересекаются — время последнего блока одного цикла никак не ограничивает начало следующего. Такая разобщенность открывает возможность для «атаки искривления времени». Если крупный майнер начнет искусственно занижать временные метки в начале периода и резко завышать их в последнем блоке, он сможет обмануть сеть. Алгоритм решит, что на добычу блоков ушло гораздо больше времени, чем было на самом деле, и значительно снизит сложность майнинга в следующем цикле.
Если злоумышленник будет повторять этот процесс, сложность может упасть до такого уровня, что вместо одного блока в 10 минут сеть начнет выдавать до шести блоков в секунду. Это приведет к катастрофическим последствиям: сеть окажется перегруженной, подтверждения транзакций станут бессмысленными из-за частых реорганизаций цепи, а атакующий сможет забирать награды за блоки в бешеном темпе.
Исправить ситуацию предлагается с помощью софтфорка BIP-0054. Это обновление установит жесткую связь между периодами, запрещая временной метке первого блока нового цикла отклоняться от времени последнего блока предыдущего более чем на два часа. Такое ограничение восстановит непрерывность цепи и лишит майнеров возможности манипулировать временем для искусственного снижения сложности.
.png)