Súkromné kľúče
Pre ľudí, ktorí nie sú oboznámení s technickými základmi Bitcoinu, je kontraintuitívnym aspektom Bitcoinu to, „kde“ sa váš Bitcoin vlastne nachádza. Keď si ľudia predstavia peňaženku, pomyslia si „miesto, kde mám uložené svoje peniaze“. Vaša bitcoinová peňaženka v skutočnosti „nedrží“ vaše Bitcoiny, len uchováva vaše súkromné kľúče. Váš Bitcoin sú len záznamy údajov v blockchaine, ktoré hostia všetci účastníci siete. Keď idete minúť svoje bitcoiny, v skutočnosti navrhujete aktualizáciu údajov uložených v blockchaine. Súkromný kľúč je spôsob, akým protokol zabezpečuje, že vy a len vy môžete autorizovať aktualizáciu blockchainu, ktorá minie váš Bitcoin.
Aké sú teda vaše súkromné kľúče? Len veľmi veľké čísla. Extrémne veľké. Toto je súkromný kľúč v binárnom tvare:
1110001011011001011110111100000101000100000010001001111010111011010101110111001111111111101010111010010111010011101001110010100110111101000110000111110101111001101001011110011011101000001101101101110001101000110001111010001001001111011010101011001101101010
256 náhodných 1 a 0. Toto náhodné číslo nakoniec zabezpečí váš Bitcoin. Možno to nevyzerá ako veľa, ale práve jeho náhodnosť zabezpečuje bezpečnosť vašej peňaženky. Existuje takmer toľko možných súkromných kľúčov Bitcoinu, koľko je atómov vo viditeľnom vesmíre. Toľko čísel by musel počítač spočítať, aby vygeneroval a katalogizoval všetky potenciálne možné súkromné kľúče. Pokiaľ je proces použitý na generovanie kľúčov skutočne náhodný, vaše kľúče sú v bezpečí.
Takto vyzerá súkromný kľúč v šestnástkovej sústave (v binárnej sústave sa na zakódovanie čísla používajú dve číslice, 1 a 0, v šestnástkovej 16 číslic, 0–9 a A-F):
E2D97BC144089EBB5773FFABA5D3A729BD187D79A5E6E836DC68C7A24F6AB36A
Takto vyzerá súkromný kľúč v nekomprimovanom formáte WIF (Wallet Import Format):
5KYC9aMMSDWGJciYRtwY3mNpeTn91BLagdjzJ4k4RQmdhQvE98G
Formát WIF je spôsob, akým všetci komunikovali so svojimi súkromnými kľúčmi v prvých dňoch Bitcoinu. V tejto ére ste si mohli naraz vygenerovať jeden súkromný kľúč a potom ste z neho vygenerovali verejný kľúč. Proces generovania verejného kľúča je v podstate len násobenie veľmi veľkých čísel, ale je v tom trochu viac. Všetky verejné kľúče sú bodmi x a y na grafe znázorňujúcom veľmi, veľmi veľkú krivku, ktorá sa zacyklí sama do seba.
Na krivke grafu, v prípade Bitcoinu Secp256k1, sa nachádza bod nazývaný „bod generátora“. Tento bod generátora si možno predstaviť ako „základný bod“ na krivke Secp256k1. Je neoddeliteľnou súčasťou procesu generovania kľúčov a podpisovania pomocou nich. Práve toto je bod generátora pre krivku Bitcoinu:
G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
Ak chcete vygenerovať verejný kľúč zo súkromného kľúča, vezmete vygenerovaný súkromný kľúč a vynásobíte ho bodom generátora. To je všetko. Tým sa teraz na grafe vytvorí bod s matematickým vzťahom k vygenerovanému súkromnému kľúču, ktorý poznáte len vy.
Toto je nekomprimovaný verejný kľúč zobrazujúci body x aj y:
04C0E410A572C880D1A2106AFE1C6EA2F67830ABCC8BBDF24729F7BF3AFEA06158F0C04D7335D051A92442330A50B8C37CE0EC5AFC4FFEAB41732DA5108261FFED
Je veľmi bežné „komprimovať“ verejné kľúče v prípade, že s nimi komunikujete, tak, že sa uloží len súradnica x s bajtom, ktorý vám povie, či je súradnica y záporná alebo kladná. To ho výrazne skracuje.
Keď idete podpísať transakciu pomocou svojho súkromného kľúča, opäť sa to zúži v podstate len na násobenie. Vygenerovaním náhodného čísla (nonce) a použitím tohto čísla a vášho súkromného kľúča na vynásobenie hash transakcie, ktorú podpisujete, vytvoríte podpis (ktorý sa skladá z dvoch hodnôt, r a S). To umožňuje niekomu spustiť algoritmus na overenie, či bola správa podpísaná príslušným súkromným kľúčom bez toho, aby tento kľúč odhalil. Vec zaručujúca, že len vy môžete autorizovať utrácanie Bitcoinov, je v podstate len násobenie veľmi, veľmi veľkých čísel.
Ak pred čítaním tohto článku nie ste s týmito pojmami až tak oboznámení, pravdepodobne sa vám to všetko bude zdať trochu zastrašujúce. Binárne? Hexadecimálna sústava? Grafické body? Ako zálohujete WIF?
Od vývoja intuitívnejších spôsobov spracovania týchto údajov väčšina používateľov tieto komplikované formáty nepozná. S najväčšou pravdepodobnosťou máte viac skúseností so slovnými seedami, známymi aj ako seed frázy.
BIP 39 mnemotechnické seedy
Mnemotechnické seedy alebo seed frázy boli vytvorené na riešenie problému skúseností s interakciou s vašimi súkromnými kľúčmi.
Ako sme už spomínali, súkromné kľúče sú v konečnom dôsledku len dlhé série 1 a 0, ktoré sú náhodne generované. Predstavte si, že sa pokúšate vytvoriť ich kópie a uistiť sa, že ste pri ich prepise neurobili chybu:
1110001011011001011110111100000101000100000010001001111010111011010101110111001111111111101010111010010111010011101001110010100110111101000110000111110101111001101001011110011011101000001101101101110001101000110001111010001001001111011010101011001101101010
Stačí jediná chyba pri kopírovaní jednej číslice, aby sa záloha vašich kľúčov stala nepoužiteľnou. Tu sa hodia mnemotechnické seedy. 256 po sebe idúcich jednotiek a 0 v rade nie je pre človeka vhodný spôsob, ako pracovať s citlivými informáciami. Nesprávne zaznamenanie tohto čísla znamená stratu prístupu k vašej peňaženke.
truck renew fury donkey remind laptop reform detail split grief because fat
Je to oveľa jednoduchšie, však? Len 12 slov. Ako to funguje, keď prejdete z množstva náhodných jednotiek a núl na reťazec slov, ktorý vám skutočne dáva zmysel? Kódovacia schéma, rovnako ako binárna alebo hexadecimálna!
Každé z týchto 12 slov v uvedenom mnemotechnickom seede je binárne číslo v kódovacej schéme, ktorá mapuje špecifické reťazce jednotiek a núl na slová. Ak sa vrátime k predchádzajúcemu príkladu súkromného kľúča WIF, išlo jednoducho o číslo zakódované v špecifickej kódovacej schéme, v tomto prípade v base58, ktorá používa všetky čísla a písmená abecedy okrem 0 a 1 a O a l (rozlišujú sa veľké a malé písmená). Vylúčenie týchto znakov bolo vykonané špeciálne preto, aby bolo nepravdepodobné, že dôjde k chybám pri prepise, keď sa 1 zamení za l alebo 0 za O. Bech32 a bech32m, ktoré používajú Segwit a Taproot, to posúvajú na ďalšiu úroveň tým, že používajú len túto sadu znakov (qpzry9x8gf2tvdw0s3jn54khce6mua7l).
Bitcoin Improvement Proposal (Návrh na zlepšenie Bitcoinu 39) (BIP 39) zaviedol štandardizovanú schému kódovania, v ktorej je každé slovo v špeciálne vytvorenom slovníku abecedne mapované na binárne číslo od 00000000001 po 11111111111. Uvedený demonštračný seed sa naň mapuje:
truck: 11101001001
renew: 10110110001
fury: 01011110011
donkey: 01000001001
remind: 10110101110
laptop: 01111101000
reform: 10110100010
detail: 00111100010
split: 11010010001
grief: 01100110100
because: 00010011110
fat: 01010011011
V binárnej podobe to vyzerá takto:
11101001001 10110110001 01011110011 01000001001 10110101110 01111101000 10110100010 00111100010 11010010001 01100110100 00010011110 0101001 1011
Existuje 2048 slov, z ktorých každé je namapované na špecifický 11-miestny reťazec 1 a 0. Cieľom je uľahčiť ľuďom interakciu s ich súkromnými kľúčmi. Keď vygenerujete náhodné číslo pre svoj súkromný kľúč, peňaženka toto číslo rozreže na časti 11-miestnych binárnych čísel a namapuje ich na mnemotechnický slovník BIP 39. Je to stále to isté veľké číslo, ale teraz ho môžete čítať ako anglické slová. Keďže váš mozog je na tento formát oveľa viac zvyknutý ako na dlhé reťazce jednotiek a núl, výrazne sa tým znižuje pravdepodobnosť, že si niečo zle zapíšete a stratíte pri tom svoje Bitcoiny.
Možno ste si všimli, že v surovom binárnom kódovaní slova seed sú štyri číslice (1011) samostatne a posledné „slovo“ má v skutočnosti len 8 číslic. Ide o kontrolný súčet, ktorý zabezpečuje platnosť seed frázy. Pri generovaní náhodného čísla nie je dostatok číslic na jeho presné namapovanie na 12 (alebo 24) slov. Peňaženka vykoná hash týchto existujúcich číslic, ktoré ste vygenerovali, a z hashu vezme niekoľko prvých číslic, ktoré pridá na koniec vášho náhodného čísla. Tým získate dostatok číslic na namapovanie na posledné slovo.
Toto posledné slovo umožňuje vykonať bezpečnostnú kontrolu kópií vášho seedu. Ak zadáte mnemotechnický seed do peňaženky nesprávne, kontrolný súčet sa nebude zhodovať. Každý 12- alebo 24-slovný seed má viacero potenciálne platných slov kontrolného súčtu, ale ak sa posledné slovo nezhoduje s kontrolným súčtom správneho seedu, vaša peňaženka vás upozorní, že je neplatný. To dáva ľuďom intuitívny, ale stále matematický spôsob, ako zaručiť, že ich zálohy sú správne, na rozdiel od chaotického procesu prepisovania a zálohovania surových binárnych čísel.
Výber konkrétnych slov v zozname dokonca zachádzal tak ďaleko, že zaručil, že žiadne z 2048 slov nebude mať rovnaké prvé štyri písmená. To sa urobilo preto, aby sa znížila pravdepodobnosť, že ľudia urobia chybu pri prepise tým, že si zamenia podobné slová a skončia s nesprávnou zálohou svojich súkromných kľúčov.
Prevod týchto slov na súbor viacerých súkromných/verejných kľúčov je pomerne jednoduchý. Vezme sa váš mnemotechnický seed a zahesluje sa pomocou SHA512, ktorého výsledkom je hash 512 jednotlivých 1 a 0. Polovica tohto výstupu sa použije ako skutočný súkromný kľúč a druhá polovica sa použije ako vstup pre SHA512 s indexovým číslom a existujúcim súkromným alebo verejným kľúčom na vygenerovanie nového páru kľúčov. Tento postup môžete vykonať toľkokrát, koľkokrát chcete, aby ste vygenerovali nové súkromné/verejné kľúče, ktoré sa dajú všetky obnoviť z jedinej mnemotechnickej seed frázy.
To vám zaručí, že svoje súkromné kľúče môžete spravovať čo najjednoduchšie a najbezpečnejšie s čo najmenšou pravdepodobnosťou, že urobíte chybu, v dôsledku ktorej prídete o svoje peniaze. A to všetko pomocou matematiky! Dúfame, že teraz už dobre chápete, prečo sa hovorí, že Bitcoin sú peniaze „zabezpečené matematikou“.