Jak działa Bitcoin?steemCreated with Sketch.

in #polish7 years ago (edited)

Bitcoin tego typu;

Protokół Bitcoin jest fascynujący. Ukazuje potęgę matematyki oraz kryptografii oraz potwierdza ich rolę w kreowaniu systemów przyszłości. Jest dosyć skomplikowny, co zapewnia bezpieczeństwo transakcji.

Zacznijmy od tego, że Bitcoin jest protokołem opartym o sieć P2P (peer-to-peer), czyli każdy węzeł sieci (host) ma takie same uprawnienia, każdy węzeł może być jednocześnie serwerem i klientem. Sieć działa dlatego, że są do niej podłączone hosty, nie ma tu żadnego centralnego serwera. Bezpieczeństwa systemu Bitcoin pilnuje rozproszona sieć koparek, których łączna moc jest ok. 1000 razy większa niż 500 najlepszych superkomputerów na świecie razem wziętych, co zapobiega próbom "przejęcia" sieci, ponieważ nikt nie ma takiej wielkiej mocy obliczeniowej aby to zrobić.

Aby zabezpieczyć gotówkę używamy sejfów i zamków. Aby zabezpieczyć bitcoin używamy kryptografii i matematyki.

Można powiedzieć, że Bitcoin jest plikiem zawierającym listę numerów. Kopia tego pliku jest przechowywana na każdym komputerze w sieci. Te "numerki" nie reprezentują niczego w świecie fizycznym - to, że jeden bitcoin ma teraz wartość powiedzmy 2600$ wynika tylko z tego, że ludzie chcą tyle za to zapłacić. Aby wysłać bitcoiny Bobowi, Alicja oznajmia sieci, że z jej portfela powinna zniknąć dana suma i powinna pojawić się ona na koncie Boba. Wiadomość ta dociera do kolejnych węzłów sieci które ową transakcje dodają do swojego pliku i przesyłają ją dalej. W skrócie tak to wygląda, jednak pojawia się tu wiele problemów, którym sprostać może tylko matematyka.

W świecie bitcoina każdy wie o każdej transakcji wszystkich węzłów sieci. Nie są one podpisywane imieniem i nazwiskiem, lecz nie można powiedzieć, że Bitcoin oferuje 100% prywatności. Mimo tego, że do każdej transakcji można założyć nowy portfel, to, że wszystkie transakcje są publiczne sprawia, że nie jest to protokół w 100% prywatny. Jest jednak przy zachowaniu odpowiedniego bezpieczeństwa anonimowy, co oznacza, że nie można danego portfela przypisać nam w rozumieniu nam jako danej osobie, jest to tylko ciąg liczb nie mający nic wspólnego z naszymi danymi osobowymi.

Właśnie dlatego, że w sieci Bitcoin mamy doczynienia z osobami anonimowymi, musimy mieć coś, co zrekompensuje nam brak zaufania. Mógłby to być np. bank, lecz po co bank kiedy mamy kryptografię i matematykę?

 Wróćmy do sytuacji, kiedy Alicja chciała wysłać do Boba bitcoiny. Załóżmy, że ma to być 5 BTC. Wysyła więc wiadomość, że z jej konta powinno zniknąć 5 BTC na rzecz Boba. Wiadomość otrzymują kolejne węzły sieci. Lecz jak ci użytkownicy mogą być pewni, że to na pewno Alicja wysłała tę wiadomość? I tu wkracza podpis cyfrowy. Każda transakcja musi być podpisana innym podpisem. Za pomocą klucza prywatnego tworzymy podpis cyfrowy, a klucz publiczny pozwala innym stwierdzić, czy to my wykonaliśmy ten podpis. Klucz publiczny jest też naszym adresem, na który inni wysyłają swoje bitcoiny. Można powiedzieć, że jeśli zgadniemy czyjś klucz prywatny przejmujemy kontrolę nad jego portfelem. Tak, lecz ilość możliwych kluczy to:

1461501637330902918203684832716283019655932542976 

 powodzenia w zgadywaniu :) 

 Żeby wysłać bitcoiny, musimy potwierdzić, że dany klucz publiczny posiadający daną ilość kryptowaluty jest nasz: 

 s = f(m,e)

 gdzie s jest podpisem, f(m, e) funkcją generującą podpis, m informacjami o transakcji, e kluczem prywatnym. Inny użytkownicy sprawdzają, czy to prawidłowy właściciel wygenerował ten podpis, jeśli:

v(m,d,s) = 1 

 to wszystko jest ok. v(m,d,s) jest funkcją sprawdzającą podpis, m informacjami o transakcji, d kluczem publicznym a s podpisem. 

 Jednak użytkownicy sieci Bitcoin nie przechowują bezpośrednio informacji typu:
adres publiczny - suma bitcoinów
Jak mimo tego udaje się zweryfikować, że na danym adresie jest wystarczająca ilość waluty, aby wykonać transakcje? Zostało to rozwiązane w taki sposób, że węzły sieci przechowują informacje o wszystkich transakcjach przeprowadzonych od początku Bitcoina do teraz. W informacjach o transakcji znajdujemy "wejście", w którym znajdują się odnośniki do poprzednich transakcji danego klucza publicznego. W "wyjściu" zaś jest informacja, do jakiego adresu ma być dana suma przekazana i ewentualnie reszta, która wróci do nas, ponieważ jest zasada, że całość wejścia musi być użyta i wtedy zostaje ono uznane jako wydane i nie będzie można już go używać. Węzły sieci sprawdzający daną transakcje sprawdzają poprawność każdej poprzedniej podanej na wejściu, tzn. czy nie została już kiedyś użyta w innej transakcji oraz czy na pewno pochodzi od danego klucza publicznego. 

Jest jeszcze pewien problem;

 Jako, że transakcje rozchodzą się od węzła do węzła, nie ma pewności, że kolejność w jakiej do nas przyjdą będzie prawdziwą kolejnością tych transakcji. I tu pojawia się przestrzeń dla oszustów. Oszust Radek może wysłać bitcoiny Bobowi i chwilę przed tym, jak wiadomość o tym dotrze do Boba Radek wysyła wiadomość o drugiej transakcji z takim samym wejściem. Bob już wysłał towar, ponieważ myślał, że otrzymał bitcoiny, lecz część sieci określi transakcję pierwszą jako nieprawidłową, ponieważ do nich najpierw dotarła wiadomość o transakcji drugiej. W takim wypadku sieć musi znaleźć sposób na określenie kolejności transakcji. 

Bitcoin grupuje transakcje w bloki. Każdy blok ma odnośnik do swojego poprzednika. Nazywa się to blockchain, czyli łańcuch bloków. Transakcje w tym samym bloku są uważane za wykonane w tym samym czasie, zaś transakcje które nie są przypisane do żadnego bloku nazywane są niepotwierdzonymi. Jednak każdy węzeł sieci może stworzyć swój blok, który będzie zawierał inne transakcje w tym samym czasie. Problem kolejności znów się pojawia. I tu pojawia się dowód pracy

Aby wygenerować blok trzeba rozwiązać skomplikowaną zagadkę matematyczną. Wykorzystana została do tego funkcja skrótu SHA256. Należy wziąc cały tekst bloku oraz losową liczbę (na znalezieniu tej liczby polega rozwiązanie zagadki) dla których wyjście funkcji skrótu jest poniżej pewnej wartości. Węzeł, który rozwiąże zagadkę ogłasza swój blok całej sieci, za co dostaje nagrodę w postaci pewnej sumy bitcoinów. Tak właśnie działa kopanie bitcoinów

Problem pojawia się wtedy, gdy dwie lub więcej osób (oczywiście mam na myśli urządzenia, które używane są do kopania, nikt nie kopie bitcoinów ręcznie) znajdzie rozwiązanie w tym samym czasie, przez co pojawiają się dwie lub więcej możliwe gałęzie. Użytkownik A jednak zaczyna pracować nad blokiem który dostanie jako pierwszy i dopiero jeśli ktoś, kto otrzymał bloki w innej kolejności utworzy kolejny blok (rozwiąże zagadkę) użytkownika A przełącza się na tego gałąź. Zasada jest taka, że zawsze przełącza się na najdłuższą z istniejących gałęzi. Transakcje z bloków z gałęzi krótszych zostają ponownie uznane jako niepotwierdzone i czekają na swoją kolej. Tu również wydaje się, że rodzi się pole do oszustwa "double spending", czyli podwójnego wydawania. Załóżmy, że oszust Radek chce podłożyć długą gałąź bloków, aby zmienić kolejność swojej transakcji I tym samym oszukać Boba. Jest to jednak niemożliwe, a pilnuje tego matematyka. 

W blokach, nawiązaniem do poprzedniego bloku jest tak na prawdę wartość funkcji skrótu dla zagadki z tego własnie bloku. Więc trzeba niewyobrażalnej mocy obliczeniowej, aby samemu rozwiązać parę zagadek pod rząd, a bez tego nie uda nam się stworzyć najdłuższej gałęzi. 

Źródła;

Sort:  

Congratulations @jakipatryk! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honnor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 63475.77
ETH 3117.23
USDT 1.00
SBD 3.94