tradingview

SHA-3

SHA-3 (Secure Hash Algorithm 3) to najnowsza rodzina kryptograficznych funkcji skrótu zatwierdzona przez amerykański instytut NIST. Standard opublikowano w sierpniu 2015 roku jako FIPS 202. Opiera się na algorytmie Keccak, który wygrał otwarty, kilkuletni konkurs kryptograficzny.

Rodzina obejmuje cztery funkcje o stałej długości wyniku, czyli SHA3-224, SHA3-256, SHA3-384 i SHA3-512, oraz dwie funkcje o dowolnej długości wyniku: SHAKE128 i SHAKE256.

W kryptowalutach SHA-3 jest ważne z jednego, zaskakującego powodu: Ethereum używa Keccaka, ale nie używa SHA-3. Za chwilę wyjaśnię, dlaczego to nie jest gra słów.

Skąd się wzięło SHA-3

W 2005 roku chińscy kryptografowie pokazali poważne słabości SHA-1, wtedy jednej z najpopularniejszych funkcji skrótu na świecie. SHA-2, czyli rodzina, do której należy SHA-256, była zbudowana na podobnej zasadzie. Pojawiła się obawa, że jeśli padnie SHA-1, za kilka lat może paść i SHA-2.

NIST ogłosił więc w 2007 roku konkurs na zupełnie inną konstrukcję, która byłaby zapasowym planem. Zgłoszono 64 projekty. Do finału doszło pięć: BLAKE, Grøstl, JH, Keccak i Skein. W październiku 2012 roku wygrał Keccak, zaprojektowany przez Guido Bertoniego, Joana Daemena, Michaëla Peetersa i Gillesa Van Asschego. Daemen jest też współautorem AES, czyli standardu szyfrowania używanego dziś praktycznie wszędzie.

Warto podkreślić: SHA-3 powstało jako zapasowy plan, a nie następca. SHA-2 do dziś nie zostało złamane. SHA-1 natomiast padło w praktyce: w 2017 roku Google i holenderski instytut CWI pokazali dwa różne pliki PDF o identycznym skrócie SHA-1.

Czym SHA-3 różni się od SHA-256

SHA-256 działa w konstrukcji Merkle-Damgård: dane dzieli się na bloki i przepuszcza kolejno przez funkcję kompresującą, a wynikiem jest końcowy stan. SHA-3 używa konstrukcji gąbki (sponge). Dane są „wchłaniane” do wewnętrznego stanu o wielkości 1600 bitów, a potem wynik jest z niego „wyciskany”.

Praktyczna różnica to odporność na atak przedłużenia wiadomości (length extension). Przy funkcjach typu Merkle-Damgård, jeśli ktoś zna skrót H(sekret + wiadomość) i długość sekretu, może policzyć poprawny skrót wiadomości z doklejonymi danymi, nie znając sekretu. W 2009 roku ten typ ataku pozwalał podrabiać podpisane zapytania do API serwisu Flickr. Dlatego przy SHA-256 do podpisywania wiadomości używa się konstrukcji HMAC. SHA-3 z natury jest na ten atak odporne.

SHA-256 SHA-3 (SHA3-256)
Rodzina SHA-2 (2001) SHA-3 (2015)
Konstrukcja Merkle-Damgård gąbka
Atak przedłużenia wiadomości podatne (stąd HMAC) odporne
Wydajność w procesorach bardzo szybkie, często z instrukcjami sprzętowymi wolniejsze w oprogramowaniu, szybkie w sprzęcie
Gdzie w krypto Bitcoin (kopanie, identyfikatory transakcji) pośrednio w standardach post-kwantowych

Co musi umieć dobra funkcja skrótu

Żeby zrozumieć, po co w ogóle organizować wieloletnie konkursy, warto wiedzieć, czego wymaga się od kryptograficznej funkcji skrótu. Trzy podstawowe własności to:

  • odporność na odwrócenie: mając skrót, nie da się znaleźć danych, z których powstał,
  • odporność na drugi przeciwobraz: mając konkretne dane, nie da się znaleźć innych danych o tym samym skrócie,
  • odporność na kolizje: nie da się znaleźć żadnej pary różnych danych o tym samym skrócie.

Do tego dochodzi efekt lawinowy: zmiana jednego znaku na wejściu powinna zmienić mniej więcej połowę bitów wyniku, w sposób nieprzewidywalny. Sprawdźmy to na SHA3-256:

  • Prezes → 4d371164a7dce2f8c1d305b27e320f27e0a685ec37a6f6a77d47960c2b9ab154
  • prezes → 17c06ffebcdcb720fb6269f7ff4d1209950c1ae6138a09c7337679d6a965aa12

Zmieniłem tylko wielkość pierwszej litery. Z 256 bitów wyniku zmieniło się 133, czyli 52%. Między tymi dwoma skrótami nie ma żadnej widocznej zależności. Na tej własności opiera się cały blockchain: każda zmiana choćby jednego bajtu w transakcji albo bloku daje zupełnie inny skrót, więc manipulacji nie da się ukryć.

Kiedy mówimy, że funkcja skrótu została „złamana”, zwykle chodzi o to, że ktoś znalazł sposób na kolizję szybciej niż przez zgadywanie. Tak stało się z MD5 i SHA-1. Dla SHA-256 i SHA-3 nikt takiego sposobu nie zna.

SHAKE, czyli skrót o dowolnej długości

Nowością w rodzinie SHA-3 są funkcje SHAKE128 i SHAKE256. Zamiast wyniku o stałej długości dają strumień bitów o długości, jakiej potrzebujesz: 32 bajty, 100 bajtów albo kilka kilobajtów. To możliwe dzięki konstrukcji gąbki, z której można „wyciskać” wynik tak długo, jak trzeba.

Brzmi jak ciekawostka, ale jest bardzo praktyczne. Nowoczesne algorytmy kryptograficzne potrzebują często dużej ilości pseudolosowych danych wyprowadzonych z jednego ziarna. Zamiast składać to z wielu wywołań zwykłej funkcji skrótu, używa się jednego wywołania SHAKE.

Keccak to nie SHA-3: pułapka Ethereum

Ethereum powstawało w latach 2014–2015, zanim NIST opublikował ostateczną wersję standardu. Twórcy sięgnęli po Keccaka w wersji z konkursu. NIST przed publikacją zmienił jeden szczegół: sposób dopełniania danych (padding). W efekcie Keccak-256 i SHA3-256 dają zupełnie różne wyniki dla tych samych danych.

Zobacz sam, dla tego samego wejścia:

  • SHA3-256 pustego ciągu znaków: a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
  • Keccak-256 pustego ciągu znaków: c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470

Te same dane, ta sama długość wyniku, zero podobieństwa. Jeśli programista użyje biblioteki SHA-3 tam, gdzie Ethereum oczekuje Keccaka, dostanie błędne adresy, błędne podpisy funkcji i transakcje, które nie działają. To jeden z klasycznych błędów początkujących twórców narzędzi dla Ethereum. Dodatkowego zamieszania dodaje fakt, że w pierwszych wersjach Solidity funkcja liczenia Keccaka nazywała się sha3. Dziś nazywa się poprawnie: keccak256.

Gdzie Ethereum używa Keccak-256

  • Adresy: adres konta to ostatnie 20 bajtów skrótu Keccak-256 z klucza publicznego.
  • Selektory funkcji: pierwsze 4 bajty skrótu nazwy funkcji. Na przykład transfer(address,uint256) daje selektor a9059cbb, a approve(address,uint256) daje 095ea7b3. Te ciągi zobaczysz w danych transakcji w eksploratorze bloków.
  • Pamięć kontraktów i zdarzenia: położenie danych w pamięci trwałej i identyfikatory zdarzeń (logów) również wylicza się Keccakiem.

Bitcoin nie używa ani SHA-3, ani Keccaka. Do kopania i identyfikatorów transakcji służy mu podwójne SHA-256, a do skracania adresów RIPEMD-160.

SHA-3 a komputery kwantowe

Komputer kwantowy z algorytmem Grovera może przyspieszyć szukanie kolizji i odwracanie funkcji skrótu, ale tylko kwadratowo. W praktyce 256-bitowa funkcja skrótu zachowuje około 128 bitów bezpieczeństwa, a to wciąż poziom poza zasięgiem jakiejkolwiek przewidywalnej technologii. Dotyczy to zarówno SHA-256, jak i SHA-3.

Co ciekawe, SHA-3 odgrywa dużą rolę w nowych standardach kryptografii post-kwantowej. Funkcje SHAKE są używane wewnątrz ML-KEM i ML-DSA, czyli algorytmów zatwierdzonych przez NIST w 2024 roku. To jedna z rzeczy, które mogą w przyszłości trafić także do blockchainów.

Najczęstsze nieporozumienia

„SHA-3 jest bezpieczniejsze, bo nowsze.” Oba standardy są dziś uważane za bezpieczne. SHA-3 ma inną konstrukcję, co jest wartością samą w sobie, bo jeden atak nie złamie obu naraz. Ale SHA-256 nie jest przestarzałe.

„Ethereum używa SHA-3.” Używa Keccaka w wersji sprzed standaryzacji. Wynik jest inny.

„Bitcoin powinien przejść na SHA-3.” Nie ma takiej potrzeby. Zagrożeniem kwantowym dla Bitcoina są podpisy cyfrowe, a nie funkcja skrótu.

Co ja o tym myślę

SHA-3 to dla mnie wzór tego, jak powinno się robić kryptografię: otwarty konkurs, publiczna analiza przez kilka lat, nagroda dla projektu, który najlepiej zniesie ataki, i standard przyjęty wtedy, gdy nikt się nie pali. NIST nie czekał, aż SHA-2 padnie. Przygotował plan B, zanim był potrzebny.

A historia Keccaka w Ethereum pokazuje, że w krypto szczegóły, których nikt nie czyta, potrafią żyć latami. Jedna zmiana w dopełnianiu danych sprzed dekady do dziś sprawia, że programiści szukają błędu w swoim kodzie przez pół dnia.

Tobie jako inwestorowi ta wiedza nie da przewagi na wykresie. Da Ci coś innego: gdy ktoś w prezentacji projektu pisze o „rewolucyjnym algorytmie SHA-4” albo o „kryptografii wojskowej nowej generacji”, będziesz wiedział, że poważna kryptografia nie wygląda jak marketing. Wygląda jak nudny, wieloletni konkurs z publicznymi raportami.