SHA-2 (Secure Hash Algorithm 2) to rodzina kryptograficznych funkcji skrótu, zaprojektowana przez amerykańską agencję NSA i opublikowana jako standard przez instytut NIST na początku lat 2000.
Najbardziej znanym członkiem tej rodziny jest SHA-256 – algorytm, na którym opiera się bitcoin. Ale SHA-2 pracuje też w miejscach, o których większość ludzi nie myśli: w każdym połączeniu HTTPS, w podpisach cyfrowych, w aktualizacjach oprogramowania, w systemach bankowych i w mechanizmie HMAC, którym podpisujesz zlecenia wysyłane przez API giełdy.
Czym jest funkcja skrótu
Funkcja skrótu przyjmuje dane dowolnej długości – jedno słowo, plik, całą książkę – i zwraca ciąg o stałej długości, nazywany skrótem lub hashem. W przypadku SHA-256 jest to zawsze 256 bitów, czyli 64 znaki szesnastkowe.
Przykład. Skrót SHA-256 słowa „Prezes”:
4bee797fc3127806ebc46c83406109d780844bffca710cee9e6de974aa97c315
Skrót słowa „prezes” – różnica to tylko jedna mała litera:
21ebaa956e9b4143d4a542a0d9bc4aea30d8ad5408a17be80a4c00e9e8aadadf
Jedna litera zmienia cały wynik. To tak zwany efekt lawinowy i jedna z podstawowych cech dobrej funkcji skrótu.
Kryptograficzna funkcja skrótu musi spełniać trzy warunki:
- jednokierunkowość – ze skrótu nie da się odtworzyć danych wejściowych,
- odporność na kolizje – praktycznie niemożliwe jest znalezienie dwóch różnych zestawów danych o tym samym skrócie,
- deterministyczność – te same dane zawsze dają ten sam skrót.
Rodzina SHA-2
SHA-2 to nie jeden algorytm, tylko kilka wariantów różniących się długością wyniku i wewnętrzną budową:
| Wariant | Długość skrótu | Gdzie się spotyka |
|---|---|---|
| SHA-224 | 224 bity | rzadko, specyficzne zastosowania |
| SHA-256 | 256 bitów | bitcoin, HTTPS, podpisy, HMAC w API |
| SHA-384 | 384 bity | certyfikaty, systemy rządowe |
| SHA-512 | 512 bitów | systemy wymagające dłuższego skrótu, niektóre portfele |
| SHA-512/224, SHA-512/256 | 224 i 256 bitów | skrócone wersje SHA-512, szybsze na procesorach 64-bitowych |
Skąd się wziął
Historia SHA-2 to historia kolejnych słabości poprzedników.
MD5 – popularny w latach 90. – został praktycznie złamany: znalezienie kolizji zajmuje dziś sekundy na zwykłym komputerze.
SHA-1, opublikowany przez NIST w 1995 roku, przez lata był standardem. Teoretyczne słabości wykazano w połowie lat 2000., a w 2017 roku badacze z Google i holenderskiego instytutu CWI pokazali pierwszą praktyczną kolizję – dwa różne pliki PDF o identycznym skrócie SHA-1.
SHA-2 zaprojektowano jako następcę SHA-1 jeszcze zanim ten został złamany. Do dziś nie znaleziono żadnej praktycznej kolizji dla SHA-256 ani skutecznego ataku na pełną wersję algorytmu.
Mimo to NIST w 2007 roku ogłosił konkurs na zapasowy standard SHA-3, zbudowany na zupełnie innej zasadzie. Wygrał go Keccak – funkcja, której wczesną wersję wykorzystuje Ethereum.
SHA-256 w bitcoinie
SHA-256 jest w bitcoinie w kilku kluczowych miejscach.
Kopanie (proof-of-work)
Górnik szuka takiego nagłówka bloku, którego podwójny skrót SHA-256 (SHA-256 liczony dwa razy z rzędu) jest mniejszy od wartości docelowej ustalonej przez sieć. W praktyce oznacza to, że skrót musi zaczynać się od odpowiednio dużej liczby zer.
Nie ma na to skrótu myślowego. Jedyna metoda to zmieniać jedną liczbę w nagłówku (nonce) i liczyć skrót od nowa – biliony razy na sekundę. Kto pierwszy znajdzie pasujący wynik, dodaje blok i otrzymuje nagrodę.
Ta sama cecha, która sprawia, że SHA-256 jest bezpieczny – nieprzewidywalność wyniku – sprawia, że kopanie jest loterią, w której liczba losów zależy od mocy obliczeniowej.
Dlatego kopanie bitcoina przeszło drogę od zwykłych procesorów, przez karty graficzne, do układów ASIC – chipów zaprojektowanych wyłącznie do liczenia SHA-256. Dziś kopanie bitcoina na zwykłym komputerze nie ma ekonomicznego sensu.
Identyfikatory bloków i transakcji
Każdy blok i każda transakcja w bitcoinie ma identyfikator będący podwójnym skrótem SHA-256 jej danych. Zmiana choćby jednego bitu w transakcji zmieniłaby jej identyfikator – a przez to skrót bloku i wszystkich bloków po nim. Na tym polega niezmienność blockchaina.
Drzewo Merkle’a
Transakcje w bloku są łączone parami i haszowane, potem wyniki znów łączone parami i haszowane – aż do jednego skrótu, tak zwanego korzenia Merkle’a, zapisanego w nagłówku bloku. Pozwala to udowodnić, że transakcja jest w bloku, bez pobierania całego bloku.
Adresy
Tradycyjne adresy bitcoin powstają przez zastosowanie SHA-256, a następnie drugiej funkcji skrótu – RIPEMD-160 – do klucza publicznego. Dwie różne funkcje w szeregu to dodatkowa warstwa zabezpieczenia na wypadek słabości jednej z nich.
SHA-256 poza bitcoinem
HTTPS. Certyfikaty stron internetowych są podpisywane z użyciem SHA-256. Kłódka w przeglądarce opiera się m.in. na tym algorytmie.
HMAC-SHA256. Gdy bot tradingowy wysyła zlecenie przez API giełdy, podpisuje je mechanizmem HMAC, który wewnętrznie korzysta z SHA-256. Dzięki temu giełda wie, że zlecenie pochodzi od Ciebie i nie zostało zmienione po drodze.
Weryfikacja plików. Twórcy oprogramowania, w tym portfeli kryptowalut, publikują skróty SHA-256 plików instalacyjnych. Po pobraniu możesz policzyć skrót i porównać – jeśli się zgadza, plik nie został podmieniony.
Przechowywanie haseł. Tu uwaga: sam SHA-256 nie nadaje się do przechowywania haseł, bo jest zbyt szybki – ułatwia zgadywanie. Do haseł stosuje się specjalne, celowo spowolnione algorytmy, takie jak bcrypt czy Argon2.
A komputery kwantowe?
To częste pytanie przy bitcoinie. Odpowiedź wymaga rozdzielenia dwóch rzeczy.
Funkcje skrótu, takie jak SHA-256, są stosunkowo odporne na komputery kwantowe. Znany algorytm kwantowy (Grovera) przyspiesza przeszukiwanie, ale w praktyce „tylko” obniża poziom bezpieczeństwa o połowę – z 256 do około 128 bitów. To wciąż poziom uznawany za bezpieczny.
Znacznie bardziej narażone są podpisy cyfrowe oparte na krzywych eliptycznych, które bitcoin wykorzystuje do potwierdzania właścicielstwa monet. Wystarczająco duży komputer kwantowy mógłby teoretycznie odtworzyć klucz prywatny z publicznego. To ryzyko nie dotyczy jednak SHA-256, tylko innego elementu systemu.
Cztery mity
Mit 1: „SHA-256 to szyfrowanie.” To funkcja skrótu, a nie szyfr. Szyfrowanie można odwrócić kluczem. Skrótu nie da się odwrócić wcale.
Mit 2: „SHA-256 został złamany.” Do dziś nie znaleziono praktycznej kolizji ani skutecznego ataku na pełną wersję algorytmu. Złamane zostały jego poprzedniki: MD5 i SHA-1.
Mit 3: „Komputery kwantowe złamią SHA-256, a więc i bitcoina.” Funkcje skrótu są stosunkowo odporne na znane ataki kwantowe. Większym wyzwaniem dla bitcoina są podpisy cyfrowe.
Mit 4: „SHA-256 nadaje się do przechowywania haseł.” Jest za szybki. Do haseł używa się algorytmów celowo spowolnionych, jak bcrypt czy Argon2.
Jak sam na to patrzę
SHA-256 to jeden z tych elementów, o których na co dzień nie myślę, a które pracują przy każdej mojej transakcji: przy podpisie zlecenia w API, przy połączeniu z giełdą, przy każdym bloku bitcoina.
Dwie rzeczy mają dla mnie wymiar praktyczny.
Pierwsza: weryfikacja skrótów przy instalacji portfeli. Fałszywe wersje portfeli kryptowalut to jeden z najczęstszych sposobów kradzieży. Porównanie skrótu SHA-256 pobranego pliku z tym opublikowanym przez twórców zajmuje minutę – i może uratować cały portfel.
Druga: spokój w temacie „kwantowego końca bitcoina”. Ten temat regularnie wraca w mediach, zwykle w wersji uproszczonej. Warto wiedzieć, że problem, jeśli nadejdzie, dotyczy podpisów, a nie SHA-256 – i że jest to wyzwanie inżynieryjne, nad którym trwają prace, a nie wyrok.
Co zapamiętać
SHA-2 to rodzina kryptograficznych funkcji skrótu opublikowana przez NIST na początku lat 2000. Najpopularniejszy wariant, SHA-256, jest podstawą bitcoina, HTTPS, podpisów cyfrowych i mechanizmu HMAC.
Trzy rzeczy ponad resztą:
SHA-256 nie został złamany. Złamane zostały jego poprzedniki – MD5 i SHA-1.
W bitcoinie SHA-256 to kopanie, identyfikatory i niezmienność łańcucha. Zmiana jednego bitu zmienia skrót całego bloku.
Funkcja skrótu to nie szyfr. Nie da się jej odwrócić – i właśnie dlatego nadaje się do weryfikacji danych.


