Может ли блокчейн опередить цепочка блоков низкой сложности?

Допустим, кто-то создает форк блокчейна, начиная с генезисного блока, когда сложность была абсурдно низкой по сравнению с сегодняшним днем; затем он начинает добывать новые блоки оттуда до текущего блочного индекса.

Обычно для этого требуется такое количество времени, что совершенно невозможно догнать реальный блокчейн; даже если бы он использовал современное мощное оборудование для майнинга, увеличение сложности быстро компенсировало бы это. Но вот в чем загвоздка: он настраивает свое программное обеспечение для майнинга так, чтобы оно никогда не увеличивало сложность, даже если оно добывает сотни блоков в секунду; временные метки блоков просто подделываются, чтобы создать впечатление, что они были сгенерированы с интервалом ~ 10 минут.

Когда поддельный блокчейн длиннее настоящего (на данный момент ~300000 блоков), он начинает его транслировать; кажется, что он соответствует всем правилам и длиннее текущего, поэтому все клиенты и майнеры рассматривают его как выигрышный форк и переключаются на работу над ним. Конечно, сложность резко возрастает, как только на нее оказывается вся мощность хеширования сети, и через некоторое время генерация блоков возобновляется на нормальном уровне.

Но теперь создатель фальшивого блокчейна владеет всеми биткойнами, которые были сгенерированы от генезис-блока до того момента, когда он его выпустил.

Такой сценарий вообще возможен? Если нет, то почему? Как биткойн-узлы отреагируют на форк длиной 300 000 блоков? Есть ли ограничение на длину форка?

«Он настраивает свое программное обеспечение для майнинга, чтобы никогда не увеличивать сложность». Это сделало бы блоки несовместимыми со стандартными биткойн-клиентами.
Нет, если блоки имеют поддельные временные метки, из-за которых создается впечатление, что они генерируются примерно каждые 10 минут; такая скорость генерации не приведет к увеличению сложности. Когда полный поддельный блокчейн будет выпущен, может показаться, что он был сгенерирован постоянным количеством хеш-мощности, которое никогда не требовало увеличения сложности.
Хм, я полагаю, вы правы, с одной большой загвоздкой: чтобы получать 300 000 блоков, генерируемых каждые 10 минут с постоянной (низкой) сложностью и поддельными временными метками, вам нужно, чтобы общий период времени был больше, чем время реального блокчейна. период. Это вызывает проблемы, но, как указывает Нейт, настоящим критерием является сложность, а не длина, так что это не имеет значения.

Ответы (2)

С этим есть две проблемы:

  • Самая «длинная» цепочка блоков выбирается не по общему количеству блоков, а по общей сложности . Цепочка с большим количеством блоков низкой сложности не выиграет.

  • (До 2014 г.) Эталонный клиент Биткойн жестко закодирует хэши относительно недавнего блока в качестве «контрольной точки» и отклонит любую цепочку, не содержащую этот блок на правильной высоте. Таким образом, любая цепочка, которая расходится до контрольной точки, будет игнорироваться.

Отлично, именно тот ответ, который я искал :)
«Эталонный клиент Биткойн жестко кодирует хэши относительно недавнего блока в качестве «контрольной точки» и будет отклонять любую цепочку, не содержащую этот блок на правильной высоте». Это не так, начиная с блока 295000 в 2014 году.
Да, и вы могли бы посмотреть на дату моего ответа... :-)

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

Даже если вы в конечном итоге сопоставите общую работу «настоящей» цепочки, каким-то образом ваш форк будет проигнорирован текущими реализациями, потому что они жестко закодируют идентификаторы некоторых ранних блоков (до 2014 года, но не позже). Было несколько исторических слабостей, которые мотивировали это, но почти все они давно устранены. Причина, по которой существует остаточное закрепление, заключается в том, что с появлением современных ASIC для майнинга стало настолько дешево создавать блоки diff=1, что было бы правдоподобно запустить узел из памяти с блоками с низким diff, пока он был занят, пытаясь выяснить если бы они в конечном итоге составили достаточно работы в целом. Есть несколько известных способов смягчить эту оставшуюся атаку, но все они намного сложнее в реализации, чем простой способ починить старую цепочку.

Существует интересная теоретическая атака, связанная с этой темой — если мы предположим, что скорость хеширования увеличивается экспоненциально навсегда из-за достижений в вычислительной мощности, и мы предположим, что злоумышленник имеет постоянную произвольно малую долю мощности майнинга (потому что он также получает выгоду от технических улучшений) и он пытается запустить форк произвольно далеко назад и корректирует свои временные метки, чтобы получить максимальноетрудности, которую он может получить, то в конечном итоге он получит больше очевидной работы, чем фактическая цепочка с вероятностью 1! Это связано с тем, что его высокая сложность приводит к высокой дисперсии, и в конечном итоге ему произвольно везет, и он прыгает вперед. Предполагаемый экспоненциальный рост означает, что его неудача в прошлом нуждается только в постоянной относительной удаче в настоящем, чтобы преодолеть ее, независимо от того, насколько сильно он отстал в прошлом. Атака является только теоретической, потому что, если вы подставите реалистичные цифры, показатели успеха для такого рода атак станут значительными только после нескольких лет, для которых у нас нет слов. :)