Оглавление
В ноябре все, кто подписал знаменитое «Нью-Йоркское соглашение» (New York Agreement, NYA), планируют развернуть хардфорк SegWit2X для увеличения размера блока в блокчейне биткоина биткоина до 8 мегабайт. Поскольку не все поддерживают этот хардфорк, он вполне может «разделить» сеть биткоина на два несовместимых блокчейна и две валюты, почти так же, как это вышло с биткоином и bitcoin Cash (Bcash) два месяца назад.
Однако хардфорк NYA представляется довольно спорным — и не только потому, что ему не хватает консенсуса. Он также спорный по своему проектному решению, созданному разработчиками программного клиента BTC1, связанного с Нью-Йоркским соглашением. Здесь стоит заметить, что эта команда разработчиков во главе с CEO компании Bloq Джеффом Гарзиком, до сих пор отказывается внедрять защиту от повторного воспроизведения (replay attack), в отличие от того же Bitcoin Cash. Отчасти по этой причине, по крайней мере один из подписавших NYA — Wayniloans — в последствие отказался от него.
Итак, что такое защита от повторного воспроизведения, почему разработчики BTC1 должны её обязательно реализовать… и почему это еще не сделано?
Издание Bitcoin Magazine опубликовало статью-исследование на эту тему, предлагаем вам перевод.
Что такое защита от повтора? (И что такое повторные атаки?)
Итак, похоже, биткоин испытает на себе ещё один «раскол» в ноябре. (Возможно, более точнее будет рассматривать «разделяющие» узлы и майнеров как совершенно новую криптовалюту с новым блокчейном и токеном, а не фактический раскол самого биткоина). Для целей этой статьи мы будем ссылаться на блокчейн и валюту, которые относятся к текущему протоколу биткоина как «Legacy Bitcoin» [унаследованный] или «BTC». Блокчейн и валюта, которые появятся после хардфорка по Нью-Йоркскому соглашению, будут называться «SegWit2X» и «B2X».
Если такое разделение произойдет, эти две цепочки будут идентичными. Все прошлые транзакции и (следовательно) «балансы» будут скопированы из блокчейна Legacy Bitcoinна блокчейн SegWit2X. Любому владельцу биткоинов будет принадлежать и соответствующая сумма в B2X.
Без защиты от повтора новые транзакции будут одинаково действительны для обеих цепочек. Это означает, что эти транзакции могут быть скопированы из одного блокчейна в другой, — другими словами, они будут на обеих цепочках. Это и называется «повторной атакой».
Итак, предположим, что во время раскола Алиса хранит BTC, это означает, что у нее также появятся B2X после раскола. Затем, после раскола, она хочет переслать свои BTC Бобу. Таким образом, она создает транзакцию, которая должна отправить биткоины с одного из её адресов (Legacy Bitcoin) на один из адресов (Legacy Bitcoin) Боба. Затем она передаёт эту транзакцию через сеть Legacy Bitcoin для майнера сети Legacy Bitcoin – чтобы он взял эту транзакцию и включил её в блок Legacy Bitcoin. Итак, платёж подтвержден, и всё хорошо.
Но эта же транзакция полностью применима и для к блокчейна SegWit2X. Любой может совершить такую же транзакцию Legacy Bitcoin, и передать её через сеть SegWit2X для майнера, чтобы он включил её в блок SegWit2X (причем это может произойти даже случайно). Если такой платёж также подтвержден, это означает, что отправляющий непреднамеренно отправил не только биткоины (BTC), но и равную сумму в B2X.
И, конечно же, всё это верно и в обратном направлении. Если Алиса отправит B2X Бобу, она может случайно послать ему биткоины (BTC). Таким образом, отсутствие защиты от повтора является проблемой для пользователей обеих цепей. Никто не хочет случайно отправлять деньги — даже если это были бы «свободные деньги».
Технически существуют способы «разделить» монеты на обе цепи, так, чтобы они могли быть потрачены только на одной цепочке. Это, например, потребовало бы, чтобы в транзакцию входили новые монеты. Также временные замки могли бы стать решением. Но это трудно реализовать, особенно для обычных пользователей — не говоря уже о том, что многие обычные пользователи могут даже не знать, в каком порядке это происходит.
Чтобы избежать такого рода хлопот, по крайней мере одна из сторон могла бы добавить правило протокола, чтобы гарантировать, что новые транзакции действительны для одной цепочки, но не для другой. Это и называется защитой от повтора.
Почему в BTC1 стоит реализовать защиту от повтора? (И почему не Bitcoin core?)
В случае раскола, по крайней мере, одна сторона должна реализовать защиту повторного воспроизведения. Однако многие — как Bitcoin Core, так и другие — считают, что есть только один жизнеспособный вариант. Это «раскалывающая» сторона — в данном случае BTC1 — должна на это пойти.
В пользу этого имеется несколько аргументов.
Прежде всего, наиболее целесообразно именно BTC1 реализовать защиту от повтора, поскольку это потребует наименьших усилий. BTC1 — это новый клиент, который в любом случае уже внедряет новые правила протокола, и он пока ещё не очень широко распространён. BTC1 могла бы относительно легко включить в код защиту от повтора.
Между тем, если Bitcoin Core реализует защиту от повтора, этого будет недостаточно. Хотя Core и является доминирующей цепью и даже рассматривается некоторыми как эталонная реализация, определяющая протокол, Bitcoin Core не является единственной реализацией биткоина в сети. Bitcoin Knots, Bcoin, Libbitcoin и другие альтернативные клиенты должны были бы также реализовать защиту от повтора. (И это даже не учитывая клиентов с неполным узлом).
Однако, что ещё более важно, реальность нынешней ситуации заключается в том, что у всех развёрнутых узлов биткоина нет защиты от повтора. И логически их тоже не может быть: часть этих узлов появилась раньше Нью-Йоркского соглашения. Поэтому, даже если Bitcoin Core и другие реализации должны были бы сделать защиту от повтора в новых версиях своего программного обеспечения, этого было бы недостаточно. Также все пользователи должны были бы обновиться до этой новой версии в течение примерно двух месяцев – это очень короткий период времени для обновления всей сети.
Если бы только некоторые из узлов сети обновлялись до этих новых версий, биткоин мог фактически разделиться на три: Legacy Bitcoin, SegWit2X и Replay Protected Bitcoin(защищённый от повтора). Излишне говорить, что этот трехсторонний раскол мог бы сделать проблему хуже – и точно не лучше.
Наконец, есть и философский аргумент. Утверждается, что любой, кто хочет принять новые правила протокола, берёт на себя ответственность отделиться как можно безопаснее. Эта ответственность не должна относиться к тем, кто хочет продолжать использовать существующий протокол: они могут использовать протокол таким, какой он есть.
Многие разработчики, в том числе основатель RSK Серхио Лернер, который разработал предложение SegWit2Mb, на котором основан SegWit2X, утверждали, что клиент BTC1 должен реализовать защиту от повтора. Фактически, многие разработчики считают, что любой хардфорк, даже тот, который полностью не спорный, должен обеспечивать защиту от повтора.
Однако пока что команда разработчиков BTC1 намерена рассматривать только опционную защиту от повтора (как дополнительную).
Что не так с опционнальной защитой от повтора?
Например, реализация опциональной защиты от повтора, предложенная бывшим разработчиком биткоина Гевином Андресеном, в настоящее время находится на повестке дня BTC1.
Короче говоря, этот тип опциональной защиты от повтора сделал бы определенные специально созданные («OP_RETURN») транзакции Legacy Bitcoin недействительными для цепочки SegWit2X. Любой, кто захочет разделить свои монеты, может потратить свои биткоины для такой транзакции. Затем эти транзакции должны быть подтверждены в блокчейне Legacy Bitcoin, но не в цепочке SegWit2X. Это в итоге разделяет монеты на разные адреса («выходы») на обеих цепочках.
Такая опциональная защита от повтора, вероятно, лучше, чем ничего, но это ещё не окончательное решение.
Одна из проблем заключается в том, что блокчейн Legacy Bitcoin должен включать в себя все эти OP_RETURN транзакции. Это, вероятно, приведёт к большему количеству транзакций в сети и потребует дополнительных данных для каждой транзакции. Все эти данные должны быть переданы, проверены и (хотя бы временно) сохранены всеми узлами Legacy Bitcoin. Это создаёт нагрузку для сети Legacy Bitcoin.
Однако этот вариант использовать непросто. Его может оказаться достаточно для профессиональных пользователей — бирж, поставщиков кошельков и других поставщиков услуг, а также для опытных пользователей. Это, как правило, относится к пользователям, которые сумели бы разделить свои монеты даже без защиты от повтора. Средним пользователям, если они даже знают о том, что происходит, вероятно, будет намного сложнее использовать опционную защиту от повтора.
Таким образом, опционная защита от повтора предлагает помощь тем, кто в ней нуждается меньше всего, и мало поможет тем, кто в ней нуждается больше всех.
Предоставляет ли NYA защиту от повтора?
Неясно, что обсуждали тогда за закрытыми дверями, но Нью-Йоркское соглашение представляется весьма минимальным. Опубликованное 23 мая 2017 года, оно действительно состоит только из двух конкретных пунктов:
- «Активировать SegWit на пороге 80 %, сигнализируя о бит 4».
- «Активировать ‘2 МБ-й' хардфорк в течение шести месяцев».
После первого пункта, завершенного через BIP91, единственным оставшимся пунктом является ‘2 МБ-й' хардфорк, который должен быть принят до 23 ноября. (Это предполагает, что эта хардфорк не был завершён с созданием Bitcoin Cash, который поддерживается теми, кто подписал NYA).
Примечательно то, что многих деталей не хватает. Например, в соглашении даже не указано конкретно, что подписавшие должны запустить программное обеспечение BTC1: любую программную реализацию, которая приведёт к 2 МБ хардфорку. Это даже могло включать в себя любое ПО, которое реализует защиту от повтора. И, конечно же, ничего в Нью-Йоркском соглашении не останавливает BTC1 от реализации защиты от повтора; некоторые подписавшиеся, возможно, предполагали такой подход и надеялись на него.
Почему BTC1 не реализует защиту от повтора?
Существует несколько причин — как заявленных, так и предполагаемых, по которым BTC1 может не захотеть добавить защиту от повтора.
Первая причина заключается в том, что защита от повтора потребовала бы обновления кошельков с упрощённой проверкой платежа (SPV) и некоторых тонких клиентов, с тем, чтобы отправлять и получать транзакции на SegWit2X. Таким образом, защита от повтора, по словам разработчика BTC1 Джеффа Гарзика, будет «ломать» кошельки SPV; т.е. они не будут совместимы с SegWit2X, пока не обновлены.
Такая постановка задач и выбор слов спорны. Если бы SegWit2X должен был реализовать защиту от повтора (и если бы кошельки SPV не обновлялись), то эти кошельки могли бы отправлять и получать транзакции на Legacy Bitcoin совершенно нормально. Кроме того, они не будут случайно тратить B2X, когда этого не требуется.
Между тем, если цепочка SegWit2X не реализует защиту от повтора (и если SPV-кошельки не обновляются), пользователи не могут быть уверены, что их кошелёк получает или отправляет транзакции биткоина или транзакции B2X, или, и то, и другое. Они также не смогут быть уверенными в том, является ли баланс их кошелька балансом биткоина или балансом B2X, или, и тем, и другим. И если вычислительная мощность переместится от одной цепочки к другой с течением времени, то эти кошельки смогут даже переключаться с отображения баланса биткоина на отображение баланса B2X или, наоборот – без ведома пользователя. (Эта проблема могла бы быть решена частично — с помощью другого обходного способа, хотя он ещё не реализован нигде).
Таким образом, возможно, что отказ от реализации защиты от повтора на SegWit2X «сломает» SPV кошельки, что приведёт к худшим результатам.
Единственный (оправданный) сценарий, в котором реализация защиты от повтора не сломает кошельки SPV, тот, при котором не существовалы бы Legacy Bitcoin, о котором можно говорить. Действительно, Нью-йоркское соглашение особым образом намерено «модернизировать» биткоин, а не просто отделить от него новую монету, как это было с bitcoin cash. И основываясь на сигналах майнеров и заявлениях о намерениях нескольких крупных биткоин компаний, некоторые сторонники соглашения NYA утверждают, что Legacy Bitcoin не сможет выжить вообще.
Таким образом, реализация защиты от повтора иногда рассматривается как признание того факта, что SegWit2X будет отделяться от биткоина (Legacy Bitcoin) во что-то новое и не будет считаться обновленной версией биткоина.
Но предположение о том, что Legacy Bitcoin не сможет выжить, слишком смелое. В действительности, сигнализация майнеров фактически бессмысленна, в то время как Bitcoin Core — доминирующая реализация биткоинов — не будет использовать хардфорк. Существует также внушающий список компаний, которые не заявляли, что они поддерживают хардфорк, в том числе два майнинг пула из топ-10. Точно так же непонятно, смогут ли многие (индивидуальные) пользователи поддерживать SegWit2X. Реализация защиты от вытеснения (другая мера безопасности) также предполагает, что даже разработчики BTC1 не уверены, что будет только одна цепочка.
И неясно, будет ли защита от повтора влиять на всё это. Если майнеры, разработчики, компании и пользователи должны рассматривать SegWit2X как обновление биткоина, они, вероятно, сделают это с защитой от повтора или без неё.
Вот почему также было высказано предположение о том, что BTC1 отвергает защиту от повтора для конкретной цели – быть как можно более разрушительным. Если цепочка Legacy Bitcoin в итоге станет непригодной, то у SegWit2X могут оказаться лучшие шансы быть признанным «биткоином».