Block withholding: atak, którego nie widać w share'ach
Górnik wysyła prawdziwe share'y i ukrywa ten jeden, który byłby blokiem. Ile to kosztuje, kto za to płaci, po co ktoś to robi i jak się to wykrywa.
Czym jest atak polegający na zatajaniu bloków?
To górnik, który wysyła każdy zwykły share, ale ukrywa ten jeden, który byłby blokiem. Pool płaci za share'y. Blok nigdy nie dociera.
Każdy share wysłany do poola to prawdziwe rozwiązanie, które nie osiągnęło celu bloku. Cel bloku to wyższa poprzeczka, którą hash musi pokonać, aby powstał blok. Od czasu do czasu rozwiązanie pokonuje i ją, a wtedy ten share jest całym blokiem.
Taki share wygląda jak każdy inny, dopóki pool go nie sprawdzi.
Atakujący uczciwie wykonuje pracę i wysyła każdy zwykły share. Po cichu wyrzuca ten jeden, który byłby blokiem. Pool liczy share'y i za nie płaci. Blok, który powinien otrzymać, nigdy nie dociera.
Dlaczego jeden share tego nie zdradza?
Na żadnym pojedynczym share'u nic nie wygląda podejrzanie. Sprzęt jest prawdziwy, tak samo hashrate. Share'y są poprawne i przychodzą we właściwym tempie. Pool może zbadać jeden share i nie zobaczy niczego.
Brakuje czegoś, czego nie ma, a brak widać dopiero z czasem. Górnik z danym udziałem w hashrate poola powinien znajdować mniej więcej taki sam udział jego bloków.
W ciągu godziny to nic nie mówi. Znajdowanie bloków jest losowe, a ciche okresy są czymś zwykłym. W wystarczająco długim okresie mówi to bardzo wiele.
Ile to kosztuje i kto płaci?
Pool traci nagrodę za blok, którą powinien był dostać. Ale strata tak naprawdę nie spada na pool. Tę część warto zrozumieć na każdym poolu.
- W schemacie proporcjonalnym runda trwa dalej, aż ktoś inny znajdzie blok. Wszyscy w rundzie pracowali w rundzie, która trwała dłużej, niż powinna. Każdy zarabia więc nieco mniej na jednostkę pracy. Koszt rozkłada się na uczciwych górników.
- W schemacie płatności za share jest gorzej dla operatora. Pool już zapłacił za każdy share z własnej kieszeni i liczy na to, że bloki nadejdą. Długotrwały atak to bezpośredni drenaż kieszeni operatora. Historycznie to tego przypadku obawiano się najbardziej.
Dlaczego ktoś miałby to robić?
Atakujący też wyrzuca nagrodę za blok. Na pierwszy rzut oka to czyste szkodzenie sobie. Ma to sens tylko wtedy, gdy atakujący zyskuje gdzieś, czego pool nie widzi.
Zwykłym motywem jest konkurencja. Ktoś, kto prowadzi własny pool, może wynająć hashrate lub skierować go na rywala i obniżać jego wyniki. Jego własny pool wygląda wtedy na szczęśliwszy. Share'y, które atakujący nadal zbiera, opłacają sabotaż.
W subtelniejszym wariancie atakujący zatrzymuje blok, zamiast go wyrzucić. Kopie na nim dalej po cichu, a potem zgłasza go w dogodnej dla siebie chwili. Trudniej to przeprowadzić. Aby było warto, potrzeba dużego udziału w hashrate.
Jak się to wykrywa?
Wykrywanie jest statystyczne, bo nie ma innego sygnału. Porównuje się bloki znalezione przez uczestnika z blokami, które powinien był znaleźć według liczby swoich share'ów. Robi się to w okresie na tyle długim, by szczęście się uśredniło.
Najtrudniejszy jest wybór okresu.
- Krótki okres sprawia, że zwykły pech wygląda jak atak. Uczciwi górnicy byliby ciągle oskarżani.
- Długi okres sprawia, że prawdziwy atakujący działa przez jakiś czas, zanim liczby coś pokażą.
Nie ma sprytnego sposobu na ominięcie tego kompromisu. Wynika on z losowości, a nie z oprogramowania.
Dlatego poważny system wykrywania przekazuje sprawę człowiekowi, zamiast działać sam. Automatyczna blokada oparta na statystyce kiedyś zablokuje kogoś, kto miał po prostu pecha. Odcięcie uczciwego górnika jest gorsze niż sam atak.
Co to oznacza dla uczciwego górnika?
Prawie nic, i warto to powiedzieć wprost.
Share'y są liczone i opłacane tak samo w każdym przypadku. Pech nie jest przewinieniem i nie może nim być. W każdym krótkim okresie większość górników ma pecha.
Seria rund, w których wniosło się dużo, a pool nic nie znalazł, to normalna wariancja. Wskaźnik szczęścia w statystykach poola pokazuje, jak bardzo jest to normalne.
Ten atak to jeden z powodów, dla których poole zwracają uwagę na to, kto kieruje do nich hashrate. To także powód, dla którego łatwiej ufać poolowi, który uczciwie publikuje swoje bloki i szczęście. Wszystko, czego potrzeba do sprawdzenia poola, jest na stronie bloków.