Haszowanie odnosi się do procesu generowania wyniku o stałym rozmiarze z danych wejściowych o zmiennym rozmiarze. Metoda taka realizowana jest poprzez zastosowanie formuł matematycznych zwanych funkcjami skrótu (realizowanymi jako algorytmy mieszające). 

Chociaż nie wszystkie funkcje skrótu konsekwentnie obejmują wykorzystanie kryptografii, kryptograficzne funkcje skrótu stanowią serce kryptowalut. Dzięki tym funkcjom łańcuchy bloków i inne typy systemów rozproszonych są w stanie osiągnąć znaczny poziom integralności i bezpieczeństwa danych.

Konwencjonalne i kryptograficzne funkcje skrótu są deterministyczne. Oznacza to, że dopóki dane wejściowe nie ulegną zmianie, algorytm haszujący zawsze wygeneruje takie same dane wyjściowe (znane również jako skrót lub odcisk palca).

Zazwyczaj algorytmy haszujące kryptowalut są projektowane jako funkcje jednokierunkowe, co oznacza, że ​​nie można ich łatwo odwrócić bez dużych nakładów czasu obliczeniowego i zasobów. Innymi słowy, dość łatwo jest stworzyć dane wyjściowe z danych wejściowych, ale stosunkowo trudno jest pójść w przeciwnym kierunku (wygenerować dane wejściowe wyłącznie z danych wyjściowych). Ogólnie rzecz biorąc, im trudniej znaleźć dane wejściowe, tym bezpieczniejszy jest algorytm haszujący.


Jak działa funkcja skrótu?

Różne funkcje skrótu będą generować dane wyjściowe o różnych rozmiarach, ale możliwe rozmiary danych wyjściowych specyficzne dla każdego algorytmu skrótu są zawsze stałe. Na przykład algorytm SHA-256 może wygenerować tylko 256-bitowe dane wyjściowe, podczas gdy algorytm SHA-1 zawsze wygeneruje skrót 160-bitowy.

Dla przykładu zastosujmy funkcję skrótu SHA-256 (używaną w przypadku Bitcoina) do słów Binance i binance.

SHA-256

Wejście

Wyjście (256 bitów)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec58339ddcae7f5e8b5da0c36624784b2


Zauważ, że niewielka zmiana (w tym przypadku dotyczyła pierwszej litery) spowodowała zupełnie inną wartość skrótu. Ponieważ używamy algorytmu SHA-256, dane wyjściowe będą zawsze miały stały rozmiar 256 bitów (lub 64 znaków) — niezależnie od rozmiaru danych wejściowych. Co więcej, bez względu na to, ile razy zastosuje się ten algorytm do tych konkretnych słów, oba wyniki zawsze będą takie same.

Z drugiej strony, jeśli wykorzystamy te same dane wejściowe za pomocą algorytmu skrótu SHA-1, otrzymamy następujące wyniki:

SHA-1

Wejście

Wyjście (160 bitów)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Skrót SHA oznacza Secure Hash Algorithms. Odnosi się to do zestawu funkcji kryptograficznych obejmujących algorytmy SHA-0 i SHA-1, a także grupy SHA-2 i SHA-3. SHA-256 należy do grupy SHA-2, wraz z SHA-512 i innymi wariantami. Obecnie za bezpieczne uznaje się jedynie grupy SHA-2 i SHA-3.


Dlaczego są ważne?

Konwencjonalne funkcje skrótu są wykorzystywane w szerokim zakresie zastosowań, m.in. do przeszukiwania baz danych, analizy dużych plików i zarządzania danymi. Z drugiej strony, kryptograficzne funkcje skrótu są powszechnie używane w aplikacjach związanych z bezpieczeństwem informacji, takich jak uwierzytelnianie wiadomości i drukowanie odcisków palców. W przypadku Bitcoinów kryptograficzne funkcje skrótu stanowią istotną część procesu wydobywania kryptowaluty i odgrywają rolę w generowaniu nowych adresów i kluczy.

Prawdziwa moc haszowania ujawnia się w przypadku przetwarzania ogromnych ilości informacji. Można na przykład poddać plik lub zbiór danych działaniu funkcji skrótu, a następnie wykorzystać jej dane wyjściowe do szybkiego sprawdzenia poprawności i integralności danych. Jest to możliwe dzięki deterministycznej naturze funkcji skrótu: dane wejściowe zawsze będą skutkować uproszczonym, skondensowanym wynikiem (haszem). Taka technika eliminuje potrzebę przechowywania i zapamiętywania dużych ilości danych.

Haszowanie jest szczególnie przydatne w kontekście technologii blockchain. Blockchain Bitcoina obejmuje kilka operacji obejmujących hashowanie, z których większość ma miejsce w procesie wydobywania kryptowaluty. W rzeczywistości niemal wszystkie protokoły kryptowalutowe opierają się na hashowaniu, które służy do łączenia i kondensowania grup transakcji w bloki, a także do tworzenia połączeń kryptograficznych między poszczególnymi blokami, aby ostatecznie utworzyć blockchain, czyli łańcuch bloków.


Funkcje skrótu kryptograficznego

Funkcję skrótu wykorzystującą techniki kryptograficzne można zdefiniować jako kryptograficzną funkcję skrótu. Zazwyczaj złamanie funkcji skrótu kryptograficznego wymaga licznych prób siłowych. Aby ktoś mógł pomyślnie odwrócić kryptograficzną funkcję skrótu, musiałby zgadnąć, jakie były dane wejściowe, podejmując wiele prób i ponosząc porażki, aż do otrzymania prawidłowego wyniku. Istnieje jednak również możliwość, że różne dane wejściowe dadzą dokładnie taki sam wynik. W takim przypadku dochodzi do zmowy.

Technicznie rzecz biorąc, kryptograficzna funkcja skrótu musi spełniać trzy właściwości, aby można ją było uznać za skutecznie bezpieczną. Możemy to opisać jako: odporność na kolizje, odporność na wtórne obrazy wstępne i odporność na wtórne obrazy wstępne.

Zanim omówimy każdą z właściwości, podsumujmy ich logikę w trzech krótkich zdaniach.

  • Odporność na kolizje: Nie da się znaleźć dwóch różnych danych wejściowych, które dawałyby taki sam skrót jak dane wyjściowe.

  • Odporność na preobraz: nie można odwrócić funkcji skrótu (znaleźć wejścia na podstawie danego wyjścia).

  • Drugi opór przedobrazowy: Nie jest możliwe znalezienie drugiego sygnału wejściowego, który kolidowałby z określonym sygnałem wejściowym.


Odporność na zderzenia

Jak wspomniano, do kolizji dochodzi, gdy różne dane wejściowe generują dokładnie ten sam skrót. Dlatego funkcję skrótu uważa się za odporną na kolizje, dopóki ktoś nie znajdzie kolizji. Należy pamiętać, że kolizje będą zawsze występować w przypadku dowolnej funkcji skrótu, ponieważ możliwe dane wejściowe są nieskończone, a możliwe dane wyjściowe są skończone.

Innymi słowy, funkcja skrótu jest odporna na kolizje, gdy prawdopodobieństwo znalezienia kolizji jest tak małe, że wymagałoby milionów lat obliczeń. Zatem, mimo że nie istnieje funkcja skrótu odporna na kolizje, niektóre z nich są na tyle silne, że można je uznać za odporne na kolizje (np. SHA-256).

Spośród różnych algorytmów SHA grupy SHA-0 i SHA-1 nie są już uważane za bezpieczne, ponieważ wykryto w nich kolizje. Obecnie grupy SHA-2 i SHA-3 uważa się za odporne na kolizje.


Odporność na obrazowanie wstępne

Własność oporu przeciwobrazowego jest związana z koncepcją funkcji jednokierunkowych. Funkcję skrótu uważa się za odporną na obrazy, gdy prawdopodobieństwo znalezienia danych wejściowych, które wygenerowały określone dane wyjściowe, jest bardzo małe.

Należy zauważyć, że ta właściwość różni się od poprzedniej, ponieważ hipotetyczny atakujący próbowałby odgadnąć dane wejściowe, patrząc na dane wyjściowe. Z kolei kolizja ma miejsce wtedy, gdy ktoś znajdzie dwa różne dane wejściowe, które generują ten sam wynik, przy czym nie ma znaczenia, które dane wejściowe zostały konkretnie użyte.

Odporność na obrazy wstępne jest cenna w kontekście ochrony danych, ponieważ samo hashowanie wiadomości pozwala udowodnić jej autentyczność, bez konieczności ujawniania jej zawartości. W praktyce wielu dostawców usług i aplikacji internetowych przechowuje i wykorzystuje skróty wygenerowane na podstawie haseł, zamiast haseł w postaci zwykłego tekstu.


Odporność na drugi obraz

Upraszczając, możemy powiedzieć, że odporność na drugi przeciwobraz leży gdzieś pomiędzy dwiema pozostałymi właściwościami. Do drugiego ataku preimage dochodzi, gdy ktoś znajdzie określone dane wejściowe, które generują takie same dane wyjściowe, jak inne dane wejściowe, które już zna.

Innymi słowy, drugi atak preimage polega na znalezieniu kolizji, ale zamiast szukać dwóch losowych danych wejściowych, które generują ten sam skrót, szukamy danych wejściowych, które generują ten sam skrót, co inne konkretne dane wejściowe.

Dlatego też każda funkcja skrótu odporna na kolizje jest również odporna na ataki drugiego preobrazu, ponieważ te zawsze będą wiązać się z kolizją. Można jednak nadal przeprowadzić atak preobrazowy na funkcję odporną na kolizje, ponieważ wiąże się to z odnalezieniem pojedynczego wejścia na podstawie pojedynczego wyjścia.


Górnictwo

W procesie wydobywania bitcoinów istnieje wiele etapów, które obejmują funkcje skrótu, takie jak sprawdzanie sald, tworzenie łącza wejścia/wyjścia transakcji oraz hashowanie transakcji w bloku w celu utworzenia drzewa Merkle'a. Ale jednym z głównych powodów, dla których blockchain Bitcoina jest bezpieczny, jest to, że górnicy muszą wykonać niezliczoną ilość operacji haszujących w celu znalezienia prawidłowego rozwiązania, aby utworzyć i dodać blok.

Mówiąc konkretnie, górnik musi wypróbować kilka różnych danych wejściowych podczas tworzenia wartości skrótu dla bloku, o który się ubiega. W zasadzie będą mogli zweryfikować swój blok tylko wtedy, gdy wygenerują skrót wyjściowy rozpoczynający się od określonej liczby zer. Liczba zer decyduje o trudności wydobycia i zmienia się w zależności od szybkości haszowania dedykowanej sieci.

W tym przypadku hashrate oznacza ilość energii obliczeniowej zainwestowanej w wydobywanie Bitcoinów. Jeśli szybkość haszowania sieci wzrośnie, protokół Bitcoin automatycznie dostosuje poziom trudności wydobycia tak, aby średni czas potrzebny na wydobycie bloku pozostał zbliżony do 10 minut. Z drugiej strony, jeśli kilku górników zdecyduje się zaprzestać wydobywania, co spowoduje znaczny spadek szybkości haszowania, trudność wydobywania zostanie dostosowana, dzięki czemu wydobywanie stanie się łatwiejsze (aż do momentu, aż średni czas bloku zmniejszy się do 10 minut).

Należy pamiętać, że górnicy nie muszą szukać możliwych kolizji, ponieważ mogą wygenerować wiele skrótów jako prawidłowe dane wyjściowe (rozpoczynając od określonej liczby zer). Istnieje zatem kilka możliwych rozwiązań dla danego bloku, a górnicy muszą znaleźć jedno z nich - zgodnie z progiem określonym przez trudność wydobycia.

Ponieważ wydobywanie bitcoinów jest zadaniem bardzo kosztownym, górnicy nie mają powodu, aby oszukiwać system, gdyż skutkowałoby to znacznymi stratami finansowymi. Im większa liczba górników w blockchainie i im jest on większy, tym staje się bardziej niezawodny.


Podsumowując

Nie ma wątpliwości, że funkcje skrótu są niezbędnymi narzędziami w informatyce, zwłaszcza przy przetwarzaniu ogromnych ilości danych. W połączeniu z kryptografią algorytmy haszujące mogą być bardzo wszechstronne, zwłaszcza w kontekście bezpieczeństwa i uwierzytelniania, na kilka sposobów. Zatem kryptograficzne funkcje skrótu są kluczowe dla niemal wszystkich sieci kryptowalutowych, a zrozumienie ich właściwości i mechanizmów działania jest z pewnością przydatne dla każdego, kto interesuje się technologią blockchain.