Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы технологии блокчейн и криптовалют для менеджеров. Учебное пособие
.pdf
91
названной в честь одноименного фильма о Джеймсе Бонде. Цель этой
атаки – получить прибыль от разрушения некоторых активов. В фильме
о Джеймсе Бонде злодей пытался нажиться на уничтожении золота
в форте Нокс. С биткоином я могу продать валюту в короткую (корот-
кие продажи – это инвестиционная или торговая стратегия, предпола-
гающая спекуляцию на снижении цены акции или другой ценной бумаги), имея в виду сделать ставку на ее девальвацию. Сначала могу сде-
лать ставку на то, что биткоин упадет в цене, а затем запустить атаку
двойной траты, чтобы мое предсказание прошло. На данный момент
двойные расходы на кого-то – это, что интересно, всего лишь средство
для достижения цели.
До сих пор мы рассматривали примеры того, как пользователи
с достаточной хеш-мощностью могут воспользоваться свойствами блокчейн, чтобы злонамеренно удвоить свои монеты. Перейдем к другому
виду атак, а именно к цензуре транзакций. С помощью цензуры мы можем игнорировать транзакции от отдельного лица или группы лиц, изолируя их от сети и фактически делая их биткоины бесполезными.
Допустим, Глория контролирует множество майнинг-пулов, что
в сумме составляет более 51 % хеш-мощности сети биткоин. Глория
меня не любит, поэтому ее цель – подвергнуть цензуре все мои биткоин-адреса и не дать мне потратить свои биткоины. Блоки в идеальной
цепочке блоков Глории не будут включать ни одной из моих транзакций. Самая простая стратегия для Глории – дать указание всем своим
майнинговым пулам не включать мои транзакции, что также называется черным списком. Однако, если пулы для майнинга Глории не
имеют 100 % хеш-мощности всей сети, другие майнеры за пределами
ее контроля в конечном итоге включат мои транзакции в блок. Это не
заносит меня в полностью черный список, а только приводит к задержкам и неудобствам, хотя эти задержки и неудобства могут стать значительными в зависимости от того, сколько хеш-мощности у Глории.
Рассмотрим другую стратегию, возможную для Глории.
Помните, что майнинговые пулы Глории имеют более 51 % хешрейта
сети. Она может сделать так, что все ее пулы откажутся работать в цепочке, содержащей транзакции, проводимые с моего адреса, и объявят
об этом всему миру. Если майнеры включают одну из моих транзакций
в блок, Глория разветвляется и создает более длинную цепочку доказательства выполнения работы, что возможно только потому, что у нее
большая часть хешрейта. Блоки, содержащие мои транзакции, теперь
недействительны, поскольку они не входят в самую длинную цепочку

92
и никогда не будут опубликованы. Это также означает, что майнеры
в этой цепочке не получат вознаграждения за свои усилия и в конечном
итоге перестанут включать мои транзакции в свои блоки, так как они
знают, что их блоки не будут частью самой длинной цепочки. Эта стратегия известна как карательный форк, и она может быть очень мощной
в руках человека с большинством хешрейта 51 %. Эта организация может запретить кому-либо доступ к своим средствам.
Однако карательный форк не работает, если у Глории не будет
51 % хеш-мощности, чего и так в реальности добиться крайне сложно.
Есть ли другой способ? К несчастью для меня, есть. Есть стратегия,
называемая раздвоением пера, в которой Глория объявляет, что попытается выполнить форк, если увидит блок с одной из моих транзакций.
Но через некоторое время она сдастся. Это контрастирует с карательным форком, поскольку он работает только в том случае, если вилка
гарантирует более длинную цепь. Короче говоря, Глория сдастся после
того, как блок с моими транзакциями получит k подтверждений, где k –
любое число. На схеме Глория видит блок, содержащий одну из моих
транзакций, и пытается выполнить форк. Однако я получил три подтверждения, поэтому она перестала пытаться продолжить свою вилку.
Рассмотрим это с точки зрения математики. Пусть q будет долей
майнинговых мощностей, которыми обладает Глория, а k равно единице, чтобы Глория сдалась после одного подтверждения на моем
блоке. Это означает, что шанс успешно уничтожить мой блок равен q2,
так как Глория должна соревноваться с каждым подтверждением. Если
q равно 20 % (в долях 0,2), тогда у Глории есть шанс 4 % (в долях
0,2х0,2=0,04) уничтожить мой блок, что не так уж и хорошо.
Однако другие майнеры теперь знают, что их блок имеет шанс q2
(или 4 %) стать уничтоженным. Теперь они должны решить, следует ли
включать мою транзакцию в свой блок. Ожидаемая ценность включения моей транзакции – это вероятность того, что мой блок будет включен, умноженный на вознаграждение за блок, плюс комиссия за транзакцию, которую я плачу. Ожидаемое значение исключения моей транзакции – это просто награда за блок, поскольку все майнеры будут работать в этой цепочке.
Поэтому с математической точки зрения если я не заплачу по
крайней мере в q2 раза больше вознаграждения за блок в виде комиссий
за транзакцию, другие майнеры будут майнить вредоносную цепочку.
По состоянию на 17 апреля 2018 года минимальная комиссия в этом
случае будет в размере 4000 долларов США, что достаточно много,

93
и это является невероятно ограничивающим фактором. Скорее всего,
я не смогу позволить себе эти транзакционные издержки, поэтому
я даже не смогу отправлять свои транзакции. Таким образом, Глории
удалось ограничить мои транзакции только с 20 % от общего хешрейта.
Важно учитывать, как рациональные и злонамеренные субъекты
будут вести себя, чтобы увеличить количество денег, которые они зарабатывают. Рассмотрим мотивы майнинга. Если у майнеров есть способ
максимизировать прибыль, можно предположить, что они это сделают,
даже если это не совсем справедливо по отношению ко всем остальным.
Один из лучших примеров такого поведения – эгоистичный майнинг.
Допустим, вы майнер и только что нашли блок. Вы хотите дать себе
преимущество перед остальной частью сети, поэтому вместо публикации
блока через сеть и получения вознаграждения за него вы держите свой
блок в секрете. Поскольку вы не освободили свой блок, вы фактически
единственный человек, работающий над самым последним блоком,
и у вас фактически есть 100 % хеш-мощности вашей скрытой цепочки.
Никто в сети не может даже попытаться решить хеш-головоломку.
Это называется эгоистичным майнингом или удержанием блока.
Обратите внимание, что удержание блока иногда также используется
в контексте майнинговых пулов, где вы отправляете акции, но удерживаете блоки. Если вы обнаружите два блока в своей секретной цепочке
до того, как сеть найдет следующий, у вас внезапно окажется самая
длинная цепочка. Сеть считает, что майнинг ведется по самой длинной
цепочке, но мало кто знает, что у вас действительно самая длинная цепочка. Вы, по сути, обманули сеть. При этом гарантировали себе как
минимум два вознаграждения за блок, потому что можете просто продолжать майнить в своей собственной цепочке, предполагая, что всегда
опережаете цепочку честной сети.
В тот момент, когда честная сеть собирается вас догнать, вы можете просто опубликовать свою скрытую цепочку, а затем внезапно
честная цепочка станет недействительной, поскольку ваша цепочка самая длинная и, как известно, честные узлы в сети всегда выберут самую
длинную цепочку. Таким образом, вы можете продолжать майнить
и обманывать систему, пока длина честной цепочки не догонит вас.
Вы гарантировали себе большее вознаграждение за блок, чем
честная сеть, и, что наиболее важно, вы лишаете честную сеть возможности выполнять какую-либо значимую работу, потому что у вас есть
собственная секретная цепочка и вы можете немедленно аннулировать
честную цепочку, как только опубликуете свою секретную цепочку.

94
Итак, предполагая, что вы на два блока впереди честной сети, если честная сеть затем находит блок, вы транслируете свои два секретных
блока, чтобы получить вознаграждение за два блока и не дать честной
сети догнать их. Поскольку честная сеть занималась майнингом в цепочке, которая затем была признана недействительной, у вас фактически есть время для самостоятельного майнинга. Поскольку у вас не
было конкурентов, у вас была более высокая доля эффективного
хешрейта, а следовательно, и более высокая ожидаемая доходность.
Здесь важно отметить, что вы предполагаете, как злонамеренный
майнер, что можете найти два блока быстрее, чем остальная часть сети
может найти один блок. Если не можете сделать это, то ваши вычисления окажутся напрасными. Что если сеть обнаружит блок раньше, чем
вы найдете второй? Затем начинается гонка за распространение новых
блоков. Оказывается, если у вас есть возможность сообщить 50 % сети
о вашем блоке раньше другой стороны, а также более 25 % хеш-мощности, то вредоносная стратегия более прибыльна. Если у вас больше
33 % хеш-мощности, можете каждый раз проигрывать гонку распространения, тогда вредоносная стратегия по-прежнему будет более прибыльной. Математика, лежащая в основе этих результатов, здесь опущена из-за сложности.
Поскольку злонамеренные майнеры заинтересованы в получении
более высокой потенциальной прибыли посредством атаки или попытки взломать сеть, честные майнеры заинтересованы в предотвращении такого поведения. Идет постоянная борьба за исправление экосистемы биткоина, чтобы предотвратить все, что могло бы ее полностью
разрушить.
Рассмотрим некоторые способы защиты от эгоистичного майнинга, и в первую очередь наиболее простые защитные механизмы,
и посмотрим, что возможно улучшить с их помощью.
Одним из ранее предложенных решений проблемы эгоистичного
майнинга была проверка блоков с использованием фиктивных блоков,
содержащих метаданные. Этот метод был предложен Шульцем
в 2015 году, а затем Солатом и Потоп-Бутукару в 2016 году. Идея состоит в том, что помимо обычных блоков мы также создаем дополнительные (фиктивные) блоки, которые содержат подписи для этого
блока. Таким образом, для любого данного блока легко посмотреть на
соответствующий фиктивный блок, чтобы проверить, сколько пользователей просмотрели этот блок и подписались на него.

95
Блоки, которые добываются эгоистично, были бы замечены
только тем, кто удерживает блоки, и не имели бы достаточных подписей. Это доказывает, что честный блок засвидетельствован сетью,
а также что конкурирующий блок отсутствует до того, как майнеры
смогут с ним работать. Поэтому, когда злоумышленник, который удерживал блоки, наконец публикует свою цепочку, все блоки, кроме первого, будут автоматически отклонены, поскольку у первого блока не
будет достаточно подписей. С помощью этого метода эгоистичные майнеры не могут получить вознаграждения, больше ожидаемого, которое
составляет всего лишь за один блок. Это сводит на нет большую часть
работы, которую они делают, чтобы построить цепочку из первого
найденного блока. Следовательно, проверка блока с помощью предложенной схемы фиктивной подписи блока не стимулирует эгоистичный
майнинг. Один непосредственный видимый недостаток заключается
в том, что эта техника уязвима для атак Сибиллы. Невозможно гарантировать, что все подписи в блоке исходят от разных пользователей,
поэтому эгоистичный майнер может просто сгенерировать столько
фальшивых подписей, сколько необходимо, чтобы казалось, что скрытые блоки действительны. Они могут это сделать, потому что, как мы
знаем из прошлого, в биткоин легко создать новую личность. Более
того, нет реального способа определить, сколько подписей достаточно,
чтобы показать, что блок действителен.
Какого порядка величины пороговое количество подписей?
И должно ли оно меняться в зависимости от меняющегося количества
пользователей в сети? На все эти вопросы сложно ответить, но они
важны для реализации этой схемы. Кроме того, независимо от того,
сколько подписей требуется, злоумышленник может легко атаковать
систему, используя метод Сибиллы. И еще одним недостатком фиктивных блоков является то, что их реализация потребует фундаментальных
изменений в уже установленных правилах для действительных блоков.
Для такого изменения потребуется хард-форк, что нежелательно.
Одна из идей защиты от эгоистичного майнинга – наказание вилкой, предложенное Лиром Бахаком в 2013 г. Правило форк-наказания
таково: оно наказывает любого, кто разветвляет блокчейн. Любые конкурирующие блоки не получают вознаграждения за блок, независимо
от того, были ли они добыты эгоистично или честно. И первый майнер,
который докажет, что вилка действительно была, получает половину
утраченного вознаграждения с высоты предыдущего блока. Это лишает
злоумышленников стимула пытаться использовать форк в блокчейне,

96
работая над своей собственной секретной цепочкой, а также побуждает
честных майнеров сообщать о любых форках, которые они заметили.
Поскольку два блока транслируются с одинаковой высотой
блока, они являются конкурирующими блоками, и, следовательно, ни
один из них не имеет связанного вознаграждения за блок. Первый майнер, который докажет, что был форк, и включил его в следующий блок,
получает вознаграждение за блок, который он только что добыл,
а также половину вознаграждения за блок с высоты предыдущего
блока. Один из непосредственных недостатков заключается в следующем: из-за того, что мы наказываем все конкурирующие блоки, честные
майнеры несут сопутствующий ущерб от наказания вилкой. И тот факт,
что мы наказываем честных майнеров, представляет собой атаку другого типа. Наказание за вилку также страдает от того факта, что нам
придется коренным образом изменить правила распределения вознаграждения биткоин. Нам необходим какой-то способ изменить транзакции монетной базы блоков, где был форк. Чтобы сделать это, а также
перенаправить половину вознаграждения за блок следующему блоку,
нам нужно было бы использовать концепцию, называемую гибкостью
транзакций, которая выходит за рамки этого курса. И в конце концов
для реализации форк-наказания потребуется хард-форк, что, как
и прежде, довольно нежелательно.
Есть ли другой способ вместо наказания всех, как в случае с вилкой? Для этого можем использовать единое решение проблемы, которое было предложено Эялем и Сирером в 2014 г. Когда у нас есть гонка
за распространение блоков, майнер, имеющий преимущество в сети,
с большей вероятностью получит свой блок в самой длинной цепочке.
Это связано с тем, что такие майнеры лучше связаны в сети биткоин
и могут передать свой блок большему количеству людей. Мы можем
использовать единый способ разрешения конфликтов для защиты от
эгоистичных майнеров, у которых есть преимущество в сети. После
публикации каждого блока, вместо того чтобы считать первый замеченный блок действительным, поскольку это может быть блок от эгоистичного майнера с хорошими связями, каждый майнер сначала ждет, чтобы
услышать обо всех конкурирующих блоках. В случае ничьей, когда
майнер видит несколько блоков с одинаковой высотой блока, он случайным образом выбирает, на какой цепочке майнить, таким образом
снижая доминирование злоумышленника на сетевом уровне.
Эяль и Сирер обнаружили, что протокол биткоин по умолчанию
имеет порог прибыли в 0 %, если существуют эгоистичные майнеры,

97
которые действительно хорошо связаны в сети и, таким образом, могут
влиять на способ передачи данных через сеть. Тогда это будет означать,
что для обеспечения полной безопасности биткоин 100 % сети должны
быть честными. В своей статье с предложенным единообразным разграничением связей они утверждали, что подняли порог прибыли для
эгоистичного майнинга до 25 %. Однако позже, в 2015 году, в отдельной статье, опубликованной Сапирштейном, была предложена более
оптимальная эгоистичная стратегия майнинга, которая снизила порог
прибыли до 23,2 %.
Порог прибыли в 25 % с использованием равномерного разрешения конфликтов – это довольно плохо, если учитывать, что эгоистичный
майнинг всегда прибылен, когда у вас есть 33 % мощности майнинга.
В 2014 г. Итан Хейлман предложил защиту эгоистичного майнинга с использованием временных меток. Идея состоит в том, что
метки времени будут выпускаться доверенной стороной и вставляться
в каждый блок майнерами. Метки времени будут глобальными по всей
сети биткоин и будут выпускаться регулярно, скажем каждые 60 секунд. Они также будут общедоступными, но их невозможно будет подделать, потому что будем использовать криптографические подписи.
Блоки считаются в процессе соревнования: если они получены примерно в один и тот же период времени, скажем через 120 секунд друг
от друга, и в ситуации, когда есть соревнование между блоками, майнеры просто выберут блок, метка времени которого более свежая или
самая последняя.
В документе говорится, что порог прибыли для эгоистичных майнеров, использующих этот метод непредсказуемых временных меток,
увеличивается до 32 %, что является значительным улучшением по
сравнению с 25 %, которые мы наблюдали при равномерном разрешении конфликтов. Как выясняется, эгоистичные майнеры легко могут
сломать эту защиту. Правила разрешения споров применяются только
при гонке за распространение блоков, а не когда эгоистичная цепочка
майнинга длиннее, чем публичная.
И, как выяснилось (и это было показано), что если злоумышленник обладает большой вычислительной мощностью, скажем более
40 %, то эта решающая защита от эгоистичного майнинга, по сути, бесполезна. Эгоистичный майнер может аннулировать честную цепочку,
если у него самая длинная цепочка. Майнеры выберут самую длинную
цепочку, поскольку над ней проделано больше всего работы, и будут
взвешивать ее больше, чем тот факт, что блок в честной цепочке

98
«свежее» или более новый. И еще одна вещь, которую необходимо учитывать, – это то, что эта защита требует, чтобы доверенная третья сторона раздала всем временные метки.
Недостатком здесь является то, что биткоин стремится быть максимально децентрализованным. И хотя это не мешает работать с другими централизованными системами, централизация определенно противоречит философии биткоин.
Рассмотрим одну из последних разработок в области защиты от
эгоистичного майнинга, которая была представлена Чжаном и Пренелем в книге «Опубликовать или уничтожить», опубликованной
в 2017 году.
Предыдущие средства защиты, с которые мы ознакомились,
имели много недостатков, таких как требование хард-форка (например,
при наказании за форк) или отсутствие сдерживания эгоистичного майнинга, когда у эгоистичного майнера есть более длинная цепочка, например во временных метках, которые невозможно подделать. Смысл предложенной в книге «Опубликовать или уничтожить» защиты в том, что
она не требует наличия хард-форка. Это означает, что хард-форк обратно
совместим со старой цепочкой, а также препятствует эгоистичному майнингу даже тогда, когда у эгоистичного майнера есть более длинная цепочка. Идея эгоистичного майнинга сводится к злонамеренному созданию секретного блока и последующей публикации его в цепочке. Главная цель защиты майнинга «Опубликовать или уничтожить» заключается в том, чтобы убедиться, что секретные блоки вообще не помогают
эгоистичным майнерам. Поэтому подход, предложенный в книге «Опубликовать или уничтожить», направлен на внесение поправок в политику
разрешения вилок биткоина (FRP – functional reactive programming). По
умолчанию мы знаем, что майнеры выбирают действительную самую
длинную цепочку, поэтому для биткоина мы говорим, что у нее есть
длина FRP. Идея защиты майнинга «Опубликовать или уничтожить» заключалась в том, чтобы переключиться с длины на вес в качестве эвристики (совокупность приемов и методов, облегчающих и упрощающих
решение познавательных, конструктивных, практических задач) для политики разрешения вилки. Вместо того чтобы просто подсчитывать
длину цепочек, мы также учитываем вес, который, грубо говоря, является функцией того, насколько блок подвергается воздействию в сети,
что делает невыгодным удержание блоков.
Определим величину «Тау» как предполагаемую верхнюю границу
времени, необходимого для распространения блоков по сети биткоин.

99
И с точки зрения майнера, термин во времени означает, что для действительного принятого блока либо его значение высоты больше, чем
у предыдущего блока, либо его значение высоты такое же, как у предыдущего блока, но в пределах тау-времени. Высота блока – это общее количество блоков, соединенных с генезисным блоком. Высота любого
блока – это количество блоков между ним и генезис-блоком
(Genesis Block – блок, с которого начинает добываться криптовалюта).
При этом используется термин «дядя», который относится к временному блоку, конкурирующему с «родительским блоком». Родительский блок является предыдущим блоком по отношению к текущему.
Чтобы формализовать данное утверждение, часто говорят, что «дядя
блока B на единицу меньше высоты B». Это имеет смысл, потому что
«дядя блока B» должен быть того же роста, что и «родитель B». И для
того, чтобы временный блок «дядя B» был воспринят, он должен быть
в пределах тау-времени «родителя B».
У нас есть дочерний блок B, а до этого у нас был его родительский блок A. На той же высоте блока, что и A, у нас есть блоки C и D.
Блок C является «дядей B», потому что он находится в пределах времени тау-блока А – родителя блока B. Блок D, с другой стороны, не является «дядей B», потому что, хотя он имеет правильную высоту блока
(на одну высоту меньше высоты B), он не был замечен во время таублока А – родителя блока В. Так что это не «дядя».
Вес цепи, с точки зрения майнера, это количество временных
блоков плюс количество временных блоков «дяди». И чтобы убедиться,
что у нас есть действительные временные блоки и временные блоки
«дяди», мы заставляем майнеров вставлять хеши блоков, которые учитываются в весе блоков. Таким образом, другие майнеры могут легко
проверить вес блоков. И мы рассчитываем вес цепочки начиная с блока
после ее корня, поскольку у конкурирующих цепочек всегда есть общий корень. Определив вес, можем увидеть, как майнеры лишены стимулов удерживать блоки. Если вы удерживаете блоки, то ваши блоки
не успеют встроиться в цепь, а значит, они будут иметь меньший вес.
Со всеми этими определениями мы теперь можем указать политику разрешения проблемы взвешенной вилки. В нем есть три основных правила:
– если одна цепочка длиннее других по высоте на k или более
блоков, то майнеры будут добывать в этой цепочке;
– если одна цепочка длиннее других на k блоков, мы, вероятно,
можем доверять ей как действующей цепочке. Это утверждение связано

100
с принятием честным большинством по умолчанию длины блоков биткоинов FRP;
– если одна цепочка длиннее других цепочек на k блоков и является вредоносной, то перед нами стоит большая проблема. Все сломано,
поэтому мы должны просто прекратить использовать биткоин, поскольку кто-то, вероятно, владеет большей частью мощности хеширования сети.
Если все цепочки находятся на высоте k блоков друг от друга, то
майнер выберет цепочку с наибольшим весом. Если наибольший вес
достигается несколькими цепями одновременно, майнер выбирает одну
из них случайным образом.
Следует отметить, что в первом правиле k – это параметр отказоустойчивости, который измеряет допустимый размер сетевого раздела.
Если мы устанавливаем k равным бесконечности, то правило никогда
не применяется.
Итак, теперь, когда мы потратили время на определение всех этих
терминов и процедур, посмотрим общий сценарий, как идея защиты
майнинга «Опубликовать или уничтожить» на самом деле сдерживает
эгоистичный майнинг. Допустим, эгоистичный майнер уже тайно добыл один блок. Прежде чем он сможет добыть второй секретный блок,
честная сеть публикует конкурирующий блок и начинается гонка за
распространение блоков. На данный момент у эгоистичного майнера
есть два варианта: вариант 1 – опубликовать или вариант 2 – не публиковать. Если эгоистичный майнер опубликует свой блок, следующий
честный блок получит больший вес, потому что он может содержать
доказательство того, что видел своего «дядю». С другой стороны, публикация блока гарантирует, что он будет способствовать увеличению
веса эгоистичной цепочки. Таким образом, блок эгоистичного майнера
получает вес 1, но также влияет на вес честной цепочки. С другой стороны, если эгоистичный майнер хранит свой блок в секрете и пропускает временное окно, то секретный блок не будет влиять на вес своей
собственной цепочки. Таким образом, блок эгоистичного майнера получает вес 0. Но, поскольку честная сеть также не увидела этот секретный блок, это не повлияло на вес честной цепочки.
Ключевой вывод заключается в следующем: независимо от того,
какой вариант выберет в конце эгоистичный майнер, ни один из вариантов не придает веса эгоистичной цепочке, которая также не придается
честной цепочке.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
