Wyłączone opkody, czyli Quine oraz inne ataki

Wygadany
Awatar użytkownika
Posty: 593
Rejestracja: 8 lutego 2020
Reputacja: 1114
Reputacja postu: 
5
Napiwki za post: 0 BTC
Lokalizacja: 7-bit secp256k1

Wyłączone opkody, czyli Quine oraz inne ataki

Postautor: garlonicon » środa, 11 maja 2022, 18:58

Społeczności, takie jak na przykład BSV, szczycą się tym, że zostały przywrócone opkody, które na innych monetach są wyłączone. Jednym z takich opkodów jest OP_CAT. Analogicznym opkodem jest również OP_SUBSTR (zastąpione niekiedy przez OP_SPLIT). Oba opkody wyglądają niepozornie: no bo niby dlaczego łączenie napisów albo ich rozdzielenie mogłoby być groźne? Myślę, że ten wpis pozwoli lepiej zrozumieć, dlaczego Satoshi wyłączył niektóre opkody oraz jakie ataki stają się możliwe w momencie ich przywrócenia, jeśli zrobi się to w tej formie, w jakiej istniały wcześniej.

Wyjaśnienie stanowiące podstawę techniczną niniejszego wpisu jest wzięte z listy mailingowej: https://lists.linuxfoundation.org/piper ... 20462.html

Typowemu programiście zdarza się trafić na różne sprytne sztuczki, które wyglądają niewinnie, ale są w istocie dość groźne. Na przykład plik ZIP, który można rozpakowywać w nieskończoność: https://kottke.org/14/06/the-infinitely-large-zip-file. Podobną sztuczkę stanowi Quine, czyli program, który wypisuje swój własny kod źródłowy po uruchomieniu. W pierwszej chwili nie jest to takie oczywiste, czy takie rzeczy w ogóle da się zrobić. Jednakże, po przejściu przez takie sztuczki okazuje się, że nie tylko jest to realne, ale również może stanowić potencjalną lukę bezpieczeństwa.

Dlaczego nieskończony ZIP jest groźny? Otóż: wyobraźmy sobie, że na komputerze użytkownika znajduje się antywirus. Taki program skanuje podejrzane paczki, sprawdza ich zawartość, a następnie albo usuwa, jeśli plik jest groźny (i informuje o tym użytkownika), albo zostawia, jeśli jest nieszkodliwy. W przypadku wspomnianego pliku, problem polega na ciągłej próbie rozpakowania takiego ZIPa do samego końca. To się nigdy nie uda, antywirus może się zawiesić i zapchać dysk niepotrzebnymi kopiami tego pliku, który z punktu widzenia atakującego waży jedynie niecały kilobajt.

Co to ma wspólnego z kryptowalutami? Otóż takie opkody, jak OP_CAT albo OP_SUBSTR, pozwalają na napisanie takiej transakcji, która będzie mogła być powtarzana w nieskończoność. Jest to tak zwany Quine. W ten sposób można zrobić najprzeróżniejsze brzydkie rzeczy. Przykładowo: można użyć punktu bazowego (czyli klucza prywatnego równego jeden, tudzież innego dowolnego powszechnie znanego klucza) i napisać taką transakcję, która będzie umożliwiała wysłanie monet tylko na taki adres. Następnie można utworzyć taki adres i wysłać na niego monety.

Co się stanie dalej? Monety z takiego adresu będą mogły zostać wysłane tylko na nasz znany klucz publiczny. W normalnym przypadku ktoś by mógł błyskawicznie zgarnąć takie monety i atak na tym by się zakończył. Jednakże: cechą Quine jest rekursywność. Oznacza to tyle, że monety zostaną wysłane zawsze na taki sam adres, z jakiego są wydawane. Wtedy Quine jest kompletny. Efekt końcowy jest taki, że taka transakcja jest niczym odkurzacz: zasysa istniejące monety, blokując je w nieskończonej pętli transakcyjnej.

Dlaczego taki atak jest groźny? Powody mogą być różne, ale podam następujący: istnieją boty, które zgarniają monety z łatwych do zdobycia adresów. Jest taka możliwość, że Quine będzie operował na naszym adresie atakującego i że boty nauczą się ten adres wydawać. Jeśli kilkukrotnie jakieś monety zostaną przesunięte w identyczny sposób, to może się okazać, że da się napisać taki Quine, na który jakiś bot będzie reagować. Adres atakującego może być nawet nieznany, byleby sygnatury pozwalały na przesunięcie monet i umożliwiały wydanie tego wszystkiego za pomocą prostego klucza.

Jakie są dalsze konsekwencje? Otóż w przypadku BSV nie istnieje limit wielkości bloku. Oznacza to tyle, że taki Quine mógłby zostać użyty w celu zapchania bloków niepotrzebnymi danymi tak, aby ich całkowite pobranie mogło się okazać niepraktyczne. Całkiem możliwe, że dałoby się rozszerzyć Quine tak, aby zrobić cały blok na tym oparty. W takim przypadku atakujący wydobyłby normalny blok, który z jego punktu widzenia nie byłby jakoś szczególnie duży, natomiast pozostałe węzły nieustannie usiłowałyby pobrać wszystkie transakcje w nim zawarte i mogłoby im się to nigdy nie udać, powodując zawieszenie pobierania łańcucha na bloku wybranym przez atakującego.

Wróć do „Bitcoin”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 16 gości