Czym jest nonce w kryptowalutach? Kopanie bitcoinów, Ethereum, kryptografia
W grudniu 2010 roku, na scenie Chaos Communication Congress w Berlinie, niewielka grupa o nazwie fail0verflow ogłosiła, że udało im się wydobyć główny klucz podpisu Sony dla PlayStation 3. Eksploit nie złamał 256-bitowej krzywej eliptycznej. Nie złamał też szyfru AES. Wykorzystał fakt, że system podpisywania kodu Sony używał tego samego numeru dla każdego wygenerowanego podpisu. Numer ten był wartością jednokrotną (nonce).
To samo słowo, „nonce”, pojawia się w trzech zakątkach świata kryptowalut, które praktycznie nic ze sobą nie łączą. To zmienna, którą górnik Bitcoina przetwarza biliony razy na sekundę w poszukiwaniu prawidłowego hasha bloku. To licznik używany przez portfel Ethereum do sekwencjonowania transakcji wychodzących i powód, dla którego zablokowana transakcja blokuje każdą kolejną, którą podpisujesz. To unikalna wartość, której szyfr AES-GCM potrzebuje, aby zapobiec wyciekaniu treści dwóch zaszyfrowanych wiadomości. Jedno słowo, trzy zadania, których nie można zamieniać. Mylenie jednego z drugim to sposób, w jaki nowicjusze błędnie interpretują błędy „za niski nonce”, jak górnicy projektują niemożliwe konfiguracje i jak systemy takie jak PS3 tracą swoje źródło zaufania.
32-bitowy nonce o nazwie „liczba użyta raz”: pochodzenie
Backronym jest wszechobecny. „Nonce oznacza liczbę użytą raz”. Z grubsza prawda, ale historycznie błędna. Angielskie słowo poprzedza kryptografię o około 750 lat. „For the nonce” pojawia się w rękopisach średnioangielskich około XIII wieku. Oznaczało to „na tę szczególną okazję”.
Kryptografia zapożyczyła to słowo w 1978 roku wraz z protokołem uwierzytelniania Needhama-Schroedera. Tam definiującą cechą nie jest losowość. Jest nią unikalność w określonym zakresie. Wikipedia, odwołując się do praktyki, nazywa nonce „dowolną liczbą, która może być użyta tylko raz w komunikacji kryptograficznej”. Licznik również się kwalifikuje. Podobnie znacznik czasu. Podobnie wartość losowa lub dowolna kombinacja tych trzech. Ważne jest, aby w systemie ten sam nonce nigdy nie pojawił się ponownie z tym samym kluczem ani w tym samym kontekście.
Jedno słowo wykonuje całą pracę, a praca dzieli się na trzy części. Wartość nonce w kopaniu Bitcoina zmienia się, dopóki hash bloku nie spadnie poniżej docelowego poziomu trudności. Wartość nonce w koncie Ethereum to licznik, którego sieć nie pozwala na powtórzenie. Wartość nonce w szyfrowaniu symetrycznym to wartość sparowana z kluczem, a jej ponowne użycie raz rozwiązuje szyfrowanie.
Słowo jest luźne. Konteksty nie.

Jak działa nonce w wydobywaniu bitcoinów
W Bitcoinie nonce zajmuje 32-bitowe pole w 80-bajtowym nagłówku bloku. Cztery bajty. Wartości wahają się od zera do 4 294 967 295. Nieco poniżej 4,3 miliarda możliwych liczb, co wydawało się ogromne, gdy Satoshi pisał protokół, a teraz jest wyczerpywane przez układ ASIC wielkości biurka w mikrosekundach.
Kopanie to wyścig o znalezienie wartości w tym polu, która wygeneruje prawidłowy hash bloku. Weź 80-bajtowy nagłówek. Przepuść go dwukrotnie przez SHA-256, kryptograficzną funkcję skrótu, na której działa blockchain Bitcoina. Otrzymujesz 256-bitową liczbę. Porównaj tę liczbę z docelowym hashem ustawionym przez cel trudności sieci, mechanizm konsensusu, który napędza proof-of-work. Poniżej celu? Blok prawidłowy, górnik wygrywa. Powyżej celu? Zwiększ wartość nonce o jeden i powtórz hash. Górnicy Bitcoina powtarzają to, aż ktoś znajdzie prawidłową wartość nonce i nowy blok zostanie dodany do blockchaina.
Po co tak małe pole do tak dużego zadania? Powody strukturalne. Wartość nonce to najtańszy element nagłówka, jaki górnik może zmutować. Każde inne pole ma zależności. Korzeń merkle'a podsumowuje transakcje bloku, więc jego zmiana wymusza przeliczenie całego drzewa transakcji przed wypróbowaniem nowego hasha. Wartość nonce omija to wszystko. Każda próba hasha jest niezależna. Zwiększenie wartości nonce nie daje większego postępu niż wybranie losowej wartości. Siła brutalna, ubrana w język konsensusu.
Projekt przetrwał około roku. Potem układy ASIC go zepsuły. Współcześni górnicy wyczerpują całą przestrzeń 4,3 miliarda wartości nonce w mikrosekundy, a nie sekundy. Bitmain Antminer S21 Pro działa z szybkością 234 terahaszów na sekundę. Pełne pole wartości nonce wyczerpuje się na tym sprzęcie w około 18 mikrosekund . W maju 2026 roku całkowity hashrate sieci Bitcoin wynosił blisko 996 EH/s, a trudność wynosiła 132,47 biliona. Pojedynczy S21 Pro samodzielnie przetwarza każdą możliwą wartość nonce dziesiątki tysięcy razy na sekundę.
Protokół Satoshiego pozostawia zatem górnikowi dwa czyste wyjścia po wyczerpaniu 32-bitowej przestrzeni. Pierwszym z nich jest „dodatkowy nonce”, pole ukryte w skrypcie transakcji Coinbase. Koduje je BIP34. Od dwóch do stu bajtów, kontrolowane przez górnika. Mutacja dodatkowego nonce powoduje zmianę identyfikatora TXID Coinbase, co powoduje konieczność ponownego obliczenia pierwiastka merkle, zmianę nagłówka bloku i otwarcie nowego 32-bitowego wyszukiwania nonce. Drugim wyjściem jest zmiana znacznika czasu lub rotacja bitów wersji w dozwolonym zakresie protokołu. Obecne pule wydobywcze cyklicznie przetwarzają wszystkie te operacje w ramach normalnej pracy. Dostosowanie nonce to najtańsza mutacja. Dostosowanie dodatkowego nonce to druga najtańsza mutacja. Rotacje merkle i znacznika czasu znajdują się dalej, w kolejności nakładu pracy potrzebnego do ponownego obliczenia każdego z nich.
Gdy ktoś trafi wartość hash poniżej wartości docelowej (górnicy nazywają to „złotym nonce”), nowy blok przelatuje przez sieć peer-to-peer, a wszyscy uczestnicy porzucają bieżące wyszukiwanie, aby rozpocząć nową rundę.
| Model ASIC | Hashrate | Czas wyczerpania 32-bitowego nonce'a | Efektywność |
|---|---|---|---|
| Antminer S21 | 200 TH/s | ~21 µs | 17,5 J/TH |
| Antminer S21 Pro | 234 TH/s | ~18 µs | 15 J/TH |
| Antminer S21 XP | 270 TH/s | ~16 µs | 13,5 J/TH |
Prawdziwy, niedawny przykład stanowi podstawę tej abstrakcji. Blok 948 000, wydobyty na początku 2026 roku, ma hash bloku `00000000000000000001b01841afc366a4f999b291c8563ee0d0db956fc2db44` i zwycięską wartość nonce równą 2 582 463 598. Ta pojedyncza liczba całkowita, w połączeniu z resztą nagłówka bloku, wygenerowała hash na tyle niski, że można go było dodać do blockchaina. Każda inna wartość nonce, którą górnik próbował wydobyć w tej rundzie, generowała wartość zbyt dużą.
Na tym właśnie polega dowód pracy, z mechanicznego punktu widzenia. Nie jest to łamigłówka w sensie zagadki. To poszukiwanie ważnego nonce'a, opłacane elektrycznością.
Wartość nonce hash vs wartość nonce konta: to samo słowo, inne zadanie
Słowo „nonce” jest używane w kryptowalutach w jeszcze jednym celu, a to nakładanie się jest największym źródłem nieporozumień wśród nowicjuszy. W przypadku Bitcoina, nonce wydobywczy to zmienna wyszukiwania. W przypadku Ethereum, nonce konta to licznik. Mają wspólną nazwę i prawie nic więcej.
| Hash nonce (Bitcoin) | Nonce konta (Ethereum) | |
|---|---|---|
| Stanowisko | Wyszukaj prawidłowy hash poniżej celu | Kolejność transakcji wychodzących na konto |
| Gdzie mieszka | Nagłówek bloku (32 bity) | Stan konta (pełna liczba całkowita, zaczynająca się od 0) |
| Kto to mutuje? | Górnik, w sprzęcie, miliardy na sekundę | Portfel automatycznie, jeden na każde wysłanie |
| Co oznacza „źle” | Nieudany los na loterię, spróbuj następnego nonce'a | Transakcja została odrzucona lub zablokowana |
| Związany z konsensusem? | Tak, to dowód pracy | Nie, to jest ochrona przed powtórzeniem |
Hash nonce to tymczasowa liczba, którą górnik wyrzuca. Nonce konta to stały stan zapisany w widoku sieciowym Twojego adresu. Mylenie jednego z drugim – traktowanie nonce blockchain bloku Bitcoina jak licznika sekwencji – to sposób, w jaki ludzie odczytują błąd Ethereum „za niski nonce” i zakładają, że ich konfiguracja kopania jest uszkodzona. Różne blockchainy, różne zadania, to samo słowo. Nawet w ramach jednego ekosystemu rola nonce w operacjach blockchain zależy wyłącznie od tego, czy obserwuje się warstwę konsensusu, czy warstwę konta.
Nonce konta Ethereum i problem zablokowanej transakcji
Każde konto zewnętrzne w Ethereum ma swój własny nonce. Licznik zaczyna się od zera, gdy adres wysyła transakcję po raz pierwszy. Stamtąd rośnie o jeden dla każdej transakcji, która trafia do bloku. Gdy coś wysyłasz, Twój portfel pyta sieć o aktualną wartość, dołącza kolejną liczbę w kolejce i podpisuje. Sieć akceptuje kolejkę wychodzącą tylko w ścisłej kolejności. Nonce to 0, potem 1, potem 2. Luki są niedozwolone.
Ta ścisła kolejność zapewnia Ethereum ochronę przed powtórzeniami. Podpisana transakcja jest powiązana z jednym konkretnym nonce, a od czasu protokołu EIP-155 również z jednym konkretnym identyfikatorem łańcucha. Atakujący nie może retransmitować starej, wykonanej transakcji tak, jakby była nowa. W momencie retransmisji, nonce konta już ją przekroczył. Identyfikator łańcucha blokuje retransmisje międzyłańcuchowe w tym samym momencie. W obrębie jednego łańcucha potwierdzona transakcja znajduje się w jednym punkcie licznika, który już się przesunął.
Ta sama sztywna kolejność generuje problem, z którym borykają się nowe portfele Ethereum. Transakcja kończy się zbyt niskim napiwkiem. Walidatory ją przekazują. Pula pamięci usuwa ją z kolejki priorytetowej. Transakcja pozostaje w zawieszeniu – niepotwierdzona, nieudana, po prostu utknęła. Co gorsza, każda kolejna transakcja, której ten sam adres jest oznaczony, otrzymuje wyższy nonce. Sieć odmawia uwzględnienia którejkolwiek z nich, dopóki utknęła transakcja nie zostanie potwierdzona lub zastąpiona. Jedna powolna transakcja blokuje całą kolejkę.
Rozwiązanie problemu tkwi w mechanizmie zwanym „replace-by-fee”. Twój portfel retransmituje nową transakcję z tym samym noncem co zablokowana, ale z większą ilością gazu. EIP-1559, model cenowy gazu, który funkcjonuje w Ethereum od czasu aktualizacji londyńskiej w sierpniu 2021 roku, ustanawia regułę: nowa transakcja musi podnieść zarówno `maxFeePerGas`, jak i `maxPriorityFeePerGas` o co najmniej dziesięć procent w stosunku do pierwotnej. Chcesz całkowicie anulować zablokowaną transakcję zamiast ją zastępować? Wyślij przelew własny o wartości zero ETH na zablokowaną transakcję, z wyższym napiwkiem. Slot zostanie wykorzystany, a każda kolejna transakcja w kolejce zostanie odblokowana.
Liczby z maja 2026 roku, dla kontekstu. Średni priorytetowy napiwek wynosi około 1,875 Gwei. Standardowe anulowanie za 21 000 benzyny kosztuje około 0,05 USD w spokojny dzień i rośnie do niskich dolarów w czasie korków. Jest jedna lekcja, której wszyscy w końcu uczą się na własnej skórze: zawsze najpierw wymieniaj najniższą oczekującą transakcję nonce. Podniesienie opłaty za późniejszą transakcję, gdy poprzednia wciąż jest zablokowana, nie daje żadnych rezultatów.
Abstrakcja kont nieco zmienia tę historię. Inteligentne konta ERC-4337 używają dwuwymiarowego nonce'a, dzieląc liczbę całkowitą na 192-bitowy „klucz” i 64-bitową sekwencję. Różne klucze tworzą równoległe strumienie transakcji. Zatrzymanie partii na jednym kluczu nie blokuje pracy nad innym. Nonce konta w końcu przestał być pojedynczym licznikiem liniowym.
Ostatni mit, który warto obalić. Przejście Ethereum na Proof of Stake podczas Merge we wrześniu 2022 roku nie usunęło nonce'a konta. Zniknął natomiast nonce górniczy w nagłówku bloku, ponieważ walidatory są teraz wybierane według slotu, a nie przez łamigłówkę haszującą. Nonce konta pozostał dokładnie tam, gdzie zawsze, w stanie konta trie.
Kryptograficzny nonce w szyfrowaniu: wersja katastroficzna
Wyjdź poza blockchain, a kryptograficzny nonce wykona swoją pracę bardziej precyzyjnie. Popełnij błąd, a podłoga runie ci spod nóg.
Każdy nowoczesny szyfr uwierzytelniający łączy klucz tajny z wartością nonce dla każdej wiadomości. AES-GCM, podstawowy algorytm w TLS 1.3, wykorzystuje 96 bitów. Specyfikację opracował NIST SP 800-38D. ChaCha20-Poly1305, alternatywa skodyfikowana w RFC 8439 (czerwiec 2018), kopiuje tę samą 96-bitową wartość nonce i łączy ją z 256-bitowym kluczem. Zasada obowiązująca w obu algorytmach, w prostych słowach: każda para (klucz, wartość nonce) działa dokładnie raz. Ponowne użycie nie jest miękką degradacją. To klif.
Jak wygląda klif? Ponownie używa nonce'a w AES-GCM pod jednym kluczem. Wyobraź sobie, że atakujący przechwycił oba szyfrogramy. Wykonuje operację XOR na obu szyfrogramach. Usuwa operację XOR dwóch bazowych tekstów jawnych. Poufność znika w jednym kroku. Gorzej. Tryb uwierzytelniania GCM ujawnia swój wewnętrzny podklucz uwierzytelniania — wartość, która podpisuje każdy szyfrogram pod tym kluczem. Mając podklucz, atakujący zapisuje nowe uwierzytelnione szyfrogramy, a uprawniony odbiorca akceptuje je jako prawdziwe. Szyfr najnowszej generacji, z jednym błędnym nonce'em, osiąga wartość niższą od przesunięcia Cezara.
Nic z tego nie jest hipotetyczne. W publikacji USENIX WOOT z 2016 roku, „Nonce-Disrespecting Adversaries”, przeskanowano produkcyjne punkty końcowe HTTPS i wykryto 184 serwery ponownie wykorzystujące nonce'y GCM. Błędne kompilacje obejmowały konkretne obrazy Cisco IOS XE i oprogramowanie układowe Radware ADC. CVE-2016-0270 i kilka powiązanych CVE je śledzą.
Włamanie do PS3 w grudniu 2010 roku było tą samą chorobą, ale z innym szyfrem: ECDSA. Każdy podpis ECDSA wymaga unikalnej i tajnej wartości dla każdego podpisu, zapisanej jako k . Kod podpisu Sony pominął unikatową część. Stała k została zakodowana na stałe i wykorzystana ponownie w każdym podpisie. Daj atakującemu dwa podpisy ECDSA dla różnych wiadomości z tym samym k , a otrzymasz dwa równania liniowe z dwiema niewiadomymi. Rozwiąż. Otrzymasz prywatny klucz podpisu w postaci zamkniętej. fail0verflow zaprezentował to na scenie podczas 27. Chaos Communication Congress w Berlinie. Główny klucz podpisu Sony trafił do otwartego Internetu w ciągu kilku godzin. Każdy PS3, jaki kiedykolwiek powstał, stracił swój łańcuch zaufania w jednej chwili.
Rozwiązanie deterministyczne, skodyfikowane jako RFC 6979 w 2013 roku, eliminuje generator liczb losowych z procesu. Wyprowadź k z HMAC wiadomości i klucza prywatnego. Ta sama wiadomość, ten sam klucz, to samo k — brak generatora liczb losowych (RNG), który mógłby ulec uszkodzeniu. Nowoczesne biblioteki Bitcoina domyślnie zawierają deterministyczne ECDSA.
Z tych historii wynikają dwa wnioski, które często dezorientują programistów. W przypadku szyfrów AEAD (AES-GCM, ChaCha20-Poly1305) przewidywalny nonce jest wystarczający. Licznik działa. Unikalność to jedyne wymaganie. W przypadku podpisów ECDSA i Schnorr reguła się odwraca. Przewidywalny k jest katastrofalny w skutkach. Podpis nonce musi być jednocześnie unikalny, nieprzewidywalny i tajny. Mieszanie tych dwóch obozów to właśnie powód, dla którego błędy ponownego użycia nonce pojawiają się w kodzie portfela niestandardowego. Audyt projektu kopii zapasowej Kopia z 2024 roku zarejestrował losowe ryzyko kolizji GCM-nonce w przypadku kluczy długoterminowych, a raporty z testów penetracyjnych nowszych zestawów SDK co miesiąc generują podobne wyniki.
Nonce vs salt vs IV: unikanie zamieszania związanego z trójką
Ludzie używają trzech słów w opisach bezpieczeństwa, jakby oznaczały to samo. Sól. Nonce. IV. To nie są synonimy.
Sól należy do hashowania haseł. Bierzesz losową wartość dla każdego użytkownika, mieszasz ją z hashem i teraz wstępnie obliczone tablice tęczowe dla hasła „password123” przestają działać na bazie danych. Sól znajduje się w tekście jawnym obok hasha. Nikt jej nie ukrywa. Dwóch użytkowników dzielących się solą jest niewygodne; pozwala to atakującemu, który złamał jednego, złamać również jego bliźniaka. To nie koniec świata.
Nonce należy do komunikatów i podpisów. W szyfrowaniu symetrycznym dla każdej wiadomości. W ECDSA dla każdego podpisu. Szyfry AEAD, takie jak AES-GCM, ujawniają nonce w postaci jawnej, tak jak sól znajduje się obok hasha. ECDSA ukrywa go, traktuje jako sekret i żąda nowej losowości za każdym razem. Tak czy inaczej, kolizje nie są kłopotliwe. Są fatalne w skutkach. Cała gwarancja stracona.
IV — skrót od wektora inicjalizacyjnego — to starsza nazwa tego, co w nowszych specyfikacjach nazywa się „nonce”. Tryby CBC i CTR używały tego słowa przez lata. Współczesna dokumentacja AEAD została zmieniona, głównie dlatego, że „wektor” brzmiało jak zadanie domowe z matematyki i ludzie nadal je wykorzystywali. „Nonce” bardziej opiera się na tej zasadzie.
Potrzebujesz jednej reguły, która zmieści się na karteczce samoprzylepnej? Sól chroni sekret, który przechowujesz. Nonce chroni sekret, który wysyłasz.

Dlaczego nonce ma znaczenie poza ciekawostkami o kopaniu bitcoinów
Nonce to mały obiekt. Trzydzieści dwa bity w Bitcoinie. Licznik w Ethereum. Dwanaście bajtów w AES-GCM. Ma nieproporcjonalnie dużą wagę w stosunku do swojego rozmiaru. Dla zwykłych użytkowników każda zablokowana transakcja Ethereum, każde nawiązanie połączenia TLS z witryną bankową, każdy podpis wygenerowany przez portfel sprzętowy zależy od prawidłowej obsługi nonce. Dla programistów nieprawidłowa obsługa nonce jest najczęstszym punktem wejścia dla katastrofalnych błędów w niestandardowym kodzie kryptograficznym. Incydent z PS3 był skrajnym przypadkiem, ale ten sam tryb awarii pojawia się w nowszych zestawach SDK portfeli i narzędziach do tworzenia kopii zapasowych. Z punktu widzenia ekonomii Bitcoina, 32-bitowy nonce w połączeniu z mechanizmem dodatkowych nonce to właśnie to, co sprawiło, że kopanie ASIC stało się uczciwą loterią. Jeden z najważniejszych wyborów projektowych Satoshiego, ukryty na widoku w niepozornym polu nagłówka.
Nonce to coś, co mówi , że coś wydarzyło się raz, w tej kolejności, dokładnie w ten sposób . Po usunięciu tego, każdy system zależny od unikalności rozpada się na coś, co atakujący może tanim kosztem odbudować. Konsensus zostaje zerwany. Ochrona przed powtórzeniami znika. Szyfrowanie wycieka. Podpisy zostają podrobione.