Недавно разработчик Биткойн Antoine Poinsot предложил смягченную форк-инициативу под названием "Большой консенсус очистка". Эта инициатива направлена на исправление нескольких давних уязвимостей и слабостей в протоколе Биткойн, включая проблему повторных транзакций, которую мы недавно обсуждали, а также более серьезную уязвимость "атака временного искажения", которая будет подробно рассмотрена в этой статье.
Механизм защиты временных меток блока Биткойн
Перед тем как обсудить атаку с искажением времени, нам необходимо понять текущие правила защиты от манипуляций со временем:
Среднее время в прошлом (MPT) правило: временная метка блока должна быть позже среднего времени 11 предыдущих блоков.
Правила времени блока в будущем: временная метка блока не должна превышать медианное время узловых пиров более чем на 2 часа. Максимально допустимое расхождение времени узла с локальными системными часами составляет 90 минут.
Правила MPT предотвращают отклонение временной метки блока от прошедшего времени, в то время как правила будущих блоков ограничивают временные метки от чрезмерного входа в будущее. Стоит отметить, что невозможно реализовать механизмы, аналогичные правилам будущих блоков, для предотвращения временных меток из прошлого, поскольку это может повлиять на начальную синхронизацию блокчейна. Атака временного искажения использует возможность подделки древних временных меток.
Ошибка «один в минусе» Сатоши Накамото
Цикл корректировки сложности Биткойна состоит из 2016 блоков, что составляет примерно две недели при целевом времени создания блока в 10 минут. При расчете корректировки сложности майнинга протокол вычисляет разницу временных меток между первым и последним блоком в соответствующем окне из 2016 блоков. Это окно из 2016 блоков фактически включает 2015 интервалов блоков (то есть 2016 минус 1). Следовательно, правильное целевое время должно составлять 60 секунд × 10 минут × 2015 интервалов = 1,209,000 секунд. Однако протокол Биткойна использует число 2016 для расчета цели: 60 секунд × 10 минут × 2016 = 1,209,600 секунд. Это典型ная ошибка на единицу, возможно, Сатоши перепутал концепцию блока и интервала между блоками.
Эта ошибка привела к тому, что целевое время стало на 0,05% больше, чем должно быть. На самом деле, целевой интервал времени для Биткойна составляет не 10 минут, а 10 минут и 0,3 секунды. Хотя этот сбой кажется незначительным, с момента запуска Биткойна средний интервал между блоками всегда составлял 9 минут 36 секунд, что явно меньше 10 минут. Это в основном связано с тем, что с 2009 года средняя мощность вычислений постоянно увеличивалась. Это также объясняет, почему недавнее событие халвинга произошло в апреле 2024 года, а не в январе 2025 года. Мы фактически опередили график. В долгосрочной перспективе, когда цены и мощность вычислений станут более стабильными, эта ошибка в 0,3 секунды может помочь нам вернуться к первоначальному графику.
Атака с временным искажением
Атака на искажение времени была впервые обнаружена примерно в 2011 году, она использует ошибку Сатоши Накамото в расчете сложности. Предположим, что майнинг полностью централизован, майнеры могут устанавливать произвольные временные метки в пределах, разрешенных протоколом. Атакующий будет устанавливать временные метки большинства блоков на одну секунду раньше, чем у предыдущего блока, чтобы максимально замедлить продвижение времени блокчейна, одновременно соблюдая правила MTP. Чтобы максимально замедлить продвижение времени, майнер может сохранять одинаковую временную метку на шести подряд идущих блоках, а затем увеличивать время на одну секунду в седьмом блоке, и так далее.
Эта атака приведет к тому, что время блокчейна будет все больше отставать от реального времени, при этом сложность будет постоянно увеличиваться, что сделает майнинг все более трудным. Однако, чтобы усилить эффект атаки, в последнем блоке каждого периода корректировки сложности майнеры устанавливают временную метку на реальное время. Затем временная метка первого блока нового периода корректировки сложности устанавливается обратно в прошлое, всего на одну секунду раньше, чем предпоследний блок предыдущего периода. Эта операция по-прежнему соответствует правилам MTP, поскольку отдельные аномалии не влияют на медиану 11 блоков.
После реализации этой атаки сложность первого периода не будет затронута. Но начиная со второго периода корректировки, сложность начнет снижаться. В это время майнеры смогут создавать блоки с очень высокой скоростью, что может привести к созданию большого количества Биткойн за короткое время, в результате чего они получат неправомерную выгоду.
Жизнеспособность и вызовы атаки
Несмотря на то, что такая атака теоретически имеет разрушительный эффект, её фактическая реализация сталкивается с множеством проблем:
Возможно, потребуется контролировать большую часть вычислительной мощности.
Наличие честных майнеров увеличивает сложность атак.
Правила MTP и временные метки честных майнеров ограничивают степень ретроспективы злонамеренных временных меток.
Если честный майнер сгенерирует первый блок в окне настройки сложности, атака в этом цикле будет неэффективной.
Процесс атаки виден для всех, что может дать сообществу достаточно времени для выпуска срочного программного исправления.
Решение
Существует несколько возможных способов исправить эту уязвимость:
Изменить алгоритм регулирования сложности, вычисляя временной интервал между блоками в разных окнах 2016, и полностью исправить ошибку, связанную с недостающим. Однако это может потребовать жесткого форка.
Отмена правил MTP, требуя, чтобы время всегда двигалось вперед в каждом блоке. Но это может привести к тому, что время застрянет в далеком будущем и создаст проблемы для майнеров, использующих системные часы.
Более простое решение заключается в том, чтобы требовать, чтобы время первого блока нового периода сложности не было раньше определенного количества минут до последнего блока предыдущего периода. В предложении по очистке консенсуса Пуансо это время установлено на 2 часа.
Это ограничение в 2 часа имеет следующие преимущества:
Соответствует правилам временных меток блоков будущего
По сравнению с текущими правилами, это более консервативное изменение.
Коррекция на 0,6% довольно мала
Хотя это все еще позволяет злоумышленникам манипулировать сложностью примерно на 0,6% за каждый цикл, это будет лишь одноразовое изменение, которое не может накапливаться. В целом, это решение достигает хорошего баланса между обеспечением безопасности сети и поддержанием стабильности системы.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
19 Лайков
Награда
19
7
Поделиться
комментарий
0/400
ColdWalletGuardian
· 5ч назад
Я буду спокоен, когда исправлю этот баг.
Посмотреть ОригиналОтветить0
BridgeNomad
· 5ч назад
пострадал от достаточного количества взломов мостов, чтобы знать - этот вектор атаки вызывает у меня посттравматический синдром от моста juno, серьёзно.
Посмотреть ОригиналОтветить0
fren.eth
· 5ч назад
Никто не дурак, кто не хочет получить что-то бесплатно.
Посмотреть ОригиналОтветить0
NotAFinancialAdvice
· 5ч назад
После исправления уязвимости майнеры не могут играть.
Посмотреть ОригиналОтветить0
retroactive_airdrop
· 5ч назад
Починил на пустоту
Посмотреть ОригиналОтветить0
GmGmNoGn
· 5ч назад
Снова исправляю баги, решая одну проблему за другой.
Анализ уязвимости атаки временного искажения на Биткойн: принципы, влияние и решения для исправления
Биткойн безопасность уязвимости: атака временного искажения
Недавно разработчик Биткойн Antoine Poinsot предложил смягченную форк-инициативу под названием "Большой консенсус очистка". Эта инициатива направлена на исправление нескольких давних уязвимостей и слабостей в протоколе Биткойн, включая проблему повторных транзакций, которую мы недавно обсуждали, а также более серьезную уязвимость "атака временного искажения", которая будет подробно рассмотрена в этой статье.
Механизм защиты временных меток блока Биткойн
Перед тем как обсудить атаку с искажением времени, нам необходимо понять текущие правила защиты от манипуляций со временем:
Среднее время в прошлом (MPT) правило: временная метка блока должна быть позже среднего времени 11 предыдущих блоков.
Правила времени блока в будущем: временная метка блока не должна превышать медианное время узловых пиров более чем на 2 часа. Максимально допустимое расхождение времени узла с локальными системными часами составляет 90 минут.
Правила MPT предотвращают отклонение временной метки блока от прошедшего времени, в то время как правила будущих блоков ограничивают временные метки от чрезмерного входа в будущее. Стоит отметить, что невозможно реализовать механизмы, аналогичные правилам будущих блоков, для предотвращения временных меток из прошлого, поскольку это может повлиять на начальную синхронизацию блокчейна. Атака временного искажения использует возможность подделки древних временных меток.
Ошибка «один в минусе» Сатоши Накамото
Цикл корректировки сложности Биткойна состоит из 2016 блоков, что составляет примерно две недели при целевом времени создания блока в 10 минут. При расчете корректировки сложности майнинга протокол вычисляет разницу временных меток между первым и последним блоком в соответствующем окне из 2016 блоков. Это окно из 2016 блоков фактически включает 2015 интервалов блоков (то есть 2016 минус 1). Следовательно, правильное целевое время должно составлять 60 секунд × 10 минут × 2015 интервалов = 1,209,000 секунд. Однако протокол Биткойна использует число 2016 для расчета цели: 60 секунд × 10 минут × 2016 = 1,209,600 секунд. Это典型ная ошибка на единицу, возможно, Сатоши перепутал концепцию блока и интервала между блоками.
Эта ошибка привела к тому, что целевое время стало на 0,05% больше, чем должно быть. На самом деле, целевой интервал времени для Биткойна составляет не 10 минут, а 10 минут и 0,3 секунды. Хотя этот сбой кажется незначительным, с момента запуска Биткойна средний интервал между блоками всегда составлял 9 минут 36 секунд, что явно меньше 10 минут. Это в основном связано с тем, что с 2009 года средняя мощность вычислений постоянно увеличивалась. Это также объясняет, почему недавнее событие халвинга произошло в апреле 2024 года, а не в январе 2025 года. Мы фактически опередили график. В долгосрочной перспективе, когда цены и мощность вычислений станут более стабильными, эта ошибка в 0,3 секунды может помочь нам вернуться к первоначальному графику.
Атака с временным искажением
Атака на искажение времени была впервые обнаружена примерно в 2011 году, она использует ошибку Сатоши Накамото в расчете сложности. Предположим, что майнинг полностью централизован, майнеры могут устанавливать произвольные временные метки в пределах, разрешенных протоколом. Атакующий будет устанавливать временные метки большинства блоков на одну секунду раньше, чем у предыдущего блока, чтобы максимально замедлить продвижение времени блокчейна, одновременно соблюдая правила MTP. Чтобы максимально замедлить продвижение времени, майнер может сохранять одинаковую временную метку на шести подряд идущих блоках, а затем увеличивать время на одну секунду в седьмом блоке, и так далее.
Эта атака приведет к тому, что время блокчейна будет все больше отставать от реального времени, при этом сложность будет постоянно увеличиваться, что сделает майнинг все более трудным. Однако, чтобы усилить эффект атаки, в последнем блоке каждого периода корректировки сложности майнеры устанавливают временную метку на реальное время. Затем временная метка первого блока нового периода корректировки сложности устанавливается обратно в прошлое, всего на одну секунду раньше, чем предпоследний блок предыдущего периода. Эта операция по-прежнему соответствует правилам MTP, поскольку отдельные аномалии не влияют на медиану 11 блоков.
После реализации этой атаки сложность первого периода не будет затронута. Но начиная со второго периода корректировки, сложность начнет снижаться. В это время майнеры смогут создавать блоки с очень высокой скоростью, что может привести к созданию большого количества Биткойн за короткое время, в результате чего они получат неправомерную выгоду.
Жизнеспособность и вызовы атаки
Несмотря на то, что такая атака теоретически имеет разрушительный эффект, её фактическая реализация сталкивается с множеством проблем:
Решение
Существует несколько возможных способов исправить эту уязвимость:
Изменить алгоритм регулирования сложности, вычисляя временной интервал между блоками в разных окнах 2016, и полностью исправить ошибку, связанную с недостающим. Однако это может потребовать жесткого форка.
Отмена правил MTP, требуя, чтобы время всегда двигалось вперед в каждом блоке. Но это может привести к тому, что время застрянет в далеком будущем и создаст проблемы для майнеров, использующих системные часы.
Более простое решение заключается в том, чтобы требовать, чтобы время первого блока нового периода сложности не было раньше определенного количества минут до последнего блока предыдущего периода. В предложении по очистке консенсуса Пуансо это время установлено на 2 часа.
Это ограничение в 2 часа имеет следующие преимущества:
Хотя это все еще позволяет злоумышленникам манипулировать сложностью примерно на 0,6% за каждый цикл, это будет лишь одноразовое изменение, которое не может накапливаться. В целом, это решение достигает хорошего баланса между обеспечением безопасности сети и поддержанием стабильности системы.