Block withholding: útok, který pool v jednom share nevidí
Těžař posílá skutečné shares a skryje ten, který by byl blokem. Co to stojí, kdo platí a jak se to odhalí.
Co je to za útok
Každý share, který poolu pošlete, je skutečné řešení, které nedosáhlo cíle bloku. Jednou za čas přijde řešení, které je i pod cílem bloku, a ten share je celý blok. Vypadá stejně jako každý jiný share až do chvíle, kdy ho pool zkontroluje.
Útok zadržováním bloků je těžař, který práci dělá poctivě, posílá každý běžný share a potichu zahodí ten jeden, který by byl blokem. Pool shares započítá a zaplatí za ně. Blok, který měl dostat, nikdy nedorazí.
Proč ho jeden share nikdy neprozradí
Právě to dělá útok zajímavým, a ne jen nezdvořilým. Na útočníkovi nevypadá nic špatně u žádného jednotlivého share. Hardware je skutečný, hashrate je skutečný, shares jsou platné a přicházejí ve správném tempu. Pool nemůže prozkoumat jeden share a vidět vůbec nic.
To, co chybí, je absence, a absence se zviditelní až v čase. Těžař s určitým podílem hashrate poolu by měl najít zhruba stejný podíl jeho bloků. Za hodinu to neříká nic, protože hledání bloků je náhodný proces a tiché úseky jsou běžné. Za dostatečně dlouhé období to říká hodně.
Co to stojí a kdo to skutečně platí
Pool přijde o odměnu za blok, kterou měl dostat. Ztráta ale ve skutečnosti nedopadá na pool, a to je část, které se vyplatí porozumět, pokud těžíte v jakémkoli poolu.
U proporcionálního schématu kolo prostě pokračuje, dokud blok nenajde někdo jiný. Všichni v kole přispěli prací do kola, které trvalo déle, než mělo, takže všichni vydělají o něco méně za jednotku práce. Náklad se rozloží mezi poctivé těžaře.
U schématu pay per share je to horší pro provozovatele, protože pool už každý share zaplatil z vlastní kapsy a spoléhá na to, že bloky dorazí. Dlouhodobý útok na pool s pay per share přímo vysává provozovatele a historicky to byl případ, kterého se lidé obávali nejvíc.
Proč by to někdo dělal
Útočník zahodí i odměnu za blok, takže na první pohled jde o čisté sebepoškozování. Dává to smysl jen tehdy, když útočník získá někde, kde to pool nevidí.
Obvyklým motivem je konkurence. Provozovatel vlastního poolu si může pronajmout hashrate nebo ho nasměrovat na konkurenta, potlačit jeho výsledky a tím nechat vlastní pool vypadat ve srovnání šťastněji. Útočník sabotáž platí ze shares, které stále inkasuje.
Existuje i rafinovanější varianta, kdy útočník blok nezahodí, ale podrží si ho, soukromě na něm těží dál a odešle ho později ve chvíli, která mu vyhovuje. Je těžší ji provést a aby stála za pokus, potřebuje velký podíl hashrate.
Jak se ve skutečnosti odhaluje
Odhalování je statistické, a jinak to nejde, protože žádný jiný signál není k dispozici. Měření se dá popsat jednoduše: porovnejte bloky, které daný přispěvatel našel, s bloky, které by podle počtu jeho shares měl najít, za období dost dlouhé na to, aby se štěstí zprůměrovalo.
Obtížné je to období. Když je krátké, běžná smůla vypadá jako útok, což by znamenalo neustále obviňovat poctivé těžaře. Když je dlouhé, skutečný útočník nějakou dobu působí, než čísla promluví. Neexistuje chytrý způsob, jak tento kompromis obejít; je to vlastnost náhody, ne softwaru.
Proto vážně míněný detektor předloží otázku člověku, místo aby jednal sám. Automatický ban řízený statistikou nakonec zabanuje někoho, kdo měl jen smůlu, a odpojit legitimního těžaře je horší výsledek než samotný útok.
Co to znamená, pokud jste poctivý těžař
Téměř nic, a právě proto je dobré to říct jasně.
Vaše shares se započítávají a vyplácejí stejně v každém případě. Smůla není přestupek a ani být nemůže, protože v každém krátkém období má většina těžařů smůlu. Série kol, ve kterých jste hodně přispěli a pool nic nenašel, je normální rozptyl a údaj o štěstí ve Statistikách poolu existuje právě proto, abyste viděli, jak normální to je.
Jediná věc, kterou je dobré vědět, je, že právě proto pooly zajímá, kdo na ně směruje hashrate, a proto se poolu, který poctivě zveřejňuje své bloky a své štěstí, dá věřit snáz než poolu, který to nedělá. Vše potřebné ke kontrole poolu najdete na stránce Bloky.