Tym razem będzie o tym, skąd bierze się klucz prywatny i jak można go przechowywać na papierze.
Od początku: czym jest klucz prywatny?
Klucz prywatny to liczba całkowita, numerek, taki jak np. 1, 5 albo 7934945354. To wszystko. To właśnie tej liczby używa się do podpisywania transakcji przed wysłaniem ich do sieci. Z takiego numerka można też uzyskać klucz publiczny, z którego można policzyć adres portfela.
Klucz prywatny jest generowany zwykle na podstawie jakiejś dużej losowej liczby przy pomocy specjalnego algorytmu, tzw. key derivation function (KDF).
Taka losowa liczba nazywa się seed.
Podsumujmy: mamy seed, z którego możemy wygenerować klucz prywatny. Z klucza prywatnego możemy policzyć klucz publiczny. Z klucza publicznego możemy dostać adres portfela.
Jak zapisać seed?
Jeżeli wszystkie inne rzeczy możemy obliczyć z seeda, to co za problem, żeby zapisać seed na karteczce i zrobić w ten sposób cold wallet?
Problem jest taki, że seed może wyglądać np. tak: 12812873409319507345246015276302446562317078488450394021472798763731407088474080663100124245880007384491417785266995288723775884046570689019332079690727196
Gdyby się uprzeć, można przepisać taką liczbę cyfra po cyfrze na kartkę, ale jest to niewygodne i łatwo się pomylić. A jeżeli się gdziekolwiek pomylimy, to cała kasa na portfelu idzie się grzać.
Jak zapisać inaczej?
Może da się taką liczbę zapisać inaczej, tak żeby była krótsza? Można to zrobić, używając zapisu heksadecymalnego (hex). Wtedy seed wygląda następująco:
0xf4a40548902a34bad0cf5a86662fd0ac8237e9438954594eb90516e3768c06855eabde8938b09e5a2cea6bd47fc26fc093312ca2dd8cedc6a2b0026d91203f1c
Urwaliśmy 27 znaków, ale dalej trudno to przepisać na kartkę. W sumie jak to się stało, że teraz mamy 27 „cyfr” mniej? Od normalnego zapisu liczby hex różni się tym, że ma dodatkowe cyfry: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.
Zamiast 10 cyfr arabskich w zapisie hex mamy 16 „cyfr” od 0 do F. Jeżeli chcemy zapisać np. liczbę 142, to wyjdzie nam 8E.
Dlaczego akurat tak? Każde następne miejsce w lewo to nie kolejna potęga dziesiątki, ale szesnastki. Zapis 8E znaczy mniej więcej tyle: 8 * 16 + 14 = 142. Używając zapisu hex, nawet w przypadku tak krótkiej liczby udało się zaoszczędzić jedną cyfrę.
Działa to tak, że im więcej „cyfr” mamy do dyspozycji, tym krótsze liczby możemy zapisywać.
bip bip bip-39
A gdyby tak zaszaleć i zrobić sobie nie 16, a 2048 cyfr :)? Właśnie o to chodzi w mnemonikach. Niestety, nie mamy tylu liter i cyfr arabskich, żeby wystarczyło na 2048 różnych wartości. Trzeba więc było czymś zastąpić pojedyncze znaczki i każdej z 2048 wartości przypisać jakieś słowo. Listę angielskich słów możesz znaleźć tu.
W takim zapisie „cyfra”: balcony to np. 142.
A jak wygląda zapis seeda, który wkleiłem wcześniej?
Seed: 12812873409319507345246015276302446562317078488450394021472798763731407088474080663100124245880007384491417785266995288723775884046570689019332079690727196
zgodnie z bip-39 wygląda tak:
travel air alone gap real priority lizard comic way pigeon strong faculty
Z małym zastrzeżeniem: mnemonik powstaje przez zamianę na słowa wygenerowanej losowej liczby.
Ten zapis widzisz powyżej.
Jednak podczas generowania seeda zgodnie z bip-39 mnemonik nie jest konwertowany do tradycyjnego systemu liczbowego, ale na samym zapisie słownym wykonywane są przekształcenia, by uzyskać seed.
(Więcej o tym w kolejnym poście)
Pewnie już widzisz, dlaczego warto zabawić się z tymi cyframi.
Seed w takiej postaci da się w łatwy sposób przenieść na kartkę papieru i sprawdzić, czy zapis jest poprawny.
I co dalej?
Możesz np. zapisać taką wersję seeda do klucza prywatnego na marginesie książki, a w pamięci komputera zostawić tylko adres portfela. Jeszcze nie widziałem, żeby ransomware zaszyfrował książkę i żądał okupu ;). Dodatkowo taki cold storage jest w 100% odcięty od jakiejkolwiek sieci. Problemem może być zniszczenie książki, ale możesz zapisać backup takiego seeda w kilku książkach :).
Używając tej metody zapisu, możesz podzielić klucz prywatny na części i dla bezpieczeństwa zapisać każdą z nich w innym miejscu. To już trochę paranoja, ale można :).
Samej metody zapisu można używać nie tylko do zapisywania seedów kluczy prywatnych, lecz także do innych dużych liczb (sam system zapisu, bez bip-39), np. numeru konta bankowego.
Mam nadzieję, że wiesz teraz coś nowego. Do przeczytania za tydzień!
W razie czego napisałem prosty kalkulator do przeliczania systemu dziesiętnego na „słowny”.
Kalkulator używa słów z bip-39 – możesz przetestować go poniżej.
Został napisany w JavaScript, więc ma swoje ograniczenia :).
Poklikaj i zobacz jak, będzie wyglądać przebieg samochodu zapisany słowami zamiast cyframi 🙂 np. 163 543
Jeżeli temat interesuje cię bardziej, to napisz, proszę, na adam@chaindev.pl
Dobrego dnia 🙂 !
Chcesz nauczyć się podstaw blockchaina?
Pobierz e-book.