Twórcy Bitcoina, czyli Satoshiemu Nakamoto możemy zawdzięczać wiele. Ma on również ogrom osiągnięć, z których nie tylko blockchain jest tym wyjątkowym. Kolejnym z nich jest Base-58. Jednak – o czym tak właściwie mowa? Na dzisiejszej lekcji zajmiemy się tym tematem.
Base-58 – definicja
Base-58 jest to grupa schematów kodowania binarnego na tekst. Używa się go do reprezentowania dużych liczb całkowitych, jako tekstu alfanumerycznego. Systemy kodowania, które istniały za czasów Satoshiego, nie nadawały się do jego pracy. Dlatego też, aby ją sobie ułatwić, Nakamoto wymyślił taką innowację.
Satoshi Nakamoto chciał mieć możliwość konwersji często używanych elementów w Bitcoinie, takich jak klucze prywatne i adresy na format, który jest łatwy do udostępnienia i użycia. Za jego przykładem, a w zasadzie – za przykładem Bitcoina poszło wiele kryptowalut i w swoim działaniu również używa Base-58, szczególnie do uproszczenia transakcji. Ale to nie koniec! Zastosowanie tej technologii znalazło miejsce we wszystkim, od haseł klucza głównego po adresy Ripple i krótkie adres URL.
Jak działa Base-58?
Podstawa „Base” to liczba znaków, których używamy do reprezentowania danej liczby. Mamy więc następująco:
- Base – 2 (znany nam system binarny), który reprezentuje dwa znaki – zera i jedynki.
- Base – 10, reprezentuje liczby przy użyciu 10 znaków (0-9).
- Base – 16, znana lepiej jako baza szesnastkowa używa 0123456789abcdef – używa 16 znaków.
- Base-58, analogicznie, używa 58 znaków. W swoim działaniu wykorzystuje wszystkie znaki alfanumeryczne (0-9, a-z, A-Z) z wyjątkiem łatwych do pomylenia znaków. Base-58 nie zawiera zer, wielkich liter i (I) i o (O), małych liter l oraz symboli + i /. Celem Base-58 jest reprezentowanie dużych liczb w krótkim formacie, przy jednoczesnym unikaniu łatwo interpretowanych znaków.
Liczby zakodowane w Base-58 mają 56.7% rozmiaru liczb dziesiętnych. Eliminacja wizualnie podobnych do siebie znaków zmniejsza szansę na ludzki błąd – czy to w przepisywaniu, czy czytaniu.
Jak wspominaliśmy w akapitach wyżej, Base-58 znalazł zastosowanie w wielu różnych aplikacjach. Oprócz technologii blockchain i kryptowalut znajdziemy go również w aplikacjach, jako kompaktowy sposób kodowania danych ścieżki lub nazwy pliku.
Base-58 a kryptowaluty
Istnieje wiele odmian Base-58, które są w użyciu. Najprostsze z nich po prostu zmieniają alfabet (zazwyczaj polega to na zmianie kolejności liter). Na przykład Ripple. W swoim kodzie używa znaków, które wydają się prawie losowe. Tak naprawdę zostały wybrane w taki sposób, że pierwsze znaki ważnych sekwencji zawsze mają wspólną, znaczącą literę.
Monero. Ta kryptowaluta koduje długie sekwencje w krótki, 8-bajtowych blokach. Dane mają deterministyczny rozmiar. Sam adres Monero ma długość 69 bajtów. Dzięki zastosowaniu kodowania blokowego i schematu wypełniania 69-bajtowe adresy Monero po zakodowaniu zawsze będą miały długość 95 znaków.
Sumy kontrolne
Ważnym aspektem przy Base-58 są sumy kontrolne. Mamy ich trzy różne schematy. Bitcoin wprowadził Base58Check. Pozwala on na dodanie do danych prefiksu, który w praktyce jest pojedynczym bajtem (technicznie nie ma takiego wymogu). Tak dodany prefiks, plus dane są haszowane przez SHA256. Otrzymany wynik jest jeszcze raz przepuszczany przez SHA256. Pierwsze cztery znaki są używane jako suma kontrolna.
Avalanche wprowadził prostszą wersję Base58Check. Eliminuje ona drugie przejście przez SHA256.
Kolejnym przykładem będzie Substrate SDK dla Polkadot, który wprowadza SS58. Jest to format adresu z implikowanym algorytmem sumy kontrolnej, opartym na Base58Check, ale z kilkoma istotnymi różnicami. Zamiast użycia SHA2, używa Blake2 dla kryptograficznej funkcji haszowania.
Musisz pamiętać, że rozmiar sumy kontrolnej może wahać się od jednego do ośmiu bajtów. Wszystko w zależności od używanego formatu adresu. Samym wyzwaniem przy implementacji biblioteki Base-58 jest to, że większość pracy powiązanej z kodowaniem, tak naprawdę obraca się wokół wykonywania prostych działań matematycznych na bardzo dużych liczbach.
Wady Base-58
Bazy potęgowe wprowadza się bardzo szybko. Tekst wejściowy jest potęgą dwóch liczb. Kodowanie tekstu może być więc postrzegane jako zmiana bazy między bazą 256 a nową. Dla bazy 64 możemy to zrobić za pomocą przesunięcia bitów i maskowania. Przy bazie 58 musimy jednak użyć podziału. Co czyni proces bardzo wolnym. Schemat kodowania Base-58 używa długiego podziału do zmiany bazy. Dlatego czyni go to użytecznym tylko dla małych fragmentów tekstu (np. adresy portfeli Bitcoin). W przypadku innych, większych miejsc jest praktycznie nieużyteczny. Otóż dlaczego:
- Kodowanie jest bardzo wolne.
- Samo kodowanie wymaga implementacji złożonego, zmieniającego bazę konwertera.
- Sam kod musi zawierać bibliotekę liczb całkowitych o wysokiej precyzji.
- Złożony kod możemy zaimplementować ręcznie, co jeszcze bardziej wydłuża nam czas kodowania.
Dlaczego więc Base-58 ułatwia nam korzystanie z Bitcoina?
Ponieważ przekształca dane źródłowe adresu w czytelny dla nas format. Na przykład klucz ECDSA jest zmieniony na łatwy do odczytania adres Bitcoina, który składa się z 20 znaków. Base-58 jest również wykorzystywany w kluczach prywatnych w formacie WIF. Inne kryptowaluty również używają tej funkcji.
Podsumowanie
Pomimo swoich wad, funkcja Base-58 jest niezwykle użyteczna. Swoje zastosowanie ma nie tylko w branży kryptowalut, ale również w innych sektorach poświęconych zdecentralizowanej technologii.