Block withholding: útok, který pool v jednom share nevidí
Miner posílá skutečné shares a skryje ten, který by byl blokem. Kolik to stojí, kdo platí, proč to někdo dělá a jak se to odhalí.
Co je útok zadržováním bloků?
Je to miner, který posílá všechny běžné shares, ale skryje ten, který by byl blokem. Pool za shares zaplatí. Blok nikdy nedorazí.
Každý share, který poolu pošlete, je skutečné řešení, které nedosáhlo cíle bloku. Cíl bloku je přísnější laťka, kterou hash musí překonat, aby vznikl blok. Jednou za čas ji řešení překoná také a takový share je celým blokem.
Takový share vypadá jako každý jiný, dokud ho pool nezkontroluje.
Útočník práci poctivě odvede a posílá všechny běžné shares. Ten jeden, který by byl blokem, potichu zahodí. Pool shares započítá a zaplatí za ně. Blok, který měl dostat, nikdy nedorazí.
Proč to neprozradí jediný share?
Na útočníkovi nevypadá nic špatně v žádném jednotlivém share. Hardware je skutečný a hashrate také. Shares jsou platné a přicházejí správným tempem. Pool může prozkoumat jeden share a neuvidí vůbec nic.
Chybí něco, co se nestalo, a taková absence se ukáže až v čase. Těžař s určitým podílem na hashrate poolu by měl najít zhruba stejný podíl jeho bloků.
Za hodinu to neříká nic. Nacházení bloků je náhodné a klidná období jsou běžná. Za dostatečně dlouhé okno to ale říká hodně.
Kolik to stojí a kdo platí?
Pool přijde o odměnu za blok, kterou měl dostat. Ztráta ale ve skutečnosti nedopadá na pool. Tuto část stojí za to pochopit u jakéhokoli poolu.
- V proporcionálním schématu kolo pokračuje, dokud blok nenajde někdo jiný. Všichni v kole pracovali na kole, které trvalo déle, než mělo. Každý tedy vydělá za jednotku práce o něco méně. Náklad se rozloží mezi poctivé těžaře.
- Ve schématu s platbou za share je to pro provozovatele horší. Pool už za každý share zaplatil z vlastní kapsy a spoléhá na to, že bloky přijdou. Dlouhodobý útok provozovatele přímo vysává. Historicky se lidé obávali nejvíc právě tohoto případu.
Proč by to někdo dělal?
Útočník zahazuje i odměnu za blok. Na první pohled je to čisté sebepoškozování. Smysl to má jen tehdy, když útočník získá něco tam, kam pool nevidí.
Obvyklým motivem je konkurence. Kdo provozuje vlastní pool, může pronajmout nebo nasměrovat hashrate na konkurenta a potlačit jeho výsledky. Jeho vlastní pool pak ve srovnání vypadá šťastněji. Shares, které útočník dál inkasuje, sabotáž zaplatí.
V rafinovanější variantě ú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. To je těžší provést. Aby stálo za pokus, potřebuje velký podíl hashrate.
Jak se odhaluje?
Odhalování je statistické, protože jiný signál neexistuje. Porovnejte bloky, které přispěvatel našel, s bloky, které by podle počtu shares najít měl. Dělejte to za okno dost dlouhé na to, aby se štěstí zprůměrovalo.
Těžkou částí je právě to okno.
- Když je krátké, obyčejná smůla vypadá jako útok. Poctiví těžaři by byli obviňováni neustále.
- Když je dlouhé, skutečný útočník nějakou dobu působí, než čísla promluví.
Tento kompromis nejde chytře obejít. Plyne z náhodnosti, ne ze softwaru.
Seriózní detektor proto otázku předá člověku, místo aby jednal sám. Automatický ban řízený statistikou jednou zabanuje někoho, kdo měl jen smůlu. Odpojit poctivého těžaře je horší než samotný útok.
Co to znamená pro poctivého těžaře?
Skoro nic, a to stojí za to říct jasně.
Vaše shares se v obou případech počítají a platí stejně. Mít smůlu není přestupek a nikdy nemůže být. V jakémkoli krátkém okně má smůlu většina těžařů.
Série kol, ve kterých jste hodně přispěli a pool nenašel nic, je běžná variance. Údaj o štěstí ve statistikách poolu ukazuje, jak je běžná.
Tento útok je jedním z důvodů, proč poolům záleží na tom, kdo na ně směruje hashrate. Je to také důvod, proč se poolu, který poctivě zveřejňuje své bloky a štěstí, snáz věří. Vše, co potřebujete ke kontrole poolu, najdete na stránce bloků.