Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы технологии блокчейн и криптовалют для менеджеров. Учебное пособие

.pdf
Скачиваний:
6
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
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. Но, поскольку честная сеть также не увидела этот секрет­ный блок, это не повлияло на вес честной цепочки.
Ключевой вывод заключается в следующем: независимо от того, какой вариант выберет в конце эгоистичный майнер, ни один из вари­антов не придает веса эгоистичной цепочке, которая также не придается честной цепочке.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]