Obsługiwane przez
Featured

Rzuty kostką pozwalają przechowywać klucze do bitcoinów w trybie offline, ale nie każdy będzie się tym przejmował

Standardowa sześciościenna kostka zapewnia około 2,6 bitów nieprzewidywalnej informacji przy każdym rzucie. Może się to wydawać niewiele, ale powtórzone wystarczająco wiele razy rzuty te mogą zapewnić surową losowość niezbędną do zabezpieczenia portfela bitcoinowego bez konieczności polegania na oprogramowaniu lub komponentach elektronicznych.

NAPISAŁ
UDOSTĘPNIJ
Rzuty kostką pozwalają przechowywać klucze do bitcoinów w trybie offline, ale nie każdy będzie się tym przejmował

Najważniejsze wnioski

  • Zgodnie z wzorem Claude'a Shannona rzut uczciwą sześciościenną kostką zapewnia około 2,585 bitów entropii.
  • W dokumentacji Coinkite podano, że 50 rzutów kostką spełnia 128-bitowy standard dla nasiona portfela bitcoinowego.
  • Analiza „Wizard Sardine” autorstwa Kevina Loaeca wskazała na ryzyko związane z narzędziami Coldcard wykraczające poza główny klucz początkowy.

Dlaczego wynik rzutu kostką jest tak trudny do przewidzenia

Claude Shannon, matematyk, który stworzył teorię informacji, wykorzystał entropię do pomiaru niepewności wyniku. W przypadku uczciwej sześciościennej kostki każda ścianka ma taką samą szansę na pojawienie się – jedną na sześć. Daje to w każdym rzucie około 2,585 bitów entropii. Rzut monetą daje 1 bit, a rzut ośmiościenną kostką – 3 bity.

Image of different colored diceNiedawna afera związana z Coldcard sprawiła, że generowanie nasion oparte na rzutach kostką stało się popularne w mediach społecznościowych. Niektórzy użytkownicy traktują to teraz jako niezbędne, inni twierdzą, że chroniło to ich środki, podczas gdy doświadczeni operatorzy zwracają uwagę, że większość nowicjuszy nie będzie tolerować powolnego, podatnego na błędy procesu konfiguracji.

Najważniejsze nie jest to, że rzucana kostka zachowuje się losowo na poziomie atomowym. Tak nie jest. Wynik podlega prawom fizyki, ale zbyt wiele drobnych zmiennych zmienia się jednocześnie, by ktokolwiek mógł wiarygodnie obliczyć wynik. Kość opuszcza dłoń z określoną prędkością, pod określonym kątem, z określonej wysokości i z obrotem, a następnie uderza w stół i zmienia kierunek przy każdym odbiciu.

W praktyce nawet najmniejsza zmiana w sposobie rzutu może dać zupełnie inny wynik. Nieco inne ułożenie palców lub odrobinę mocniejszy rzut zmieniają trajektorię na tyle, że nie da się przewidzieć ostatecznej liczby na podstawie samego ruchu. Wynik może być deterministyczny w teorii, ale w przypadku generowania portfeli liczy się to, że osoba atakująca nie jest w stanie go odtworzyć ani obliczyć.

Przekształcanie wyników rzutów kostką w dane użytkowe

Komputer nie może bezpośrednio wykorzystać listy wyników rzutów kostką. Rzuty muszą najpierw zostać przekształcone w dane binarne, a metoda tego przekształcenia ma znaczenie.

Podstawowa metoda oparta na parzystości lub nieparzystości jest łatwa do zrozumienia, ale marnuje znaczną część dostępnej entropii. Każdy rzut jest redukowany do pojedynczego bitu, mimo że kostka dostarcza około 2,6 bitów informacji. Bardziej wydajne metody gromadzą długą sekwencję rzutów i przetwarzają cały ciąg, zazwyczaj za pomocą kryptograficznej funkcji skrótu. Pozwala to zachować znacznie większą część losowości.

Ta sama zasada pojawia się w systemie Diceware, znanej od dawna metodzie tworzenia bezpiecznych haseł, oraz podczas ręcznego generowania portfeli Bitcoin. Typowa 12-wyrazowa fraza odzyskiwania portfela składa się ze 128 bitów entropii. Przy około 2,6 bitów na jeden rzut około 50 uczciwych rzutów zapewnia wystarczającą ilość surowych informacji, aby przekroczyć ten próg.

Coinkite, producent portfela sprzętowego Coldcard, zaleca 99 lub więcej rzutów użytkownikom dążącym do uzyskania entropii zbliżonej do 256 bitów. Nie sprawia to, że korzystanie z portfela staje się dwukrotnie trudniejsze, ale zapewnia wygenerowanemu sekretowi znacznie większy matematyczny margines bezpieczeństwa.

Praktyczny test nasion generowanych za pomocą kości

Ta różnica stała się istotna po tym, jak firma Coinkite ujawniła problem z oprogramowaniem układowym sięgający 2021 roku. W niektórych urządzeniach Coldcard oprogramowanie mogło pominąć wewnętrzny sprzętowy generator liczb losowych i zamiast tego wykorzystywać słabszy proces powiązany z jawnymi informacjami o urządzeniu.

Ponieważ części tego procesu można było odtworzyć, osoby atakujące były w stanie zawęzić zakres możliwych kluczy portfela, zamiast przeszukiwać całą przestrzeń kluczy. Luka ta była powiązana z kradzieżą szacowanej kwoty 1 128,6633 BTC z około 1 100 adresów (stan na godz. 13:00 czasu wschodnioamerykańskiego).

X screenshot
Źródło zdjęcia: X

Nasiona portfeli utworzone w całości na podstawie wystarczającej liczby niezależnych rzutów kostką nie zostały ujawnione tą samą drogą. Użytkownicy ci dostarczyli własną entropię, więc wadliwy generator sprzętowy nie był odpowiedzialny za utworzenie głównego sekretu portfela.

Ochrona ta dotyczyła jednak wyłącznie klucza początkowego wygenerowanego na podstawie rzutów kostką. Nie zapewniała ona automatycznej ochrony wszystkich pozostałych kluczy generowanych przez urządzenie.

Wizard Sardine analizuje drobny druk

Badacz bezpieczeństwa Kevin Loaec opublikował 1 sierpnia na stronie internetowej Wizard Sardine ocenę luki w zabezpieczeniach Coldcard. Jego najważniejsza uwaga dotyczyła funkcji Coldcard, które generowały własne klucze w oddzieleniu od głównego klucza początkowego portfela.

„Uważam, że niezwykle ważne jest podkreślenie, iż nawet użytkownicy, którzy zaimportowali lub wygenerowali seed za pomocą kości, są narażeni na atak, jeśli korzystają z poniższych funkcji” – napisał Loaec na X, po czym przedstawił schemat systemu, którego dotyczy luka.

Schemat pokazuje wadliwy generator liczb losowych zasilający kilka drugorzędnych funkcji Coldcard. Należą do nich tworzenie portfela papierowego, klonowanie urządzenia, szyfrowanie sesji USB, funkcja transferu Secret Teleport, tworzenie klucza do współpodpisywania, wbudowany generator haseł oraz kody uwierzytelniające modułu bezpieczeństwa sprzętowego.

X screenshot
Źródło obrazu: post na platformie X autorstwa badacza bezpieczeństwa Kevina Loaeca.

Portfel główny utworzony na podstawie 99 rzutów kostką pozostawał w oddzielnej części systemu. Problem polegał na tym, że pozostałe narzędzia nadal mogły żądać nowych wartości losowych od wadliwego generatora. W rezultacie bezpieczny seed nie gwarantował, że każde hasło, kopia zapasowa, kod uwierzytelniający lub klucz pomocniczy utworzony na tym samym urządzeniu był równie bezpieczny.

Dlaczego większość nowych użytkowników nie będzie rzucać kostką

Entropia generowana za pomocą kości jest technicznie poprawna, gdy jest wykonywana prawidłowo, ale dla większości nowych użytkowników nie jest to realistyczne domyślne rozwiązanie. Rzucanie kostką 50 lub 99 razy, dokładne wpisywanie każdego wyniku oraz upewnianie się, że żaden rzut nie został pominięty ani powtórzony, wymaga cierpliwości i dużej koncentracji. Jedna błędnie wpisana cyfra może całkowicie zmienić ostateczny adres portfela, a większość urządzeń nie jest w stanie stwierdzić, czy błąd wynikał z nieprawidłowego rzutu, błędu przy wprowadzaniu danych, czy też niezrozumienia instrukcji.

X screenshot
Źródło zdjęcia: X

Proces ten wiąże się również z ryzykiem, które nie występuje w przypadku prawidłowo działającego generatora sprzętowego. Użytkownicy mogą zapisywać wyniki rzutów na papierze, fotografować je, wprowadzać do narzędzia internetowego lub pozostawiać listę w miejscu, gdzie może ją znaleźć inna osoba. Niektórzy rzucają kostką w powtarzalny lub kontrolowany sposób, używają kostki z fałszerstwem lub uszkodzonej, albo przerywają proces przedwcześnie, ponieważ wydaje im się on zbyt uciążliwy. Podstawy matematyczne mogą być solidne, ale wynik jest tak bezpieczny, jak procedura zastosowana przez użytkownika.

X screenshot
Źródło zdjęcia: X

Właśnie dlatego rzucanie kostką nie zawsze jest uważane za najlepszą metodę przez wiele osób, nawet wśród doświadczonych użytkowników bitcoina. Zastępuje ono zaufanie do urządzenia zaufaniem do procesu ręcznego. Dla użytkownika ostrożnego pod względem technicznym, który rozumie entropię, weryfikuje metodę i zachowuje sekwencję rzutów w tajemnicy, taki kompromis może mieć sens. Dla przeciętnego nabywcy, który po raz pierwszy konfiguruje portfel, wiąże się to z kilkoma możliwościami popełnienia nieodwracalnego błędu, a jednocześnie jest to proces uciążliwy.

X screenshot
Źródło zdjęcia: X

Trudno też wyobrazić sobie powszechne przyjęcie bitcoina, jeśli użytkownicy mieliby siedzieć przy stole i zapisywać wyniki 99 rzutów kostką, zanim będą mogli bezpiecznie otrzymać środki. Praktyki bezpieczeństwa muszą sprawdzić się w rzeczywistych warunkach domowych, przy napiętym harmonogramie, rozpraszających czynnikach oraz wśród użytkowników, którzy nie chcą zgłębiać kryptografii. Ręczne generowanie entropii powinno pozostać dostępne jako opcja zaawansowana, ale długoterminowym celem jest oprogramowanie i sprzęt, które poprawnie generują silną losowość, jasno wyjaśniają, co się dzieje, i wymagają jak najmniejszej wiedzy specjalistycznej.

Co powinni sprawdzić właściciele kart Coldcard

Właściciele urządzeń Coldcard, których dotyczy ta usterka, powinni najpierw zweryfikować wersję oprogramowania sprzętowego zainstalowanego na urządzeniu. Następnie powinni sprawdzić, z jakich funkcji korzystali podczas pracy ze starszym oprogramowaniem, zamiast skupiać się wyłącznie na tym, w jaki sposób wygenerowano główny seed portfela.

Każdy, kto używał urządzenia, którego dotyczy problem, do wygenerowania portfela papierowego, klucza klonującego, hasła, klucza do współpodpisywania lub kodu uwierzytelniającego, może być zmuszony do natychmiastowej wymiany tych materiałów. Zainstalowanie aktualizacji zapobiega wystąpieniu tego samego problemu w przypadku nowych kluczy, ale nie naprawia niczego, co zostało utworzone wcześniej.

Incydent ten stanowi również silniejszy argument przemawiający za konfiguracjami portfeli opartymi na wielu dostawcach. W układzie z wieloma podpisami do zatwierdzenia transakcji mogą być wymagane oddzielne urządzenia sprzętowe od różnych producentów. Taka struktura nie wyklucza błędów oprogramowania układowego, ale może zapobiec sytuacji, w której pojedynczy wadliwy generator liczb losowych naraża na niebezpieczeństwo cały portfel.

Ten artykuł został przetłumaczony z języka angielskiego przy użyciu sztucznej inteligencji. Oryginalna wersja angielska jest źródłem autorytatywnym; tłumaczenia automatyczne mogą zawierać nieścisłości, zwłaszcza w terminologii prawnej i regulacyjnej.