Satoshi Nakamoto, twórca Bitcoina, zasługuje na uznanie z wielu powodów, a jednym z jego wyjątkowych osiągnięć jest system kodowania Base58. Dziś poświęcimy lekcję na omówienie tego zagadnienia.
Base-58 – definicja
Base-58 to grupa schematów kodowania binarnego na tekst, używana do reprezentowania dużych liczb całkowitych w postaci tekstu alfanumerycznego. W czasach, gdy Satoshi Nakamoto tworzył Bitcoina, istniejące wówczas systemy kodowania nie spełniały jego potrzeb. Z myślą o ułatwieniu konwersji często używanych elementów w Bitcoinie, takich jak klucze prywatne i adresy, Nakamoto wprowadził innowacyjne rozwiązanie w postaci Base-58.
Celem było stworzenie formatu, który umożliwiałby łatwą udostępnialność i użytkowanie kluczowych elementów w Bitcoinie. W efekcie tej innowacji inne kryptowaluty również zaczęły korzystać z Base-58, szczególnie w celu ułatwienia transakcji. Jednak zastosowanie tej technologii nie ogranicza się wyłącznie do obszaru kryptowalut. Base-58 znalazł swoje zastosowanie w różnych dziedzinach, obejmując klucze główne, adresy Ripple oraz krótkie adresy URL.
Jak działa Base-58?
Podstawa “Base” definiuje liczbę znaków używanych do reprezentowania danej liczby. Oto kilka przykładów:
- Base-2 (system binarny) reprezentuje liczby za pomocą dwóch znaków: 0 i 1.
- Base-10, znany jako system dziesiętny, używa 10 znaków (0-9).
- Base-16, czyli system szesnastkowy, wykorzystuje 16 znaków: 0123456789abcdef.
Base-58, podobnie jak poprzednie, używa 58 znaków. W swoim zakresie zawiera wszystkie znaki alfanumeryczne (0-9, a-z, A-Z), z pewnymi wyjątkami, takimi jak zera, wielkie litery i (I) oraz o (O), mała litera l oraz symbole + i /. Base-58 ma na celu reprezentowanie dużych liczb w krótkim formacie, unikając jednocześnie łatwo mylonych znaków.
Liczby zakodowane w Base-58 zajmują około 56.7% rozmiaru liczb dziesiętnych. Wyeliminowanie wizualnie podobnych znaków pomaga zminimalizować ryzyko błędów ludzkich podczas przepisywania czy odczytywania.
Base-58 znalazł zastosowanie w różnych dziedzinach, w tym w technologii blockchain, kryptowalutach oraz w wielu innych aplikacjach. Jego popularność wynika z umiejętności reprezentowania dużych liczb w zwięzłym formacie, jednocześnie redukując potencjalne błędy w interpretacji znaków.
Base-58 a kryptowaluty
Istnieje wiele wariantów Base-58 obecnie w użyciu. Najprostsze z nich zmieniają jedynie alfabet (często poprzez zmianę kolejności liter). Przykładem może być Ripple, które w swoim kodowaniu używa znaków, wydających się niemal losowe. Jednakże, zostały one dobrane w taki sposób, że pierwsze znaki ważnych sekwencji zawsze zawierają wspólną, znaczącą literę.
Innym przykładem jest Monero. Ta kryptowaluta koduje długie sekwencje w krótkie, 8-bajtowe bloki danych, co pozwala na deterministyczny rozmiar danych. Sam adres Monero ma długość 69 bajtów. Dzięki zastosowaniu kodowania blokowego i określonego schematu wypełniania, adresy Monero po zakodowaniu zawsze będą miały stałą długość 95 znaków.
Sumy kontrolne
W przypadku Base-58 istotnym elementem są sumy kontrolne, z których istnieją trzy różne schematy. Bitcoin wprowadził Base58Check, który pozwala na dodanie do danych prefiksu, będącego pojedynczym bajtem (technicznie nie jest to wymagane). Ten prefiks, razem z danymi, jest poddawany procesowi haszowania SHA256. Następnie otrzymany wynik przechodzi przez kolejne haszowanie SHA256, a pierwsze cztery znaki używane są jako suma kontrolna.
Inny przykład to schemat Base58Check wprowadzony przez Avalanche, który eliminuje drugie przejście przez SHA256.
Substrate SDK dla Polkadot wprowadza format adresu SS58, który korzysta z implikowanego algorytmu sumy kontrolnej opartego na Base58Check, ale z pewnymi istotnymi różnicami, takimi jak użycie Blake2 zamiast SHA2 dla funkcji haszowania kryptograficznego.
Warto zaznaczyć, że rozmiar sumy kontrolnej może wynosić od jednego do ośmiu bajtów, zależnie od używanego formatu adresu. Implementacja biblioteki Base-58 stanowi wyzwanie ze względu na konieczność manipulacji bardzo dużymi liczbami w procesie kodowania.
Wady Base-58:
- Wolne kodowanie: Kodowanie tekstowe w Base-58 wymaga wykonywania operacji podziału, co jest czasochłonne w porównaniu do operacji w innych systemach kodowania, takich jak Base64.
- Złożoność kodu: Implementacja kodowania Base-58 wymaga skomplikowanego konwertera zmieniającego bazę. Dodatkowo, wymaga to obsługi bibliotek liczb całkowitych o wysokiej precyzji.
- Mała użyteczność dla większych danych: Base-58 jest użyteczne głównie dla krótkich fragmentów tekstu, takich jak adresy portfeli Bitcoin. Dla większych danych może być praktycznie nieużyteczne.
Mimo tych wad, Base-58 ułatwia korzystanie z Bitcoina, przekształcając dane źródłowe adresu w format łatwy do odczytania. Na przykład, klucz ECDSA jest konwertowany na czytelny adres Bitcoinowy, składający się z 20 znaków. Base-58 jest również używane w kluczach prywatnych, co zwiększa użyteczność w kontekście kryptowalut.
Podsumowanie
Mimo istniejących wad, funkcja Base-58 jest niezwykle użyteczna. Nie tylko znajduje zastosowanie w branży kryptowalut, ale również w innych sektorach związanych ze zdecentralizowaną technologią.