Джефф Герцик вчера установил защиту от повтора в Segwit2x. В этой статье я собираюсь объяснить, как это работает, что вам нужно будет сделать, и почему они сделали это таким образом.

Что такое защита от повтора?

Прежде чем объяснить точную схему защиты от повтора, важно понять, что такое атака повтора. В случае хардфорка без защиты от повтора, транзакции, которые тратят префорковские монеты действительны на обеих цепях. То есть, если Алиса отправляет Бобу 1 монету на цепочке Х, эти транзакции будут действительны на цепочке Y.

Алиса, возможно, намеревается отправить Бобу 1 XCoin и 1 YCoin, в этом случае она будет транслировать транзакцию по обеим цепям и у нее не будет уязвимости. Тем не менее, если она хотела отправить Бобу только 1 XCoin, а не 1 YCoin, появляется проблема. Алиса, конечно, транслирует транзакцию на цепочке Х, но сейчас транзакция становится публичной и уязвимой.

Злоумышленник может взять общедоступную транзакцию, отправив 1Xcoin от Алисы Бобу из цепочки X и воспроизвести ее на цепочке Y. Это приведет к тому, что Боб получит 1 YCoin. Это называется атакой повтора и она вызывает множество непредвиденных транзакций.

Защита от повтора — это обобщенный термин для предотвращения атак повтора злоумышленником. Другими словами, транзакции на цепочке X недействительны на цепочке Y и наоборот.

Сильная двойная защита от повтора vs согласованная защита от повтора

Сильная двойная защита от повтора означает, что транзакции из цепочки Х не действует на цепи Y после хард-форка, и наоборот. То есть, у всех транзакций есть некий маркер, который дает понять, для какой цепи они предназначались.

Bitcoin Cash достиг этого за счет маркировки подписей, которую требует каждая транзакция. Благодаря этому транзакции на их цепочке недействительны на биткоин и наоборот. Это называется “сильной” защитой от повтора, так как никто не может случайно подвергнуться атакам повтора. Сильная защита от повтора — это как автоматическая блокировка двери, которая предотвращает побег транзакции от цепочки X.

Согласованная защита от повтора означает, что транзакциям из цепочки Х нужно сделать что-то особенное, чтобы быть недействительными в цепочке Y. То есть, по умолчанию, транзакции подвергаются атакам повторов, но если вы манипулируете вашими транзакциями определенным образом, транзакция не будет действительна на цепочке Y. Согласованная защита от повторов больше похожа на дверь, которую вы не должны забыть закрыть, ведь в противном случае транзакция может уйти из цепи X и попасть в цепь Y.

Что сделали разработчики Segwit2x?

Разработчики Segwit2x решили в пользу согласованной схемы защиты от повтора. Алиса, отправляя монеты по цепи Legacy Бобу, должна будет отправить небольшую сумму в 3Bit1xA4apyzgmFNT2k8Pvnd6zb6TnwcTi для того, чтобы транзакция была недействительной на другой цепи. Этот адрес был выбран, потому что его легко увидеть визуально (запускает 3Bit) и достаточно легко потратить, так как закрытый ключ хорошо известен.

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

Теперь, прежде чем вы начнете пытаться отправить монеты по указанному выше адресу, нужно учесть один нюанс. Эта схема защиты от повтора активируется только после разделения цепи. То есть бесполезно отправлять небольшую сумму по указанному выше адресу до 18 ноября или около того, когда добудится блок 494784. На этом этапе, отправка транзакций, которые включают в себя небольшое количество по вышеуказанному адресу на цепь Legacy не будет повторятся на другой цепи.

Почему Segwit2x не добавил сильную защиту от повторов, как ВСН?

Разработчики Segwit2x чувствуют, что они собираются быть в цепи большинства после хард-форка. Таким образом, они хотят, чтобы все текущие кошельки, которые существуют в экосистеме биткоин, были совместимы с 2x и не требовали обновления. То есть, кошельки и сервисы не нуждаются в обновлении своего программного обеспечения с согласованной защитой от повтора. Их мнение заключается в том, что сильная защита от повтора приведет к большему расколу экосистемы, чем это необходимо.

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

Что потребуется Core для реализации сильной защиты от повтора?

К сожалению, любая сильная схема защиты от повтора требует хардфорка. Многие разработчики Core считают, что хардфорки требуют много времени и консенсуса сообщества, что является причиной для текущих дебатов с 2x. Таким образом, сильная схема защиты от повтора выглядит маловероятным для принятия.

Что мне нужно сделать, чтобы разделить мои монеты после хардфорка?

Сначала необходимо переместить монеты Legacy на новые адреса (кошелек Legacy), но каждая из этих транзакций должна будет отправить небольшую сумму в 3Bit1xA4apyzgmFNT2k8Pvnd6zb6TnwcTi. Если вы не заботитесь о конфиденциальности, вы можете сделать одну гигантскую транзакцию, которая отправляет все ваши текущие биткоины на другой адрес или набор адресов. Просто убедитесь, что вы также отправите небольшую сумму на 3Bit1xA4apyzgmFNT2k8Pvnd6zb6TnwcTi в той же транзакции.

После этого, вы можете отправить ваши 2x монеты по разным адресам, и это будет ваш 2x кошелек.

Вывод

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