TechFlow Logo
Войти/ Регистрация
Газ ETH
Gwei
Страх
gas
Уязвимость безопасности Биткоина: атака искажения времени

Уязвимость безопасности Биткоина: атака искажения времени

2025.04.07
Поделиться
В этой статье мы проанализировали уязвимость безопасности биткоина, так называемую атаку искажения времени.

Автор: BitMEX Research

Обзор

26 марта 2025 года разработчик биткоина Антуан Пуэнсо опубликовал новое предложение по улучшению биткоина. Это предложение софтфорка, известное как «Большая очистка консенсуса». Это обновление исправляет несколько уязвимостей и слабых мест, которые годами существовали в протоколе биткоина. Одна из уязвимостей — это проблема дублирования транзакций, которую мы недавно обсуждали. Другая, более серьезная уязвимость, которая будет исправлена этим софтфорком очистки, называется «атака искажения времени», и именно она является темой данной статьи.

Правила защиты временных меток блоков биткоина

Прежде чем обсуждать атаку искажения времени, давайте回顾一下 текущие правила защиты от манипуляций со временем:

Правило медианного прошлого времени (MPT) — временная метка должна быть позже медианного времени последних одиннадцати блоков.

Правило времени будущего блока — на основе константы MAX_FUTURE_BLOCK_TIME временная метка не может опережать медианное время пиров узлов более чем на 2 часа. Максимальный допустимый разрыв между временем, предоставляемым узлом, и локальными системными часами составляет 90 минут, это еще одна гарантия безопасности.

Правило MPT предназначено для обеспечения того, чтобы блоки не уходили слишком далеко в прошлое, в то время как правило будущего блока предотвращает их уход в будущее. Обратите внимание, что нельзя внедрить правило, аналогичное правилу будущего блока, для предотвращения временных меток блоков в прошлом, так как это может повлиять на начальную синхронизацию блокчейна. Атака искажения времени включает подделку временных меток, заставляя их уходить далеко в прошлое.

Ошибка Сатоши Накамото «на единицу»

В биткоине цикл корректировки сложности содержит 2016 блоков, что при целевом времени блока 10 минут составляет примерно две недели. Для расчета корректировки сложности майнинга протокол вычисляет разницу временных меток между первым и последним блоком в соответствующем окне из 2016 блоков. Это окно из 2016 блоков содержит интервалы между 2015 блоками (то есть 2016 минус один). Следовательно, соответствующее целевое время должно составлять 60 секунд * 10 минут * 2015 интервалов, что равно 1 209 000 секунд. Однако протокол биткоина использует число 2016 для расчета цели. 60 секунд * 10 минут * 2016 = 1 209 600 секунд. Это ошибка на единицу. Это легкая ошибка, и кажется, что Сатоши Накамото перепутал блоки с интервалами между блоками.

Исходный код Сатоши Накамото

Источник: https://sourceforge.net/p/bitcoin/code/1/tree//trunk/main.cpp#l687

Эта ошибка означает, что целевое время на 0,05% длиннее, чем должно быть. Таким образом, фактическое целевое время интервала биткоина составляет не 10 минут, а 10 минут и 0,3 секунды. Эта уязвимость не важна,事实上自 биткоина запущена, средний интервал всегда составлял 9 минут 36 секунд, что значительно меньше 10 минут. Это связано с тем, что с 2009 года средний хешрейт постоянно увеличивался. Вот почему последний халвинг произошел в апреле 2024 года, а не в январе 2025 года. Мы опередили график. В любом случае, ошибка Сатоши в 0,3 секунды в целом довольно незначительна. Возможно, однажды, в далеком будущем, когда цена и хешрейт перестанут расти, эта уязвимость вернет нас к графику.

Хотя уязвимость в 0,3 секунды сама по себе не является серьезной проблемой, существует связанная проблема, которая представляет собой более серьезную уязвимость. Расчет сложности основан на первом и последнем блоке в каждом окне из 2016 блоков. Это также ошибочно. По нашему мнению, соответствующий цикл должен быть разницей между последним блоком предыдущего окна из 2016 блоков и последним блоком текущего окна. Это кажется наиболее разумным способом расчета длины окна корректировки сложности, где ключевым моментом является то, что временной промежуток охватывает различные окна корректировки. Если бы это было так, то 2016 также было бы правильным количеством интервалов для расчета цели. Возможно, Сатоши допустил эту ошибку, потому что ему пришлось учитывать первый цикл корректировки сложности, для которого не было доступно последнего блока предыдущего цикла.

Атака искажения времени

Атака искажения времени биткоина была впервые обнаружена примерно в 2011 году и использовала ошибку, допущенную Сатоши в расчете сложности. Для проведения атаки предположим, что майнинг на 100% централизован, и майнеры могут устанавливать любую временную метку, разрешенную протоколом. В атаке почти для всех блоков майнеры устанавливают временную метку на одну секунду позже предыдущего блока, поэтому блокчейн движется вперед во времени и соблюдает правило MTP. Чтобы двигаться вперед во времени как можно медленнее, майнеры могут поддерживать одинаковую временную метку в течение шести блоков подряд, а затем увеличивать время на одну секунду в следующем блоке и так далее. Это означает, что временные метки блоков сдвигаются на одну секунду вперед каждые шесть блоков.

Такая атака означает, что блокчейн будет все больше отставать от реального времени, сложность будет увеличиваться, делая майнинг все более трудным. Однако для усиления эффекта атаки в последнем блоке каждого цикла корректировки сложности майнеры устанавливают временную метку на время реального мира. Следующий блок, то есть первый блок каждого окна корректировки сложности, затем устанавливается обратно в прошлое, на одну секунду раньше предпоследнего блока предыдущего окна корректировки сложности. Это все еще соответствует правилу MTP, потому что в этом случае одна аномалия не влияет на медиану 11 блоков.

При проведении такой атаки сложность после первого цикла не受到影响. Однако после второго цикла корректировки после начала атаки сложность будет скорректирована вниз. Затем майнеры могут создавать блоки с чрезвычайно высокой скоростью, возможно создавая большое количество биткоинов, а затем возможно продавая эти монеты и получая прибыль.

Упрощенное объяснение

Поскольку цикл сложности составляет 2016 блоков, иллюстрировать эту атаку на диаграмме может быть сложно. Поэтому мы создали следующий сценарий, чтобы попытаться объяснить эту атаку.

  • В каждом окне корректировки сложности пять блоков

  • Целевой интервал составляет 10 минут

  • Правило MTP основано на последних трех блоках

  • Временная метка каждого блока увеличивается на одну минуту, за исключением последнего блока каждого цикла, который использует реальную временную метку

Иллюстративная атака искажения времени

Как показано на рисунке выше, есть две кривые:

  • Кривая, представляющая реальное время последнего блока каждого окна корректировки сложности. По мере того как майнеры находят блоки все быстрее, сложность снижается, и эта кривая становится менее крутой

  • Прямая линия, представляющая манипулированные временные метки других блоков

Расчет атаки искажения времени биткоина

Таблица ниже показывает, как майнеры могут использовать эту атаку наиболее экстремальным образом для манипулирования сложностью в сторону понижения.

Примечание: максимальная корректировка сложности, разрешенная протоколом для любого цикла, составляет 4 раза, но в таблице выше это значение не достигнуто

Корректировка сложности вниз для каждого цикла асимптотически приближается к значению чуть выше 2,8 раза. Это связано с тем, что по мере того как каждый цикл становится короче во времени, скорость замедления корректировки сложности уменьшается.

В 11-м цикле в таблице выше, на 39-й день атаки, создается более 6 блоков в секунду, точно 10,9 блоков в секунду. В этот момент ограничения временных меток, назначенные блокам, начинают действовать по-другому. Согласно правилу MTP, время должно сдвигаться вперед каждые 6 блоков, минимальный временной прирост составляет 1 секунду. Поэтому в этот момент, исходя из нашего понимания, временные метки начинают двигаться вперед быстрее, чем реальное время, часы блокчейна начинают двигаться вперед, приближаясь к времени реального мира, но все еще сильно отставая. Тем не менее, атака может продолжаться, сложность постоянно снижается, пока не будет достигнуто допустимое минимальное значение.

Жизнеспособность атаки

Хотя теоретически эта атака разрушительна, есть некоторые проблемы с ее реализацией. Выполнение атаки может потребовать большей части хешрейта. Если честные майнеры вводят честные временные метки, то атака становится более сложной. Правило MTP и временные метки честных майнеров могут ограничивать степень, на которую злоумышленники могут возвращать временные метки назад. Кроме того, если честные майнеры создают первый блок любого окна корректировки сложности, атака для этого цикла не сработает. Еще одним фактором смягчения, который может затруднить выполнение атаки, является то, что она видна всем. Любой может увидеть временные метки, и необходимо манипулировать временными метками в течение четырех недель перед корректировкой сложности вниз, что может дать нам время для выпуска экстренного исправления софтфорка.

Решение

Исправить эту уязвимость относительно просто, хотя это может потребовать изменения протокола софтфорка. Прямое исправление этой проблемы путем изменения алгоритма корректировки сложности для расчета временного промежутка между блоками в разных окнах 2016 и полного исправления ошибки на единицу довольно сложно. Это также может быть хардфорк. Другой способ исправления — отменить правило MTP и вместо этого требовать, чтобы время всегда двигалось вперед в каждом блоке, хотя это может означать, что время может застрять слишком далеко в будущем, а также означает, что майнеры могут столкнуться с проблемами при использовании реального времени на системных часах, если часы другого майнера опережают на несколько секунд, это может привести к недействительному времени.

К счастью, есть более простое решение. Чтобы предотвратить атаку искажения времени, нам нужно только потребовать, чтобы временная метка первого блока нового цикла сложности была не ранее определенного количества минут до последнего блока предыдущего цикла. Количество минут для этого нового ограничительного правила обсуждалось, предложения варьируются от 10 минут до 2 часов. Что касается смягчения атаки искажения времени, оба варианта могут подойти.

В предложении Поинсо о «Большой очистке консенсуса» он теперь определил это как 2 часа. 2 часа составляют всего около 0,6% от целевого времени цикла корректировки сложности, поэтому способность манипулировать сложностью в сторону понижения строго ограничена. В таблице ниже мы обобщили обсуждение того, какой льготный период следует использовать:

Присоединяйтесь к официальному сообществу TechFlow

В избранное
Поделиться
Автор
BitMEX
X@BitMEX