III.

Jak bezpiecznie wyznaczyć seed?

który łatwo zapamiętasz

        Z tego co już ustaliliśmy, szukając rozwiązania musimy spełnić dwa na pozór wzajemnie wykluczające się warunki – nasza sekwencja powinna być łatwa do odtworzenia z pamięci, a jednocześnie całkowicie losowa.
Niemożliwe? Spokojnie. Przy odpowiedniej interpretacji możemy przyjąć że niemal wszystko co nas otacza jest jakimś nośnikiem informacji. Każda gazeta, zdjęcie, obraz, każda treść i informacja dostępna w przestrzeni publicznej, nie ważne czy gdziekolwiek wydrukowana, czy ogólnie znana. Takimi powszechnie znanymi, czyli możliwymi do bezproblemowego odtworzenia w dowolnym miejscu i czasie informacjami mogą być wszelkie stałe fizyczne i matematyczne, ciągi i szeregi, wyznaczone naukowo odległości kosmiczne, stałe chemiczne itd. Wszędzie na świecie możemy ustalić te dane bez konieczności ich notowania i noszenia przy sobie. Nie musimy ich zapamiętywać. A to dla nas ogromna zaleta i doskonały punkt wyjściowy do zadania które stawiamy sobie za cel. O ile codzienne wydania gazet są czymś ulotnym, o tyle śmiało możemy przyjąć że książki, szczególnie znane dzieła i światowe bestsellery również będą dostępne wszędzie na świecie. W tym względzie, biorąc pod uwagę kwestię dostępności danej książki w skali globalnej, publikacje i wydania angielskojęzyczne mogą okazać się dla nas szczególnie przydatne. Teraz wystarczy tylko wybrać z niewyobrażalnie licznej puli jedną taką pozycję, określić do niej prosty do zapamiętania, pozostający jedynie w naszej głowie schemat-klucz, na podstawie którego wyznaczymy ciąg wyrazów, i już mamy nasz własny seed. Taki, który o ile zajdzie potrzeba zawsze i wszędzie odtworzymy przy pomocy ołówka i kartki, bez konieczności przechowywania go ani zapamiętywania. Możliwości są praktycznie nieskończone, a jedynym ograniczeniem pozostają nasza wyobraźnia i kreatywność.

Dla przykładu weźmy jedną z moich ulubionych pozycji literackich, słynną na całym świecie Trylogię Millennium Stiega Larssona. Jest to światowy bestseller z roku 2009 sprzedany wówczas w ilości 45 milionów egzemplarzy w 63 krajach, wielokrotnie wznawiany, a obecnie dostępny nawet online. Nie mam najmniejszych wątpliwości że jeśli tylko zajdzie taka potrzeba, to zawsze będę w stanie dotrzeć do treści tej książki w dowolnym zakątku cywilizowanego świata.
Tutaj uwaga – fakt że książka jest jedną z moich ulubionych w zasadzie powinien ją automatycznie zdyskwalifikować. Osoby które mnie znają mogłyby się domyślić że przypuszczalnie jest ona elementem budowy klucza. Wybór powinien być neutralny i obojętny, a ten jest niczym innym jak właśnie produktem ubocznym moich indywidualnych schematów i zależności, w tym konkretnym przypadku wynikających z upodobań literackich. Jest to pułapka, w którą łatwo wpaść a której ze względów bezpieczeństwa należy unikać.
Ale nawet jeśli ulegnę pokusie i na tym etapie dokonam tak niefortunnego wyboru, kolejny krok powinien skutecznie zniwelować wszelkie ryzyko.

Wybieram tom 1, wydanie angielskie, czyli „The girl with the dragon tattoo”. Teraz element całkowicie losowy, i tak naprawdę jedyna rzecz która będzie wymagała ode mnie zapamiętania. Żeby skupić się na przypadkowym fragmencie tekstu, wybieram na chybił-trafił, dajmy na to rozdział 5. I żeby jeszcze dodatkowo wzmocnić element przypadku, niech to nie będzie sam początek rozdziału, ale jakiś fragment rozpoczynający się od określonego miejsca. Wybierzmy losową liczbę, na potrzeby tego przykładu dla uproszczenia niech to będzie liczba 50, ale pamiętaj że równie dobrze może to być liczba każda inna, np. 1410, którą też łatwo zapamiętasz z uwagi na rok Bitwy pod Grunwaldem, a która sprawi że wzorzec do naszego klucza jeszcze bardziej zanurzy się w głąb przypadkowego fragmentu książki. Zatem przyjrzyjmy się bliżej temu co wylosowaliśmy. Początek piątego rozdziału to:

„Thursday, December 26
For the first time since he began his monologue, the old man had managed to take Blomkvist by surprise. He had to ask him to repeat it to be sure he had heard correctly. Nothing in the cuttings had hinted at a murder. It was September 24, 1966. Harriet was sixteen and had just begun her second year at prep school. It was a Saturday, and it turned into the worst day of my life. I've gone over the events so many times that I think I can account for what happened in every minute of that day - except the most important thing.(...) ”

Każdy ciąg znaków z pominięciem znaków interpunkcji traktuję jako osobny wyraz, ale pamiętaj że Ty możesz przyjąć dowolnie inną własną zasadę. Odnajduję zatem wyraz numer 50, w tym przypadku jest to liczba 24. Od tego miejsca wybieram kolejne 23 wyrazy – jest to fragment zaznaczony innym kolorem. Dalej wykorzystajmy najbardziej banalny sposób transformacji wyrazów na liczby. Każdej kolejnej literze alfabetu przypiszmy jej numer porządkowy.
Mamy zatem:

A
1
B
2
C
3
D
4
E
5
F
6
G
7
H
8
I
9
J
10
K
11
L
12
M
13
N
14
O
15
P
16
Q
17
R
18
S
19
T
20
U
21
V
22
W
23
X
24
Y
25
Z
26

Następnie każdy wyraz z wylosowanego fragmentu zamieniamy na liczbę poprzez proste sumowanie:

24
-
24
1966
-
1966
harriet
8+1+18+18+9+5+20
79
was
23+1+19
43
sixteen
19+9+24+20+5+5+14
96
and
1+14+4
19
had
8+1+4
13
just
10+21+19+20
70
begun
2+5+7+21+14
49
her
8+5+18
31
second
19+5+3+15+14+4
60
year
25+5+1+18
49
at
1+20
21
prep
16+18+5+16
55
school
19+3+8+15+15+12
72
it
9+20
29
was
23+1+19
43
a
1
1
saturday
19+1+20+21+18+4+1+25
109
and
1+14+4
29
it
9+20
29
turned
20+21+18+14+5+4
82
into
9+14+20+15
58

W tym momencie śmiało moglibyśmy już wykorzystać uzyskane wyniki jako indeksy naszych kolejnych wyrazów seed w zbiorze BIP39. Ale jak pewnie niektórzy zauważają zakres liczb z uwagi na 26 elementowy zbiór alfabetu i średnią kilkuliterową długość wyrazu jest dość zawężony i oscyluje w przedziale 1 – 109. Liczba 1966 na pozycji drugiej jest szczęśliwym wyjątkiem, ale pamiętajmy że w tekstach liczby występują statystycznie rzadko i w Twoim indywidualnym przypadku zapewne jej akurat zabraknie. Jeśli ktoś chce to poprawić, może przeprowadzić dodatkową operację matematyczną, chociaż z punktu widzenia bezpieczeństwa na tym etapie mamy już pełną losowość i nie jest to konieczne. Zatem żeby bardziej rozciągnąć uzyskany wynik na 2048 elementowy zbiór, do każdego kolejnego elementu dodajmy wielokrotność jakiejś liczby. Niech to będzie 40. Czyli do wyniku pierwszego dodajemy 40, do drugiego 80 (2 razy 40), do trzeciego 120 (3 razy 40) itd. Po takiej dodatkowej operacji otrzymujemy końcowy indeks BIP39, który wyznacza nam odpowiednie słowo:

24
64
among
1966
2046
zero
79
199
boat
43
203
bone
96
296
ceiling
19
259
cake
13
293
cause
70
390
cost
49
409
credit
31
431
cupboard
60
500
dinosaur
49
529
dragon
21
541
drum
55
615
error
72
672
fault
29
669
fatal
43
723
fog
1
721
foam
109
869
hold
29
819
green
29
869
hold
82
962
join
58
978
kick

Dla otrzymanego zestawu wyliczamy ostatni wyraz i wybieramy jedną z 8 możliwości. W oparciu o przykład z poprzedniej strony wiemy już że jednym z wyników jest słowo agent.

Tym oto sposobem uzyskaliśmy własny całkowicie bezpieczny seed. Jego obiektywna losowość wynika z przypadkowo (bądź nie) wybranej książki oraz całkowicie przypadkowo wybranego fragmentu jej tekstu.
Nawet jeśli książka jest Twoją ulubioną i można ją z Tobą skojarzyć, to w dalszym ciągu całkowicie losowo wybrany 23 wyrazowy fragment jej tekstu gwarantuje bezpieczeństwo wygenerowanego w ten sposób zestawu słów.

Zwróćmy uwagę że zapamiętanie otrzymanej sekwencji słów jest równie trudne, co dowolnie innej zaproponowanej Ci przez wbudowany generator Ledger Nano. To najlepszy dowód na to że jest ona przypadkowa i bezpieczna. Ale różnica polega na tym że teraz już wcale nie musisz jej ani zapamiętywać, ani nigdzie zapisywać. Odtworzysz ją przy pomocy ksiażki, kartki i ołówka kiedy tylko zajdzie taka potrzeba. A jedyne co musisz w tym celu zapamiętać to trzy liczby:

5
numer rozdziału
50
wyraz w rozdziale stanowiący początek fragmentu tekstu
40
składnik dodawany do indeksu, wymnażany uprzednio przez liczbę porządkową każdego wyrazu

Przyznasz że to znacznie łatwiejsze niż 24 wyrazy z czapki?
A i tak jest to przypadek skomplikowany bardziej niż to konieczne.
Trzeci składnik nie jest niezbędny, wprowadziliśmy go tylko dlatego żeby wykorzystać większy zakres zbioru BIP39.

Podsumujmy:
Tak naprawdę nie wybraliśmy powyższej sekwencji wyrazów. Ale samodzielnie określiliśmy algorytm jej wylosowania i teraz zawsze będziemy mogli ten proces odtworzyć.

Na koniec pamiętajmy że powyższy przykład to nie jest żaden szablon ani reguła. Twoja indywidualna metoda na każdym etapie może być inna. Nie musisz stosować jednorodnego fragmentu tekstu książki. Możesz np. startując z jej losowo wyznaczonego miejsca wybierać co drugi wyraz, co piąty, albo co sto dwudziesty siódmy. Możesz nie ograniczać się do 23 wyrazów ale jakiejś ich wielokrotności i w celu utworzenia indeksu pojedynczego słowa seed przetwarzać potem kilkuwyrazowe zestawy. Wyrazy możesz wybierać idąc do tyłu a nie do przodu i tylko Ty będziesz o tym wiedział. Kolejnym literom alfabetu nie musisz przypisywać kolejnych liczb, ale np. jakieś wielokrotności jak 5, 10, 15, 20.... albo kolejne liczby pierwsze. Możliwości indywidualnej modyfikacji są praktycznie nieograniczone - to jedynie kwestia wyobraźni. Będzie to wtedy Twój całkowicie autorski, niepowtarzający się nigdzie indziej schemat, a jednocześnie w dalszym ciągu metoda gwarantująca łatwe odtworzenie zestawu słów bez konieczności ich bezpośredniego zapamiętywania ani zapisywania.

Inny przykład - zamiast bazy wyjściowej w postaci książki użyj jakiegoś serialu telewizyjnego. Seriale telewizyjne często składają się z dziesiątek albo i setek odcinków. A odcinki najczęściej mają swoje tytuły. Metodą analogiczną do zaprezentowanej wyżej możesz przetwarzać w całości tytuł każdego odcinka na indeks pojedynczego słowa seed. W Polsce i na całym świecie powstały dziesiątki tysięcy seriali. Sobie tylko znaną metodą możesz wybrać 23 odcinki jednego z nich, a każdy pojedynczy tytuł zamienić na jedno słowo. Możesz opierać się na współczesnych produkcjach, ale w Internecie bez problemu zawsze odszukasz tytuły odcinków Columbo z lat 70, albo Bonanzy, który zadebiutował na ekranie w roku 1959, a o którym dzisiaj już niewielu pamięta. Nie musisz niczego pamiętać poza swoją własną regułą wyboru odcinków oraz sposobem wyliczania indeksu seed. Wskazane jest tylko żeby unikać tłumaczeń na język polski bo te w zależności od źródła bardzo często mogą się różnić. Bezpiecznie jest zawsze opierać się na oryginalnych tytułach wprost z języka produkcji.

Tylko Twoja wyobraźnia ogranicza Cię w kwestii wyboru bazy do wygenerowania seed. Może nią być niemal wszystko. Nie musisz szukać ciągów literowych, dane liczbowe jak wspomnieliśmy na początku są równie dobre. I wcale nie chodzi tu o tablice matematyczno-fizczne, znane szeregi liczbowe ani żadne stałe. Chociaż one wszystkie nadają się do naszego zastosowania doskonale. Niemniej im bardziej oryginalne i nieoczywiste źródło wybierzesz, tym lepiej. Co powiesz na nieśmiertelne i wszędzie na świecie dostępne statystyki FIFA albo UEFA? Weźmy jakiś turniej piłkarski, z dowolnego roku. Wybierzmy pierwsze strzelone w tym turnieju 23 bramki. To znowu tylko najprostsza z możliwości, bramki wcale nie muszą być pierwsze, mogą być ostatnie albo liczone od jakiegoś konkretnego meczu, wprzód albo w tył. Każda bramka została strzelona w określonej minucie, co zostało odnotowane w annałach. Ta informacja zawsze będzie możliwa do odszukania i nigdy się nie zmieni. Tym sposobem otrzymujesz już szereg 23 liczb z przedziału 1-120, które możesz wprost albo poprzez dowolnie wybraną matematyczną operację przerzutować na indeks BIP39.

Warto zaznaczyć, że nie musisz popadać w skrajność i jakoś szczególnie komplikować swojej metody poprzez tworzenie kolejnych wyszukanych etapów. Sam fakt że treść bazowa wybrana przypadkowo spośród ogromnej liczby możliwości znana jest tylko Tobie czyni Twój seed praktycznie niemożliwym do odgadnięcia.

Możliwości wyboru są nieskończone, a to oznacza że bezpieczeństwo takich rozwiązań jest bardzo wysokie i porównywalne z generatorami ciągów pseudolosowych. Jeśli masz co do tego wątpliwości, to odpowiedz sam przed sobą szczerze na pytanie – czy usiłując odgadnąć seed mojego portfela, zanim przeczytałeś powyższy akapit wpadłbyś na pomysł żeby operować na minucie strzelenia każdej z 23 pierwszych bramek na EURO 1988? :) Czy w ogóle przyszłoby Ci do głowy żeby opierać się na jakiejkolwiek archiwalnej statystyce sportowej, gdybym o tym wcześniej nie wspomniał? Założę się że nie.

Jeśli posiadasz gotówkę albo złoto, możesz ukryć je w sejfie, w szufladzie ze skarpetami, a choćby i zakopać w lesie. Natomiast jeśli dysponujesz środkami opartymi o technologię blockchain, możesz ukryć je w dowolnej treści nie pozostawiając przy tym żadnego śladu. To prawdziwie nowatorskie.
Pamiętaj tylko że bezwzględnym warunkiem bezpieczeństwa metody jest to żeby w jakimś elemencie opierała się ona na Twoim indywidualnym pomyśle. Pod żadnym pozorem nigdy nie powielaj w całości niczego co znalazłeś w Internecie. Cokolwiek zostało napisane w Internecie – na zawsze jest spalone. Bądź kreatywny.

recovery-phrase-is-invalid-retry

I. Czy można samodzielnie definiować seed?

Większość użytkowników portfeli sprzętowych Ledger Nano wcześniej czy później dochodzi do etapu w którym zastanawia się czy do zdefiniowania nowego portfela można użyć zestawu własnych słów seed. czytaj...

worthiness

II. Czy warto samodzielnie definiować seed?

Zacznijmy od tego że producent Legder Nano nie przewidział takiej możliwości. I zdecydowanie nie jest to przypadkowe. Bezpieczny zestaw słów to taki którego nie da się odgadnąć, czyli właśnie obiektywnie losowy. czytaj...