Matematyka tworząca blockchain i bitcoin – poradnik

10/11/20172 min czytania — w Blockchain

Wstęp

W poprzednim poście rozpocząłem implementację własnego blockchain. http://blog.patys.pl/2017/09/29/wlasny-blockchain-implementacja-poradnik/ Teraz przejdziemy do kopania. Postanowiłem rozbić to na 3 posty.

Wstęp do matematyki blockchain

Kryptografia w matematyce

Implementacja kopania

Te 3 posty pokryją Proof of Work, czyli udowodnienie prawidłowości transakcji na podstawie czasu i zużytej mocy obliczeniowej. Również ten wstęp do kryptografii pozwoli nam na implementację kolejnych rozwiązań. Nie tylko związanych z blockchain, lecz też na przykład z szyfrowaniem czy kluczami prywatnymi i publicznymi.

Ciało skończone

Zaczniemy od wyjaśnienia sobie czym jest ciało skończone. Na Wikipedii jest okropna, książkowa definicja, z której nie da się nic zrozumieć, a przypisy zajmują połowę treści. https://pl.wikipedia.org/wiki/Cia%C5%82o_sko%C5%84czone

Tak więc, ciało skończone jest określone pewną liczbą elementów. Coś w stylu tablicy w programowaniu. Mamy na przykład ciało skończone F19 = {0,1, …, 18}, czyli zamyka się ono w elementach od 0 do 18. Aby nie przekraczać tego zakresu używane jest modulo (mod), czyli reszta z dzielenia. Każda liczba na której wykonamy modulo zamknie się w wartości przez jaką dzielimy.

Czyli:

17 % 19 = 17 // reszta wynosi 17

11 % 19 = 11 // reszta wynosi 11

22 % 19 = 3 // reszta wynosi 3, zaczęliśmy od 0 i szliśmy do 19, tam nastąpił powrót do początku gdzie jeszcze wykonały się 3 kroki, % przerwał liczenie gdy osiągnęliśmy wartość po lewej i kazał od początku liczyć

Wrzucam zdjęcie z większą liczbą przykładów, które przygotowałem na jednym z wykładów.

1 2

Funkcje

Mamy wstęp za sobą. Teraz czas przejść do funkcji.

W kryptowalutach używa się krzywych eliptycznych. Nie jest to ciężka funkcja w zapisie. Zobaczcie:

Funkcja liniowa: y = ax + b

Funkcja kwadratowa: y = ax2 + bx + c

Funkcja sześcienna: y = ax3 + bx2 + cx + d

Funkcja eliptyczna: y2 = x3 + ax + b

Tak więc funkcja eliptyczna niewiele się różni pod względem zapisu w porównaniu do funkcji sześciennej. Jednak jej wygląd i właściwości idealnie nadają się do szyfrowania.

3

Bitcoin

Każdy kto zobaczy jaką funkcją opisany jest bitcoin może nie uwierzyć, że jest ona w stanie zapewnić bezpieczeństwo.

y2 = x3 + 7

A tak wygląda wykres tej funkcji:

4

Jednak za tą prostotą kryje się wspaniałe rozwiązanie. Dzięki własnościom takiej funkcji idealnie nadaje się do szyfrowania. Skupimy się na dwóch operacjach: dodaniu punktów i podwojeniu punktu.

Dodanie punktów

Zaczniemy od dodania dwóch punktów.

Oznaczymy sobie dwa punkty: P i Q. Linia która przetnie te 2 punkty wyznaczy nam R. To R należy jedynie odbić względem osi X i mamy sumę tych punktów. Najprościej wytłumaczyć to patrząc na rysunek:

5

Tak więc widzimy, że P jest liczbą ujemną. Q to liczba dodatnia, jednak ma małą wartość. Łatwo więc zauważyć, że wynik będzie ujemny. Tak więc linia łącząca te dwa punkty przetnie wykres w jeszcze jednym miejscu. Będzie to punkt R. Jeśli go odbijemy na drugą stronę, otrzymamy R’ = P + Q

Podwojenie punktu

Służy do wyznaczenia stycznej do punktu, który ma być podwojony. Czyli P + P = R (na rysunku zapomniałem dorysować styczną). Przechodzi ona przez punkt P i punkt R, czyli jedynie przez dwa punkty. W przypadku dodania punktów mieliśmy przecięcie w trzech miejscach.

6

Dodanie punktu i podwojenie punktu jest wykorzystywane w mnożeniu skalarnym: R=bP.

Tutaj posłużyło nam do uproszczenia zapisu i rozbicia go na cztery operacje. Dwie dodania punktu i dwie podwojenia punktu.

Podsumowanie

Jest to ciężki temat. Ja sam się nie czuję w nim zbyt swobodnie. To jest wstęp do drugiej części, którą postaram się niedługo wrzucić. Pokażę tam jak na podstawie wiedzy z tego posta, obliczyć klucz publiczny i prywatny. A w ostatniej części wyjaśnię jak działa kopanie i zrobimy implementację.

Zapraszam Was do komentowania i zadawania pytań. Postaram się odpowiedzieć jak najlepiej i wyjaśnić wszelkie niejasności.

Tutaj źródła na podstawie których zagłębiałem się w temat:

http://kryptopolonia.info/matematyka-kryjaca-sie-za-bitcoin/

https://eng.paxos.com/blockchain-101-foundational-math

Zapraszam również do subskrypcji email. Przygotuję materiały, które będę tam publikował. Pojawi się tam też cała seria przepisana do postaci książki w formie pdf.

Patryk Szczygło
Programista w Netguru. Bloger od 2017 roku. Miłośnik podróży, książek i elektroniki. Stworzył własny blockchain w JavaScript. Marzy o automatyzacji i robotyce w życiu.