Witaj w społeczności kryptowalutowej

Na tej stronie znajdziesz informacje o tym jak zacząć swoją przygodę z kryptowalutami oraz jakie zagrożenia możesz spotkać na swojej drodze. Mam nadzieje że ta strona pomoże Ci i unikniesz nieprzyjemnych sytuacji na rynku kryptowalut

Czym są klucze publiczne i prywatne ?

Tworząc portfel w oparciu o implementacje technologii Blockchain, czyli kryptowaluty – generujemy zestaw kluczy, służący za cyfrowy podpis. Zrozumienie zasady działania kluczy jest bardzo ważne, bo dzięki nim odbieramy i kontrolujemy swoje środki, natomiast bez nich narażeni jesteśmy na stratę naszych kryptowalut. Warto wiedzieć zatem dlaczego ich kontrolowanie jest takie ważne.

Klucz publiczny

Gdy ktoś chce przesłać Ci jakąkolwiek kryptowalutę, potrzebuje do tego Twojego klucza publicznego, a dokładniej adresu publicznego. Można się nim dowolnie dzielić, ponieważ jedyną funkcją, jaką spełnia jest możliwość przesłania na niego środków z innego portfela. Klucz publiczny, sam w sobie jest bardzo długim ciągiem znaków, dlatego odpowiednio zahashowany, występuje w postaci adresu, np:

* 1FwdPTJ7jU9j8ed4BqJJj8VmhkigXGNHut – publiczny adres Bitcoin
* 0xC0f57c63488bb6309b596FcC635Ca0A3F4C67a27 – publiczny adres Ethereum

Ważne jest to, żeby pamiętać że nie można przesyłać każdej kryptowaluty na wszystkie adresy, ponieważ portfel, aplikacja lub giełda musi być w stanie odczytać token w danym standardzie, by go dla nas wyświetlić i udostępnić nam możliwość zarządzania nim.

Precyzując – jeśli wyślesz Ethereum na adres BTC lub Bitcoina na adres ETH to na zawsze utracisz swoje środki, ponieważ żaden portfel np. bitcoinowy nie odczyta zupełnie innego standardu, w którym napisana została dana kryptowaluta.

Natomiast, jeśli prześlesz na adres Ethereum tokeny zbudowane w oparciu o ten blockchain (standard ERC20), to będziesz mógł je odczytać – wystarczy, że użyjesz aplikacji, która daje taką możliwość. Pewność, że dany token posiada taki standard da Ci wejście na oficjalną stronę projektu i spojrzenie np. w whitepaper.

Klucz prywatny

Klucz prywatny oprócz bycia naszym hasłem, służy również do podpisania każdej transakcji. Zakładając, że takim kluczem nie powinniśmy się z nikim dzielić (skutkowałoby to udostępnieniem hasła do naszego portfela), cała sieć blockchain ma pewność, że środki zostały wysłane przez właściciela danego portfela.

Różni dostawcy portfeli, używają różnych funkcji hashujących, co skutkuje tym, że nasz klucz prywatny może występować w postaci zaszyfrowanej, jako np.

– ciąg następujących po sobie słów, w odpowiedniej kolejności (tzw. seed)
* cool pet hash motivate free gun pot stream doll great boring squeeze

– ciąg znaków, posiadający różną długość
* 6ed7jg98kl8d9a3lkgjd894hvu7s34lk29aowyf93lbig8a03ygee8dle3927gyd

Gdybyśmy podczas generowania nowego portfela, otrzymywali nasz klucz prywatny w postaci niezaszyfrowanej, otrzymalibyśmy ogromną ilość znaków, którą ciężko byłoby nam gdziekolwiek przepisać.

Ułatwiając zrozumienie pary kluczy, można rzec, że klucz (adres) publiczny to nasz numer konta bankowego, natomiast klucz prywatny, to nasze hasło, którego używamy by zalogować się do konta i uzyskać dostęp do naszych środków.

Należy dodać, że nie wszystkie portfele i aplikacje dają nam możliwość wygenerowania kluczy prywatnych. W takim przypadku to właściciel, usługodawca danego portfela je kontroluje i tylko udostępnia nam możliwość korzystania z naszych środków przez swoją aplikację, które tak naprawdę to on kontroluje. Nie należy od razu zakładać, że usługodawca ma złe zamiary aczkolwiek dla spokoju ducha warto wybierać portfele i aplikacje, które przy tworzeniu konta dają nam zapisać i kontrolować nasz klucz prywatny.

Kody QR

Klucze publiczne oraz prywatne mogą występować również w postaci kodów QR.
Dzięki temu, skanując kod, możemy bez przepisywania, czy wklejania przesłać na ten adres środki, natomiast klucz prywatny możemy w ten sposób zaimportować do jakiejś aplikacji lub serwisu, który daje możliwość importu, w celu uzyskania dostępu do naszych środków.

Ta metoda jest użyteczna, gdy chcemy np. dostać się do naszego portfela, który zapisany jest w postaci wygenerowanego paper wallet, czyli portfela papierowego.

Kody QR spełniają bardzo przydatną rolę w świecie kryptowalut, ponieważ możemy wpisać dowolną kwotę, którą chcemy otrzymać na swój portfel i druga strona po zeskanowaniu kodu (co trwa sekundę) może od razu wysłać nam ustaloną przez nas sumę. Takie rozwiązanie może doskonale sprawdzić się np. w restauracjach, gdzie produkty mają konkretne ceny.

*Zdjecie QR oraz wszystkie adresy w tym artykule sa przykładowe i nie należy na nie wpłacać żadnych środków

Aspekty techniczne

Adres, jak już zostało zasygnalizowane, to unikalny ciąg alfanumeryczny, składający się z 26-34 znaków pozwalający na wysyłanie i odbieranie bitcoinów. Pierwotnie adresy rozpoczynały się zawsze od liczby 1 lub 38. Adresy rozpoczynające się od cyfry 1 (ang. Pay to PubkeyHash) wymagają znajomości jednego klucza prywatnego powiązanego z danym adresem w celu wydania środków znajdujących się pod danym adresem. Przykładowy adres prezentuje się następująco: 1ChdCVGXzGcNiQeGPbxYnCRdMoWpy5RT8. Natomiast adresy rozpoczynające się od cyfry 3 (ang. Pay to ScriptHash) wymagają znajomości n z m kluczy prywatnych powiązanych z danym adresem w celu wydania środków znajdujących się pod danym adresem. Zostały one utworzone w trakcie rozwoju sieci Bitcoin w celu wprowadzenia możliwości wykonywania transakcji kontrolowanych przez grupę użytkowników. Przykładowy adres tego typu wygląda następująco: 34fvjBrXKDdXvcYa5apMA3wQRx1MD9MArr. Adresy zawierają wielkie i małe litery oraz cyfry alfabetu łacińskiego z wykluczeniem cyfry 0, wielkiej litery O, wielkiej litery I i małej litery l. Rozwiązanie to ma na celu zminimalizowanie pomyłek przy prezentowaniu adresów. Adres tworzony jest na podstawie klucza publicznego za pomocą kilkukrokowego algorytmu, wykorzystującego w swojej strukturze dwie kryptograficzne funkcje skrótu: RIPEMD-160 oraz SHA-256. Szczegółowy schemat tworzenia adresu z klucza publicznego przedstawia się następująco.

Niech klucz publiczny w notacji heksadecymalnej ma następującą postać:

044C32014849A98AA9B0236E218DC75168BA157F6827823555F6BE486DD0E382678E9D1A3619A7DCCFC05293E80DA0C045B2ACD0A0E798E43BBD2A78DD1900B6FF

Dla powyższego ciągu wyliczona zostaje wartość kryptograficznej funkcji skrótu SHA256:

EBE59D578A805C11989E8D44195DE051B8DCA17CC408D3F4BC1965DFD630C4BB

Następnie dla ciągu otrzymanego w punkcie 2 wyliczona zostaje wartość kryptograficznej funkcji skrótu RIPEMD160:

748CFF25ACC7F44592426BE2D19D826301F8712B

Do otrzymanego w punkcie 3 ciągu zostaje dołączony ciąg 00 z lewej strony:

00748CFF25ACC7F44592426BE2D19D826301F8712B

Następnie dla ciągu otrzymanego w punkcie 4 wyliczona zostaje wartość kryptograficznej funkcji skrótu SHA256:

DD1AEE794DDAC38FBFBD7DD89316A373C9BE180FF7BC7C349F5D588E52057329

Następnie dla ciągu otrzymanego w punkcie 5 wyliczona zostaje wartość kryptograficznej funkcji skrótu SHA256:

46F18AF57262C8C005A8FD9AEDD4EA720E92DD0DC4733C2FB616D0900926693C

Z ciągu otrzymanego w punkcie 6 brane zostaną 4 pierwsze bajty (8 znaków):

46F18AF5

Które następnie są dołączone z prawej strony ciągu otrzymanego punkcie 4:

00748CFF25ACC7F44592426BE2D19D826301F8712B46F18AF5

Ciąg otrzymany w punkcie 8 jest przekształcany za pomocą kodowania Base58:

1BdGHscTsHRPNRVzX29r1TMLBYWFKPTDjJ

Otrzymany ciąg jest adresem BTC.

Przyczyny które stoją za tak, wydawało by się, złożonym algorytmem generowania adresu z klucza publicznego są co najmniej trzy. Po pierwsze bezpieczeństwo. Zastosowanie aż dwóch różnych funkcji skrótu podyktowane zostało obawą że jeden z tych algorytmów mógłby zostać złamany i atakującemu udało by się odtworzyć klucz publiczny z adresu. Prawdopodobieństwo złamania dwóch różnych jednokierunkowych funkcji skrótu (na ich jednokierunkowość, czyli znalezienie przeciwobrazu) jest praktycznie zerowe. Po drugie wygoda. Adresy długości 26-35 znaków są wygodniejsze do zarządzania niż klucz publiczny o długości kilkukrotnie większej. Po trzecie redukcja liczby pomyłek. Zastosowano kodowanie Base58 niezawierające w wyniku kodowania kilku łatwych do pomylenia znaków (0, O, I, l).

Mimo, że kryptograficzne funkcje skrótu są jednokierunkowe to jednak co do swojej natury nie są wolne od kolizji, czyli istnienia różnych ciągów wejściowych dających ten sam skrót. Wynika to z faktu, iż liczba możliwych wejść funkcji skrótu jest nieograniczona, natomiast liczba możliwych wyjść jest skończona i ograniczona stałą liczbą bitów wyjściowych dla danej funkcji (na przykład funkcja skrótu MD5 generuje skróty 128-bitowe, co implikuje 2128 możliwych skrótów). Oczywiście sam fakt nieuniknioności kolizji nie oznacza łatwości w jej znalezieniu. O ile dla kryptograficznych funkcji skrótu które są złamane (na przykład funkcja skrótu MD4) łatwo jest znaleźć kolizje, o tyle na dzień dzisiejszy dla algorytmów zastosowanych w protokole przekształcania klucza publicznego w adres, a więc funkcji SHA256 oraz RIPEMD160 żadne kolizje nie zostały znalezione.

Źródła: Businessbay.pl , Dr inż Przemysław Rodwald – Bitcoin z perspektywy informatyka śledczego