Что можно сделать, чтобы снизить риск атаки Финни?

Связанный с этим вопрос: усложнит ли атака Финни сокращение времени генерации блока?

Я понимаю, что атака Финни является основной причиной, по которой следует избегать принятия транзакций с нулевым подтверждением для транзакций на значительную сумму или на веб-сайтах по запросу, которые «доставляются» мгновенно.

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

Ответы (3)

Ключом к пониманию того, почему атака Финни на самом деле не так уж важна, является понимание экономического обоснования принятия 0/неподтвержденных транзакций. Онлайн-продавец обычно не должен принимать такие транзакции, поскольку он, вероятно, все равно осуществляет групповую доставку. Это не требуется с точки зрения интеграции, поскольку API включает множество опций, позволяющих просто не возвращать транзакции без подтверждений. Единственный бизнес-кейс, который требует принятия 0/неподтвержденных транзакций, — это когда ваш клиент стоит прямо перед вами и не появится в течение 10+ минут. В таких случаях атака Финни невозможна, и вот почему:

Представь, что я мошенник, который хочет использовать атаку Финни против тебя, честный торговец. Я потратил несколько тысяч и купил себе установки Radeon 5830 на 3 ГГц/с. Это число выбрано не случайно, я специально выбрал его, чтобы упростить математику — 3 GH/s принесут вам около 1 блока в месяц при текущих трудностях. Учитывая, что настоящие обычные магазины закрыты в среднем около 8 часов в сутки, это означает, что 1/3 найденных блоков приходится на нерабочее время, поэтому в среднем у меня есть шанс дважды потратить с помощью Finney. атаки каждые 45 дней.

Теперь, как и во всем майнинге, невозможно сказать, когда вы наткнетесь на этот счастливый блок, поэтому, если я твердо настроен на выполнение этой атаки, я должен оставаться сверхбдительным, потому что каждые 45 дней я получаю какой-то сигнал тревоги, говорящий мне пойти потратить деньги в магазине моей цели. Я должен добраться туда быстро, потому что, если я не совершу покупку и удаленно не запущу выпуск блока достаточно быстро, этот блок будет решен каким-то другим майнером, и я потеряю свой шанс. Итак, скажем, в среднем мне требуется 5 минут, чтобы добраться куда-то, выбрать что-то и совершить крупную покупку — у меня есть 50%-ная вероятность неудачи, так что теперь я могу выполнять свою атаку примерно раз в 90 дней.

Майнинг не из дешевых — моя установка 3 GH/s потребляет около 2 киловатт, добавьте еще 800 ватт или около того для охлаждения, и при моих местных затратах на электроэнергию я получаю около 8 долларов в день, чтобы попытаться провести эту атаку. Умножьте это на 90 дней, которые в среднем требуются мне, чтобы добиться успеха, и я должен добиться успеха на сумму 710 долларов, чтобы просто выйти в ноль. Я лучше заработаю на майнинге! Имейте в виду, что я тратил по 16 часов в день каждый день в течение трех месяцев, ожидая срабатывания этого будильника, поэтому, даже если я дважды трачу 1420 долларов (удваиваю свои расходы), я все равно зарабатываю только 236,67 долларов в месяц за свои проблемы - 49,3 цента в час.

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

Так что есть что-то вроде ответа — не как смягчить атаку, а почему атака на самом деле не имеет значения. Онлайн-торговцам не нужно принимать транзакции с нулевым подтверждением, поскольку ваши товары, вероятно, все равно не будут отправлены в течение 10 минут, а обычные продавцы добавляют задержку в процесс транзакции, что делает атаку невозможной. Даже без задержки транзакция должна быть положительно огромной, чтобы получить какую-либо прибыль, и злоумышленник все равно подвергается большому риску того , что деньги действительно потратят. Я действительно не вижу, чтобы это взлетело.

Если подумать, это одна из атак, на которую действительно повлияет сокращение времени блокировки . Полагаю, я должен извиниться перед несколькими людьми на форумах за то, что все время говорил обратное. Тем не менее, он по-прежнему не смягчает атаку 51%, и я никогда не слышал, чтобы кто-то конкретно ссылался на атаку Финни как на причину уменьшения времени блокировки.
Я понимаю, что обычные магазины не подвержены высокому риску, но торговые автоматы, онлайн-сервисы, которые «доставляют» цифровые товары или биткойн-банкоматы, могут быть. Одна скоординированная атака во многих местах одновременно против гипотетического типа биткойн-банкомата / торгового автомата, который принимает 0 / неподтвержденные транзакции для небольших сумм / дешевых продуктов, все равно может нанести серьезный ущерб оператору. Я надеялся, что хоть что-то можно было сделать, но, кажется, нет. В любом случае спасибо за исчерпывающее объяснение!
Потребуется довольно много усилий и рабочей силы, чтобы осуществить такую ​​атаку против торговых автоматов в любом значимом масштабе. Если у меня есть начальная стоимость в тысячи долларов, десятки людей и месяцы времени, я просто украду торговые автоматы. Для всех интенсивных целей прямо сейчас мы говорим о крошечной дыре в высоконадежном засове, прикрепленном к стеклянной двери. Это атака, для которой в настоящее время нет рынка для эксплуатации, хотя нам следует помнить об этом при создании новой инфраструктуры, чтобы не сделать ее важным направлением атаки в будущем.
+1 за исчерпывающий ответ. В библиотеке BitCoinJ есть соответствующая запись в вики: code.google.com/p/bitcoinj/wiki/SecurityModel .
Хорошо, поскольку другого решения действительно нет, я отмечаю это подробное объяснение как принятый ответ - спасибо!

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

Однако, если клиент занимается майнингом, он может попытаться найти блок и включить конфликтующую транзакцию до того, как остальной части сети удастся найти блок и включить законную транзакцию. В этом случае вероятность успеха злоумышленника равна проценту от общей мощности хеширования сети, которую он контролирует (например, у злоумышленника, занимающегося майнингом на скорости 100 GH/s, будет 1% шанс осуществить это, если общий хешрейт сети составлял 10 Тх/с).

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

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

Спасибо за объяснение - так что на самом деле нет ничего, что можно было бы сделать для онлайн-продавца или торгового автомата (где время покупки может быть точно и произвольно определено покупателем), чтобы снизить риск регулярного принятия транзакций с нулевым подтверждением?
Скорее объяснение того, что такое атака Финни, чем то, как ее смягчить. Конечно, вы можете начать свой собственный вопрос «Что такое атака Финни» и опубликовать свой собственный ответ. Просто убедитесь, что вы даете другим возможность опубликовать, возможно, лучшие ответы, прежде чем принимать свои собственные;)
@Noah: Да, торговые автоматы, вероятно, подвергаются наибольшему риску и не могут ничего сделать, чтобы смягчить его без привлечения третьей стороны (зеленый адрес, страховка и т. д.). Конечно, злоумышленник все еще находится в ситуации, когда ему приходится ждать у торгового автомата часами/днями/неделями, чтобы украсть шоколадный батончик.

Что может сделать продавец, чтобы снизить риск такого конкретного вида атаки?

Дождитесь нескольких подтверждений.

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