Kryptografia i o niej słów kilka

Przedrostek krypto- jest nieodłącznym elementem w dyskusjach na temat KRYPTOwalut czy KRYPTOkoparek. Choć wiele osób wie co to kryptografia, nie wszyscy do końca rozumieją proces określany tym słowem przy opisywaniu KRYPTOtransakcji. W naszych artykułach możecie znaleźć już informacje o działaniu BTC , o blockchainie oraz jego działaniu. Dziś przybliżymy przebieg transakcji bitcoina i jej kryptograficzną charakterystykę. 

Kryptografia – hashowanie

Kryptografia, w segmencie technologicznym zwana również kodowaniem, to nic innego jak zmiana treści w taki sposób, aby odczytać ją mogła tylko osoba znająca klucz, czyli rozwiązanie kodu.
Funkcja skrótu, algorytm hashujący czy też funkcja haszująca to algorytm komputerowy generowany w momencie uruchomienia pewnych danych wejściowych. Wynikiem takiego algorytmu jest skrót o stałej długości  32 znaków, z wykorzystaniem cyfr z zakresu 0 – 9 oraz liter a-f. Dla przykładu:
Popularną funkcją haszującą w internecie jest generator MD5. Wpisując hasło: bithub.pl otrzymujemy taki ciąg znaków:

4f3637bbe5e4b9d459b93aa6db05591e

Obliczenie pojedynczego skrótu jest bardzo szybkie. Szacuje się, że dla jednego komputera PC  prędkość kodowania to aż 803 hashe na sekundę (dane z książki „Bitcoin. Wirtualna waluta internetu”Marcina Szymankiewicza ) . Co ważne, funkcja hashująca ma zawsze taki sam wynik dla tych samych danych wejściowych ( w naszym przypadku dane to: bithub.pl). Innym typem hashy które można wygenerować są 64-znakowe skróty. To właśnie ten rodzaj hashy wykorzystuje projekt Bitcoin. W kodzie, nawet bardzo mała zmiana w źródłowym zbiorze danych spowoduje, że wynik końcowy hash będzie całkiem różny od oryginalnego.

Czytam Bithub.pl
32e70b6b405cd8df95f22b4178ea33143e8ef5c8f779e45f73cfe34d6d53fd49

Czytam Bithubpl
439edf6746211cf7f8d893336f60da7a1330dcd842864c1608aca8d0c9b5d703

Na powyższym przykładzie możemy zobaczyć jak niewielka zmiana ( brak kropki ) w danych wejściowych całkowicie zmieniła wartość hashu. W sieci Bitcoin funkcje te używane są przy adresach Bitcoina i powiązanymi z nimi bezpośrednio kluczach prywatnych. Dzięki nieodwracalnemu (teoretycznie) procesowi kodowania udostępnienie publicznego adresu Bitcoin nie stwarza zagrożenia dla klucza prywatnego.

Odwrotność kodowania

Wróćmy zatem do naszego 32-znakowego klucza dla danych wejściowych bithub.pl. Jak otrzymać te dane znając tylko wartość szyfrującą, w naszym przypadku: 4f3637bbe5e4b9d459b93aa6db05591e ? Pomijając różnego typu programy odkodowujące wykorzystywane przez hakerów dla większości programów dużo prościej jest zamienić dane wejściowe w klucz niż odkodować hash. Na klawiaturze mamy 26 znaków liter oraz 10 znaków cyfr. Każda z tych liter może występować w ciągu w postaci małej litery i dużej, kompletnie zmieniając znaczenie oraz wartość wyjściową. Mamy zatem 62 możliwości na każdym z  miejsc (26 możliwości litery małej + 26 dużej + 10 cyfr). Nawet jeśli przypuszczamy, że wartość wyjściowa ma 9 znaków ( taką długość ma bithub.pl) to do przetestowania mamy 62^9 co daje nam 10 077 696 kombinacji.

Przy takiej ilości możliwych kombinacji i wspominanej wcześniej standardowej prędkości komputera 803 hashy/sekundę, potrzeba 116 dni na znalezienie rozwiązania. Wraz ze wzrostem ilości znaków, drastycznie wydłuża się potrzebny czas na poprawne odszyfrowanie hashu. Dla przykładu 11 znakowa wartość to 2 054 879 844 lata nieustannej pracy przeciętnego komputera Odszyfrowanie zdania składającego się z kilkudziesięciu liter jest teoretycznie niemożliwe nawet w zapisie 32 znakowym. Nawet jeśli posiadamy komputer o dużo większej mocy obliczeniowej mało prawdopodobne jest, że wartość klucza zostanie obliczona w zadowalającym nas czasie.

Przebieg transakcji

Zarówno odbieranie jak i wysyłanie wartości zakodowanych poprzez hash odbywa się za pomocą matematycznie powiązanych ze sobą dwóch kluczy: publicznego i prywatnego. Ten pierwszy to ten, który możemy udostępnić szerokiemu gronu odbiorców nie martwiąc się o posiadane na koncie środki, działa jak adres użytkownika. Klucz prywatny natomiast to najpilniej strzeżona tajemnica posiadacza kryptowalut, ponieważ jest to „klucz” do podpisywania transakcji, a jego wyjawienie daje możliwość przesłania środków na inne konto bez naszej wiedzy.

Załóżmy że Alicja chce wysłać Bobowi 1 BTC. Bob przekazuje jej swój publiczny klucz, który jest adresem transakcji. Alicja przygotowuje transakcje (w naszym przypadku jest to 1 BTC) i podpisuje ją swoim kluczem prywatnym, matematycznie powiązanym z kluczem publicznym. Zapis tej transakcji trafia do sieci, gdzie każdy może zweryfikować czy adresatem jest na pewno Alicja, dzięki upublicznionemu kluczowi publicznemu oraz podpisowi klucza prywatnego Alicji. W tym momencie po rozpowszechnieniu informacji o tej transakcji w sieci, komputery zwane kopalniami rozpoczynają swoją pracę.

Ich zadaniem jest zebrać wszystkie ogłoszone transakcje sprzed około 10 minut. Następnie zebrane transakcje są hashowane i skracane do postaci jednego ciągu i dołączane do istniejącego już poprawnego bloku. Blok istniejący natomiast jest kodem zawierającym informacje o wszystkich przeprowadzonych już operacjach od początku istnienia bitcoina i jego pierwszej transakcji „genesis” aż do ostatnich zatwierdzonych operacji. Rozwiązanie takiego bloku zaplanowane jest na czas 10 minut, stąd też kopalnie weryfikują transakcje w odstępach 10 minutowych. Jeśli któraś kopalnia poprawnie rozwiąże blok, następuje zatwierdzenie transakcji. Niektóre giełdy czy portfele w celu upewnienia się, że pieniądze zostały wysłane na pewno jeden raz i trafiły na konto odbiorcy wymagają większej ilości potwierdzeń transakcji. W tym momencie na konto Boba trafia wysłany przez Alicje 1 Bitcoin. Standardy tych zabezpieczeń są nieustannie podwyższane, można spotkać 128 czy nawet 256 bitowe wartości hashy.

Komentarze