Можно ли обнаружить и устранить атаку 51%?

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

Ответы (4)

Можно ли обнаружить такие атаки? Да.

То, что вы увидите, — это реорганизация цепочки, которая делает недействительным большое (более трех) количество ранее принятых блоков. Стандартный клиент на самом деле зарегистрирует это — вы увидите в файле REORGANIZEклиента . debug.logВ настоящее время клиент не регистрирует количество блоков, признанных недействительными в результате реорганизации, но это простое усовершенствование.

Могут ли честные пользователи отразить такие атаки? Вроде, как бы, что-то вроде.

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

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

По сути, в этом случае клиент должен был бы перейти в режим «блокировки» и отклонить все транзакции до тех пор, пока не будет реализован какой-либо механизм для поиска реальной цепочки блоков. (Он может отправлять все транзакции в обе цепочки и считать подтвержденными только транзакции, принятые в обеих цепочках!) В одном предложении используется центральный орган для выбора реальной цепочки. Это та область, где есть место для инноваций.

Однако следует помнить об одном важном моменте: если отправитель не пытается провести атаку с двойной тратой, вам не о чем беспокоиться (кроме снижения полезности нестабильной сети обмена). Вы можете отправить транзакцию в цепочку блоков столько раз, сколько вам нужно, пока какой-либо блок, содержащий транзакцию, наконец не выиграет. Только отправитель может создать конфликтующую транзакцию, из-за которой вы не сможете включить интересующую вас транзакцию в цепочку.

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

Но не возникнут ли и другие проблемы, если Интернет разделится пополам? Например, не мог ли кто-то, у кого все еще был доступ к обеим половинам Интернета (в то время как большая часть мира его не имел), потратить свои монеты на разные блокчейны двух половин?
@ dg123 Да. Проблема «Интернет разделен пополам» отличается от проблемы 51%.
@DavidSchwartz, разве у клиента не может быть функция «ручного ввода», что означает, что, когда Интернет разделен пополам, наш клиент просто зависнет и будет ждать человеческого ввода вместо того, чтобы «пытаться угадать». Затем пользователи вручную выбирали выбранную цепочку (предположительно, после получения информации из нескольких уважаемых источников в Интернете).
@DavidSchwartz: с мощностью хеширования 51% состязательные паритеты могут спровоцировать атаки типа «отказ в обслуживании» (DoS). Можно ли автоматически обнаружить DoS?

Комментарий о «начать с нуля».

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

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

Это невозможно, даже если кто-то с силой 51% внесет изменения в исходный код своего биткойн-клиента?
@Adam: Кто-то с вычислительной мощностью 51% явно меняет исходный код своего клиента. Иначе было бы не весело…
@StéphaneGimenez, откуда мы можем получить информацию об этих «контрольно-пропускных пунктах», о которых вы говорили?
Pacerier: Если вам повезет, вы можете найти что-то под тегом checkpoints .

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

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

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

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

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

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

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

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

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

Механизм контрольной точки блока был описан как мощный способ для разработчиков блокчейна защитить от повторного майнинга всей цепочки. Какие блоки станут контрольными точками?

При фактическом просмотре кода механизм блочных контрольных точек в последнее время не использовался активно. Последний блок, отмеченный в выпуске Биткойн 0.14, имеет номер 295000, который был добыт 9 апреля 2014 года. 2017.

Для сравнения, Litecoin 0.13.2.1 блокирует 721000 контрольных точек, которые были добыты 30 января 2015 г., а затем транзакцию 5502192, добытую 31 января 2015 г. Думаю, они не были такими усердными и все еще догоняют Биткойн в этом отношении.