Что такое атака Финнея?

Что такое атака Финнея? Дополнительные пункты для объяснения его цели, предпосылок для его возможности, того, как может быть выполнена атака, и происхождения названия «атака Финни».

Ответы (2)

Атака Финни названа в честь Хэла Финни , который предложил ее в этом комментарии . (Хэл оказался первым получателем биткойн-транзакции и первым, кто прокомментировал выпуск исходного кода биткойна.)

Это атака с двойной тратой со следующими особенностями:

  • Это работает только в том случае, если продавец принимает неподтвержденные транзакции.

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

  • Это требует, чтобы злоумышленник занимался майнингом и контролировал содержимое своих блоков; однако теоретически он может сделать это с любым хэшрейтом, в частности значительно меньшим, чем 50% хешрейта сети.

Это происходит следующим образом:

  1. Атакующий минирует блоки нормально; в блок, который он пытается найти, он включает транзакцию, которая отправляет часть его монет обратно себе, не транслируя эту транзакцию.

  2. Когда он находит блок, он его не транслирует; вместо этого он отправляет те же монеты торговцу за какой-то товар или услугу.

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

Если время от нахождения блока до момента, когда злоумышленник отправит платеж и продавец его примет, равно t, а среднее время нахождения блока равно T, существует вероятность t/T того, что в этой сети в сети будет найден еще один блок. время; в этом случае атака потерпит неудачу, и злоумышленник потеряет награду за блок B.

Это означает, что средняя стоимость попытки атаки составляет около (t/T) * B; как правило, торговцу следует подождать по крайней мере t=V*T/B (V — стоимость транзакции), чтобы убедиться, что попытка провести эту атаку против него невыгодна; этого может быть недостаточно, поскольку проворный злоумышленник может использовать один и тот же блок для нескольких атак, потенциально получая общую их ценность.

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

Атака Финни — это вариант атаки с двойной тратой. Злоумышленник создает две транзакции: одна кредитует жертву, а другая кредитует себя. Пока что они сохраняют первую транзакцию и пытаются добыть вторую транзакцию в блок. Когда им это удается (это может занять некоторое время), они быстро совершают покупку с первой транзакцией, получают купленные товары, а затем выпускают предварительно добытый блок. Таким образом, первая транзакция станет недействительной, даже если она будет распространена по всей сети.

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

Учитывая, что сеть биткойнов сейчас такая огромная, является ли атака Финни чисто теоретической? Есть ли какие-либо прошлые записи о подозрениях или фактах нападения на Финни?
@Pacerier Насколько я помню, я слышал, что какой-то пул майнинга регулярно использовал это против игровых сайтов, таких как SatoshiDice. По сути, вы создаете блок с транзакцией, кредитующей себя. Вы отправляете конфликтующую транзакцию в SD, которая может принести вам больше, чем вознаграждение за блок. В случае проигрыша вы снимаете блокировку и возвращаете свои деньги. Если вы выигрываете, вы сбрасываете блок и сохраняете выигрыш.
Вау, значит, SatoshiDice может обанкротиться из-за повторяющихся подобных действий?
@Pacerier Да, если они не перейдут на обработку только ставок с 1+ подтверждениями.
Кажется странным, что SatoshiDice еще никто не атаковал. Похоже, это действительно вкусная мишень.
@Pacerier, может быть, у кого-то есть, но, может быть, они зарабатывают достаточно денег, чтобы наплевать. Бьет меня.
можете ли вы объяснить мне, почему первая транзакция будет недействительной. Например, у вас есть 10 монет. вы перемещаете 3 монеты себе, и вы покупаете другие 3 монеты. Я не вижу здесь никакого конфликта. Спасибо.
@hqt Если вы отправляете 3 монеты себе и продаете точно такие же 3 монеты кому-то другому, будет проведена только одна из этих транзакций. Вы стремитесь создать конфликт и заблокировать его.
@ThePiachu, так что ключевой момент exactly that same 3 coins(похоже, у каждой монеты есть что-то похожее, например, идентификатор). Мы можем контролировать это действие? Благодарность
@hqt Почитайте о транзакциях Биткойн, TxID и т. д. Сначала вам нужно понять, как они работают, чтобы понять, почему работает Finney Attack.
@ThePiachu «Если вы выиграете, вы сбросите блок и сохраните выигрыш». Почему даже сбросить нельзя, мы не можем сохранить оба, если только мы не получим выигрышные деньги только после подтверждения транзакции. Но веб-сайт, который даже не видит, подтверждена ли транзакция, и позволяет вам сделать ставку, даже не попытается подтвердить другое тоже, я прав?
@SurajJain блок, который вы добываете, не имеет транзакции. Это предназначено для отката того, что вы сделали, в случае проигрыша. В противном случае это не атака Финни
@ThePiachu Я имел в виду, что если я выиграю, и мне зачислили деньги, то зачем отказываться от блока, содержащего транзакцию для меня, так как таким образом я также верну свои деньги, которые я использовал на ставке, я имею в виду, почему бы не сделать бросок даже после того, как я выиграю, получится сохранить оба
@SurajJain Вы создаете блок БЕЗ транзакции. Если вы ПРОИГРЫВАЕТЕ, вы освобождаете свой блок, тем самым отменяя ставку. Если вы ВЫИГРЫВАЕТЕ, вы сбрасываете блок и сохраняете выигрыш.
Будут ли они после выигрыша проверять транзакцию, чтобы подтвердить ее, прежде чем дать цену?
Я думал, что мы сразу же получим выигрышную цену, а затем выпустим этот блок, чтобы мы также могли сохранить деньги, которые мы потратили на ставку.