Квалифицированное большинство для предотвращения атаки 51%?

Я думаю, что изменение протокола биткойнов, требующее квалифицированного большинства, скажем, 60% или 75%, для проверки доказательства работы, поможет снизить риск атаки 51%. Если это так, то какие основные препятствия или вещи, которые я не рассматриваю?

Единственное, что сразу пришло на ум, так это то, что это увеличит временной горизонт, на котором проверяется большинство транзакций, что может нанести существенный ущерб экосистеме. Что-то еще?

Можете ли вы объяснить более подробно, как будет работать модифицированный протокол? Атака 51% основана на том принципе, что самая длинная ветвь цепочки блоков считается действительной ветвью. Я не понимаю, как вы могли бы изменить это, чтобы получить другой номер.
Вероятно, это помогает понять, что делает атака, и этот ответ, кажется, хорошо это объясняет: bitcoin.stackexchange.com/a/660/18253

Ответы (5)

Атака 51% — это эмерджентное поведение системы. Это не потому, что где-то в протоколе зарыты «50%», которые можно просто изменить на 60% или 75%. Кто-то с большей вычислительной мощностью, чем все остальные вместе взятые, может, если у него будет достаточно времени, всегда построить более длинную цепочку, чем все остальные.

Обратите внимание, что, хотя люди часто говорят об «атаках 51%», магического порога в 50% не существует. Вы можете провести атаку 51% с 49% вычислительной мощности, просто это будет немного сложнее.
@jwg Ну, точка 50% важна. Обладая более чем 50% хеш-мощностью, при наличии достаточного времени вы гарантированно создадите блокчейн дольше, чем кто-либо другой. Конечно, как вы указываете, все еще возможно, если повезет, создать более длинную цепочку с менее чем 50% хеш-мощностью, но это маловероятно.
@jwg это важный порог. Как сказал Сванте, имея более 50%, вы в конечном итоге сами добудете все блоки. Вам просто нужно продолжать работать над своей собственной цепочкой, а не принимать найденные другими. И если у вас будет достаточно времени, ваша цепочка будет длиннее и, следовательно, будет принята.
@Svante Я совершенно не согласен. Каждый волен принимать свои собственные блоки и отказываться принимать чужие. Для создания самой длинной цепочки требуется удача на уровне 49% или 51% — с последним она лишь немногим более вероятна.
@LucaMatteis, посмотри мои комментарии к Сванте
@jwg Здесь важна вероятность того, что злоумышленник в конечном итоге превысит основную цепочку, если он начнет с блоков $N$ назад. Существует «магический порог» на уровне 50% в том смысле, что при 50% мощности хэширования эта вероятность составляет 100% независимо от $N$. Вы правы в том, что для каждого $N$ вероятность приближается к 100%, а хэш-мощность приближается к 50%, поэтому злоумышленник, обладающий даже 40% хэш-мощности, чрезвычайно опасен. Но ниже 50% вероятность экспоненциально падает с $N$, поэтому в присутствии злоумышленника с уровнем ниже 50% вы можете быть в безопасности, просто потребовав много (возможно, десятков тысяч) подтверждений.
@jwg: На уровне математики ваше утверждение неверно. В долгосрочной перспективе злоумышленник с 51% хэш-мощности с гораздо большей вероятностью создаст самую длинную цепочку, чем злоумышленник с 49%. Действительно, при наличии достаточного количества времени злоумышленник 51% почти гарантированно получит самую длинную цепочку, а злоумышленник 49% почти гарантированно не получит . Это закон больших чисел , фундаментальная теорема вероятности.
Это очень далеко от истины, @NateEldredge, и является полным неправильным применением закона больших чисел. Возможность разветвить цепочку и при этом иметь самую длинную не связана с чистым дисбалансом в количестве созданных блоков , о чем вам говорит LLN. Это связано с количеством последовательных блоков, которые может создать один агент .
@jwg: Тогда, боюсь, я не понимаю твоей точки зрения. Если у меня есть 51% хэш-мощности, я могу (в конечном итоге) создать больше блоков, чем кто-либо другой, и, если я того пожелаю, я могу связать их все друг с другом, чтобы они были последовательными. В конце концов у меня есть цепочка, состоящая (из того, что я принял за начальную высоту) полностью из моих собственных блоков, длиннее любой другой цепочки. Как только я его опубликую, люди смогут прикрепить к концу свои собственные блоки, если захотят, но если я захочу, я могу в конечном итоге заменить их блоки своей собственной более длинной цепочкой.
@NateEldredge смотрите мой ответ, где я подробно изложил эти моменты.

У Дэвида Шварца есть хороший ответ.

Но чтобы исследовать немного дальше, вы можете грубо представить систему проверки работоспособности Биткойна в долгосрочной перспективе как выбор, чтобы решить, какая цепочка блоков является «истинной» и, следовательно, какие транзакции признаются состоявшимися. В нынешнем виде каждый майнер получает право голоса на этих выборах, пропорциональное их хэш-мощности (один хэш, один голос), и результат определяется большинством голосов. Таким образом, майнер, контролирующий более половины хэш-мощности, всегда может победить на выборах и, по сути, является диктатором: он решает, какие транзакции распознаются, а какие нет. Это позволяет ей очень легко обманывать людей, так как она может совершить транзакцию, забрать товар, а позже заявить, что транзакция никогда не происходила и деньги у нее все еще есть.

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

Но у него будет серьезная проблема, заключающаяся в том, что злоумышленник, обладающий всего 30% хеш-мощности, может организовать атаку типа «отказ в обслуживании», просто проголосовав каким-то противоположным образом. Таким образом, он предотвращает получение квалифицированного большинства, никакие транзакции не могут быть подтверждены, и вся валютная система резко останавливается.

Я полагаю, что эта проблема присуща любой политической системе, использующей квалифицированное большинство (см., например, Сенат США). Биткойн немного отличается тем, что вопросы, по которым проводится голосование, не должны быть спорными: каждый честный избиратель должен голосовать одинаково. Таким образом, по замыслу меньшинство не должно иметь права голоса. А при нынешней системе у них вообще нет голоса. Но при сверхбольшинстве меньшинство может мешать большинству, а этого мы не хотим.

Мне не ясно, действительно ли эта аналогия работает для Биткойна. В частности, «удержание голосов» не имеет особого смысла, но я полагаю, что это следует из того факта, что «требование квалифицированного большинства» также не имеет смысла в Биткойне.
@BrendanLong: возможно, я не очень хорошо это сформулировал. Я имел в виду, что злоумышленник может отказаться голосовать за «правильную» цепочку (вместо этого проголосовать за какую-то «неправильную» цепочку). Тогда ни одна цепочка не получит квалифицированного большинства, и система перестанет работать. Я согласен, что система, в которой это действительно имело бы смысл, выглядела бы несколько иначе, чем Биткойн.
Вау, вы отличный учитель.

Я думаю, вы должны точно указать, что вы подразумеваете под «атакой 51%». Если под атакой вы подразумеваете двойную трату, в оригинальной статье о биткойнах Сатоши подчеркивает, что она приносит больше вознаграждения, если вы сами добудете все блоки и получите 100% вознаграждения, а не попытаетесь реорганизовать двойную отправку, которая может потеряете награды и, следовательно, майнеров (которые покинут ваш пул во время вашей безнадежной попытки реорганизовать историю). Из бумаги:

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

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

Я попытался количественно определить, при каких обстоятельствах атака 51% может и не может быть проведена в комментариях к ответу сестры, и пара человек рассказала мне о математических тонкостях. Поэтому я подумал, что запишу это точно, в лучшем случае я отвечу на вопрос несколько точнее, чем это было сделано, а в худшем я облегчу кому-то указание мне, где именно я иду не так.


Предположим, вы контролируете примерно половину вычислительной мощности сети и хотите атаковать сеть. По сути, это можно сделать двумя способами:

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

Давайте сначала обсудим их механику, а затем посмотрим на математику:

Стратегия 1

Предположим, что есть какая-то транзакция (транзакции), которую вы можете извлечь из блокчейна или добавить в нее, и вам все равно, заметит ли кто-нибудь, что вы готовите атаку. Чтобы упростить жизнь, скажите, что это одна транзакция с контрагентом по имени Боб, и что вы хотите ее удалить. Предположим, что транзакция должна быть подтверждена N раз в легитимной цепочке, прежде чем вы будете готовы к атаке (например, вам нужно было дождаться N подтверждений, прежде чем вам выплатят фиат в обмен на перевод монеты).

Чтобы создать альтернативную цепочку, которая будет принята как самая длинная цепочка, вам нужно вернуться на N блоков, добавить новый блок с вашей модификацией, а затем добавить блоки в разветвленную цепочку, пока она не станет длиннее, чем обычная цепочка. Для этого вам потребуется O(N^2) блоков. Пока вы делаете это, вы либо публикуете каждый блок разветвленной цепочки, тем самым информируя всю сеть о разветвлении (назовем это случаем 1.а), либо вообще прекращаете публиковать какие-либо блоки, давая всем знать, что вы сняли ваши ресурсы от хеширования (назовем это случаем 1.b).

1.a — Стратегия 1 с публикацией

Как только вы это сделаете, вы откроете себя для контрмер, прежде чем доберетесь до нужного количества блоков. В случае 1.a форк будет изучаться другими участниками сети. Люди будут стараться как можно быстрее разрешить форк, если он непреднамеренный, и определить, какая сторона является злонамеренной, если это не так. (Короткие непреднамеренные разветвления разрешались в прошлом по соглашению между основными пулами.)

Теперь Боб, очевидно, укажет на транзакцию (вероятно, крупную), которой нет в вашей цепочке, и, конечно, вы также можете указать на нее как на мошенническую транзакцию, вставленную Бобом и его злыми соратниками. Однако у него есть тот факт, что он фигурировал в N транзакциях, замеченных до того, как кто-либо узнал о каком-либо форке на его стороне. Вам будет трудно объяснить, почему он не появляется ни в одном блоке в вашей цепочке — многие пользователи сети должны были его видеть, а поскольку форк имеет длину O(N^2) блоков, отговорка, что он не появился, т еще не дошел не отмоешь. (Менее изощренная атака, целью которой является уничтожение Биткойна, когда вы, например, платите себе все деньги, используя эту стратегию, на этом этапе полностью потерпит неудачу.)

Как только достаточное количество людей узнают вашу сторону форка как коррумпированную, они просто «проверят» блок на другой стороне, возможно, тот, который первым включает транзакцию с Бобом. Это означает, что этот блок будет рассматриваться как корень цепочки. Это уже делается время от времени при обновлении программного обеспечения клиента, чтобы уменьшить количество проверок, которые должен выполнять клиент. В результате сам Биткойн разветвляется, и люди, которые принимают вашу цепочку, используют другой реестр, чем те, кто отвергает вашу цепочку, независимо от ее длины. Это можно сделать практически сразу для пулов и довольно быстро для других клиентов, хотя они могут столкнуться с простоями, пока проблема не будет решена. Пока все быстро переходят к отказу от вашей цепочки, вы контролируете бесполезную валюту Биткойн А,

1.b - Стратегия 1 в секрете

Что, если вы примете стратегию 1.b и будете держать свой форк в секрете до тех пор, пока он не станет достаточно длинным, чтобы превзойти «правильную» цепочку? Предположительно, многие люди замечают, что вашей вычислительной мощности больше нет. Это, вероятно, будет беспокоить их, и они попытаются что-то с этим сделать. Самый простой ответ — снова «проверить» блок. В зависимости от того, каким можно разумно ожидать N, они будут иметь некоторое представление о N^2 и о том, сколько времени потребуется вам, чтобы наверстать упущенное. Им нужно блокировать контрольные точки, которыми все (кроме вас) довольны, достаточно часто, чтобы продолжать мешать вашей предполагаемой атаке. Если вы хотите продолжить атаку, вы должны генерировать новую транзакцию и начинать с нуля каждый раз, когда они это делают.

В идеале, сообщество хочет блокировать контрольные точки, которые старше N блоков, чтобы у всех было время убедиться, что они согласны с транзакциями в этом блоке, и определенно не хотят ждать, пока приблизится к N^2 блокам. ; на случай, если вы получите выигрышную цепочку и начнете публиковать ее до контрольной точки. Поскольку N ^ 2 намного больше, чем N, для этого есть много возможностей.

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

Стратегия 2

В стратегии 2 вы атакуете цепочку, но стараетесь «поддерживать видимость» того, что вы не злонамеренны, пока ваша атака не увенчается успехом. Вы делаете это, пытаясь обогнать законную цепочку, прежде чем кто-либо заметит ваше отсутствие. Если у вас есть (примерно) половина мощности, каждый второй новый блок в среднем будет вашим, но могут быть длинные серии только ваших блоков или только тех, которые вам не принадлежат.

Что вы делаете, так это после того, как вы опубликовали свою транзакцию и транзакцию Боба, вы пытаетесь создать N + 1 блоков, в то же время, когда остальная часть сети создает N. Вы держите все это в секрете, пока другие майнеры не добудут N блоков, и Боб передал кокаин или мультфильм Леонардо или что-то еще, а затем вы публикуете все N+1 из них, делая вашу цепочку самой длинной.

Если вам не удастся добраться до N+1 до того, как остальная часть сети доберется до N, вы отбрасываете свою попытку и возвращаетесь к хешированию правильной цепочки. Вы ждете некоторое время, затем договариваетесь с Бобом о другой транзакции и пробуете еще раз. Количество времени, которое вам придется ждать, зависит от того, насколько маловероятно, что N блоков подряд будут добыты, и ни один из них не будет вами.

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

На самом деле это означает, что вам не нужен обманщик Боб, который будет рад продолжать передавать активы, не связанные с биткойнами, после небольшого количества подтверждений, при условии , что вы согласны получать оплату в биткойнах. Если вы хотите саботировать валюту, вы можете это сделать и фактически можете выбрать N как любое число, достаточно малое, чтобы у вас не возникло подозрений, что вы применяете стратегию 1.b. Если вы хотите использовать Биткойн только для покупки фиата или для выплаты выкупа, вы должны придерживаться N Боба.

Во-вторых, существует компромисс между тем, насколько подозрительно ваше поведение, и количеством попыток. Если у вас намного больше 50%, длинные последовательности блоков без каких-либо добытых вами блоков будут более подозрительными, и вам, возможно, придется хэшировать пару блоков в обычной цепочке, чтобы все выглядело нормально. Если у вас около 50%, это будет казаться менее подозрительным, но вам будет сложнее выиграть гонку до N+1. Конечно, увеличение N помогает предотвратить эту атаку в любом случае.

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

Математический анализ

Я согласен с тем, что говорят некоторые люди, что наличие чуть более или чуть менее 50% определяет разницу между определенным успехом в конечном итоге с 1.a или 1.b и успехом только с небольшой вероятностью. Это следует не из слабого закона больших чисел, а из свойства повторяемости одномерных случайных блужданий (разница между ними состоит в том, что последнее применимо, даже если у вас были точно постоянные 50%). Тем не менее, я считаю, что я утверждал, что этого недостаточно, чтобы в конечном итоге добиться успеха - время O (N ^ 2), которое вам потребуется (что исходит из центральной предельной теоремы), должно означать, что ваша атака обычно предотвращается.

С другой стороны, при условии, что у вас около 50%, вы сможете добиться успеха со стратегией 2, независимо от того, имеете ли вы чуть больше или чуть меньше. Конечно, более высокие пропорции и более низкое N помогут вам, но эффекты теперь меньше - если у вас есть 1/2 - h, для h маленькое и положительное, ваши шансы будут 1/2 - O(h / sqrt(N)) . Центральная предельная теорема работает в обратном направлении — даже если монета слегка настроена против вас, вполне вероятно, что вы выиграете короткую гонку одним броском.

Вы также можете делать различные простые вещи, например начинать атаку только в том случае, если вы получите первый блок раньше остальных майнеров, или только если вы получите первые два блока и т. д. Хорошая ли это идея и как именно настроить эта атака зависит от того, насколько подозрительны люди и/или насколько услужлив Боб.

Если вы стремитесь к уничтожению, вы можете оптимизировать N в соответствии с вашими возможностями — если у вас меньше 50%, вы намного лучше выигрываете короткие гонки, чем длинные.

Вывод

Прежде всего, вы должны использовать столько подтверждений, сколько можете себе позволить, если вы считаете, что ваша транзакция может быть той, которая побуждает GHash.io стать мошенником. Во-вторых, должны быть люди, которые ищут необычные схемы майнинга, особенно крупных майнеров, исчезающих из сети.

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

Для нападающего должны быть последствия, достаточно большие, чтобы он почувствовал удар своей собственной атаки.

Чтобы создать для него последствие: избиратель (доверенный узел/полный узел) должен иметь биткойн, и чем больше биткойнов у узла, тем больше право голоса (более доверенным). Например, если злоумышленник действительно хочет уничтожить всю сеть биткойнов, он должен иметь в обращении не менее 51% биткойнов. Если сеть биткойнов стоит 100 миллиардов долларов. Он должен купить его на 50 миллиардов долларов. Попробуйте убить сеть, и он потеряет свои 50 миллиардов долларов. Да, другие потеряют немного стоимости, но он потеряет гораздо большую стоимость, и мы сможем запустить другую криптовалюту.

Это не обязательно должно быть линейно: 1 биткойн = 1 сила голоса. Это может быть функция. например, право голоса = root2 (биткойн) или другие функции.

Единственная проблема заключается в том, что большинство людей будут использовать централизованный узел (поскольку они либо используют легкий узел, либо не хотят тратить ресурсы на полный узел), поэтому их право голоса может быть где-то централизовано и может использоваться злоумышленник для атаки (при условии, что больше биткойнов = больше голосов). Решением этой проблемы, вероятно, является применение функции замедления (например, корневой функции), чтобы ограничить их право голоса. Но тогда злоумышленник может использовать множество мелких кошельков, чтобы подорвать большой централизованный кошелек. (Тактика «все в меру», слишком много или слишком мало — это нехорошо). Поэтому мы также должны снизить количество голосов тех, у кого в узле очень мало биткойнов — см. рисунок.

Так что же происходит с узлом, у которого нет биткойнов? В любом случае это будет бесполезно, потому что они будут пиявками из сети. Я бы посоветовал вообще не назначать им пропускную способность и право голоса, поскольку они все равно не используют биткойн и только тратят сетевые ресурсы впустую. возможно, пусть они будут ссылками с низким приоритетом, просто чтобы сделать их немного полезными.

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

См. рисунок ниже:право голоса в биткойнах

Может ли это помочь справиться с DDOS-атакой?