Denne artikkelen er et utdrag fra boka The Layman’s Guide to Bitcoin av Logan Brutsche og er publisert her med tillatelse fra forfatteren.
Kryptografi er vitenskapen om å bruke matematiske funksjoner på deler av data for å garantere deres sikkerhet.
Mye populær fiksjon innebærer at ethvert system kan hackes, så lenge du har en god nok hacker. Denne “Hollywood-hackingen” er ikke slik den virkelige verden fungerer – en hacker må finne et sårbarhet i et system å utnytte, for eksempel et ulåst serverrom, et lett å gjette passord, en ubeskyttet nettverksport eller en “bakdør” installert som en intern jobb for å få uautorisert tilgang senere.
Selv om det er sant, kan vi aldri garantere at et gitt system ikke har sårbarheter – tross alt er systemene laget av ufullkomne mennesker – følelsen av at “alt kan bli hacket” er falsk. Siden begynnelsen av 90-tallet har vi hatt tilgang til kryptografiske teknikker som ganske enkelt er immun mot hacking. Det er anvendelse av slike teknikker som noen ganger kan gi rom for utnyttelse.
Selve kryptografien kan ikke hackes for å generere en forfalsket kryptografisk signatur (definert kort tid), akkurat som matematikk ikke kan hackes for å lage 2 + 2 = 5 – selv om både kryptografi og matematikk kan brukes feil. Hvis et system som bruker kryptografi mislykkes, er det fordi en designer feil kryptografi. Det er ikke fordi kryptografi ikke fungerte, eller fordi noen “hacket” kryptografien – akkurat som det ikke er matematikkens feil hvis banken din håndterer kontoen din, eller e-postfeilen når moren din laster ned et ukjent vedlegg og får et datavirus . Dette er et viktig skille, fordi Bitcoin er veldig direkte en applikasjon av etablert kryptografi.
Kryptografi er ikke en ny, uprøvd teknologi. Alle de kryptografiske teknikkene som Bitcoin har brukt, har vært i bruk siden begynnelsen av Internett, og er avgjørende for mange vanlige internettprotokoller som brukes hver dag. Vitenskapen om kryptografi blir ansett som pålitelig og viktig av dataforskere på samme måte som rakettvitenskap anses som pålitelig og viktig av NASA.
Tastaturer: hjørnesteinen i kryptografi
Tastaturer er hjørnesteinen i kryptografien som brukes i blokkjeder. Et tastatur har to deler: en privat nøkkel og en offentlig nøkkel. Disse tastene er egentlig ikke annet enn veldig store tall med et spesifikt matematisk forhold, brukt i stedet for passord og brukernavn.
Du vil håndtere en offentlig nøkkel som fornavnet ditt eller et brukernavn: i de fleste tilfeller deler du den med alle som spør, og de som har den kan bruke den til å referere til eller kontakte deg. Det er knyttet til omdømmet ditt (eller i Bitcoins tilfelle transaksjonshistorikken din), så du kan ha flere offentlige nøkler (og derfor flere tastaturer) som du bruker til forskjellige formål. En offentlig nøkkel kan brukes til å referere til eller se på en konto, men kan ikke i seg selv godkjenne noen handlinger på den kontoen.
Den private nøkkelen skal behandles som et passord: den skal ikke deles med noen, og brukes til å godkjenne visse handlinger, for eksempel å sende BTC.
Men det er en viktig forskjell mellom en privat nøkkel og et passord. For å bruke et passord, må du sende det ut til en person eller server, slik at det kan sjekkes mot oppføringene deres. Du må stole på at passordet blir håndtert ansvarlig etter at du har sendt det. Derimot kan en privat nøkkel brukes til å autentisere deg selv uten å sende den hvor som helst. Det eneste stedet det noensinne er lagret eller brukt direkte på din lokale enhet.
Dette er viktig, for hvis du kan autentisere deg selv uten å sende hemmeligheten din hvor som helst, kan du forbli i full kontroll over sikkerheten – du er ikke sårbar for sikkerhetsavvik i andre systemer. Dette er en viktig del av det som gjør Bitcoin uhackbar. Det er ingen passord eller private nøkler lagret på Bitcoin selv for en angriper å gå på kompromiss, og allikevel kan brukere fortsatt godkjenne transaksjoner.
Men hvordan kan du bruke en privat nøkkel til å godkjenne en transaksjon, hvis du aldri sender den private nøkkelen hvor som helst? Svaret har å gjøre med det matematiske forholdet mellom private og offentlige nøkler: kryptografiske signaturer.
Kryptografiske signaturer
Det finnes flere forskjellige teknikker for å generere og validere kryptografiske signaturer, og de matematiske setningene som gjør at de kan jobbe, er langt utenfor omfanget av denne artikkelen. For de som ikke er kjent med kryptografi, kan prosessen beskrevet her i utgangspunktet høres direkte umulig ut. Jeg husker tydelig at jeg hadde dette inntrykket da jeg startet min forskning på Bitcoin for fire år siden.
For nå vil jeg bare merke igjen at disse teknologiene brukes i mange vanlige internettprotokoller, og er en etablert del av informasjonsvitenskapen.
Se for deg to personer, Alice og Bob, som allerede har byttet offentlige nøkler personlig. Alice vil sende Bob en melding, men Bob er en veldig mistenksom person, og vil ikke stole på at meldingen faktisk kom fra Alice med mindre han kan bevise det matematisk, over all tvil. For å lette dette beviset godtar de å bruke en kryptografisk signatur.
For å generere signaturen bruker Alice datamaskinens algoritme for generering av signaturer, som tar som inndata hennes private nøkkel og hennes komplette melding, og genererer en kryptografisk signatur. Hun sender deretter Bob denne meldingen / signaturkombinasjonen — men avgjørende, sender henne ikke den private nøkkelen.
Når Bob mottar meldingen og signaturen, har han en komplementær algoritme for signaturvalidering å benytte. Denne algoritmen tar meldingen og signaturen som input, og bestemmer offentlig nøkkelen til tastaturet som Alice brukte til å generere signaturen. Når Bob ser at algoritmen hans sender ut den offentlige nøkkelen til Alice, har han matematisk bevist at signaturen må ha blitt generert med Alice’s tastatur, selv om han ikke vet og ikke kan beregne den private halvdelen av Alice’s tastatur..
Sett mer kortfattet, denne kryptografiske signaturprosessen gjør det mulig for Bob å bekrefte at meldingen ikke ble opprettet eller endret av noen tredjepart og må ha blitt generert med Alice sin private nøkkel, uten å måtte (eller kunne) kjenne hennes private nøkkel. Alt han trenger er meldingen / signaturkombinasjonen og hennes offentlige nøkkel.
Intuitivt virker dette umulig, og du kan føle at du har misforstått noe. Hvis Alices private og offentlige nøkler er så nært beslektede, og Alice brukte sin private nøkkel for å generere signaturen som Bob mottar, hvordan kan det være at han kan utlede hennes offentlige nøkkel, men ikke kan finne sin private nøkkel? Svaret på dette krever en langt dypere forståelse av matematikk enn folk flest har, og ligger langt utenfor omfanget av denne boken.
Likevel er denne teknikken pålitelig og brukt hver dag, og regnes som solid i kryptografisamfunnet. Når du besøker et nettsted og adressen starter med https, indikerer “s” at nettstedet har validert seg selv med en kryptografisk signatur. Datamaskinen din brukte en signaturvalideringsalgoritme, akkurat som Bob gjorde i eksemplet ovenfor, for å bekrefte at nettstedet virkelig kom fra riktig tastatur. Denne kryptografiske signaturen er avhengig av for å sikre at ytterligere interaksjon mellom deg og nettstedet er kryptert og autentisk. Hvis denne testen mislykkes, vil moderne nettlesere advare deg og markere nettstedet som farlig.
Tilstrekkelig store tall
Tidligere nevnte jeg kort at private og offentlige nøkler fungerer som brukernavn og passord, men i virkeligheten ikke er annet enn ekstremt store tall med et spesielt matematisk forhold. Gitt det blir jeg ofte spurt følgende spørsmål:
“Kan ikke noen bare ha en datamaskin, eller telle gjennom en haug med tall og prøve dem som private nøkler? Ville de ikke til slutt kjøre over en privat nøkkel i et målrettet tastatur, og dermed få kontroll over den identiteten? ” Faktisk, i tilfelle av Bitcoin, vil dette tillate en angriper å stjele pengene som er inneholdt av noe tastatur.
Det er et godt spørsmål, og likevel skjer det ikke. Som nevnt tidligere, er det flere Bitcoin-adresser med millioner av dollar i verdi av BTC som ikke har beveget seg på mange år – selv om alt som trengs for å stjele det er den riktige private nøkkelen – det rette enorme antallet! Hvis du kunne gjette den private nøkkelen til disse adressene, er pengene dine til å sende hvor som helst. I motsetning til et passord, kan du sjekke private nøkler lokalt på din egen maskin, og det er ingen server som begrenser hvor mange ganger eller hvor raskt du prøver dem.
Så hvorfor har ikke noen stjålet disse midlene ennå? Svaret ligger i den nesten absurde størrelsen på tallene som brukes som private nøkler. De er tilstrekkelig stor.
La oss starte med et enkelt tankeeksperiment. Tenk deg at den private nøkkelen din var akkurat stor nok til at hvis alle verdens datamaskiner fungerte sammen, ville det ta dem hele 24 timer å bruteforce gjette det. Hvis du legger til bare ett siffer til den private nøkkelen din, vil det være ti ganger flere permutasjoner for datamaskinene å gå gjennom, så det vil ta 10 dager i stedet for en. Seks sifre til vil bringe det til 27.000 år.
I hvert tilfelle er det å forbli trivielt å generere den private nøkkelen – som bare krever muligheten til å lage tilfeldige tall. Å bruke den private nøkkelen til å generere signaturer, i tillegg til å sjekke disse signaturene mot den offentlige nøkkelen, forblir også beregningsmessig enkel. Men arbeidet som kreves for å gjette den private nøkkelen, vokser eksponentielt med hvert ekstra siffer. For å få private nøkler til å være “immune” mot gjetning ved brute-force, trenger vi bare legge til nok sifre – vi trenger bare å gjøre dem tilstrekkelig store.
Så hvor stor er tilstrekkelig stor? De private nøklene som brukes i Bitcoin er 256-biters heltall, som utgjør et tall som er syttiseks sifre langt. Kraften til størrelsen på dette tallet er utrolig. Følgende illustrasjon er hentet sterkt fra Bruce Schneiers bok Anvendt kryptografi, og er en overbevisende demonstrasjon av tilstrekkelig store antall.
Først, erkjenn at en spesifikk konsekvens av den andre loven om termodynamikk er at det er et minimum av energi som kreves for å endre en enkelt binær bit av informasjon (endre en 1 til en 0 eller vice versa). Dette betyr at enhver beregningsprosess krever litt energi til å utføre, uavhengig av maskinvaren som brukes.
Anta at du bare kunne utnytte hele solens energiproduksjon for å drive en spesialdesignet datamaskin, hvis jobb er å telle gjennom eller gjette private nøkler, i håp om å finne den private nøkkelen til et tastatur (som kan kontrollere BTC).
Ved å bruke litt matematikk og termodynamikk, vil du oppdage at en perfekt effektiv datamaskin kan telle gjennom 2178 verdier gitt solens hele årlige energiproduksjon. Hvis vi deler denne verdien i antall mulige private nøkler, 2256, finner vi at denne hypotetiske datamaskinen bare vil kunne gjette eller telle gjennom 0.0000000000000000000003% av det totale antallet mulige private nøkler – gitt hele den årlige energien fra solen.
Videre er dette bare å telle, og inkluderer ikke den mye mer komplekse oppgaven med å faktisk sjekke hver private nøkkel for å se om den tilsvarer riktig offentlig nøkkel. Så i 0.0000000000000000000003% sjansen for at denne datamaskinen skjedde over den rette private nøkkelen innen utgangen av ett år, ville den ikke engang innse det.
Disse tallene har ingenting å gjøre med teknologien til enhetene; de er det maksimale som er mulig i henhold til termodynamikkens lover som har blitt etablert siden 1930-tallet. Og de antyder sterkt at brute-force-angrep mot 256-bit nøkler (som Bitcoin bruker) vil være umulige til datamaskiner er bygget fra noe annet enn materie og opptar noe annet enn plass.
Dette er kraften til tilstrekkelig store tall. Det spiller ingen rolle hvor god en hacker er. Med mindre han kan utnytte kraften til tre hundre sekstillioner i ett år, eller en sol i tre hundre sekstitill år, kan ikke datamaskinen hans engang telle gjennom alle de private nøklene – enn si å teste eller på annen måte bruke dem.
For å få en mer grundig titt på Bitcoin og kryptografi, hent Logan Brutsches bok, The Layman’s Guide to Bitcoin.