< >

Что такое атака повторного воспроизведения (replay attack)

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

Чтобы понять, что такое атака повторного воспроизведения, сначала нам надо понять, как осуществляются транзакции в блокчейне биткоина. Для этого будем рассматривать биткоин как глобальный реестр, а транзакции – как банковские чеки. Поскольку глобальный реестр имеет цифровой формат, любой пользователь может провести его аудит, просто скачав полную копию блокчейна на свой жёсткий диск. Это также означает, что все чеки в реестре публичны. Любой желающий может изучить транзакцию и подтвердить верность её подписи.

Хард форк – это обновление глобального реестра. Если все произведут обновление, то сохранится только один глобальный реестр. Если не все произведут обновление, то возникнет 2 глобальных реестра: старый и новый.

До момента форка оба реестра полностью совпадают друг с другом. Они содержат одинаковую историю транзакций. Однако, после форка, майнеры начнут находить новые блоки, в результате чего в этих реестрах будут проводиться разные транзакции, а значит, и отличаться остатки по счетам. К примеру, это произошло во время хард форка Bitcoin Cash 1 августа 2017.

Если вы имеете положительный остаток по счёту в реестре до разделения, то после разделения у вас будут одинаковые положительные остатки по счетам в обоих реестрах. Но что если вы захотите потратить деньги в одном реестре и сохранить их в другом?

На этом этапе возникает проблема. Если вы тратите деньги в одном реестре, то кто-то может скопировать ваш чек, содержащий вашу подпись, и представить его для включения в другой реестр. Таким образом, злоумышленник может потратить ваши деньги в одном из реестров, потому что ваша подпись верна в каждом из них. Конечно, вместе с этим будет скопирован и адрес получателя, а также сумма чека (иначе подпись будет неверной), но это в любом случае представляет серьёзную проблему.

Человек, использующий копию чека в другом реестре, осуществляет повторное воспроизведение транзакции, в то время как вы намеревались перевести деньги только в одном из них. Это и называется атакой повторного воспроизведения.

Bitcoin Cash решил эту проблему, немного изменив сам чек. Они создали специальную отметку на чеке, которая помогает определить, что этот чек относится к реестру Bitcoin Cash, а не к другому реестру.

Таким образом, любой узел, работающий в сети биткоина, автоматически отклоняет чеки Bitcoin Cash, поскольку на его чеках есть специальная отметка. Любой узел, работающий в сети Bitcoin Cash, отклоняет чеки биткоина, потому что на них такой отметки нет.

Это отметка называется защитой от повторного воспроизведения, поскольку она не позволяет провести атаку повторного воспроизведения.

Разработчики Segwit2x отказываются добавлять защиту от повторного воспроизведения. Они утверждают, что Bitcoin Core сам должен добавить эту защиту в блокчейн биткоина, если их это так беспокоит.

К сожалению, реализация защиты от повторного воспроизведения в большинстве случаев возможна только в результате хард форка. Как известно, хард форки не обладают обратной совместимостью. Кроме того, не все обновят программное обеспечение, в результате чего возникнет ещё один реестр. Многие разработчики Bitcoin Core придерживаются мнения, что хард форк, реализация которого не запланирована за 12+ месяцев, пойдёт по этому сценарию.

Таким образом, если Bitcoin Core решит добавить защиту от повторного воспроизведения в оставшийся промежуток времени (до реализации Segwit2x остаётся 3 месяца), то, скорее всего, возникнет 3 реестра: Segwit2x, биткоин с защитой и старый биткоин. Сюда можно добавить ещё Bitcoin Cash.

Если вы пользуетесь биткоином и хотите обезопасить себя от атак повторного воспроизведения после хард форка Segwit2x, то вам придётся разделить свои счета в реестрах Bitcoin Core и Segwit2x.

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

Это так называемые coinbase-транзакции, то есть транзакции, которые поступают на адрес майнеров и несут с собой награды за майнинг блоков. Естественно, в разных блокчейнах эти транзакции будут разными, и, следовательно, их нельзя повторно воспроизвести в другом блкочейне. Если вы создаёте транзакцию, которая смешивается с невоспроизводимой транзакцией, то вы получаете ещё одну невоспроизводимую транзакцию. Все последующие транзакции, которые будут смешиваться с новой невоспроизводимой транзакцией также будут становиться невоспроизводимыми. Таким образом, по сети постепенно будет распространяться всё большее число невоспроизводимый транзакций.

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