Bezpieczeństwo Tokenów: Kryptografia - Token-Economy-Book/PolishTranslation GitHub Wiki
Kryptografia jest ważnym narzędziem do bezpiecznego zarządzania tokenami w sieci anonimowych i niezaufanych uczestników. Pozwala ona na przejrzystość interakcji przy jednoczesnym zachowaniu prywatności wszystkich uczestników sieci. Kryptografia jest wykorzystywana do wiarygodnej identyfikacji wszystkich uczestników sieci, a także stanowi integralną część protokołu konsensusu w sieci blockchain.
Kryptografia jest praktyką i nauką o bezpiecznej komunikacji z udziałem osób trzecich. Celem jest stworzenie systemów informacyjnych odpornych na podsłuch, manipulację i inne formy ataku. Chociaż historia kryptologii sięga czasów pojawienia się tekstów pisanych ręcznie, to w erze komputerów uległa ona znacznej ewolucji. Kryptografia stanowi pod-dziedzinę kryptologii i odnosi się głównie do procesu szyfrowania, w którym fragment informacji (tekst jawny) jest przekształcany w niezrozumiały tekst (szyfrogram). Szyfrogram jest nieczytelny bez odpowiedniego szyfru do jego odszyfrowania.
Szyfry były jedną z pierwszych technik szyfrowania, opracowaną w celu zaszyfrowania tekstu jawnego za pomocą szyfrów substytucyjnych (w których jednostki tekstu jawnego są zastępowane pojedynczymi literami, parami liter lub trójkami liter) lub szyfrów transpozycyjnych (w których jednostki tekstu jawnego są uporządkowane w innej, zwykle dość złożonej kolejności). Odszyfrowanie jest procesem konwersji nieczytelnego szyfrogramu z powrotem do oryginalnego tekstu jawnego. Szyfr jest więc parą algorytmów, które tworzą szyfrowanie, jak i odwrotne deszyfrowanie: jest on zaprojektowany w taki sposób, że łatwo jest zaszyfrować wiadomość, ale bardzo trudno ją odwrócić, jeśli nie zna się szyfru.
Historycznie, kryptografia była używana w różnych formach, takich jak wyryty szyfrogram na pewnym kamieniu w Egipcie. Inne formy szyfrów pochodzą z Persji Sassanidów, starożytnej Grecji, Imperium Rzymskiego, Indii, itd. Od czasu opracowania maszyny Enigma (rotującej maszyny szyfrującej) w czasie I wojny światowej i pojawienia się komputerów w czasie II wojny światowej, zastosowania i metody kryptograficzne radykalnie ewoluowały. Klasyczne szyfry stały się zbędne, ponieważ były bardzo łatwe do odgadnięcia za pomocą prostych ataków typu "brute-force", w których algorytm komputerowy uruchamia wszystkie możliwe algorytmy kombinacji, aż do odgadnięcia właściwego kodu. Komputery nie tylko zwiększyły możliwości kryptoanalizy, która odnosi się do procesu złamania szyfrów, ale także umożliwiły tworzenie bardziej złożonych szyfrów. Współczesne algorytmy kryptograficzne są projektowane tak, aby ich złamanie było niewykonalne w kategoriach czasu i pieniędzy przy zastosowaniu metody brute-force. Takie "założenia trudności obliczeniowej" muszą jednak uwzględniać ciągły wzrost mocy obliczeniowej komputerów.
Komputery wprowadziły ponadto nowe formy szyfrowania dowolnego rodzaju informacji cyfrowej, nie tylko fragmentów tekstu. Wraz z pojawieniem się komputerów kwantowych wielu badaczy analizuje związek między problemami kryptograficznymi a fizyką kwantową. Kryptografia post-kwantowa jest rozwijana przez niektórych badaczy i inżynierów, którzy już zaczęli uwzględniać potencjalne efekty obliczeń kwantowych przy projektowaniu nowych algorytmów. W erze informacji stosowanie kryptografii rodzi również wiele pytań natury prawnej. Niektóre rządy ograniczają lub zakazują stosowania kryptografii, a w niektórych przypadkach nawet klasyfikują ją jako broń. Niektóre jurysdykcje mogą zezwalać władzom rządowym na nakazanie ujawnienia kluczy szyfrujących do dokumentów, które mogą być istotne dla śledztwa. Ponadto, kryptografia może być interesującym czynnikiem przy omawianiu praw człowieka w erze cyfrowej. Pytanie o to, jak zagwarantować prywatność w erze maszyn, powoli staje się dyskusją prowadzoną przez szerszą opinię publiczną i prawdopodobnie stanie się bardziej dominujące w nadchodzących latach. W tym kontekście kluczowym pytaniem jest, czy i w jaki sposób konstytucyjne prawo do prywatności komunikacji lub świętości własnego domu mogłoby stawić czoła prawu do szyfrowanej komunikacji lub zaszyfrowanych ścieżek danych (czytaj więcej: Część 3 - Tokeny prywatności).
Podczas gdy wczesne próby szyfrowania komunikacji elektronicznej koncentrowały się na zapewnieniu poufności i technologii ochrony komunikacji instytucji rządowych, to obecnie dziedzina ta uległa rozszerzeniu. W ciągu ostatnich dziesięcioleci technologie szyfrowania były stosowane w różnych innych dziedzinach, takich jak handel elektroniczny, płatności cyfrowe, zarządzanie prawami cyfrowymi, zarządzanie hasłami, sprawdzanie integralności wiadomości, uwierzytelnianie tożsamości, podpisy cyfrowe, dowody interaktywne i bezpieczne obliczenia. W kontekście sieci blockchain i innych ksiąg współdzielonych, kryptografia jest wykorzystywana do identyfikacji, weryfikacji i celów bezpieczeństwa na poziomie protokołu podstawowego. W kontekście publicznych sieci blockchain i innych technologii Web3 stosowane są trzy istotne kryptograficzne elementy składowe: (i) funkcje haszujące (hash), (ii) kryptografia symetryczna oraz (iii) kryptografia asymetryczna (kryptografia klucza publicznego).
Funkcje hash to algorytmy matematyczne, które przekształcają dowolny typ danych o dowolnym rozmiarze (wiadomość) w dane o stałym rozmiarze (wartość hash lub hash). Jedynym sposobem na odtworzenie oryginalnych danych (wiadomości) z hash jest wypróbowanie wszystkich możliwych wariantów, aby sprawdzić, czy dają one dopasowanie. Chociaż jest to możliwe, jest to czasochłonne, a zatem kosztowne, dlatego nazywane jest funkcją jednokierunkową. Funkcje hash mogą być wykorzystywane do zapewnienia integralności przesyłanych danych i prywatności. Wybrane zastosowania to podpisy cyfrowe, usługi uwierzytelniania, odciski palca, wykrywanie duplikatów, unikalna identyfikacja plików, czy tworzenie sum kontrolnych w celu wykrycia uszkodzenia danych. Kryptograficzne funkcje hash, aby mogły być uznane za odporne na rozszyfrowanie, muszą spełniać określone właściwości: muszą być zaprojektowane w taki sposób, aby były (i) łatwe do obliczenia; (ii) deterministyczne, co oznacza, że ta sama wiadomość zawsze daje ten sam hash; (iii) czasochłonne i kosztowne do wygenerowania wiadomości z jej wartości hash za pomocą czystej brute-force; (iv) małe zmiany w oryginalnej wartości wejściowej powinny zmienić wartość hash. Ponadto powinno być (v) niewykonalne, aby znaleźć dwie różne wiadomości (dane wejściowe) o tej samej wartości skrótu (dane wyjściowe).
Systemy symetryczne: Przed pojawieniem się kryptografii klucza publicznego, dwie strony polegały na jednym kluczu szyfrującym, który wymieniały metodą nie kryptograficzną, poprzez tajne spotkania, zapieczętowane koperty lub zaufanych kurierów. Jeśli chciałeś komunikować się z kimś prywatnie, musiałeś się fizycznie spotkać i uzgodnić tajny klucz. W świecie współczesnej komunikacji, gdzie trzeba koordynować działania w sieci wielu niezaufanych podmiotów (Internet), takie metody nie byłyby wykonalne. Dlatego też szyfrowanie symetryczne nie jest stosowane do komunikacji w sieciach publicznych. Jest ono jednak szybsze i bardziej wydajne niż szyfrowanie asymetryczne, dlatego jest wykorzystywane do szyfrowania dużych ilości danych, niektórych aplikacji płatniczych czy generowania liczb losowych.
Systemy asymetryczne, określane również jako kryptografia klucza publicznego, rozwiązały problem koordynacji poprzez wprowadzenie dwóch kluczy, klucza publicznego i klucza prywatnego. Klucz prywatny jest znany tylko właścicielowi i musi być utrzymywany w tajemnicy, podczas gdy klucz publiczny może być przekazany każdemu. Klucz publiczny może być podany w sieci, co pozwala każdemu w sieci użyć kluczy publicznych do wysłania zaszyfrowanej wiadomości do "właściciela" klucza publicznego. Ta zaszyfrowana wiadomość może być odszyfrowana tylko za pomocą klucza prywatnego odbiorcy. Nadawcy mogą połączyć wiadomość z ich kluczem prywatnym, aby utworzyć podpis cyfrowy na wiadomości. Teraz każdy może sprawdzić za pomocą odpowiedniego klucza publicznego, czy podpis jest ważny. Sposób generowania kluczy zależy od użytych algorytmów kryptograficznych. Przykłady systemów asymetrycznych to RSA (Rivest-Shamir-Adleman) i ECC (Elliptic-Curve Cryptography), który jest również używany w Bitcoin. Zastosowanie kryptografii asymetrycznej zwiększyło [^1]bezpieczeństwo komunikacji w niezaufanych sieciach, takich jak Internet, w sposób wymierzalny. W kolejnych rozdziałach skupimy się na tym, jak kryptografia jest wykorzystywana w sieci Bitcoin i podobnych sieciach blockchain.
Sieć Bitcoin używa głównie hash w połączeniu z podpisami cyfrowymi do ochrony integralności danych przepływających przez sieć przy użyciu kryptografii klucza publicznego. Hash są ponadto używane w kontekście protokołu konsensusu “Dowód-na-Działanie“. Bitcoin wykorzystuje kryptografię klucza publicznego, a dokładniej kryptografię krzywej eliptycznej. Należy pamiętać, że alternatywne sieci blockchain i inne systemy rozproszonej księgi mogą wykorzystywać alternatywne narzędzia kryptograficzne do tych opisanych poniżej. Niektóre sieci blockchain, na przykład [^2] , używają kryptografii bardziej chroniącej prywatność, takich jak "Zcash" (dowody zerowej wiedzy) i "Monero" (podpisy pierścieniowe). Sama społeczność Bitcoin poszukuje obecnie alternatywnych schematów podpisów [^3]kryptograficznych, które w większym stopniu chronią prywatność i są bardziej skalowalne, na przykład z "Mimblewimble" (czytaj więcej: Część 3 - Tokeny prywatności).
Sieć Bitcoin wykorzystuje kryptografię klucza publicznego do tworzenia bezpiecznych cyfrowych referencji dotyczącej tożsamości użytkownika za pomocą zestawu kluczy kryptograficznych: klucza prywatnego i klucza publicznego. Bezpieczne cyfrowe referencje o tym, kto jest kim, i kto jest właścicielem czego, są podstawą transakcji P2P. W połączeniu z transakcją, klucze te mogą tworzyć podpis cyfrowy, który dowodzi kto jest właścicielem tokenów i pozwala na kontrolę tokenów za pomocą oprogramowania portfela. Podobnie jak czek jest podpisany ręcznie, a hasła są używane do uwierzytelniania w bankowości internetowej, kryptografia klucza publicznego jest używana do uwierzytelniania i podpisywania transakcji Bitcoin.
Klucz publiczny jest generowany matematycznie na podstawie klucza prywatnego. Podczas gdy bardzo łatwo jest obliczyć klucz publiczny na podstawie klucza prywatnego, odwrotna operacja jest możliwa tylko przy użyciu brute-force; odgadnięcie klucza jest możliwe, ale zaporowo kosztowne. Jego złamanie zajęłoby najpotężniejszemu super-komputerowi na świecie biliony lat, co czyni go praktycznie niemożliwym. Oznacza to, że nawet jeśli klucz publiczny jest znany wszystkim, nikt nie może na jego podstawie uzyskać klucza prywatnego. Wiadomość zaszyfrowana kluczem publicznym może bezpiecznie dotrzeć do właściciela klucza prywatnego i tylko on jest w stanie ją odszyfrować. Metoda ta działa również w drugą stronę. Każda wiadomość z kluczem prywatnym może być zweryfikowana za pomocą odpowiadającego jej klucza publicznego.
Analogicznym przykładem dla klucza publicznego może być przykład kłódki. Jeśli Bob chce wysłać wiadomość do Alicji, ale boi się, że ktoś może ją przechwycić i przeczytać, poprosi Alicję o przesłanie mu swojej kłódki (niezamkniętej) i o zachowanie klucza do tej kłódki. Bob może teraz włożyć swój list do małej skrzyneczki i zamknąć ją na kłódkę, którą przysłała mu Alicja, zamykając je prostym pchnięciem. Skrzyneczka może być teraz wysłana na cały świat bez możliwości otwarcia jej przez niepowołane osoby. Tylko Alicja, która ma klucz do tej swojej kłódki, może otworzyć skrzyneczkę. Oczywiście, ktoś mógłby spróbować rozwalić skrzyneczkę za pomocą czystej siły, zamiast używać klucza. Choć jest to możliwe, trudność zależałaby od odporności skrzynki i siły kłódki. Te same podstawowe zasady obowiązują we współczesnej kryptografii.
Kluczowe pytanie w kryptografii z kluczem publicznym krąży wokół założeń trudności obliczeniowej: jak można zwiększyć wysiłek obliczeniowy pomiędzy uzyskaniem klucza prywatnego z klucza publicznego, w porównaniu do uzyskania klucza publicznego z klucza prywatnego? Jak trudno jest złamać szyfrowanie poprzez odgadnięcie wyniku, ile czasu zajęłoby odgadnięcie klucza prywatnego i jak kosztowne byłoby to zadanie? Klucz prywatny jest reprezentowany przez liczbę, co oznacza, że im większa jest ta liczba, tym trudniej jest ją odgadnąć (losowo) komuś, kto jej nie zna. Jeśli odgadnięcie liczby losowej zajmuje kilkadziesiąt lat, to liczba ta jest uważana za bezpieczną. Jednak każdy algorytm kryptograficzny jest podatny na atak typu brute-force, który polega na odgadnięciu klucza prywatnego poprzez wypróbowanie wszystkich możliwych kombinacji, aż do znalezienia pasującego rozwiązania. Ponieważ komputery stają się coraz szybsze i bardziej wydajne, trzeba wymyślać bardziej wyrafinowane algorytmy, albo przez użycie większych liczb, albo przez wymyślenie bardziej odpornych algorytmów.
Aby upewnić się, że trudno jest odgadnąć tę liczbę, odporny klucz prywatny ma minimalne wymagania: Musi to być (i) losowo wygenerowana liczba. Musi być (ii) bardzo dużą liczbą. Musi używać (iii) bezpiecznego algorytmu do generowania kluczy. Losowość jest ważna, ponieważ nie chcemy, aby jakakolwiek inna osoba lub maszyna używała tego samego klucza, a ludzkie umysły nieść zbyt dobre w wymyślaniu “losowości”. Duże rozmiary kluczy pozwalają na dalszą dystrybucję losowości i są znacznie trudniejsze do złamania metodą brute-force, ale również wolniejsze do obliczenia. Ze względu na swoją złożoność, bezpieczne algorytmy muszą być naukowo sprawdzone i przetestowane pod kątem naruszeń bezpieczeństwa. Należy unikać wymyślania własnych algorytmów. Ten problem stał się oczywisty, gdy zespół rozwijający sieć IOTA postanowił zaimplementować własną funkcję hash o nazwie Curl. IOTA jest alternatywnym rozwiązaniem dla blockchain, które ma rozwiązać problem wymierzalności Bitcoin za pomocą alternatywnego mechanizmu konsensusu i alternatywnej kryptografii. Ich samodzielnie stworzona funkcja Curl została jednak później uznana za nieodporną na kolizje". [^4]Od momentu powstania Bitcoin, algorytmy kryptograficzne używane w sieci Bitcoin oparły się wszelkim próbom fałszowania danych.
Bez kryptografii nie mógłby istnieć współdzielony konsensus w sieci podmiotów, które nie znają się i nie ufają sobie nawzajem. Ponieważ komputery stają się coraz potężniejsze i potrafią szybciej odgadywać liczby, stosowane algorytmy będą musiały wytrzymać upływ czasu i szybko zmieniające się standardy technologiczne, aby utrzymać obecny poziom bezpieczeństwa. Wielu badaczy i programistów twierdzi, że superkomputery, a w szczególności komputery kwantowe, będą wkrótce w stanie złamać większość konwencjonalnych algorytmów szyfrowania metodą brute-force. Nie jest to do końca prawdą i zależy od algorytmu kryptograficznego. Podczas gdy komputery kwantowe nie są znacząco lepsze w łamaniu hash, są jednak one znacznie potężniejsze, jeśli chodzi o krzywe eliptyczne i faktoryzację pierwiastków. Odpowiedzi są złożone i jeszcze nie do końca rozstrzygnięte. Algorytmy kryptograficzne odporne na działanie komputerów kwantowych są zatem obszarem badań o krytycznym znaczeniu. Więcej szczegółów na ten temat można znaleźć w odnośnikach na końcu tego rozdziału.
Hashing jest metodą przekształcania dużych ilości danych w krótkie liczby, które są trudne do odgadnięcia. Można przekonwertować tekst lub obraz, który reprezentuje sekwencję bitów o zmiennej długości, aby uzyskać sekwencję bitów o stałej długości w postaci hash. Funkcje te zapewniają integralność danych. Sieć Bitcoin używa bezpiecznych algorytmów hash (SHA), takich jak SHA-256. Ważną właściwością hash jest to, że jeśli jeden bit danych wejściowych zostanie zmieniony, dane wyjściowe zmieniają się tak znacząco, że ułatwia to wykrywanie [^5] małych zmian na przykład w dużych plikach tekstowych. Jak widać na poniższym przykładzie, zupełnie inny hash zostanie wygenerowany, gdy zmienimy tylko jeden symbol. Jest to oparte na "efekcie lawinowym" i jest przydatne do łatwego zapewnienia integralności danych. Całkowicie inny ciąg znaków jest wynikiem haszowania hasha.
- Hash zdania: “Jak kupić Bitcoin?”: 156aedcfab1d49f73abddd89faf78d9930e4b523ab804026310c973bfa707d37
- Hash zdania “Jak kupić Bitcoin”: 4314d903f04e90e4a5057685243c903fbcfa4f8ec75ec797e1780ed5c891b1bf
- Hashing hasha wytwarza: 4c9622e1148ff0b855de50e62999d194039eb2faa9e715cc9d9ef604015aa1fe
Efekt lawinowy opisuje zachowanie funkcji matematycznej, w której nawet niewielka zmiana w ciągu wejściowym powinna spowodować drastyczną zmianę wynikowej wartości hash . Oznacza to, że jeśli do dokumentu liczącego kilkaset stron dodamy tylko jedno słowo lub nawet przecinek, to hash tego dokumentu ulegnie zmianie. Wartość hash dokumentu może więc służyć jako kryptograficzny bliźniak dokumentu, dlatego często określa się ją mianem "cyfrowego odcisku palca". Dzięki temu nie ma potrzeby szyfrowania całego dokumentu kluczem prywatnym nadawcy, ponieważ jest to czasochłonne, pochłania pasmo i pieniądze. Zamiast tego można obliczyć wartość hash dokumentu.
Hashing w sieci Bitcoin jest częścią następujących procesów: (i) kodowanie adresów portfeli; (ii) kodowanie transakcji pomiędzy portfelami; (iii) weryfikacja i walidacja stanów kont portfeli; oraz dla mechanizmu konsensusu (iv) Proof-of-Work.
Portfel blockchain to oprogramowanie, który przechowuje klucz prywatny, klucz publiczny i adres blockchain, oraz komunikuje się z siecią blockchain. To oprogramowanie portfela może działać na komputerze lub telefonie komórkowym (jak "Bitcoin Core", "Electrum") lub na dedykowanym nośniku zewnętrznym (jak "Trezor", "Ledger"). Oprogramowanie portfela pozwala na uwierzytelnianie użytkownika i zarządzanie tokenami. Za pomocą oprogramowania portfela można wysyłać tokeny i sprawdzać potwierdzenia wysłania tokenów, które zostały wysłane do Ciebie. Za każdym razem, gdy wysyłasz tokeny Bitcoin, musisz użyć portfela, aby podpisać transakcję swoim kluczem prywatnym. Następnie osobiste saldo tokenów jest korygowane na wszystkich kopiach księgi głównej, która jest rozproszona w sieci P2P komputerów.
Przy pierwszym uruchomieniu portfel Bitcoin generuje parę kluczy składającą się z klucza prywatnego i klucza publicznego. W pierwszym kroku, klucz prywatny jest losowo wygenerowaną 256-bitową liczbą całkowitą. Klucz publiczny jest następnie matematycznie wyprowadzany, przy użyciu kryptografii klucza eliptycznego, z klucza prywatnego. W drugim kroku adres blockchain jest wyprowadzany z klucza publicznego przy użyciu innego typu funkcji kryptograficznej niż ta, która została użyta do wyprowadzenia klucza publicznego, dodając meta-dane, takie jak sumy kontrolne i prefiksy. Użycie innego typu funkcji kryptograficznej do wyprowadzenia adresu dodaje dodatkowy poziom bezpieczeństwa: jeśli pierwsza warstwa bezpieczeństwa, kryptografia klucza eliptycznego, zostanie złamana, to ktoś, kto posiada klucz publiczny, będzie w stanie złamać klucz prywatny. Jest to ważne, ponieważ kryptografia klucza eliptycznego jest szczególnie podatna na złamanie, jeśli komputery kwantowe staną się rzeczywistością, podczas gdy hashowanie, które jest używane w drugiej warstwie do uzyskania adresu, nie jest tak podatne na ataki brute-force komputerów kwantowych. Oznacza to, że jeśli ktoś ma adres blockchain i złamał kryptografię z kluczem eliptycznym, osoba ta nadal będzie musiała przejść przez drugą warstwę zabezpieczeń, która została użyta do wyprowadzenia adresu z klucza publicznego. Jest to podobne do tego, dlaczego dwukrotne zamknięcie roweru na dwa różne zamki, które mają różne mechanizmy zabezpieczające (klucz lub zamek numeryczny), daje dodatkową warstwę bezpieczeństwa podczas zamykania roweru na ulicy. W wyniku tego adres działa jako cyfrowy odcisk palca klucza publicznego, ale nie daje żadnych informacji o kluczu publicznym danej osoby (chyba że wyśle ona pierwszą transakcję). Adresy Blockchain pełnią funkcję podobną do numeru konta bankowego w kontekście tradycyjnych transakcji finansowych lub adresu e-mail, gdy ludzie chcą wysłać do ciebie wiadomość elektroniczną.
Podpisy cyfrowe w sieci Bitcoin i podobnych sieciach blockchain są dokonywane za pomocą oprogramowania portfela. Podobny do podpisu odręcznego, podpis cyfrowy jest używany do weryfikacji, że jesteś tym, za kogo się podajesz. Prawidłowo wdrożony, jest trudniejszy do podrobienia niż podpisy ręczne. Podpisy cyfrowe są w użyciu od dziesięcioleci, głównie w kontekście transakcji finansowych, licencji oprogramowania lub oprogramowania do zarządzania umowami. W sieciach blockchain, podpisy cyfrowe są używane do uwierzytelniania (dowód, że nadawca tokenów jest w rzeczywistości nadawcą) i integralności transakcji (tj. ilość wysłanych tokenów). Klucz prywatny służy do podpisywania transakcji z użyciem tokenów. Klucz publiczny jest używany przez węzły uwierzytelniające w sieci do weryfikacji podpisu. W ten sposób portfel nie może udawać, że jest innym portfelem. Jest to również określane jako "non-repudiation". W praktyce oznacza to, że inna osoba nie może udawać, że kontroluje Twój portfel, chyba że posiada Twój klucz prywatny.
Twój klucz prywatny musi być zawsze utrzymywany w tajemnicy i nie powinien być udostępniany innym osobom, chyba że chcesz dać im celowy dostęp do Twoich tokenów. Ze względu na dwuetapowy proces uzyskiwania klucza publicznego z klucza prywatnego i adresu z klucza publicznego, wystarczy wykonać kopię zapasową klucza prywatnego; wszystko inne można uzyskać z klucza prywatnego za pomocą algorytmu kryptograficznego używanego [^6]w sieci. Jeśli stracisz dostęp do portfela, bez posiadania kopii zapasowej sekwencji wyrazów “zalążkowej” lub klucza prywatnego, stracisz dostęp do swoich tokenów. Podczas gdy twoje tokeny będą nadal istnieć w sieci, nie będziesz w stanie uzyskać do nich dostępu.
W przeciwieństwie do powszechnego przekonania, portfel blockchain nie przechowuje żadnych tokenów. Przechowuje on jedynie parę kluczy publiczno-prywatnych powiązanych z twoim adresem blockchain. Przechowuje on również zapis wszystkich transakcji, w których zaangażowane są klucze publiczne portfela, wraz z kilkoma innymi danymi. Dlatego termin "portfel" jest mylący. Słowo “łańcuch kluczy” (ang. keychain) byłoby bardziej odpowiednie, ponieważ działa on jako bezpieczne przechowywanie kluczy, a także jako narzędzie komunikacji z siecią blockchain. Portfel blockchain ma więcej podobieństw do breloka zawierającego twoje klucze do domu. Jeśli zgubisz klucze do swojego mieszkania, mieszkanie jest nadal twoje, ale nie można uzyskać dostęp do mieszkania tak długo, jak nie odzyskasz kluczy; być może masz zapasowy klucz, który zostawiłeś u sąsiada, przyjaciela lub członka rodziny, lub musisz znaleźć ślusarza, aby pomóc włamać się do własnego domu. Złamanie zamka przełożyłoby się na atak typu brute-force w celu odgadnięcia klucza prywatnego. Istnieją dwa różne rodzaje portfeli, portfele kontrolowane i niekontrolowane:
Portfele kontrolowane przez użytkownika oferują osobistą kontrolę nad posiadanymi tokenami. Klucze prywatne są pod wyłączną opieką i odpowiedzialnością użytkowników, a transakcje są podpisywane bezpośrednio z urządzeń użytkowników. Z portfelami kontrolowanymi przez użytkownika, jednakże, użytkownik staje się jedyną przyczyną w przypadku utraty lub kradzieży swoich kluczy.
Portfele hostowane to usługi opiekuńcze, oferowane przez serwisy giełdowe online, gdzie usługodawca zarządza portfelem użytkownika na swoich serwerach. W większości przypadków, klucze prywatne związane z portfelem są również zarządzane przez tych pośredników. Oprogramowanie portfela replikuje klucz prywatny użytkownika w taki sposób, że osoba trzecia może składać transakcje w imieniu użytkownika. Dlatego wiele osób woli hostować swoje tokeny na giełdach internetowych i delegować odpowiedzialność za zarządzanie kluczami do tych zaufanych instytucji. Podobnie jak banki, usługi wymiany tokenów działają jako depozytariusze środków finansowych (czytaj więcej: Część 3 - Giełdy tokenów).
Bardziej autonomicznym rozwiązaniem problemu utraty kluczy prywatnych mogą być tak zwane "społeczne rozwiązania odzyskiwania kluczy", w których użytkownik może wyznaczyć grupę zaufanych przyjaciół, członków rodziny lub instytucji w celu potwierdzenia swojej tożsamości i umożliwienia odzyskania klucza w procesie wielo-podpisowym. W takim układzie użytkownik mógłby, na przykład, wyznaczyć pięć zaufanych osób, z którymi można by się skontaktować w przypadku utraty klucza prywatnego. Trzy z pięciu osób mogłyby być zdefiniowane do podpisywania swoimi kluczami prywatnymi w celu odzyskania twojego klucza prywatnego. W ten sposób precyzyjnie określasz, komu ufasz, nie czyniąc z siebie jedynego “punktu awarii”. Jednakże, jeśli ci ludzie znają się nawzajem, mogą się zmówić się lub zostać przekupieni, aby zmawiać się przeciwko tobie. Aby umożliwić prawdziwe zarządzanie P2P tokenami, gdzie ludzie mogliby wysyłać i odbierać tokeny z portfela do portfela, bez potrzeby zaufanych stron trzecich, będziemy potrzebowali lepszych rozwiązań do zarządzania portfelem, takich gdzie każda osoba jest suwerenem swoich tokenów, utrzymując wysoki poziom bezpieczeństwa i użyteczności. Mniej wyrafinowanym rozwiązaniem dla odzyskiwania kluczy byłoby automatyczne tworzenie kopii zapasowej w usłudze w chmurze, takiej jak Google Drive. Chociaż nie jest to w ogóle wskazane, ze względu na wygodę, wydaje się, że stało się to trendem w niektórych giełdach tokenów, takich jak “Coinbase".
W momencie pisania tej książki, większość portfeli pozwala na zarządzanie tylko jednym typem tokena, a w niektórych przypadkach ograniczoną liczbą tokenów. Wynika to z faktu, że różne systemy rozproszonych ksiąg rachunkowych w większości przypadków nie współdziałają między sobą. Większość systemów tokenowych ma różne specyfikacje techniczne, które zależą od rodzaju współdzielonej księgi głównej, na której się opierają, a zatem wymagają indywidualnego oprogramowania portfela. Portfele, które są kompatybilne z wieloma księgami są czasochłonne i kosztowne do opracowania. Kompatybilność z wieloma księgami powoduje również rozrost oprogramowania portfela. Innym aspektem projektowania portfela jest to, czy portfel (w połączeniu z bazową współdzieloną księgą) umożliwia wspólne podpisywanie transakcji. Wiele sieci blockchain, takich jak Ethereum, nie umożliwia natywnych transakcji z wieloma podpisami. W przypadku Ethereum, trzeba to rozwiązać za pomocą inteligentnego kontraktu, który był przedmiotem problemów z bezpieczeństwem.
Podpisy pierścieniowe, podpisy zbiorowe i "Shamir's Secret Sharing"[^7] są przykładami alternatywnych algorytmów kryptograficznych, które muszą być włączone przez sieci blockchain i obsługiwane przez oprogramowanie portfela, aby umożliwić współpodpisywanie transakcji. Współpodpisy są ważną cechą, która umożliwia przekazanie komuś innemu opieki nad twoimi tokenami (bank lub giełda zarządza twoimi tokenami), zbiorowe zarządzanie aktywami (w przypadkach zbiorowej własności tego samego aktywu lub zbiorowego zarządzania, jak w przypadku DAO, Zdecentralizowanej Organizacji Autonomicznej) lub społeczne odzyskiwanie kluczy. Rozdziały 3 i 4 tej książki będą zagłębiać się w aspekty zarządzania tokenami i przypadki użycia tokenów, gdzie rola portfeli stanie się bardziej namacalna.
Jeśli Alicja chce wysłać tokeny Bitcoin do Boba, użyje oprogramowania portfela, aby uwierzytelnić siebie, określić kwotę, którą chce wysłać i wskazać adres Boba. Jej oprogramowanie portfela zgłasza taką transakcję do wszystkich komputerów w sieci. Każdy komputer w sieci może teraz sprawdzić, czy transakcja jest ważna, zgodnie z zasadami sieci. Kroki są następujące:
- Alicja używa oprogramowania portfela, które zarządza jej kluczem prywatnym. Wykonując standardowe operacje matematyczne, oprogramowanie portfela może zawsze wyprowadzić jej klucz publiczny i jej adres z klucza prywatnego.
- Jeśli Alicja chce wysłać tokeny do Boba, używa swojego oprogramowania portfelowego do utworzenia transakcji, która zawiera wszystkie niezbędne szczegóły: jej klucz publiczny. Alicja musi podać adres Boba oraz liczbę tokenów, które chce wysłać. Następnie Alicja tworzy podpis cyfrowy tej transakcji, czyli hash (wykonywany przez jej oprogramowanie portfelowe).
- Aby udowodnić reszcie sieci, że jest właścicielem adresu, a tym samym tokenów, Alicja podpisuje hash swoim kluczem prywatnym (automatycznie dokonane przez jej oprogramowanie portfela).
- Alicja teraz rozgłasza tę transakcję do każdego komputera w sieci: wysyła zarówno transakcję jawną i podpisany hash (automatycznie dokonane przez jej oprogramowanie portfela)
- Każdy komputer w sieci odbierający transakcję może teraz zweryfikować jej ważność. Mogą użyć klucza publicznego Alicji, aby matematycznie zweryfikować, czy podpisany hash został rzeczywiście przez nią podpisany. Mogą użyć operacji hashowania na jej odczytywanej transakcji i otrzymają tę samą wartość hashującą. Mogą również użyć klucza publicznego Alicji, aby zweryfikować, czy podpisany hash został rzeczywiście przez nią podpisany.
- Po potwierdzeniu wszystkich tych szczegółów, w drodze konsensusu wszystkich uczestników sieci, zatwierdzone transakcje są zapisywane w bloku i hashowane. Blok ten staje się częścią zaktualizowanej księgi głównej, jeśli inne komputery w sieci potwierdzą, że numer hash na bloku jest ważny. Ten proces tworzenia nowych bloków transakcji podlega mechanizmowi konsensusu Dowodu-na-Działanie (ang. Proof-of-Work) (przeczytaj więcej o Dowodzie-na-Działanie w następnym rozdziale).
- Wszystkie węzły sieci po utworzeniu kolejnego bloku odpowiednio zmienią swoją księgę, tak że Bob jest teraz właścicielem środków, które wysłała mu Alicja. Transakcja ta staje się częścią uniwersalnego stanu sieci Bitcoin i jest odporna na manipulacje. Informacje w księdze głównej mogą być zmieniane, ale przy zaporowo wysokich kosztach (więcej o tym, ile to kosztuje, przeczytasz w następnym rozdziale).
* Alonso, Kurt M.: “Zero to Monero: First Edition a technical guide to a private digital currency; for beginners, amateurs, and experts”, June 26, 2018 (v1.0.0): https://www.getmonero.org/library/Zero-to-Monero-1-0-0.pdf
* Antonopoulos, Andreas M.: “Mastering Bitcoin: Programming the Open Blockchain”, O’Reilly, 2017
* Becket, B.: “Introduction to Cryptology”, Blackwell Scientific Publications, 1988
* Ben-Sasson, Eli;Chiesa, Alessandro; Garman, Christina; Green, Matthew; Miers, Ian; Tromer, Eran; Virza, Madars: „Zerocash: Decentralized Anonymous Payments from Bitcoin“ May 18, 2014 (extended version): http://zerocash-project.org/media/pdf/zerocash-extended-20140518.pdf
* Ben-Sasson, Eli; Chiesa, Alessandro; Tromer, Eran; Virza, Madars: “Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture”, February 5, 2019 (updated version): https://eprint.iacr.org/2013/879.pdf
* Boyle, David: “The Little Money Book”, Alastair Sawday Publishing, 2003
* Buterin, Vitalik: “Bitcoin Is Not Quantum-Safe, And How We Can Fix It When Needed”: https://bitcoinmagazine.com/articles/bitcoin-is-not-quantum-safe-and-how-we-can-fix-1375242150/
* Buterin, Vitalik: “Privacy on the Blockchain”, January 2016: https://blog.ethereum.org/2016/01/15/privacy-on-the-blockchain/
* Castryck, Wouter: “ELLIPTIC CURVES ARE QUANTUM DEAD, LONG LIVE ELLIPTIC CURVES”, n COSIC Cryptography Blog, 31/05/2017: https://www.esat.kuleuven.be/cosic/elliptic-curves-are-quantum-dead-long-live-elliptic-curves/
* Esslinger, Bernhard: “The CrypTool Script: Cryptography, Mathematics, and More”, 10th edition, distributed with CrypTool version 1.4.30: https://web.archive.org/web/20110722183013/http://www.cryptool.org/download/CrypToolScript-en.pdf
* Flannery, Sarah; Flannery, David: “In Code: A Mathematical Journey”, Workman Publishing Company, 2001
* Goldreich, Oded: “Foundations of Cryptography” Cambridge University Press, 2001
* Ito, Joi: “Our response to „A Cryptocurrency Without a Blockchain Has Been Built to Outperform Bitcoin“, Dec. 20, 2017: https://www.media.mit.edu/posts/iota-response/
* Katz, Jonathan; Lindell, Yehuda: “Introduction to Modern Cryptography”, Chapman & Hall/CRC, Cryptography and Network Security Series, 2nd Edition, 2014
* Nakamoto, Satoshi: “Bitcoin: A Peer-to-Peer Electronic Cash System”, 2008: https://bitcoin.org/bitcoin.pdf
* Narula, Neha: “Cryptographic vulnerabilities in IOTA”, September 7, 2017 https://medium.com/@neha/cryptographic-vulnerabilities-in-iota-9a6a9ddc4367
* Narula, Neha:“IOTA Vulnerability Report: Cryptanalysis of the Curl Hash Function Enabling Practical Signature Forgery Attacks on the IOTA Cryptocurrency”, 7 September, 2017: https://github.com/mit-dci/tangled-curl/blob/master/vuln-iota.md
* N.N.: “Bitcoin”, Github repository: https://github.com/bitcoin
* N.N.: “Bitcoin Core”, Github repository, https://github.com/bitcoin/bitcoin
* N.N.: “Bitcoin Core Integration”, Staging tree: https://bitcoincore.org/en/download
* N.N.: “Mimblewimble Protocol”, Github Archives: https://github.com/mimblewimble/grin/blob/master/doc/intro.md
* N.N.: Monero Research Lab, Technical Resources: https://ww.getmonero.org/resources/research-lab/
* N.N.: “Post-Quantum Cryptography” Information Technology Laboratory, COMPUTER SECURITY RESOURCE CENTER: https://csrc.nist.gov/projects/post-quantum-cryptography/round-1-submissions
* Prasanna: “Litecoin To Implement Mimblewimble”, Altcoin News, February 8, 2019: https://cryptoticker.io/en/litecoin-implement-mimblewimble/
* Rogaway, Phillip; Bellare, Mihir: “Introduction to Modern Cryptography”, May 11, 2005: http://web.cs.ucdavis.edu/~rogaway/classes/227/spring05/book/main.pdf
* Schär, Fabian; Berentsen, Aleksander: “Bitcoin, Blockchain und Kryptoassets: Eine umfassende Einführung”, Books on Demand, 2017
* Schor, Lukas: “On Zero-Knowledge Proofs in Blockchains”, Argon Group, March 2018: https://medium.com/@argongroup/on-zero-knowledge-proofs-in-blockchains-14c48cfd1dd1
* Stallings, William: “Cryptography and Network Security: Principles and Practice”, Prentice Hall, 6th ed., 2013
* Stolbikova, Veronika: „Can Elliptic Curve Cryptography be Trusted? A Brief Analysis of the Security of a Popular Cryptosystem“, ISACA Journal Volume 3, 2016 https://www.isaca.org/Journal/archives/2016/volume-3/Pages/can-elliptic-curve-cryptoraphy-be-trusted.aspx
* Tibco, Nelson Petracek: “What zero-knowledge proofs will do for blockchain”, Venturebeat, Dec 16, 2017: https://venturebeat.com/2017/12/16/what-zero-knowledge-proofs-will-do-for-blockchain/
* Wetzel, Tyler: “Understanding the Jargon of the Blockchain and Cryptocurrency World” Medium, Aug 23, 2018: https://medium.com/@twwetzel76/understanding-the-jargon-of-the-blockchain-and-cryptocurrency-world-64b5f431bcd5
* Wikipedia contributors, "Cryptography," Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Cryptography (accessed Jun 10, 2017).
* Wikipedia contributors, "Digital signature," Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Digital_signature (accessed Jun 10, 2017).
* Wikipedia contributors, "Cryptographic hash function," Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Cryptographic_hash_function (accessed Jun 10, 2017).
* Young, Joseph: “Anonymous Cryptocurrencies: Why Edward Snowden Supports Zero-Knowledge Proofs”, January 2018: https://journal.binarydistrict.com/anonymous-cryptocurrencies-why-edward-snowden-supports-zero-knowledge-proofs/
* Bitcoin Core: https://bitcoin.org/de/download
* Electrum: https://electrum.org/
* Ledger: https://www.ledger.com/
* Monero: https://getmonero.org/
* Mimblewimble: https://github.com/mimblewimble/grin/blob/master/doc/intro.md
* Trezor: https://trezor.io/
* Zcash: https://z.cash/
[^1]: Kryptografia krzywej eliptycznej zapewnia ten sam poziom bezpieczeństwa co RSA, ale wymaga mniejszej liczby obliczeń i mniejszego rozmiaru klucza, co zmniejsza wymagania dotyczące przechowywania i transmisji. Pozwala zatem na zmniejszenie wymagań dotyczących przechowywania i transmisji.
[^2]: Dowody zerowej wiedzy Kryptografia pozwala na walidację informacji bez ujawniania tej informacji weryfikatorowi tej informaci.j
[^3]: Podpisy pierścieniowe mogą być używane do ukrycia tożsamości właścicieli tokenów, łącząc grupę częściowych podpisów cyfrowych z różnych transakcji wysłanych przez różnych użytkowników, aby utworzyć unikalny podpis, który jest używany do podpisania transakcji.
[^4]: Funkcje haszowania pobierają dane wejściowe o dowolnej długości i zwracają pozornie losowe, ale o stałej długości dane wyjściowe. Gdy więcej niż jedno wejście odpowiada temu samemu wyjściu, mogą pojawić się poważne problemy z powodu takiej kolizji. Zespół badaczy z MIT i Boston University znalazł dokładnie takie błędy w funkcji IOTA Curl. Podczas gdy zespół IOTA naprawił wspomniane luki, twierdził, że zostały one wprowadzone celowo, co zostało bardzo skrytykowane przez społeczność open-source.
[^5]: Skalukuluj hash tutaj https://www.browserling.com/tools/all-hashes
[^6]: Fraza nasienie, zwana również "mnemonicznym nasionem", jest metodą powiązania kluczy prywatnych z łatwą do zapamiętania kombinacją słów, która może być dostarczona i zarządzana przez oprogramowanie portfela. "Mnemonika" jest techniką mapowania, która pomaga odtworzyć coś, co jest trudne do zapamiętania, z losowymi słowami, które są łatwe do zapamiętania.
[^7]: Shamir's Secret Sharing to algorytm kryptograficzny, który dzieli sekret (klucz) na części, rozdając jego fragmenty różnym osobom. Aby zrekonstruować sekret, należy dodać do siebie wszystkie odłamki. W konfiguracji "progowej" do zrekonstruowania sekretu potrzebna jest tylko określona liczba części.