У всех пулов майнинга, включая p2pool, существует одна очень простая и неприятная идеологическая уязвимость, с помощью которой можно уменьшить совокупный доход пула относительно его общей мощности. Злоумышленник может 'наказать' пул на сумму, сравнимую с доходами от мощностей злоумышленника, фактически вся награда, выплачиваемая ему пулом. И чем больше мощность злоумышленника и чем дольше продолжается атака, тем больше шанс что это убытки пула будут приближаться к этой величине. И самое главное, что такая атака не стоит злоумышленнику практически ничего.
Особенно это актуально для владельцев больших мощностей, сравнимых с мощностью самого пула.
Это не уязвимость протокола bitcoin, ведь ее можно свершать для любой современной криптовалюты, это не уязвимость в коде пулов майнинга — это идеологическая уязвимость метода определения способа начисления наград при распределенных вычислениях.
Пулы майнинга платят своим пользователям не за найденные блоки, а за мощности, которые заводят пользователи на пул. Абсолютно все существующие способы расчета PPS/PPLNS/Prop/… основаны на том, что оплата производится за полученные пулом шары — частные решения, одно из которых может быть целевым решением пула по сбору блока в сети bitcoin. А проблема в том, что майнер, находя решение, знает, какое из них является целевым для пула, а какое обычным. Это определяется сложностью, под которую подходит это частное решение, если она больше сложности сети — то значит это решение целевое.
Например популярная утилита cgminer показывает в своем окне информацию по каждой найденной шаре.
Вот например эта строчка: [2013-03-10 20:17:16] Accepted 03316740 Diff 80/52 AVA 0 pol 0
80 — это сложность, для которой подойдет данная шара как решение, а 52 — это сложность, которая была затребована пулом при выдачи задачи майнеру. Пул платит из расчета этой сложности в 52.
Майнеру-злоумышленнику достаточно не отсылать пулу решения, целевые для нахождения блока (т.е. со сложностью >= текущей мощности), это несколько измененных строчек в коде майнера (на приведенном скриншоте эта сложность указана сверху — 4.37M). Пул все равно заплатит за остальные шары, но блок от майнера так и не получит! Получается стоимость атаки, для метода выплат PPS — одна единственная шара на каждый недополученный блок пулом, для остальных методов оценка стоимости атаки будет сравнима с долей от нанесенного ущерба, равной соотношению мощности пула к мощности атакующего.
Значит если злоумышленник будет продолжать это делать достаточно долго, то он загонит пул в долговую яму для PPS или заметно уменьшит прибыль пользователей пула для остальных методов выплат. Для пула же это будет выглядеть как продолжительная повышенная неудача.
Обнаружить подобную атаку можно статистически, просто вычислив мощность майнера и количество найденных им блоков. Но максимум что пул может сделать — забанить нарушителя уже после успешной атаки, а атакующему завести новый аккаунт не составит никакого труда.
Целью данной атаки может являться конкурентная борьба между пулами майнинга, где, если пул-атакующий скрывает задачу, которую решает майнер (это происходит при использовании старых протоколов майнинга, в отличии от новых типа stratum), то он может перенаправить часть или все свои мощности на атакуемый пул в качестве обычных его клиентов.
Но даже при использовании новейших протоколов, много ли майнеров действительно контролируют, что за задачу им выдает пул? Ни один из известных мне клиентов для майнинга не проводит эту проверку и не предоставляет механизмов для указания условий, по которым он может определить — та ли это задача, что обещает пул? Максимум будет выдано сообщение на тот случай, если при использовании нового протокола stratum пул будет продолжать скрывать содержимое собираемого блока.
upd: спасибо Balthazar, ссылки на более развернутый анализ различных методов выплат на пулах
Особенно это актуально для владельцев больших мощностей, сравнимых с мощностью самого пула.
Это не уязвимость протокола bitcoin, ведь ее можно свершать для любой современной криптовалюты, это не уязвимость в коде пулов майнинга — это идеологическая уязвимость метода определения способа начисления наград при распределенных вычислениях.
Пулы майнинга платят своим пользователям не за найденные блоки, а за мощности, которые заводят пользователи на пул. Абсолютно все существующие способы расчета PPS/PPLNS/Prop/… основаны на том, что оплата производится за полученные пулом шары — частные решения, одно из которых может быть целевым решением пула по сбору блока в сети bitcoin. А проблема в том, что майнер, находя решение, знает, какое из них является целевым для пула, а какое обычным. Это определяется сложностью, под которую подходит это частное решение, если она больше сложности сети — то значит это решение целевое.
Например популярная утилита cgminer показывает в своем окне информацию по каждой найденной шаре.
Вот например эта строчка: [2013-03-10 20:17:16] Accepted 03316740 Diff 80/52 AVA 0 pol 0
80 — это сложность, для которой подойдет данная шара как решение, а 52 — это сложность, которая была затребована пулом при выдачи задачи майнеру. Пул платит из расчета этой сложности в 52.
Майнеру-злоумышленнику достаточно не отсылать пулу решения, целевые для нахождения блока (т.е. со сложностью >= текущей мощности), это несколько измененных строчек в коде майнера (на приведенном скриншоте эта сложность указана сверху — 4.37M). Пул все равно заплатит за остальные шары, но блок от майнера так и не получит! Получается стоимость атаки, для метода выплат PPS — одна единственная шара на каждый недополученный блок пулом, для остальных методов оценка стоимости атаки будет сравнима с долей от нанесенного ущерба, равной соотношению мощности пула к мощности атакующего.
Значит если злоумышленник будет продолжать это делать достаточно долго, то он загонит пул в долговую яму для PPS или заметно уменьшит прибыль пользователей пула для остальных методов выплат. Для пула же это будет выглядеть как продолжительная повышенная неудача.
Обнаружить подобную атаку можно статистически, просто вычислив мощность майнера и количество найденных им блоков. Но максимум что пул может сделать — забанить нарушителя уже после успешной атаки, а атакующему завести новый аккаунт не составит никакого труда.
Целью данной атаки может являться конкурентная борьба между пулами майнинга, где, если пул-атакующий скрывает задачу, которую решает майнер (это происходит при использовании старых протоколов майнинга, в отличии от новых типа stratum), то он может перенаправить часть или все свои мощности на атакуемый пул в качестве обычных его клиентов.
Но даже при использовании новейших протоколов, много ли майнеров действительно контролируют, что за задачу им выдает пул? Ни один из известных мне клиентов для майнинга не проводит эту проверку и не предоставляет механизмов для указания условий, по которым он может определить — та ли это задача, что обещает пул? Максимум будет выдано сообщение на тот случай, если при использовании нового протокола stratum пул будет продолжать скрывать содержимое собираемого блока.
upd: спасибо Balthazar, ссылки на более развернутый анализ различных методов выплат на пулах
bitcointalk.org/index.php?topic=32814.0
bitcoil.co.il/pool_analysis.pdf
bitcoin.stackexchange.com/questions/4943/what-is-a-block-withholding-attack
permalink.gmane.org/gmane.comp.bitcoin.devel/1112
bitcoin.stackexchange.com/questions/1338/how-is-block-solution-withholding-a-threat-to-mining-pools