Jak złamać seed phrase bitcoina? | John Cantrell wyjaśnia, jak dostał się do adresu z akcji Alistaira Milne
John Cantrell, twórca protokołu przesyłania wiadomości Lightning Network Juggernaut, złamał wczoraj seed phrase adresu Bitcoin i zgarnął dla siebie monety o wartości 9300 USD. Nie była to jednak kradzież a jedynie challenge, który udało mu się wygrać. Teraz ujawnił, jak tego dokonał…
Jak informowaliśmy wczoraj, Alistair Milne, CIO z Altana Digital Currency Fund, zorganizował wyzwanie na Twitterze, w którym zwycięzca miał otrzymać jednego bitcoina. Począwszy od maja, okresowo publikował wskazówki do 12-słowowej frazy odzyskiwania dla adresu portfela zawierającego 1 BTC. Ktokolwiek by zebrał wszystkie wskazówki, mógłby użyć frazy, aby odblokować portfel Bitcoin i wziąć kryptowalutę dla siebie.
I just published an article on how I checked over 1 trillion mnemonics in 30 hours to win @alistairmilne's 1 Bitcoin giveaway. I hope to pay-it-forward with a contest of my own that can't be won by software, details to come soon! https://t.co/5TNu1Z8CpL
— John Cantrell (@JohnCantrell97) June 18, 2020
Milne planował opublikować ostatnie trzy lub cztery słowa za jednym razem. Była to próba uniemożliwienia ataku typu brute-force (ciągłe zgadywanie słów, aż kombinacja zadziałała). Ale jego plan się nie powiódł. Za pomocą zaledwie ośmiu słów Cantrell odgadł pozostałe słowa, znalazł odpowiednią kombinację i odblokował portfel.
Jak Cantrell zhakował portfel bitcoin?
Zanim opublikowano ósme słowo, Cantrell zaczął się przygotowywać. W swoim poście na Medium napisał, że przy ośmiu słowach będzie „około 1,1 biliona możliwych fraz”, które należy sprawdzić.
12 lub 24-wyrazowy seed phrase dla klucza prywatnego Bitcoin, zapewnia pełny dostęp do funduszy, które są na nim przechowywane. Istnieje ograniczona lista 2048 słów, które takie frazy mogą zawierać – ale to bynajmniej nie ułatwia włamania się do bitcoinowego portfela.
Aby przetestować jedną frazę, Cantrell musiał wygenerować seed z frazy mnemonicznej, główny klucz prywatny z seeda i adres z głównego klucza prywatnego. Po napisaniu specjalnego algorytmu i przeprowadzeniu kilku testów porównawczych okazało się, że sprzęt, który miał w tym czasie, nie nadawał się do wykonania tego zadania.
Laptop Cantrella był w stanie sprawdzić około 1250 fraz na sekundę, w sumie 108 milionów dziennie. „Oznacza to, że procesor potrzebowałby około 25 lat na wygenerowanie i sprawdzenie 1 biliona możliwości niezbędnych do złamania frazy odzyskiwania przy znajomości tylko 8 słów” – zauważył Cantrell.
To iterate all possible 12 word seeds using the same setup would take about 309,485,009,821,345,068,724,781,056 days.
— John Cantrell (@JohnCantrell97) June 18, 2020
Aby rozwiązać problem, Cantrell zainteresował się chmurą obliczeniową. Wypożyczył kilkadziesiąt kart graficznych na rynku GPU oraz w chmurze Microsoft w chmurze Azure i napisał oprogramowanie, które rozkładałoby pracę w partiach na każdą kartę graficzną.
Kiedy Milne opublikował ósme słowo, Cantrell ruchomił maszyny.
„W szczycie testowałem około 40 miliardów mnemoników na godzinę. Oznacza to, że testowanie 1 biliona mnemoników powinno zająć około 25 godzin” – powiedział Cantrell.
Problemy i „szczęśliwe zakończenie”
Po przetestowaniu 85% kombinacji Cantrell nadal nie miał szczęścia. Wówczas zdał sobie sprawę z zasadniczej wady, jaką miał posiadać jego plan. Opierał się on na tym, że słowa były w odpowiedniej kolejności – co nie było gwarantowane. Gdyby tak nie było, „byłoby 8! (silnia) więcej możliwości ”, uniemożliwiając złamanie.
W ciągu dnia intensywnych obliczeń Cantrell „w dużej mierze porzucił nadzieję, że to zadziała” i „dosłownie praktycznie wszystko wyłączył”.
„Nie mogłem zmusić się do zatrzymania wszystkiego w tym momencie, ponieważ doszedłem tak daleko, więc po prostu pozwoliłem, aby trwało to dalej. Ku mojemu zaskoczeniu chwilę później tego samego wieczoru (91%) i po prawie 30 godzinach i dokładnie 1 bilionie sprawdzeń (1 000 710 602 752) algorytm znalazł rozwiązanie! ”
Took the 'hacker' just 44 hours to brute force. They paid a huge miner fee (0.01BTC!) so were worried about others doing the same and felt under pressure
— Alistair Milne (@alistairmilne) June 17, 2020