“Атака 51%” и устойчивость блокчейна биткоина

Александр Подобных, 19/05/23
Децентрализованная сеть биткоина ставит метки времени на транзакции, соединяя их в цепочку доказательств проделанной работы на основе хеширования. Сформированные таким образом записи невозможно изменить, не выполнив заново всего объема вычислений. Самая длинная версия цепочки служит не только подтверждением очередности событий, но и доказывает, что над ней произвел работу самый большой вычислительный сегмент сети. Система находится в безопасности, пока под совокупным контролем ее честных участников находится больше вычислительной мощности, чем под контролем группы действующих совместно злоумышленников. В противном случае реализуется сценарий, названный “атака 51%”.
Автор: Александр Подобных, руководитель Санкт-Петербургского РО АРСИБ, руководитель Комитета по безопасности цифровых активов и противодействию мошенничеству, судебный эксперт

До тех пор пока большая часть вычислительных мощностей контролируется узлами, не объединенными с целью атаковать сеть, они будут генерировать самую длинную цепочку, опережая любых злоумышленников. Устройство самой сети очень простое: сообщения рассылаются на основе принципа наименьших затрат, а узлы могут покидать сеть и снова подключаться к ней в любой момент, принимая самую длинную версию цепочки для восстановления пропущенной истории транзакций.
Технологическая устойчивость биткоина основана на криптографии, а не на доверии третьей стороне, как это происходит в традиционных финансах. Вычислительная сложность и, как следствие, дороговизна отмены транзакций ограждает продавцов от мошенничества.

[img]https://www.itsec.ru/hs-fs/hubfs/riss.png?width=1339&height=862&name=riss.png[/img]

Доказательство работы

Для реализации распределенного однорангового сервера меток времени разработчики использовали схему “доказательство работы”, подобную системе Hashcash. Ее суть заключается в поиске такого значения, хеш которого (например, SHA-256) начинался бы с некоторого числа нулевых битов. Требуется выполнить объем работы, экспоненциально зависящий от числа нулей, но для проверки найденного значения достаточно вычислить лишь один хеш. В сервере меток времени поиск значения с нужным хешем происходил путем перебора значения итерируемого поля-добавки (nonce) в блоке данных. Как только блок, удовлетворяющий условию, найден, его содержимое нельзя изменить, не выполнив заново всей работы. И если он не является последним в цепочке, эта работа включает в себя и перевычисление всех блоков, следующих за ним.
Доказательство работы через хеширование также решает вопрос об определении версии, поддерживаемой большинством. Если голосом считается один IP-адрес, то такую схему можно скомпрометировать, если контролировать большой диапазон адресов. Схема биткоина основана на принципе “один процессор – один голос”. Самая длинная из хеш-цепочек выражает мнение большинства, которое вложило в нее наибольшее количество ресурсов.
Если более половины вычислительной мощности принадлежит честным узлам, то цепочка честных транзакций будет расти быстрее и опередит любую конкурирующую цепь. Чтобы внести изменения в любой из прошлых блоков, атакующему придется выполнить заново работу над этим блоком и всеми последующими, а затем догнать и перегнать честных участников по новым блокам. Вероятность такого успеха у злоумышленника, обладающего меньшими ресурсами, экспоненциально убывает в зависимости от числа блоков.
Для компенсации возрастающей вычислительной мощи процессоров и колебания числа работающих узлов в сети сложность хеширования изменяется (примерно раз в две недели), чтобы обеспечивать равномерную скорость генерации блоков (около 10 мин.) Если они появляются слишком часто, сложность возрастает и наоборот.
Участники всегда считают истинной самую длинную версию цепочки и работают над ее удлинением. Если два узла одновременно опубликуют разные версии очередного блока, то кто-то из остальных пиров получит раньше одну версию, а кто-то другую. В таком случае каждый начнет работать над своей версией цепочки, сохранив другую на случай, если она окажется продолжена раньше. Двойственность исчезнет, как только будет получен новый блок, который продолжит любую из ветвей, и те узлы, что работали над конкурирующей версией, переключатся на нее.

Экономия дискового пространства

Как только последняя транзакция в цепочке окажется внутри достаточно старого блока, все предшествующие ей транзакции в цепочке могут быть удалены в целях очистки дискового пространства. Чтобы хеш блока остался неизменным, все транзакции в блоке хранятся в виде хеш-дерева Меркла и лишь его корень включается в хеш блока. Размер старых блоков может быть уменьшен за счет удаления ненужных ветвей этого дерева, хранить промежуточные хеши необязательно.
Заголовок пустого блока будет составлять около 80 байт. Из расчета скорости генерации блока раз в 10 мин. получаем 80*6*24*365 = 4,2 Мбайт в год. Для среднестатистического на 2008 г. компьютера с 2 Гбайт оперативной памяти, с учетом закона Мура, предсказывающего рост на 1,2 Гбайт в год, хранение данных не будет проблемой, даже если все заголовки блоков будут находиться в памяти.

Упрощенная проверка платежей

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

Конфиденциальность технологии

Традиционная банковская модель поддерживает необходимый уровень конфиденциальности, предоставляя доступ к информации лишь сторонам-участницам и доверенному третьему лицу. Необходимость открытой публикации транзакций исключает такой подход, однако приватность по-прежнему можно сохранить, если публичные ключи анонимны. Открытой будет информация о том, что кто-то отправил кому-то некоторую сумму, но без привязки к конкретным личностям. Столько же данных раскрывается и на фондовых биржах, которые публикуют время и объем частных сделок, не указывая, между кем именно они были совершены.
Дополнительной защитой будет являться генерация новой пары “открытый/закрытый ключ” для каждой транзакции: это предотвратит связывание различных платежей с их общим отправителем или адресатом. Некоторого публичного связывания все же не избежать: транзакции с несколькими входами доказывают, что эти суммы принадлежат одному лицу. Риск состоит в том, что раскрытие личности владельца ключа может привести к раскрытию и всех принадлежащих ему транзакций.

Оценка вероятности “атаки 51%”

Рассмотрим сценарий, в котором злоумышленник пытается генерировать более длинную цепь блоков, чем честные участники. Даже если он преуспеет, это не приведет к тому, что можно будет создавать деньги из воздуха, присваивать себе чужие монеты или вносить иные произвольные изменения. Узлы никогда не примут некорректную транзакцию или блок, содержащий ее. Атакующий может лишь пытаться изменить одну из своих транзакций, чтобы возвратить отправленные деньги.
Гонку между честными участниками и нападающим можно представить как биномиальное случайное блуждание. Успешное событие, когда “хорошая” цепь удлиняется на один блок, приводит к увеличению отрыва на единицу, а неуспешное, когда очередной блок создает злоумышленник, – к его сокращению. Вероятность атакующего наверстать разницу в несколько блоков такая же, как и в задаче о “разорении игрока”. Представим, что игрок имеет неограниченный кредит, начинает с некоторым дефицитом и у него есть бесконечно много попыток, чтобы отыграться. Вероятность того, что он преуспеет, как и вероятность злоумышленника догнать честных участников, вычисляется следующим образом:
p = вероятность появления блока в честной цепочке,
q = вероятность того, что блок создаст атакующий,
qz = вероятность того, что атакующий наверстает разницу в z блоков.

[img]https://www.itsec.ru/hs-fs/hubfs/ris1_1-1.png?width=255&height=86&name=ris1_1-1.png[/img]

В случае p > q вероятность уменьшается экспоненциально с ростом числа блоков, на которое отстает злоумышленник. Поскольку все ставки против него, без удачного рывка в начале его шансы на успех становятся ничтожно малы.
Рассмотрим теперь, как долго получателю платежа стоит ждать, прежде чем он будет полностью уверен, что бывший владелец не сможет отменить транзакцию. Предположим, что злоумышленник-отправитель позволяет адресату некоторое время верить, что платеж был проведен, после чего возвращает деньги себе. Получатель узнает об этом, но мошенник надеется, что будет уже слишком поздно.
Адресат создает новую пару ключей и сообщает свой публичный ключ отправителю прямо перед подписанием транзакции. Это не позволит отправителю заранее начать работать над цепочкой и провести транзакцию в тот момент, когда он будет достаточно удачлив, чтобы совершить рывок вперед. После отправки платежа мошенник начинает втайне работать над параллельной версией цепочки, содержащей альтернативную транзакцию.
Получатель ждет, пока транзакция не будет добавлена в блок и тот не будет продолжен еще z блоками. Ему неизвестен прогресс злоумышленника, но если средняя скорость генерации честных блоков известная величина, то число блоков атакующего подчиняется распределению Пуассона с математическим ожиданием:

[img]https://www.itsec.ru/hs-fs/hubfs/ris2_1-1.png?width=72&height=58&name=ris2_1-1.png[/img]

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

[img]https://www.itsec.ru/hs-fs/hubfs/ris4_1-1.png?width=258&height=68&name=ris4_1-1.png[/img]

Перегруппировав слагаемые и избавляясь от бесконечного ряда, получаем:

[img]https://www.itsec.ru/hs-fs/hubfs/ris3_1.png?width=272&height=70&name=ris3_1.png[/img]

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

История “атак 51%” на известные блокчейны

Несколько блокчейнов сталкивались с “атакой 51%”: Bitcoin Gold (BTG) в мае 2018 г., Verge (XVG) в апреле 2018 г., Ethereum Classic (ETC) в январе 2019 г., Feathercoin (FTC) в июле 2013 г.
Хотя успешных “атак 51%” на блокчейн биткоина не было, в прошлом были попытки провести такие атаки.
В 2014 г. майнинговый пул Ghash.io временно контролировал более 50% от общей вычислительной мощности сети биткоина, вызвав опасения в сообществе. Однако Ghash.io быстро принял меры и разделил свою вычислительную мощность между несколькими пулами, что помогло предотвратить “атаку 51%”.
В декабре 2017 г. майнинговый пул NiceHash стал жертвой кибератаки, в результате которой злоумышленникам удалось украсть более 4700 биткоинов, на тот момент стоимостью около $80 млн. Хотя эта атака не была непосредственно связана с “атакой 51%”, она подчеркивает угрозу, которую представляют кибератаки для блокчейн-сетей.
В январе 2018 г. майнинговый пул Bitmain Antpool временно контролировал более 50% от общей вычислительной мощности сети биткоина. Однако сообщество быстро отреагировало и приняло меры, чтобы предотвратить “атаку 51%”.
После успешной “атаки 51%” на блокчейн восстановление может быть довольно сложным процессом, особенно если было скомпрометировано большинство узлов сети.
Один из способов восстановления – это hard fork (хардфорк, жесткий раздел) блокчейна, при котором происходит создание новой версии блокчейна с измененным протоколом, который может предотвратить повторение атаки в будущем. Однако хардфорк может привести к разделению сообщества и созданию двух отдельных цепочек блокчейна.
Другой способ – построение новой системы консенсуса, которая может заменить скомпрометированную систему. Например, это может включать в себя использование новых алгоритмов консенсуса, таких как Proof-of-Stake (доказательство доли владения), которые не подвержены такому роду атак.
Независимо от того, какой подход выберут разработчики, восстановление после успешной атаки требует согласованного усилия от сообщества и разработчиков, чтобы защитить блокчейн и обеспечить его безопасность в будущем.
В любом случае “атака 51%” является серьезной проблемой для блокчейна и может привести к серьезным последствиям для его пользователей и экосистемы.

Выводы

При успешной реализации “атаки 51%”, если будет иметь место сговор пулов или использование квантовых компьютеров, злоумышленники не смогут получить прибыль, поскольку это подорвет доверие к сети и произойдет крах курса биткоина.
Для поддержания нормальной работы сети необходимо участие честных майнеров с соответствующими распределенными мощностями. Но компаниям, часто принимающим платежи, необходимо подключаться к сети в обычном режиме, а не по упрощенной схеме, для большей независимости, безопасности и быстроты проверки блоков.
Отдельно стоит отметить, что псевдоанонимность биткоина позволяет анализировать транзакции, кластеризовать адреса кошельков и, как следствие, идентифицировать личности злоумышленников в случае инцидентов.

Источники

https://bitcoin.org/files/bitcoin-paper/bitcoin_ru.pdf – вайтпейпер биткоина (официальный перевод сообщества).
Сейфедин Аммус. Краткая история денег, или Все, что нужно знать о биткоине. Перевод на русский язык, издание на русском языке, оформление. ООО “Манн, Иванов и Фербер”, 2019.

www.itsec.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *