blockchain concept

Jak działa łańcuch bloków? cz.1

  • October 20th, 2019
  • General
  • 0 Comments
  • Robert Pardela

This page is available in English

Pojawiły się prośby o bardziej szczegółowy opis jak działa blockchain i czy na pewno można zaufać rozwiązaniom technicznym wykorzystanym do budowy łańcucha bloków.

W tej części przedstawię na czym polega bezpieczeństwo kryptograficzne łańcucha bloków, w kolejnej szczegółowo opiszę podstawowe pojęcia występujące w łańcuchu bloków i na koniec połączę wszystko w całość.

 

Bezpieczeństwo kryptograficzne

Jak wcześniej pisałem jedną z najważniejszych cech łańcucha bloków jest niezmienność, rozumiana jako brak możliwości usuwania i zmiany zaakceptowanych i dodanych do łańcucha transakcji.

Tym razem postaram się opisać zasady działania łańcucha bloków w sposób bardziej techniczny, dla osób które nie poczuły siły rozwiązań zastosowanych w tej technologii w celu zapewnienia permanencji.

W zasadzie sprawa jest bardzo prosta i całe bezpieczeństwo łańcucha bloków bazuje na trzech znanych od wielu lat komponentach kryptograficznych:

  • Cyfrowy odcisk palca
  • Drzewo Merkle’a
  • Kryptografia klucza publicznego (asymetryczna)

 

Cyfrowy odcisk palca (fingerprint)

Jest to mechanizm znany również jako funkcja skrótu lub hash. W Ethereum wykorzystywany jest algorytm Keccak–256 (zamiast popularnego i zestandaryzowanego algorytmu SHA–3, brak standardowego algorytmu to świadoma i celowa decyzja twórców tej platformy).

Funkcja skrótu działa w taki sposób, że po podaniu na jej wejściu danych o dowolnym rozmiarze, na wyjściu dostajemy skrót danych wejściowych zawsze stałej długości (zależnie od wykorzystanego algorytmu zwykle od 128 do 512 bitów). Funkcja skrótu nie wymaga klucza.

 

Cyfrowy odcisk jest najczęściej wykorzystywany do:

  • Zachowania integralności danych
  • Generatorów liczb pseudolosowych
  • Składowanie haseł

 

Cechy tego mechanizmu:

  • Jednokierunkowy (nieodwracalny). Nie ma możliwości odkrycia źródła na podstawie jakiego został stworzony odcisk
  • Wynik zawsze stałego rozmiaru
  • Deterministyczny. Dla tych samych danych wejściowych zwraca ZAWSZE ten sam skrót.
  • Odporny na kolizje. Istnieje bardzo małe prawdopodobieństwo, że utworzone zostaną dwa identyczne skróty dla różnych danych wejściowych. Prawdopodobieństwo jest tym niższe im rozmiar skrótu większy
  • Brak korelacji z danymi. Algorytm tworzący skrót wywołuje tzw. efekt lawiny. Polega on na tym, że zmiana jednego znaku w danych wejściowych zmienia cały skrót (niezależnie od lokalizacji tej zmiany – początek, koniec danych).
  • Łatwość obliczania. Algorytmy tworzące odcisk palca danych są bardzo efektywne, dzięki czemu stosowane są z powodzeniem w wysokowydajnych systemach informatycznych.

 

W łańcuchu bloków funkcja skrótu ma zastosowanie w dbaniu o integralność danych oraz jest główną składową mechanizmu dowodu pracy „Proof of Work (PoW)”.

 

Drzewo Merkle’a

Drzewo Merkle’a to binarne drzewo skrótów, które przechowuje w swoich liściach skróty transakcji.

Cechą drzewa Merkle’a jest bezpieczne i wydajne sprawdzenie poprawności dużych zbiorów danych.

 

Poniżej przedstawiony jest model drzewa Merkle’a

Merkle tree big gray
Rys.1 Drzewo Merkle’a

 

Jak tworzony jest korzeń drzewa Merkle’a?

  1. Zaczynamy od samego dołu drzewa.
  2. Najpierw liczymy skrót dla transakcji Tx1 H1 = hash(Tx1)
  3. Następnie liczymy skrót dla transakcji Tx2 H2 = hash(Tx2)
  4. Jeśli mamy już dwa skróty to wyznaczamy skrót dla ich sumy H12 = hash(H1 + H2)
  5. Tak samo postępujemy z pozostałymi gałęziami drzewa, aż do osiągnięcia korzenia (roota)

Taki mechanizm powoduje, że nawet drobna zmiana w dowolnej transakcji spowoduje wygenerowanie nowego całkowicie unikalnego skrótu korzenia. Porównanie skrótów korzeni umożliwia szybką weryfikację czy transakcje znajdujące się w drzewach są identyczne.

W Ethereum wykorzystywana jest odmiana skompresowanego drzewa Merkle’a (Patricia Merkle Tree).

 

Kryptografia klucza publicznego

Inaczej zwana kryptografią asymetryczną. Mechanizm polega na tym, że klucz do szyfrowania danych jest inny niż klucz do ich odszyfrowania.

Występują tu dwa elementy:

  • Kluczy prywatny. Służy do podpisywania transakcji oraz do odszyfrowywania danych. Nie wolno go nikomu udostępniać. Klucz prywatny może być zabezpieczony hasłem wymaganym podczas jego użycia.
  • Klucz publiczny. Służy do weryfikacji podpisu nadawcy transakcji oraz do szyfrowania danych. Nazwa klucza wskazuje, że jest on dostępny publicznie i może być wykorzystywany przez każdego kto ma do niego dostęp. Klucz ten nie jest zabezpieczany hasłem.

 

Kryptografia klucza publicznego umożliwia:

  • Weryfikację nadawcy
  • Bezpieczeństwo transakcji (tylko odbiorca i nadawca mogą odczytać treść)

Jak działa kryptografia asymetryczna?

Rozważmy dwa scenariusze: podpisywanie transakcji oraz szyfrowanie danych.

Podpisywanie transakcji

  1. Nadawca tworzy jawny tekst (np. treść dokumentu)
  2. Nadawca podpisuje tekst jawny swoim kluczem prywatnym
  3. Po podpisaniu tworzony jest odcisk cyfrowy jawnego tekstu uwzględniający klucz prywatny
  4. Odbiorca otrzymuje jawny tekst oraz odcisk cyfrowy
  5. Odbiorca kluczem publicznym nadawcy weryfikuje odcisk cyfrowy dołączony do tekstu jawnego
  6. Odbiorca otrzymuje informację czy podpis pochodzi od nadawcy

 

Szyfrowanie danych

  1. Nadawca tworzy jawny tekst (jak wyżej)
  2. Nadawca szyfruje tekst jawny kluczem publicznym odbiorcy
  3. Odbiorca otrzymuje zaszyfrowany tekst
  4. Odbiorca odszyfrowuje tekst swoim kluczem prywatnym
  5. Odbiorca widzi tekst jawny

 

Analizując powyższe scenariusze możemy ułożyć kolejny bardziej skomplikowany, w którym tekst zostanie zaszyfrowany kluczem publicznym odbiorcy i podpisany kluczem prywatnym nadawcy. Następnie po dotarciu do odbiorcy podpis jest weryfikowany kluczem publicznym nadawcy a potem odszyfrowywany kluczem prywatnym odbiorcy.

W Ethereum do kryptografii klucza publicznego wykorzystywany jest algorytm krzywych eliptycznych (ECC – Elliptic Curve Cryptography). Cechą tego algorytmu jest zapewnienie wysokiego poziomu bezpieczeństwa kluczem krótszym niż np. w algorytmie RSA.

 

Podsumowanie

Wydaje mi się, że teraz masz już dużo więcej pewności co do mechanizmów bezpieczeństwa zastosowanych w łańcuchu bloków. Nawet drobne i potencjalnie nie groźne zmiany w transakcjach zostaną natychmiast ujawnione, dzięki czemu możesz być spokojny o dane w łańcuchu bloków. Raz wprowadzone będą tam już na zawsze.

Kryptografia klucza publicznego w łańcuchu bloków pozwala na ustalenie:

  • Dowodu autentyczności
  • Dowodu tożsamości
  • Dowodu własności

W razie pytań zachęcam do kontaktu.

Robert Pardela

Leave a Comment

Your email address will not be published. Required fields are marked *

1 + sixteen =