Kryptowaluta

Kryptowaluta, inaczej mówiąc waluta kryptograficzna, to innowacyjny, rozproszony system księgowy, przechowujący informacje o stanie posiadania w umownych jednostkach. Tłumacząc to na bardziej zrozumiały język, jedną z głównych cech kryptowaluty jest to, że działa jak wirtualna waluta. Posiadacz takiej kryptowaluty przechowuje ją na swoim komputerze czy w smartfonowej aplikacji w tzw. portfelu, do którego dostęp ma tylko on. Jeżeli ma życzenie dokonać transakcji, odbywa się ona elektronicznie, bezpośrednio pomiędzy nim, a kontrahentem. Każda jednostka kryptowaluty, ma unikalny kod, w którym zawarte są informacje zapobiegające jej kopiowaniu czy ponownemu wydatkowaniu.

Kluczowe dla koncepcji kryptowalut jest także to, że w obrocie nimi nie występuje żaden regulator. Nie ma więc „Centralnego Banku Krypowaluty”, który może decydować np. o zwiększeniu podaży kryptowaluty i przez to spadku jej wartości. O tym, ile danej kryptowaluty znajdzie się w obiegu decyduje jej twórca, na etapie tworzenia systemu. Jej wartość znajduje się w rękach wolnego rynku.
Obrót kryptowalutami odbywa się elektronicznie, bez udziału żadnego systemu bankowego bezpośrednio między użytkownikami waluty kryptograficznej, czyli w technologii peer to peer. Oznacza to, że transakcja nie jest w żaden sposób nadzorowana. Nie ma więc podmiotu, który poinformuje organy skarbowe, jeżeli będziemy chcieli sprzedać dużą ilość jednostek kryptowaluty, jak dzieje się to w przypadku transakcji bankowych na kwotę przekraczającą równowartość 15 tys. euro. Nikt nie może też „zablokować” naszego konta. Nie „wejdzie” też na nie komornik.

Biorąc pod uwagę powyższe, okazuje się, że misja kryptowaluty sprowadza się tak naprawdę do jednego słowa, które brzmi „wolność”. Kryptowaluty to waluty elektroniczne całkowicie wolne od kontroli polityków, krajowych czy międzynarodowych instytucji finansowych, których obrót nie jest w żaden sposób kontrolowany, a podlega jedynie silnemu systemowi elektronicznych, zautomatyzowanych zabezpieczeń.

Najpopularniejsze kryptowaluty:

według serwisu coinmarketcap.com to: BitCoin (BTC), Ethereum (ETH), Ripple (XRP), LiteCoin (LTC), Monero (XMR), Ethereum Classic (ETC), Dash, Augur (REP), MaidSafeCoin (MAID), Steem.

7 stycznia 2017stat_najpo_kryp_wal.png

Informacje na temat Bitcoin

 

Matematyka kryjąca się za Bitcoin

Technologia Bitcoin definiuje nam na nowo pojęcie własności.  Właściciela  BTC charakteryzuje to, że posiada dostęp do transferu określonej liczby BTC, nie posiada ich natomiast fizycznie. Każdy transfer BTC jest zapisywany w tzw. łańcuchu bloków (blockchain). Posiadanie odpowiedniej pary kluczy ECDSA daje możliwość otrzymywania i wysyłania BTC. Na pytanie: co to tak naprawdę znaczy i na ile jest bezpieczne, postaram się odpowiedzieć poniżej.

ECDSA (Elliptic Curve Digital Signature Algorithm) to algorytm cyfrowego podpisu przy pomocy krzywych eliptycznych. Jest to proces, który wykorzystuje krzywe eliptyczne i ciało skończone do „podpisania” danych w taki sposób, że osoba otrzymująca te dane może zweryfikować autentyczność podpisu pod warunkiem że podpisujący się zachowuje wyłączność tworzenia tego podpisu. W technologii BTC danymi, które są w ten sposób podpisywane jest transakcja, która przenosi własność.

ECDSA posiada oddzielne procedury podpisywania i weryfikacji. Każda procedura jest algorytmem składającym się z kilku operacji arytmetycznych. Algorytm podpisu wykorzystuje klucz prywatny, a algorytm weryfikacji wykorzystuje klucz publiczny. Najpierw opisze krzywe eliptyczne i ciało skończone, a następnie przedstawie przykłady.

 Krzywe Eliptyczne

Krzywe eliptyczne reprezentuje równanie algebraiczne:

y2 = x3 + ax + b

W przypadku technologii BTC a = 0 i b = 7, krzywa wygląda:

elliptic-curves

Krzywe eliptyczne mają użyteczne właściwości.  Prosta która nie jest styczną i przechodzi przez dwa punkty leżące na krzywej eliptycznej, przechodzi również przez trzeci punkt leżący na tej krzywej. Kolejną właściwością jest to, że nie pionowa linia styczna do krzywej eliptycznej w danym punkcie przechodzi także przez dokładnie jeden drugi punkt.

Te własności wykorzystano to zdefiniowania dwóch operacji: dodania punktu i podwojenia punktu.

 Dodanie punktu

P + Q = R, jest zdefiniowane jako odbicie przez oś x trzeciego punktu przecinającego R’ na linii, która zawiera P i Q. Łatwiej to zrozumieć patrząc na poniższy rysunek:

point-addition

Podwojenie punktu

P + P = R, jest definiowane przez znalezienie lini stycznej do punktu, który ma być podwojony, P, i wykonanie odbicia przez oś x przecinającego punk R’ na krzywej eliptycznej, aby otrzymać punkt R. Zilustrowano to poniżej:

point-doubling

Razem, te dwie operacje są wykorzystywane w mnożeniu skalarnym, R = aP, definiowanym jako dodanie punktu P do samego siebie a razy. Na przykład:

R = 7P
R = P + (P + (P + (P + (P + (P + P)))))

Proces mnożenia skalarnego jest skrócany przez kombinację operacji dodania punktu i podwojenia punktu. Na przykład:

R = 7P
R = P + 6P
R = P + 2 (3P)
R = P + 2 (P + 2P)

Proces mnożenia skalarnego 7P został skrócony do dwóch operacji dodania punktu i dwóch operacji podwojenia punktu.

Ciało Skończone

Ciało skończone wkontekście ECDSA możemy traktować jako predefiniowany zakres liczb dodatnich w którym wynik każdej kalkulacji musi się zawierać. Każda liczba poza tym zakresem „jest w pętli” tak długo aż wpadnie w ten zakres.

Najprostszą drogą do zrozumienia tego jest wyznaczenie reszty z dzielenia (dzielenie modulo). Dla przykładu reszta z dzielenia 9 przez 7 to 2, co zapisujemy:

9 mod 7 = 2

Ciałem skończonym jest tutaj modulo 7 i wszystkie wyniki obliczeń nad tym ciałem zawierają się  ostatecznie w zbiorze liczb całkowitych z zakresu od 0 do 6 („wpadają do tego zbioru”).

Połączmy wszystko razem

Użycie krzywych eliptycznych w kontekście pola skończonego,  zmienia ich wygląd ale nie zmienia ich równania i specjalnych właściwości wymienionych w powyższej części tekstu. Równanie krzywych eliptycznych dla ciała skończonego modulo 67 na wykresie wygląda następująco:

MB

Każdy punkt otrzymano przez dzielenie modulo 67 wyniku równania krzywej eliptycznej. Jest to teraz zbiór punktów, gdzie zmienne x i y przyjmują wartość z zakresu od 0 do 66. Zauważ, że „krzywa” wciąż zachowuje swoją poziomą symetrię.

Dodanie punktu i jego podwojenie wygląda teraz nieco inaczej wizualnie. Dodanie punktu (2,22) i (6,25) wygląda tak:

putting-together-2

Trzecim interesującym punktem jest (47,39) i jego odbicie na (47,28).

Powróćmy do ECDSA i Bitcoina.

Protokół BTC wybiera parametry krzywej eliptycznej i jej skończonej reprezentacji pola. Te wartości są ustalane dla wszystkich użytkowników protokołu. W parametrach zawarte jest równanie krzywej, zakres ciała skończonego(prime modulo) i punkt bazowy, który mieści się na krzywej. Argument punktu bazowego nie jest wybierany przypadkowo, a zależy od innych parametrów. Jest on dużą liczbą pierwszą.

Protokół BTC używa bardzo dużych liczb jako punktu bazowego i bardzo dużych liczb pierwszych jako podstawy dzielenia modulo. Wszystkie praktyczne zastosowania ECDSA opierają się na bardzo dużych liczbach.

W przypadku BTC równanie krzywej eliptycznej wygląda następująco:

y2 = x3 + 7

Przykładowe wartości:

Prime modulo = 2256 – 232 – 29 – 28 – 27 – 26 – 24 – 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F

Punkt bazowy = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

Argument punku bazowego = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

Klucze prywatne i publiczne

W skrócie: kluczem prywatnym jest losowo wybrana liczba z zakresu od 1 do wartości argumentu punktu bazowego.  Kluczem publicznym jest iloczyn klucza prywatnego i punktu bazowego:

klucz publiczny = (klucz prywarny)x(punkt bazowy)

Ukazuje to, że maksymalna liczba kluczy prywatnych jest równa argumentowi punktu bazowego.

W ciele skończonym można narysować linię styczną i wskazać w ten sposób klucz publiczny na wykresie. Są też pewne wzory dla ciała skończonego, dzięki którym można obliczyć klucz publiczny. Wzór na dodanie punktów p i q, żeby wyznaczyć r wygląda następująco:

c = (qy – py) / (qx – px)
rx = c2 – px – qx
ry = c (px – rx) – py

Wzór na podwojenie punktu p, żeby znaleźć punkt r:

c = (3px2 + a) / 2py
rx = c2 – 2px
ry = c (px – rx) – py

Zobaczmy jak to wszystko działa na przykładzie małych liczb:

  • Równanie:  y2 = x3 + 7
  • prime modulo: 67
  • Punkt bazowy (2,22)
  • argument punktu bazowego: 79
  • klucz prywatny 2

Najpierw poszukajmy klucza publicznego. Ponieważ wybraliśmy bardzo mały klucz prywatny, to będzie wymagało tylko jednej operacji podwojenia punktu bazowego. Obliczenia wyglądają tak:

c = (3 * 22 + 0) / (2 * 22) mod 67
c = (3 * 4) / (44) mod 67
c = 12 / 44 mod 67

Teraz żeby zrozumieć dalszą część warto zapoznać się z podstawowymi działaniami na ciele skończonym. Odwrotność 44 to 32:

44-1 = 32

c = 12 * 32 mod 67
c = 384 mod 67
c = 49

rx = (492 – 2 * 2) mod 67
rx = (2401 – 4) mod 67
rx = 2397 mod 67
rx = 52

ry = (49 * (2 – 52) – 22) mod 67
ry = (49 * (-50) – 22) mod 67
ry = (-2450 – 22) mod 67
ry = -2472 mod 67
ry = 7

Klucz publiczny odpowiada zatem punktowi (52,7). Tyle obliczeń dla klucza prywatnego 2, a co dopiero przy większych wartościach!

Operacja obliczenia klucza publicznego z prywatnego jest stosunkowo łatwa w porównaniu z obliczeniem klucza prywatnego z klucza publicznego. Z teoretycznego punkt widzenia jest to możliwe jednak w praktyce przy dużych wartościach niewykonalne. W związku z tym obliczenie klucza publicznego z prywatnego jest podróżą w jedną stronę.

Tak jak klucz prywatny, klucz publiczny jest reprezentowany przez szesnastkowy ciąg znaków. Więc pojawia się pytanie w jaki sposób dostać się do punktu na płaszczyźnie (opisany przez współrzędne x,y) jeśli jest on opisany jedną liczbą. W nieskompresowanym kluczu publicznym obie wartości 256 bitowe x i y są po prostu sklejone w jeden ciąg. Można również skorzystać z symetrii krzywej eliptycznej to obliczenia skompresowanego klucza publicznego otrzymując tylko wartość x. Mając tą informację można obliczyć y.


Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google

Komentujesz korzystając z konta Google. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s