Ta članek je odlomek iz knjige Laični priročnik za Bitcoin avtor Logan Brutsche in je z dovoljenjem avtorja ponovno objavljeno tukaj.
Kriptografija je znanost o uporabi matematičnih funkcij na koščkih podatkov, da se zagotovi njihova varnost.
Veliko priljubljene fikcije pomeni, da je mogoče vdreti v kateri koli sistem, če imate dovolj dobrega hekerja. To “hollywoodsko vdiranje” ne deluje v resničnem svetu – heker mora v sistemu najti ranljivost, na primer odklenjeno strežniško sobo, geslo, ki ga je mogoče uganiti, nezaščiteno omrežno pristanišče ali “backdoor” nameščen kot notranje opravilo za poznejši nepooblaščen dostop.
Čeprav je res, nikoli ne moremo zagotoviti, da dani sistem nima ranljivosti – navsezadnje sisteme izdelujejo nepopolni ljudje – mnenje, da je “vse mogoče vdreti”, je napačno. Od zgodnjih devetdesetih let imamo dostop do kriptografskih tehnik, ki so preprosto nezaščitene pred vdorom. Prav uporaba takšnih tehnik lahko včasih pusti prostor za izkoriščanje.
Kriptografije same ni mogoče vdreti, da bi ustvarila ponarejen kriptografski podpis (opredeljen v kratkem), tako kot matematike ni mogoče vdreti v 2 + 2 = 5 – čeprav lahko kriptografijo in matematiko uporabljamo nepravilno. Če sistem, ki uporablja kriptografijo, odpove, je to zato, ker je oblikovalec napačno uporabil kriptografijo. Ne zato, ker kriptografija ni delovala ali ker je nekdo kriptografijo “vdrl” – tako kot ni krivda matematike, če vaša banka napačno ravna z vašim računom, ali krivda e-pošte, ko mama naloži neznano prilogo in dobi računalniški virus . To je pomembno razlikovanje, saj je Bitcoin zelo neposredno aplikacija uveljavljene kriptografije.
Kriptografija ni nova, nepreizkušena tehnologija. Vse kriptografske tehnike, ki jih uporablja Bitcoin, se uporabljajo od začetka interneta in so bistvene za številne običajne internetne protokole, ki se uporabljajo vsak dan. Znanstvo kriptografije računalniški znanstveniki menijo, da je zanesljivo in nujno na enak način kot NASA raketno znanost kot zanesljivo in bistveno.
Tipkovnice: temelj kriptografije
Ključni pari so temelj kriptografije, ki se uporablja v verigah blokov. Sklop ključev ima dva dela: zasebni in javni ključ. Ti ključi v resnici niso nič drugega kot zelo velika števila z določenim matematičnim razmerjem, ki se uporabljajo namesto gesel in uporabniških imen.
Z javnim ključem, kot je vaše ime ali uporabniško ime, bi ravnali: v večini primerov ga delite z vsemi, ki vas vprašajo, tisti, ki ga imajo, pa ga lahko uporabijo za sklicevanje ali stik z vami. Povezan je z vašim ugledom (ali v Bitcoinovem primeru z zgodovino transakcij), zato boste morda imeli več javnih ključev (in s tem več ključev), ki jih uporabljate za različne namene. Javni ključ je mogoče uporabiti za sklicevanje ali ogled računa, vendar sam po sebi ne more odobriti nobenega dejanja na tem računu.
Zasebni ključ je treba obravnavati kot geslo: ne sme se ga deliti z nikomer in se uporablja za preverjanje pristnosti nekaterih dejanj, kot je pošiljanje BTC.
A med zasebnim ključem in geslom je pomembna razlika. Če želite uporabiti geslo, ga morate poslati osebi ali strežniku, da ga lahko preverite glede na njegovo evidenco. Zaupati morate, da bo po pošiljanju z geslom odgovorno. Nasprotno pa lahko zasebni ključ uporabite za avtentikacijo, ne da bi ga kam poslali. Edino, kar je kadar koli shranjeno ali neposredno uporabljeno, je na vaši lokalni napravi.
To je pomembno, ker če se lahko overite, ne da bi kam poslali svojo skrivnost, lahko v celoti nadzirate njeno varnost – niste ranljivi za varnostne napake drugih sistemov. To je bistveni del tistega, zaradi česar Bitcoin ni mogoč. Na samem bitcoinu ni shranjenih gesel ali zasebnih ključev, ki bi jih napadalci lahko ogrozili, kljub temu pa lahko uporabniki še vedno preverjajo pristnost transakcij..
Kako pa bi lahko uporabili zasebni ključ za preverjanje pristnosti transakcije, če pa zasebnega ključa nikoli nikjer ne pošljete? Odgovor je povezan z matematičnim razmerjem med zasebnim in javnim ključem: kriptografski podpisi.
Kriptografski podpisi
Obstaja več različnih tehnik za ustvarjanje in potrjevanje kriptografskih podpisov, matematični izreki, ki jim omogočajo delovanje, pa daleč presegajo področje tega članka. Tistim, ki ne poznajo kriptografije, se postopek, ki je tukaj opisan, morda sprva zdi povsem nemogoč. Jasno se spominjam tega vtisa, ko sem pred štirimi leti začel raziskovati Bitcoin.
Za zdaj bom še enkrat opozoril, da se te tehnologije uporabljajo v številnih običajnih internetnih protokolih in so že uveljavljen del informacijske znanosti.
Predstavljajte si dve osebi, Alice in Boba, ki sta že osebno zamenjala javne ključe. Alice želi poslati sporočilo Bobu, toda Bob je zelo sumljiva oseba in ne bo verjel, da je sporočilo dejansko prišlo od Alice, razen če lahko to nedvomno dokaže matematično. Za lažji dokaz se strinjajo, da bodo uporabljali kriptografski podpis.
Za generiranje podpisa Alice uporablja algoritem za generiranje podpisov v svojem računalniku, ki za vnos vzame njen zasebni ključ in celotno sporočilo ter ustvari kriptografski podpis. Nato pošlje Bobu to kombinacijo sporočil / podpisov, vendar ključnega pomena, ji ne pošlje zasebnega ključa.
Ko Bob prejme sporočilo in podpis, ima na voljo komplementarni algoritem za preverjanje podpisa. Ta algoritem za vnos sprejme sporočilo in podpis ter določi javnosti ključ para ključev, s katerim je Alice ustvarila podpis. Ko Bob vidi, da njegov algoritem oddaja Alicein javni ključ, je matematično dokazal, da je moral biti podpis ustvarjen z Aliceinim ključnim parom, čeprav ne ve in ne more izračunati zasebne polovice Aliceinega ključnega para.
Postavite bolj jedrnato, ta postopek kriptografskega podpisa omogoča Bobu, da preveri, da sporočila ni ustvarila ali spremenila katera koli tretja oseba in mora biti ustvarjeno z zasebnim ključem Alice, ne da bi moral (ali biti sposoben) poznati njen zasebni ključ. Vse, kar potrebuje, je kombinacija sporočila / podpisa in njen javni ključ.
Intuitivno se to zdi nemogoče in morda se vam zdi, da ste kaj narobe razumeli. Če so zasebni in javni ključi Alice tako tesno povezani in je Alice s svojim zasebnim ključem ustvarila podpis, ki ga prejme Bob, kako to, da lahko izpelje njen javni ključ, a zasebnega ključa ne najde? Odgovor na to zahteva veliko globlje razumevanje matematike, kot jo ima večina ljudi, in je daleč izven področja uporabe te knjige.
Kljub temu se na to tehniko zanašajo in jo uporabljajo vsak dan in jo znotraj kriptografske skupnosti štejejo za trdno. Ko obiščete spletno mesto in se njegov naslov začne s https, »s« označuje, da se je spletno mesto potrdilo s kriptografskim podpisom. Vaš računalnik je uporabil algoritem za preverjanje podpisa, tako kot Bob v zgornjem primeru, da preveri, ali spletno mesto resnično prihaja iz pravega para ključev. Na ta kriptografski podpis se zanašamo, da zagotovimo, da je nadaljnja interakcija med vami in spletnim mestom šifrirana in verodostojna. Če ta test ne bo uspel, vas bodo sodobni brskalniki opozorili in označili spletno mesto kot nevarno.
Dovolj velike številke
Prej sem na kratko omenil, da zasebni in javni ključi delujejo kot uporabniška imena in gesla, vendar v resnici niso nič drugega kot izjemno velika števila s posebnim matematičnim razmerjem. Glede na to me pogosto vprašajo naslednja vprašanja:
»Ali ne more nekdo preprosto imeti računalnika, da ugane ali prešteje kup številk in jih preizkusi kot zasebne ključe? Ali ne bi sčasoma naleteli na zasebni ključ nekega ciljanega para ključev in s tem pridobili nadzor nad to identiteto? ” V primeru Bitcoina bi to napadalcu omogočilo, da ukrade denar, ki ga ima nekaj ključev.
To je dobro vprašanje, vendar se to ne zgodi. Kot smo že omenili, obstaja več naslovov Bitcoin z BTC v vrednosti milijonov dolarjev, ki se že leta niso premaknili – čeprav je vse, kar bi bilo potrebno za njegovo krajo, pravi zasebni ključ – pravo ogromno število! Če bi lahko uganili zasebni ključ do teh naslovov, je denar vaš, da ga pošljete kamor koli. Za razliko od gesla lahko zasebne ključe lokalno preverjate na svojem računalniku in noben strežnik ne omejuje, kolikokrat ali kako hitro jih preizkusite.
Zakaj torej teh sredstev še nihče ni ukradel? Odgovor je v skoraj absurdni velikosti številk, ki se uporabljajo kot zasebni ključi. So dovolj ogromno.
Začnimo s preprostim miselnim eksperimentom. Predstavljajte si, da je bil vaš zasebni ključ ravno dovolj velik, da bi, če bi vsi računalniki na svetu delali skupaj, vzeli popolne 24 ur časa, da bi ga sila uganila. Če v zasebni ključ dodate samo še eno številko, bi bilo računalnikov desetkrat več permutacij, zato bi trajalo 10 dni namesto ene. Še šest števk bi to povečalo na 27.000 let.
V vsakem primeru ostaja ustvarjanje zasebnega ključa – za kar je potrebna le zmožnost ustvarjanja naključnih števil – trivialno. Uporaba zasebnega ključa za ustvarjanje podpisov in preverjanje teh podpisov glede na javni ključ ostaja tudi računsko enostavna. Toda delo, potrebno za ugibanje zasebnega ključa, raste eksponentno z vsako dodatno številko. Da bi bili zasebni ključi “imuni” na ugibanje s silo, moramo dodati le dovolj številk – narediti jih moramo le dovolj velike.
Torej, kako ogromno je dovolj ogromno? Zasebni ključi, ki se uporabljajo v Bitcoinu, so 256-bitna cela števila, kar je šestinsedemštevilčno število. Moč velikosti te številke je neverjetna. Naslednja ilustracija izhaja iz knjige Brucea Schneierja Uporabna kriptografija, in je prepričljiv prikaz dovolj ogromnega števila.
Najprej se zavedajte, da je posebna posledica drugega zakona termodinamike, da je za spremembo enega samega binarnega bita informacije potrebna minimalna energija (sprememba 1 na 0 ali obratno). To pomeni, da vsak računalniški postopek zahteva nekaj minimalne energije, ne glede na uporabljeno strojno opremo.
Zdaj pa predpostavimo, da ste lahko izkoristili celotno izhodno energijo sonca samo za napajanje posebej zasnovanega računalnika, katerega naloga je šteti ali ugibati zasebne ključe, v upanju, da boste našli zasebni ključ para ključev (ki bi lahko nadzoroval BTC).
Z malo matematike in termodinamike boste ugotovili, da lahko popolnoma učinkovit računalnik prešteje 2178 vrednosti glede na celotno letno sončno energijo. Če to vrednost razdelimo na število možnih zasebnih ključev, 2256, ugotovimo, da bi ta hipotetični računalnik lahko ugibal ali prešteval le 0,0000000000000000000003% celotnega števila možnih zasebnih ključev – glede na celotno letno energijo sonca.
Poleg tega to samo šteje in ne vključuje veliko bolj zapletene naloge dejanskega preverjanja vsakega zasebnega ključa, ali ustreza pravemu javnemu ključu. Torej z 0,0000000000000000000003% -no verjetnostjo, da se je ta računalnik do konca enega leta zgodil prek desnega zasebnega ključa, se sploh ne bi zavedal.
Te številke nimajo nič skupnega s tehnologijo naprav; so maksimumi, ki so možni po termodinamičnih zakonih, ki so bili vzpostavljeni od tridesetih let prejšnjega stoletja. In močno nakazujejo, da bodo napadi surove sile na 256-bitne ključe (ki jih Bitcoin uporablja) neizvedljivi, dokler računalniki ne bodo zgrajeni iz nečesa drugega kot iz materije in bodo zasedli kaj drugega kot vesolje.
To je moč dovolj ogromnega števila. Ni pomembno, kako dober heker je. Če ne more izkoristiti moči tristo soncev za eno leto ali enega sonca za tristo let, njegov računalnik ne more niti izkoristiti štetje prek vseh zasebnih ključev – kaj šele, da bi jih preizkusili ali kako drugače uporabili.
Za podrobnejši vpogled v Bitcoin in kriptografijo vzemite knjigo Logana Brutscheja, Laični priročnik za Bitcoin.