Связанный с этим вопрос: усложнит ли атака Финни сокращение времени генерации блока?
Я понимаю, что атака Финни является основной причиной, по которой следует избегать принятия транзакций с нулевым подтверждением для транзакций на значительную сумму или на веб-сайтах по запросу, которые «доставляются» мгновенно.
Предположим, что продавцу необходимо принимать транзакции практически мгновенно. Что он может сделать, чтобы снизить риск этого конкретного вида атаки, не полагаясь на сторонние (подобные условному депонированию) услуги? Существуют ли какие-либо практические стратегии, такие как проверка больших пулов на наличие транзакции, систематическая задержка принятия транзакции и т. д., которые действительно работают? Что можно изменить в биткойн-клиенте, чтобы уменьшить вероятность этого вектора атаки?
Ключом к пониманию того, почему атака Финни на самом деле не так уж важна, является понимание экономического обоснования принятия 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 минут, а обычные продавцы добавляют задержку в процесс транзакции, что делает атаку невозможной. Даже без задержки транзакция должна быть положительно огромной, чтобы получить какую-либо прибыль, и злоумышленник все равно подвергается большому риску того , что деньги действительно потратят. Я действительно не вижу, чтобы это взлетело.
В лучшем случае продавец будет прослушивать узлы по всей сети на предмет любых конфликтующих транзакций. Если никакие конфликтующие транзакции не транслируются до того, как законная транзакция полностью распространится, продавец может быть уверен, что законные майнеры не поместят конфликтующую транзакцию в свои блоки.
Однако, если клиент занимается майнингом, он может попытаться найти блок и включить конфликтующую транзакцию до того, как остальной части сети удастся найти блок и включить законную транзакцию. В этом случае вероятность успеха злоумышленника равна проценту от общей мощности хеширования сети, которую он контролирует (например, у злоумышленника, занимающегося майнингом на скорости 100 GH/s, будет 1% шанс осуществить это, если общий хешрейт сети составлял 10 Тх/с).
Злоумышленник может подождать, пока он не найдет блок и не включит транзакцию, чтобы отправить свои монеты себе. Как только они находят блок, они удерживают его от сети и пытаются совершить покупку у продавца. Если им удается завершить покупку и приобрести желаемые товары до того, как остальная часть сети найдет блок, они выпустят свой предварительно добытый блок и аннулируют законную транзакцию.
Последний вариант, вероятно, будет непрактичным для обычного продавца просто из-за времени, необходимого для того, чтобы добраться до магазина, совершить покупку и уйти после обнаружения блока. Интернет-магазин может принять транзакцию немедленно, но дождаться хотя бы одного подтверждения перед отправкой, чтобы предотвратить атаку.
Что может сделать продавец, чтобы снизить риск такого конкретного вида атаки?
Дождитесь нескольких подтверждений.
Дэвид Перри
Ной
Дэвид Перри
Гэри
Ной