Czy kiedykolwiek zastanawiałeś się, jak właściwie działają portfele kryptowalutowe? O ile już trochę znasz się na rzeczy, to pewnie zetknąłeś się z terminami takimi jak klucze prywatne i publiczne. Czym one właściwie są? Dowiesz się tego w tym artykule!
Kryptowaluty, na czele z Bitcoinem, wykorzystują do swojego prawidłowego i bezpiecznego funkcjonowania kilka ważnych technologii:
W celu zabezpieczenia podpisy cyfrowe wykorzystują tak zwaną kryptografię asymetryczną. W przeciwieństwie do kryptografii symetrycznej, wykorzystuje ona nie jeden, ale dwa klucze. A mianowicie klucz prywatny i klucz publiczny. Ale co właściwie reprezentują te klucze?
Każdy portfel kryptowalutowy w celu wysyłania i odbierania transakcji wykorzystuje zarówno klucz prywatny, jak i publiczny. Oba klucze są niezbędne do zapewnienia integralności wszystkich danych w sieci kryptowalut. Przybierają one postać kodu, czyli zestawu jedynek i zer. Kod ten może być wyświetlony w różnych systemach liczbowych, na przykład oto tak:
Każdy klucz publiczny posiada swój własny klucz prywatny, i to z jednego prostego powodu. Klucz publiczny może być wygenerowany tylko z klucza prywatnego. Z kolei z klucza publicznego generowany jest adres portfela, będący dokładnie tym adresem, który widnieje w portfelu. Wiele osób myli pojęcia adresu publicznego i klucza publicznego, jednakże należy zaznaczyć, że zdecydowanie nie są one jednym i tym samym.
Jednocześnie klucz prywatny to zdecydowanie nie to samo co seed (fraza bezpieczeństwa). Kwestię tę rozwiniemy bardziej w dalszej części artykułu. Czytaj dalej!
Kryptografia jest kluczowym elementem bezpieczeństwa kryptowalut. Gdybyśmy codziennie otrzymywali i wysyłali kryptowaluty bez wystarczającego szyfrowania, nie mielibyśmy gwarancji, że publiczne dane, które widzimy w sieci kryptowalut odnośnie naszych transakcji, nie zostały wcześniej zmienione. Aby zapewnić, że transakcje wysyłane przez użytkownika A do użytkownika B są bezpieczne przed wszelkimi naruszeniami, nadużyciami i manipulacją, są one szyfrowane, przy czym tylko ci dwaj użytkownicy znają klucze lub hasła do ich odszyfrowania.
Do szyfrowania używa się dwóch form kryptografii – symetrycznej i asymetrycznej. Kryptografia symetryczna zawiera tylko jeden jedyny klucz – klucz prywatny, który jest używany do szyfrowania informacji. Aby ponownie je odszyfrować, obie strony muszą go znać.
Chociaż ta forma szyfrowania jest szybsza, niestety, jest również mniej bezpieczna ze względu na mniejszą liczbę możliwych kombinacji.
Dlatego też świat kryptowalut przeszedł na kryptografię asymetryczną, która wykorzystuje nie jeden, ale dwa klucze – klucz prywatny i klucz publiczny.
W kryptografii asymetrycznej klucz publiczny jest znany wszystkim uczestnikom sieci, o czym świadczy między innymi jego nazwa. Klucz publiczny służy do szyfrowania danych, przy czym tylko klucz prywatny może je odszyfrować.
Jeśli chodzi o kryptowaluty, każdy klucz publiczny jest reprezentowany przez adres kryptowalutowy, który w rzeczywistości jest jedynie skróconą formą klucza publicznego. Za pomocą klucza publicznego można wyświetlić saldo i historię transakcji dowolnego portfela (adresu). Aby jednak móc dysponować saldem, to znaczy wysyłać kryptowaluty z tego konkretnego adresu do innego miejsca, wymagany jest klucz prywatny.
Dlaczego portfele kryptowalutowe używają dwóch kluczy zamiast jednego?
Kryptografia asymetryczna jest bardziej odpowiednia dla kryptowalut z kilku istotnych powodów. Najważniejszym z nich jest fakt, że klucze prywatne nie opuszczają portfela kryptowalutowego w trakcie transakcji.
Ponieważ w kryptografii symetrycznej istnieje tylko jeden klucz, obie strony muszą go znać, aby odszyfrować informacje, a zatem klucz musi zostać przesłany przez sieć z jednej lokalizacji do drugiej. Wiąże się z tym znaczne ryzyko. W przypadku kryptografii asymetrycznej przesyła się tylko klucz publiczny, a klucz prywatny jest zawsze znany tylko jednemu użytkownikowi.
Z każdego klucza prywatnego można wygenerować deterministycznie klucz publiczny, a następnie (za pomocą innego algorytmu) stworzyć z tego drugiego adres publiczny.
Uwaga: Metoda deterministyczna oznacza, że z oryginalnego klucza prywatnego są zawsze generowane te same klucze publiczne. Jeśli więc znasz swoją frazę seed lub sam klucz prywatny, zawsze możesz uzyskać dostęp do swoich adresów i przechowywanych na nich kryptowalut. Dlatego też możliwe jest na przykład odzyskanie swojego portfela i wszystkich “przechowywanych” w nim coinów i tokenów w razie jego zguby lub utraty.
Prawdopodobnie najważniejszą cechą całego procesu jest fakt, że utworzenie klucza publicznego jest niezwykle proste, a konwersja klucza publicznego na klucz prywatny jest praktycznie niemożliwa. Dlatego też informacje o transakcjach mogą zostać odszyfrowane tylko przez prawowitą osobę – właściciela kryptowalut.
Klucz publiczny jest generowany z klucza prywatnego za pomocą algorytmu. Do utworzenia adresu kryptowalutowego z klucza publicznego można użyć funkcji haszującej. Jej struktura może się nieznacznie różnić w zależności od konkretnego blockchaina, ponieważ używają one różnych algorytmów do jej wyprowadzenia. Weźmy na przykład adresy w sieci Bitcoina.
Obecnie istnieje kilka rodzajów adresów bitcoinowych. Z punktu widzenia użytkownika działają one praktycznie tak samo, najważniejsza różnica polega tutaj na wysokości opłat. Można powiedzieć, że im nowszy format, tym tańsze będą transakcje.
Najnowsze typy adresów pozwalają zaoszczędzić nawet do 70% miejsca w bloku. Z tego powodu transakcje dokonywane przy użyciu tych adresów podlegają niższym opłatom. Umożliwiają one również przejście do innych warstw sieci Bitcoin, takich jak Lightning Network.
Nierzadko można się z nimi zetknąć w postaci kodu QR:
Jeśli gubisz się w tych wszystkich kluczach i adresach, nie martw się. Portfele kryptowalutowe robią to wszystko w tle, w Twoim imieniu. O ile zadbasz odpowiednio o bezpieczeństwo swojej frazy seed, nikt nie ukradnie Twoich kryptowalut.
Przejdźmy teraz do środowiska sieci kryptowalut. W naszym modelowym przykładzie mamy Tomasza, Jakuba i Weronikę. Tomasz chce wysłać Jakubowi trochę bitcoinów. Co dokładnie wtedy dzieje się w portfelach kryptowalutowych i operacjach sieciowych w blockchainie?
Jak widać, nie jest to nic skomplikowanego. Magia kryptografii asymetrycznej polega na tym, że w trakcie całego procesu opisanego powyżej klucz prywatny Jakuba i Tomasza nie opuścił ich portfeli, więc Weronika nie miała szans na odwrócenie transakcji lub zdobycie bitcoinów, w których posiadanie wszedł Jakub. Aby to zrobić, musiałaby znać jego klucz prywatny, ponieważ jej własny klucz prywatny nie jest zdolny odszyfrować tej transakcji.
Spójrz jeszcze na następujący obrazek, który nawiasem mówiąc jest pierwszym obrazkiem znajdującym się na samym początku białej księgi Bitcoina:
Można również zauważyć, że sam portfel w rzeczywistości nie zawiera żadnych kryptowalut. Nie ma tutaj żadnego pliku z zapisaną ilością bitcoinów.
Jedyną funkcją portfela jest ochrona kluczy prywatnych. Nowe bitcoiny Jakuba są bowiem jedynie wpisami w blockchainie, czyli tak zwanej zdecentralizowanej księdze rachunkowej Portfele są urządzeniami, które mogą zajrzeć do tej księgi, pokazać nam salda przypisane do poszczególnych kont i podpisać wszelkie transakcje.
Kiedy mowa o kluczach, często stosuje się termin utworzenie portfela i kluczy. Dokładniej jest jednak powiedzieć, że klucze są znajdywane. Nie można ich bowiem utworzyć. Relacja między kluczami prywatnymi i publicznymi jest deterministycznie z góry określona, jak wspomniano powyżej. Choć może się to wydawać nieprawdopodobne, w rzeczywistości wszystkie pary kluczy już istnieją. Dlatego też można przeprowadzić cały proces wyszukiwania pary działających kluczy w trybie off-line, tj. bez połączenia z Internetem.
Liczba istniejących par kluczy jest naprawdę ogromna (2256). Jest to liczba zbliżona do ilości atomów w obserwowalnym wszechświecie. Dlatego też jest prawie niemożliwe, aby ktoś odkrył dokładnie taką samą kombinację kluczy jak ty i ukradł twoje kryptowaluty.
Twój portfel najpierw użyje algorytmu SHA256, aby losowo wygenerować 256-bitową liczbę (256 jedynek i zer). Następnie przekonwertuje tę liczbę na recovery seed, który należy zapisać w bezpiecznym miejscu w formie analogowej (nie cyfrowej). Na przykład na kartce papieru lub wygrawerować na metalowej płytce.
Następnie z seeda zostaje utworzony tzw. master binary seed (przy użyciu funkcji PBKDF2). Służy on do generowania wszystkich kluczy prywatnych w Twoim portfelu. Tym, co teraz opisujemy, jest zasada hierarchicznie deterministycznego portfela, którą omówimy bardziej szczegółowo w następnej sekcji tekstu.
Uwaga: W przypadku Bitcoina i jego wariantów, takich jak Bitcoin Cash, większość portfeli generuje z master binary seed nowy adres dla każdej transakcji (zestaw klucza prywatnego, pochodnego klucza publicznego i pochodnego adresu publicznego). Procedura ta jest stosowana w celu zapewnienia bezpieczeństwa i zwiększonej prywatności. Nie jest to jednak spotykane w innych projektach, takich jak Ethereum, Stellar czy XRP, gdzie adres jest zawsze taki sam.
Domyślna 256-bitowa liczba, która jest alfą i omegą i stanowi klucz prywatny, może być wymyślona przez użytkownika lub może zostać utworzona na podstawie 62 rzutów kośćmi, przy czym dalsze klucze mogą zostać wygenerowane przy użyciu powyższych procedur. Wygenerowany w ten sposób zestaw kluczy będzie działać tak samo, jak ten wygenerowany automatycznie przez portfel.
Jak widać, procedura uzyskiwania kluczy prywatnych i publicznych jest dość skomplikowana. W rzeczywistości jednak nie trzeba się o nic martwić. Portfel robi to wszystko za Ciebie. Jedyne co musisz zrobić to pilnować odpowiednio swojej frazy seed i odbierać kryptowaluty na wygenerowane adresy.
Tak jak społeczność kryptowalutowa często myli pojęcia klucza publicznego i adresu portfela, tak samo często dochodzi do nieporozumień w przypadku takich terminów jak klucz prywatny i seed. Aby zrozumieć, dlaczego coś takiego jak seed właściwie istnieje, musimy zacząć od wyjaśnienia, czym jest tak zwany portfel hierarchicznie deterministyczny (HD).
Na początek tak jak wcześniej ograniczymy się do prostego, modelowego przykładu. Jeśli chcesz wysłać jakieś kryptowaluty ze swojego tradycyjnego portfela do znajomego, to wysyłasz je na jego adres publiczny w taki sam sposób, jak opisano w powyższym rozdziale.
Ale jeśli chcesz zwiększyć poziom anonimowości, to trzeba utworzyć więcej adresów kryptowalut. Ta sama sytuacja ma miejsce, gdy chcesz się połączyć z inną siecią kryptowalut. Na przykład, jeśli założyłeś portfel MetaMask w standardowy sposób, to znaczy w blockchainie Ethereum, ale chcesz połączyć się z siecią Polygon. Chociaż do portfela MetaMask logujesz się za pomocą jednego jedynego hasła i seeda, posiadasz wiele adresów kryptowalutowych, co najmniej jeden w każdej sieci.
Gdybyś musiał być na bieżąco ze wszystkimi kombinacjami kluczy publicznych i prywatnych, byłoby to co najmniej bardzo niewygodne.
Właśnie z tego powodu stworzono hierarchicznie deterministyczne portfele, które dla każdej instancji (kombinacji kluczy prywatnych i publicznych, które tworzą adres) używają pojedynczej kombinacji wartości, która jest określana jako seed.
Tak więc po utworzeniu portfela HD (np. MetaMask) zostanie wyświetlony seed, który należy zapamiętać lub przechowywać w bezpiecznym miejscu. Na podstawie tego seeda wygenerowany zostanie deterministycznie unikalny klucz prywatny, z którego powstanie klucz publiczny, a z klucza publicznego adres kryptowalutowy, jak zresztą już wyjaśniliśmy powyżej. Kiedy zechcesz założyć nowy adres, to z tej samej frazy seed wygenerowany zostanie nowy klucz prywatny, nowy klucz publiczny i nowy adres. I nagle wszystko staje się prostsze.
To właśnie dlatego fraza seed jest tak ważna – tylko za jej pomocą można uzyskać dostęp do wszystkich utworzonych kluczy prywatnych, a tym samym do wszystkich adresów kryptowalutowych.
Utrata frazy seed oznacza utratę samego rdzenia Twojego hierarchicznie deterministycznego portfela kryptowalut, a tym samym również utratę dostępu do wszystkich kluczy prywatnych.
Uwaga: Jeśli kiedykolwiek korzystałeś, na przykład, z portfela MetaMask w sieciach takich jak Ethereum, Polygon lub BNB Smart Chain w tym samym czasie, to z pewnością już zauważyłeś, że Twój adres publiczny jest taki sam we wszystkich tych sieciach. Jak to możliwe, skoro w poprzedniej części tekstu stwierdziliśmy, że w każdej sieci istnieje oddzielny adres kryptowalutowy?
BNB Smart Chain i Polygon są forkami Ethereum. Oznacza to, że wszystkie te sieci wykorzystują algorytm ECDSA do generowania kluczy publicznych z kluczy prywatnych oraz algorytm keccak256 do generowania adresów publicznych z kluczy publicznych, czego wynikiem jest interesujące nas ostatnie 20 bajtów – jest to wygenerowany z klucza publicznego adres publiczny i jednocześnie powód, dla którego jest on krótszy niż klucze publiczne i prywatne.
Ponieważ więc adres jest zawsze generowany przy użyciu tych samych algorytmów i na samym początku z tej samej frazy seed (z jednego portfela MetaMask jako całości), jest on taki sam, nawet jeśli istnieje we wszystkich sieciach osobno.
Jeśli chcesz się o tym przekonać sam, dodaj do portfela MetaMask na przykład Harmony, który korzysta z zupełnie innych algorytmów i ścieżki. Adres, klucz publiczny i prywatny będą różne, nawet jeśli pochodzą z tego samego seeda.
Największym problemem podczas pracy z kryptowalutami jest ich bezpieczeństwo. Jak już wiesz, jeśli ktoś dostałby w swoje ręce Twoje klucze prywatne lub frazę seed, zyskałby kontrolę nad Twoimi adresami i mógłby okraść Cię ze wszystkich Twoich kryptowalut. Dlatego ważne jest, aby poświęcić szczególną uwagę ich bezpieczeństwu.
Portfele, które zarządzają kluczami i operacjami z nimi, można podzielić na dwie główne kategorie:
Portfele kustodialne mają tę cechę, że biorą na siebie odpowiedzialność za bezpieczeństwo kryptowalut. Nie możesz zgubić swoich kluczy prywatnych, ponieważ po prostu nie masz do nich dostępu. W razie wystąpienia jakiegoś problemu, o ile udowodnisz swoją tożsamość, operator portfela (np. giełda) pozwoli Ci odzyskać Twoje kryptowaluty.
Z drugiej jednak strony, takie rozwiązanie niweluje jedne z najważniejszych cech kryptowalut, a mianowicie brak możliwości cenzurowania transakcji, decentralizację i niezależność. To nie Ty jesteś właścicielem cyfrowych monet, ale operator portfela. O ile zechce, operator ten będzie mógł ingerować w Twoje transakcje. Może on również skonfiskować Twoje środki. Warto zaznaczyć, że to właśnie stąd wzięło się powiedzenie: “not your keys, not your coins”.
Portfele niekustodialne pozwalają użytkownikom być w pełni odpowiedzialnymi za swoje klucze prywatne. Korzystając z takiego portfela, tylko Ty jesteś w ich posiadaniu. Istnieje więc możliwość, że jeśli popełnisz błąd, możesz bezpowrotnie stracić swoje cyfrowe monety. Z drugiej jednak strony, to ty masz nad nimi 100% kontrolę.
Dodatkowy podział portfeli niekustodialnych
Portfele te są dalej podzielone na:
Portfele programowe zwykle przybierają postać aplikacji mobilnej lub programu komputerowego. Należą do nich takie portfele jak Coinomi, MetaMask, Electrum, BlueWallet, Wallet of Satoshi, lub Coinbase Wallet.
Generalnie wyróżniają się one prostotą i są przyjazne dla użytkownika. Problem polega jednak na tym, że urządzenie może zostać zainfekowane wirusem lub innym szkodliwym oprogramowaniem, które może w jakiś sposób wydobyć klucze z urządzenia i okraść użytkownika z monet. W przeszłości zdarzało się nawet, że klucze prywatne portfeli programowych były archiwizowane w iCloud, opuszczając w ten sposób urządzenie użytkownika. Dotyczyło to na przykład wspomnianego już kilkakrotnie portfela MetaMask.
Z powyższych powodów – szczególnie jeśli chodzi o transakcje kryptowalutowe o wyższej wartości – zaleca się korzystanie z portfela sprzętowego. Weźmy na przykład czeski Trezor lub francuski Ledger. Urządzenia te są prostymi, małymi komputerami przypominającymi pendrive’y, które umożliwiają podpisywanie transakcji w ramach samego portfela, przy czym do urządzenia, do którego portfel jest podłączony, wysyłany jest tylko sam podpis.
W rezultacie Twoje klucze nigdy nie opuszczają bezpiecznego, zaszyfrowanego środowiska portfela i nigdy nie mogą zostać skradzione.
Podsumowując, klucz prywatny to kod, który powinien być przechowywany w możliwie najbezpieczniejszym miejscu i który powinien znać tylko użytkownik/właściciel kryptowalut. Umożliwia on dysponowanie kryptowalutami przechowywanymi na Twoich adresach. O to, jak przechowywać klucz prywatny, nie musisz się martwić – zadba o to sam portfel.
Tym, o co jednak rzeczywiście musisz się martwić, to Twoja fraza seed, czyli fraza, z której generowany jest klucz prywatny. Każdy klucz prywatny jest generowany deterministycznie z jego frazy seed, więc nawet jeśli masz na przykład portfel MetaMask i przechowujesz w nim wiele sieci, co przekłada się na wiele adresów, a tym samym wiele kluczy prywatnych, potrzebujesz tylko jednego seeda, aby uzyskać dostęp do nich wszystkich.
Z każdego klucza prywatnego generowany jest klucz publiczny, a z samego klucza publicznego generowany jest adres portfela. Adres ten jest w pełni publiczny i możliwy do wyszukania w blockchainie.
Obecnie kryptografia asymetryczna wykorzystująca 128-bitową lub 256-bitową entropię danych jest uważana za wystarczającą.
Jeśli ktoś próbowałby odgadnąć Twój 256-bitowy klucz prywatny, musiałby trafić w jedną z 115 792 089 237 316 195 423 570 985 008 687 907 853 269
984 665 640 564 039 457 584 007 913 129 639 936 kombinacji, co jest prawie niewyobrażalne.
Dopóki ktoś na świecie nie zbuduje komputera kwantowego, można z niemal 100% pewnością stwierdzić, że nikt na świecie nie będzie w stanie odgadnąć klucza prywatnego lub frazy seed, o ile nie przeznaczy na to dziesiątek lat czasu. Tak więc bezpieczeństwo Twojego portfela zależy wyłącznie od Ciebie i tego, jak bezpiecznie potrafisz strzec swoich kluczy prywatnych (a dokładniej fraz seed).
W przypadku hierarchicznie deterministycznych portfeli parametr ścieżki zawiera kilka charakterystycznych wartości, których modyfikacja skutkuje wygenerowaniem całkowicie odmiennych sekwencji kluczy prywatnych. Ścieżki te wykorzystywane są m.in. do oddzielania zestawów kluczy prywatnych dla poszczególnych blockchainów wykorzystujących te same algorytmy, wyłącznie w celu ich rozróżnienia z różnych powodów, np. kluczy prywatnych wykorzystywanych w sieci rzeczywistej (mainnet) i kluczy wykorzystywanych w sieci testowej (testnet). Przykłady obejmują Ethereum, Ethereum Classic lub jego sieci testowe:
Każda liczba oznacza coś innego. Pierwsza, 44, reprezentuje standard BIP 44 (Bitcoin Improvement Proposal), który określa hierarchię dla portfeli HD z parametrem konta, rozszerzając w ten sposób wcześniejszy BIP 39 oraz BIP 32.
BIP jest odpowiedzialny za sposób, w jaki wartości z seeda rozgałęziają się podczas generowania kluczy prywatnych. Chociaż w nazwie ma “Bitcoin”, ma również zastosowanie do innych kryptowalut, jak widać powyżej. Informacje o innych parametrach ścieżki, takich jak typ kryptowaluty, numer konta i indeksowanie, można znaleźć tutaj.
Post discussion: 0 comments
Nobody has commented yet. Log in and be the first! Post your thoughts and start the discussion.