
Badacz Loic Morel ujawnił, że od samego początku w algorytmie wydobywania bitcoinów występował błąd obliczeniowy, który pozwalał na wydobywanie bloków z niezwykle dużą prędkością.
Satoshi się mylił.
Kopanie bitcoinów ma błąd od samego początku. To prosty błąd obliczeniowy Satoshiego, który można wykorzystać do kopania bloków z zawrotną prędkością. To jeden z błędów, które naprawia BIP-0054 (w trakcie dyskusji). Powiem wam… pic.twitter.com/GurNv3qKrZ
— Loïc Morel (@Loic_Pandul) 11 kwietnia 2026 r
Według publikacji usterka ma związek z mechanizmem regulacji trudności.
Co 2016 bloków (około co dwa tygodnie) węzły przeliczają wartość docelową, tak aby jeden blok pojawiał się co 10 minut, niezależnie od mocy obliczeniowej górników. Aby dokonać tej korekty, węzły mierzą czas trwania ostatniego okresu, porównują go z wartością docelową (2016 x 600 = 1 209 600 sekund), a następnie odpowiednio zmieniają poziom trudności.
„To właśnie w tych obliczeniach tkwi błąd. Aby zmierzyć synchronizację bloków w minionym okresie, węzeł porównuje znacznik czasu pierwszego bloku z ostatniego. Instynktownie wydaje się to logiczne, ale w rzeczywistości jest to błąd, ponieważ między pierwszym a ostatnim blokiem okresu występuje tylko 2015 przedziałów czasowych, a nie 2016” – wyjaśnił Morel.
Jeśli oznaczymy t0 jako znacznik czasu pierwszego bloku, a t2015 jako znacznik czasu ostatniego bloku, węzeł obliczy upływ czasu jako T = t2015 – t0. W rezultacie otrzymamy 2015 interwałów (od t0 do t1 > od t1 do t2 > … > od t2014 do t2015).
Aby uzyskać przedziały 2016 r., należy użyć innego wzoru: T = t2015 — t-1, gdzie t-1 to znacznik czasu ostatniego bloku poprzedniego okresu.
Nazywa się to błędem „przesunięcia jednostki”. Ten błąd powoduje błąd o około 0,05% w przypadku nieznacznie zawyżonego poziomu trudności.
Prawdziwy problem leży jednak gdzie indziej. Błąd powoduje, że okresy dostosowawcze nie nakładają się na siebie – znacznik czasu ostatniego bloku jednego okresu nie jest brany pod uwagę przy obliczaniu kolejnego.
Manipulacja czasem
Ta luka umożliwia atak „zakrzywiający czas”. Jego zasada jest następująca:
- Górnik kontrolujący większość mocy obliczeniowej zaczyna ustalać minimalne akceptowalne znaczniki czasu dla wszystkich bloków w danym okresie (oprócz ostatniego).
- W ostatnim bloku okresu sztucznie przypisuje maksymalny dopuszczalny znacznik czasu.
- Po upływie okresu, poziom trudności jest dostosowywany. Z powodu manipulacji etykietami, zmierzony okres wydaje się dłuższy niż w rzeczywistości. W rezultacie poziom trudności ulega zmniejszeniu.
- Atakujący powtarza tę samą manipulację w kolejnym okresie. Ponieważ okresy się nie nakładają, pierwszy blok drugiego okresu ataku może mieć znacznik czasu z odległej przeszłości, podczas gdy poprzedni blok ma znacznik czasu z przyszłości. Ta przerwa wydłuża się z okresu na okres.
Powtarzając proces kilka razy, atakujący mógłby teoretycznie zredukować trudność wydobycia do poziomu, w którym tworzonych będzie nawet sześć bloków na sekundę (zamiast jednego co 10 minut).
„Konsekwencje byłyby tragiczne: blokady czasowe stałyby się bezużyteczne, sieć byłaby przeciążona, liczba reorganizacji wzrosłaby, a potwierdzenia transakcji straciłyby na wartości. Wszystko to umożliwiłoby atakującemu gromadzenie nagród za bloki w zawrotnym tempie” – dodał badacz.
Atak byłby niemożliwy, gdyby pierwszy i ostatni blok dwóch kolejnych okresów zbiegły się w czasie.
Jak naprawić ten błąd?
Morel zauważył, że problem można rozwiązać za pomocą miękkiego forka w BIP-0054.
Inicjatywa zakłada, że pierwszy blok nowego okresu trudności ma znacznik czasu, który nie przekracza znacznika czasu ostatniego bloku poprzedniego okresu o więcej niż dwie godziny.
To ograniczenie przywraca „pewną formę ciągłości” pomiędzy okresami, zapobiega manipulowaniu przedziałami czasu i sprawia, że atak polegający na „zakrzywianiu czasu” jest niemożliwy.
Przypomnijmy, że w kwietniu dyrektor ds. produktów StarkWare, Avihu Levy, zaprezentował mechanizm awaryjnej ochrony kwantowej dla Bitcoina bez konieczności stosowania soft forka.
