Перейти к содержимому

В алгоритме майнинга биткоина нашли баг, существовавший с первого дня работы сети

Исследователь Лоик Морель выявил вычислительную ошибку в механизме корректировки сложности биткоина, которая теоретически позволяет генерировать блоки с аномальной скоростью.

📝
Редакция
0
Редакция · 0 статей

Ошибка, заложенная Сатоши

Исследователь Лоик Морель (Loïc Morel) сообщил о вычислительном баге в механизме майнинга биткоина, который присутствует в коде с самого запуска сети. Уязвимость связана с алгоритмом корректировки сложности и теоретически может быть использована для добычи блоков с экстремально высокой скоростью.

«Satoshi s'est trompé. Il y a un bug dans le minage de Bitcoin depuis le tout premier jour. C'est une simple erreur de calcul de Satoshi qui pourrait être exploitée pour miner des blocs à une vitesse délirante. C'est un des bugs que le BIP-0054 (en discussion) résout.» — Loïc Morel (@Loic_Pandul), оригинальный пост

Почему это важно

Механизм корректировки сложности — один из фундаментальных столпов биткоина. Он обеспечивает стабильный темп генерации блоков: примерно один каждые 10 минут. Каждые 2016 блоков (около двух недель) узлы сети пересчитывают целевой показатель сложности, сопоставляя фактическую продолжительность прошедшего периода с эталонным значением (2016 × 600 = 1 209 600 секунд). Если в этом механизме существует эксплуатируемый изъян, под угрозой оказывается целостность всей сети — от корректности подтверждения транзакций до экономической модели вознаграждения майнеров.

В чём суть бага

Проблема квалифицируется как классическая ошибка «смещения на одну единицу» (off-by-one error). При измерении длительности последнего периода узел берёт разницу между временной меткой первого блока периода и меткой последнего. На первый взгляд это логично, но между первым и последним блоками насчитывается лишь 2015 интервалов, а не 2016.

Формально: если t0 — метка первого блока, а t2015 — метка последнего, то вычисленное время T = t2015 − t0 охватывает 2015 промежутков (от t0 до t1, от t1 до t2 и так далее до t2015). Корректная формула потребовала бы использования метки последнего блока предыдущего периода: T = t2015 − t−1.

Сам по себе этот баг вносит погрешность порядка 0,05% в сторону слегка завышенной сложности — величина незначительная. Однако реальная опасность кроется в побочном эффекте: периоды корректировки не перекрываются. Временная метка последнего блока одного периода не участвует в расчёте следующего, создавая разрыв.

Атака «искривления времени»

Описанный разрыв между периодами открывает возможность для атаки, известной как «искривление времени» (time warp attack). Морель описал её механику следующим образом:

  • Майнер, контролирующий значительную долю хешрейта, выставляет минимально допустимые временные метки для всех блоков в периоде, кроме последнего.
  • Последнему блоку присваивается максимально допустимая метка — искусственно сдвинутая в будущее.
  • При пересчёте сложности система «видит» период как более продолжительный, чем он был в реальности, и снижает сложность.
  • В следующем периоде атакующий повторяет манипуляцию. Поскольку периоды не перекрываются, первый блок нового периода может нести метку из далёкого прошлого, хотя предшествующий блок был помечен будущим временем.
  • С каждым циклом разрыв нарастает, и после нескольких итераций сложность теоретически может упасть до уровня, при котором генерируется до шести блоков в секунду — вместо одного каждые 10 минут.

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

Предложенное решение — BIP-0054

Морель указал, что устранить уязвимость можно через софтфорк, предусмотренный предложением BIP-0054, которое сейчас находится на стадии обсуждения. Суть инициативы: первый блок нового периода сложности должен иметь временную метку, превышающую метку последнего блока предыдущего периода не более чем на два часа.

Такое ограничение восстанавливает непрерывность между периодами, ликвидирует разрыв, используемый при атаке «искривления времени», и делает манипуляции с метками практически невозможными. Атака была бы исключена, если бы первый и последний блоки двух последовательных периодов совпадали — именно этот принцип и закладывает BIP-0054.

Ранее, в феврале, партнёр Castle Island Ventures Ник Картер прогнозировал «корпоративный захват» биткоина на фоне квантовой угрозы — тема устойчивости протокола к различным типам атак остаётся одной из центральных в дискуссиях разработчиков.

bip-0054bitcoindifficulty-adjustmentminingsecuritytime-warp-attackvulnerability

Часто задаваемые вопросы

Что за ошибка нулевого дня найдена в майнинге биткоина?

Это классическая ошибка «смещения на одну единицу» (off-by-one) в алгоритме корректировки сложности. При расчёте длительности периода узел считает 2015 интервалов вместо 2016, создавая разрыв между последовательными периодами. Сама по себе погрешность составляет около 0,05%, но побочный эффект делает возможной атаку «искривления времени».

Что такое атака искривления времени в биткоине?

Атака time warp позволяет майнеру с большой долей хешрейта манипулировать временными метками блоков, искусственно занижая сложность майнинга. После нескольких циклов сложность теоретически может упасть до уровня, при котором генерируется до шести блоков в секунду вместо одного каждые 10 минут.

Как BIP-0054 исправит баг в майнинге биткоина?

BIP-0054 предлагает софтфорк, который ограничивает временную метку первого блока нового периода: она не может превышать метку последнего блока предыдущего периода более чем на два часа. Это восстанавливает непрерывность между периодами и делает атаку «искривления времени» невозможной.

Кто обнаружил ошибку в алгоритме сложности биткоина?

Об уязвимости сообщил исследователь Лоик Морель (Loïc Morel) в публикации от 11 апреля 2026 года. Он подробно описал механизм бага и возможность его эксплуатации через манипуляцию временными метками блоков.

Насколько опасна ошибка смещения в майнинге биткоина?

Погрешность самого бага составляет около 0,05% — это незначительно. Однако побочный эффект в виде разрыва между периодами корректировки открывает возможность для атаки, которая теоретически может снизить сложность до критически низких значений и перегрузить сеть.

Читайте также

Рынок

Bitcoin –2,5% за неделю: обвинения Jane Street и 7 форков Ethereum

Биткоин потерял 2,5% за неделю на фоне геополитических шоков, Jane Street обвинили в систематическом давлении на цену BTC, а Ethereum Foundation опубликовала дорожную карту с семью хардфорками.

6 мин·🔥 1
Бизнес

TON Wallet запустил хранилища для пассивного дохода на BTC, ETH и USDT прямо в Telegram

TON Wallet представил хранилища (vaults) для пассивного дохода на BTC, ETH и USDT прямо в Telegram — до 18% годовых на стейблкоины через партнёрство с Morpho, TAC и Re7.

2 мин·🔥 1
Аналитика

Недельный обзор: спасение экосистемы Aave на 100 000 ETH и квантовый взлом ключа ECC

Биткоин удержался у $78 000, DeFi-сообщество мобилизовало свыше 100 000 ETH для восстановления экосистемы после взлома Kelp, а исследователь впервые извлёк 15-битный ключ ECC на квантовом компьютере.

5 мин·🔥 0
Рынок

Strategy стала лидером по шортам в США: ставки на $6 млрд

Акции Strategy возглавили рейтинг Goldman Sachs по объёму коротких позиций среди крупнокапитализированных бумаг США: шорты достигли $6 млрд при капитализации в $42 млрд на фоне падения котировок на 61%.

3 мин·🔥 0
Рынок

Институциональные инвесторы сбросили ETF-акции на 25 000 BTC во время рыночного обвала

Хедж-фонды и инвестиционные советники избавились от позиций в биткоин-ETF на 25 098 BTC за четвёртый квартал, усилив давление на рынок в период масштабной коррекции.

3 мин·🔥 1
Рынок

Биткоин достиг $70 000 на фоне надежд на перемирие в Иране

6 апреля BTC вырос на 4% и протестировал отметку $70 000 благодаря новостям о возможном прекращении огня между США, Израилем и Ираном. Рынок деривативов при этом демонстрирует противоречивые сигналы.

3 мин·🔥 0