»  Bitcoin  »  Teknologi

Bitcoin sin Teknologi

En gjennomgang av Bitcoin sitt tekniske rammeverk og funksjonalitet.

Kryptografen
calendar 17,april 2024
Snarveier

    Bitcoin er et nytt og innovativt betalingsnettverk og regnes gjerne som en ny form for penger. 13 år etter at Satoshi Nakamoto forfattet «Bitcoin Whitepaper» , har oppdagelsen manøvrert seg fra et internettforum for spesielt interesserte til i dag å engasjere millioner av mennesker over hele verden.

    Bitcoin ble oppdaget i et univers bestående av datakode, kryptografi og matematikk. Det er en programmert enhet med noen helt unike egenskaper, pakket inn i et komplekst system som kan forstås fra mange ulike perspektiver.

    I denne artikkelen har Kryptografen samarbeidet tett med en av Norges fremste kunnskapskilder hva angår de tekniske aspektene rundt Bitcoin – Torkel Rogstad.

    Sammen håper vi å være i stand til å gi deg som leser en noe dypere forståelse for hvordan Bitcoin er «bygget opp», gjennom å belyse et utvalg av de teknologiske byggeklossene bitcoin-protokollen består av. 

    Vi bruker norske begreper på byggeklossene, men vi inkluderer også de engelske navnene, så det blir lettere for deg å utforske konseptene videre på egenhånd. 

    Før du leser videre, vil vi oppfordre deg til å lese «Bitcoin Whitepaper», senere oversatt til norsk av Kryptografen. Dette er dokumentet som Satoshi Nakamoto publiserte 31. Oktober 2008. Under hvert konsept vi diskuterer i denne serien vil vi skrive hvor du kan finne igjen det samme konseptet i whitepaperet. På denne måten håper vi å inspirere til videre egenutforskning. 

    Lær merHva er Bitcoin?

    Blokker og blokkjede

    Av de tekniske begrepene som diskuteres i denne artikkelen er det nok «blokkjede» (blockchain på engelsk) som er mest omtalt. Man kan våge påstanden at selve begrepet nesten er tømt for innhold. Dette etter årevis med misforståelser, feiltolkninger og promovering av bruksområder som i utgangspunktet ikke gir mening. 

    I ren teknisk forstand er en blokkjede en serie av tidsstemplede hendelser, organisert på en slik måte at du ikke kan endre tidligere deler uten å også endre nyere deler. Satoshi kalte faktisk dette for en tidsskjede (timechain på engelsk), og ordet «blockchain» forekommer ikke i whitepaperet.  

    En blokk i blokkjeden inneholder en eller flere transaksjoner. Blokker blir produsert i gjennomsnitt hvert tiende minutt (se avsnitt om vanskelighetsjustering), av minere som har utført nok arbeid (se avsnitt om bevis på utført arbeid). Blokkene distribueres deretter ut på Bitcoin-nettverket, hvor de valideres og lagres av alle som deltar.   

    Når en transaksjon først har havnet på blokkjeden kan den ikke endres, uten å også endre alle transaksjoner som kommer i senere blokker. Det er dette som gjør blokkjede til en så sikker måte å distribuere informasjon på; kombinasjonen av data som ikke kan delvis endres uten å måtte endre all dataen, og at flere uavhengige aktører alle mottar og validerer informasjonen. 

    I bitcoin- og krypto-dagligtalen brukes gjerne blokkjede som en sekkebetegnelse som omfatter veldig mye – nærmest som et synonym på bitcoin og kryptovaluta. I presisjonens navn kan det være fint å ha et litt snevrere syn på hva blokkjede innebærer:

    En blokkjede er en kronologisk ordning av data på en distribuert måte.

    Kanskje Satoshis originale tidskjede-begrep hadde spart oss for mange kleine bøker skrevet av avdankede Harvard Business School-forelesere? 

    Bitcoin Noder

    Alle deltakere på bitcoin-nettverket omtales som noder.

    Det finnes flere ulike former for noder: fullnoder, lettnoder og minere er noen eksempler. Hva som skiller de fra hverandre er utenfor rammene for denne artikkelen, men det er fint å være klar over at det finnes nyanser innenfor node-kategorien.

    Felles for alle noder er at de lytter til nye transaksjoner og blokker på nettverket. Når de mottar en transaksjon eller blokk verifiserer de at alle aktuelle regler følges. Noen av disse reglene går under konsensusalgoritmen, som er omtalt i en egen seksjon.

    Alle bitcoin-brukere har muligheten til å bli en node på nettverket. Det eneste man trenger å gjøre er å laste ned et program på PCen eller mobilen sin – og så er man i gang! Det er vanskelig å vite nøyaktig hvor mange noder det finnes på nettverket, men estimater fra bitcoin-utvikler Luke Dashjr plasserer det et sted rundt 50.000.

    Om vi skal sammenligne dette med det eksisterende fiat-systemet, blir kontrastene store.

    I fiat-systemet er det banker og sentralbanker som utgjør “nodene”. De er langt færre, og i motsetning til Bitcoin er det ikke hvem som helst som for lov til å bli ”en del av systemet”. Du må nemlig godkjennes av en rekke nasjonale og internasjonale myndigheter, og om du ikke oppfører deg innenfor rammene de gir deg, vil du befinne deg utenfor systemet på relativt kort tid. 

    Konsensusalgoritmen

    Det finnes en rekke regler for hva som gjør en bitcoin-transaksjon gyldig. Det er summen av disse som kalles konsensusalgoritmen (consensus på engelsk). Denne algoritmen finnes ikke skrevet ned noe sted, men kan tenkes på som summen av oppførselen til alle nodene på nettverket – eller resultatet av at alle noder håndhever reglene de er programmert til å håndheve.

    En annen måte å tenke om dette er ”enighet”. Alle aktørene i nettverket er enige om at den informasjonen som til en hver tid blir prossesert, stemmer overens med det som har blitt prossesert historisk og dermed passer sammen med de andre blokkene i kjeden. 

    Om du ønsker å bruke bitcoin må du følge konsensus, hvis ikke blir du avvist av resten av nettverket.

    Noen eksempler på hva som er del av konsensus:

    • Det er ikke lov å lage nye bitcoin, utenom den strengt definerte mengden Satoshi etablerte i 2009. Slik sikres det at det vil finnes maksimalt 21 millioner bitcoin.
    • For å overføre bitcoin må du lage en gyldig digital signatur (se egen seksjon om signaturer). Det er dette som gjør at kun jeg kan flytte på mine bitcoin, og kun du kan flytte på dine bitcoin.
    • Hver bitcoin-blokk må forholde seg til maksimumsstørrelsen på nettverket – 4 millioner såkalte vekt-enheter. Oversatt til mer kjente begreper betyr dette mellom 1 og 4 megabytes per blokk. Dette er for å sikre at alle nodene på nettverket klarer å henge med, og ikke bare nodene som kjører på dyre og kraftige datamaskiner.

    Om du nå føler deg litt ekstra sulten på bitcoin-detaljer, kan du se på C++-koden i Bitcoin Core (den vanligste software-pakka man bruker for å kjøre en node) som definerer konsensusreglene. De finnes under src/consensus på GitHub. Uavhengig av om du forstår C++ eller ei, så er det en morsom øvelse å klikke seg rundt i selve kjernen av bitcoin.

    Bevis på utført arbeid – Proof of work.

    Bitcoin-transaksjoner som har havnet på blokkjeden kan anses for å være helt uforanderlige. Dette trygges gjennom såkalt bevis på utført arbeid – eller proof of work (PoW) på engelsk. 

    Prinsippet er enkelt: bitcoinminere gjør matematiske operasjoner som er dyre å utføre, men billige å verifisere. Når en blokk legges til i blokkjeden må det inkluderes et bevis på at et vanskelig matematisk problem har blitt løst.

    For å lage dette beviset kreves det ekstremt mye regnekraft – i skrivende stund 132 billiarder forsøk i gjennomsnitt. Verifiseringsjobben er derimot enkel. Der trengs det bare ett forsøk.

    Dette står også i sterk kontrast til både fiat-systemet og flere andre kryptovalutaer. Her er det teoretisk mulig å angripe systemet uten bruk av voldsomme ressurser. Ressursene som vil måtte brukes for å utføre forandringer bakover i tid inne i Bitcoin blokkjeden er i skrivende stund estimert til å koste mellom 6 og 10 milliarder dollar. 

    Derimot koster det minimalt for brukerne av bitcoin-nettverket å dobbeltsjekke at alle regler følges. 

    Vanskelighetsjustering

    Vi har altså funnet ut av at det kreves fryktelig mye tallknusing for å lage en bitcoinblokk. Nøyaktig hvor mange tall som knuses styres opp og ned av markedskrefter.

    Da Satoshi lanserte bitcoin var han den eneste noden på nettverket, og det hadde vært helt urealistisk at han skulle utføre 132 billiarder operasjoner på egen hånd. Løsningen hans på dette er den såkalte vanskelighetsjusteringen. (difficulty adjustment på engelsk.)

    Om vi overser noen hårete detaljer så kan justeringen oppsummeres slik: 

    Hvor mye arbeid som må utføres for å lage en bitcoinblokk, justeres opp og ned i takt med hvor mange som forsøker å lage bitcoinblokker.

    Når det bare var Satoshi på nettverket var vanskeligheten (hvor mye arbeid som må utføres når man miner) lav. I takt med at flere begynte å mine, steg vanskelighetsgraden. Helt konkret justeres vanskeligheten ca. hver andre uke, slik at nye bitcoin-blokker kommer i snitt hvert 10. minutt. Dette sikrer en jevn og pålitelig flyt i bitcoin-økonomien, og gjør også at produksjonen av nye bitcoin følger en forutsigbar bane.

    En interessant kuriosa omkring vanskelighetsjusteringen, er at det var dette som var den manglende brikken i puslespillet om digitale, desentraliserte penger. Alle de andre tekniske elementene i bitcoin-protokollen var allerede funnet opp av andre folk – før Satoshi kom på banen. Med vanskelighetsjusteringen som en avgjørende oppdagelse, satte han det hele elegant sammen på en måte som tidligere forsøk ikke hadde fått til.

    I denne artikkelserien, som vil bli publisert i flere deler, har Kryptografen samarbeidet tett med en av Norges fremste kunnskapskilder hva angår de tekniske aspektene rundt Bitcoin – Torkel Rogstad.

    Sammen håper vi på å være i stand til å gi deg som leser en noe dypere forståelse for hvordan Bitcoin er «bygget sammen», gjennom å belyse et utvalg av de teknologiske byggeklossene bitcoin-protokollen består av. 

    Vi bruker norske begreper på byggeklossene, men vi inkluderer også de engelske navnene, så det blir lettere for deg å utforske konseptene videre på egenhånd. 

    Subsidiehalvering

    Whitepaper: ikke omtalt, noget overraskende.

    En av Bitcoins aller viktigste og velkjente egenskaper er absolutt knapphet. Det vil si at det aldri vil finnes mer enn 21 millioner bitcoin. Det er subsidiehalveringen (subsidy halvening, eller bare halvening på engelsk) som er grunnen til dette. Interessant nok er selve halveringen ikke omtalt i whitepaperet. Satoshi nøyer seg med å si “once a predetermined number of coins have entered circulation.” 

    I hver nye bitcoin-blokk lages det nye bitcoin. Dette omtales som blokk-subsidiet.

    Blokk-subsidiet har to funksjoner:

    1. Nye coins introduseres i økonomien.
    2. Oppmuntre minere til å bruke regnekraft.

    Da Satoshi lanserte bitcoin, var blokk-subsidiet på 50 bitcoin per blokk. Det betyr at hvert 10. minutt ble det skapt 50 BTC. I koden som definerer dette er det lagt inn en “sjekk”. Dette betyr at for hver gang det har blitt produsert 210 000 blokker halveres subsidiet. Den observante leser vil merke seg at det i snitt blir laget 210 240 blokker hvert fjerde år – som igjen betyr at ca. hvert fjerde år halveres antallet bitcoin som produseres. 

    Dette er den lille magien som styrer hele bitcoins pengepolitikk. Dette gjør at vi alle, allerede i dag, vet hvor mange Bitcoin som noensinne vil eksistere.

    En gitt mengde coins for hver nye blokk, etter et helt forutsigbart mønster. Eksponentielt avtagende produksjon, frem mot et nullpunkt i nærheten av år 2140. Kontrasten til det enormt komplekse sentralbankmaskineriet som styrer fiat-valuta kunne ikke vært mer slående.

    Asymmetrisk kryptografi

    Asymmetrisk kryptografi er det litt krøkkete, norske begrepet på det engelske public key cryptography. Det muliggjør både kryptering og digitale signaturer, og er en helt essensiell komponent i bitcoin. 

    La oss starte med å luke ut en veldig vanlig misforståelse: det er ingen kryptering i bitcoin.

    Mange tenker at “krypto”-delen av kryptovaluta kommer av kryptering, men dette er ikke tilfellet. Snarere referer det til kryptografi, som er en større disiplin – som blant mange ting også inkluderer kryptering. For å gjøre opp for manglende kryptering, tar digitale signaturer opp en rekke avsnitt i historien om bitcoin. I whitepaperet blir det nevnt allerede i andre setning.

    I en bitcoin-kontekst, så lar digitale signaturer oss bevise eierskap til en mengde bitcoin. Dette foregår på en måte som utvetydelig viser for hele verden hvem som eier hva.

    Alle bitcoin-brukere har en eller flere såkalte privatnøkler. Disse privatnøklene er helt tilfeldig genererte tall, som du holder for deg selv.

    Gjennom matematikk konverterer du privatnøkkelen din til en offentlig nøkkel, som du trygt kan dele med omverdenen.

    Det geniale med dette er at du kan bevise matematisk at du sitter på privatnøkkelen til en offentlig nøkkel, uten å avsløre den private nøkkelen. Dette er det som kalles en digital signatur.

    Om vi oversetter dette til Bitcoin universet, betyr det at coins som er sendt til en bitcoin-adresse (den offentlige nøkkelen), kun kan flyttes videre på av den som besitter den tilhørende private nøkkelen. Hver gang du skal flytte på bitcoin, må du lage en digital signatur som beviser at det er den rettmessige eieren som sender penger.

    Digitale signaturer er forøvrig en meget vanlig komponent i stort sett all annen software du benytter, utover bitcoin. Hver gang du logger inn i nettbanken, åpner en nettside eller laster ned en app sendes det en haug med digitale signaturer frem og tilbake. Dette som en del av den moderne sikkerhetsarkitekturen på internett. 

    Bitcoin Hashing

    Om du har lest eller hørt om bitcoin mining kan det være du har stusset over ordet hashing.

    Tidligere snakket vi om bevis på utført arbeid – Proof of Work. Det arbeidet som utføres, er en lang rekke med hash-beregninger, eller hash-funksjoner. Dette kalles hashing.

    Om du husker tilbake til matematikken på skolen, så har alle funksjoner input og output.

    Vi kan for eksempel ha en funksjon som dobler tall. Med 2 i input får vi 4 som output, og med 11 som input får vi 22 som output. I en hashfunksjon kan vi ha det aller meste som input – for eksempel tall, bitcoin-transaksjoner eller tilfeldig data.

    Outputen vår er alltid et fryktelig langt tall: du kan forvente 77 siffer i svaret.

    Hva er dette godt for, tenker du kanskje?

    Hash-funksjoner har mange bruksområder, men i bitcoins tilfelle er det særlig ett område vi bryr oss om: Det er nemlig helt umulig å gjette utfallet av en hash-funksjon uten å gjennomføre beregningen. 

    Dette høres kanskje litt merkelig ut, men la oss forsøke å forklare det med å gå tilbake til doblingseksempelet vårt.

    Om du ber meg gjøre reversen av funksjonen, så er det en smal sak. Sier du at outputen er 42, så vet jeg at inputen er 21. Å regne ut hva jeg må doble for å få 100 er også lett – nemlig 50.

    Med hash-funksjoner er det annerledes. Vi kan si til deg at 76c1473fde0856128b36ee6c89f4196f51342af0929e949517ff111ad44b7843 er svaret på en hash-beregning. Om du ikke allerede vet svaret, vil det være helt umulig for deg å fortelle meg hva som er inputen.

    Hash-funksjoner er såkalte énveisfunksjoner. Det vil si at det ikke går an å gjette hva du startet med, om du bare har sett svaret. 

    Det er denne matematiske egenskapen bitcoin-mining hviler på.

    Når minere utfører hash-beregninger, skal de i praksis forsøke å finne svaret på en hash-funksjon, slik at svaret er et lavt nok tall.

    Enkelt forklart betyr dette at svaret på matteoppgaven skal være under 100. Spørsmålet blir hva du må gi som input?

    Den eneste måten for minere å finne ut av dette, er å prøve fryktelig mange ganger. De samler sammen alle transaksjonene de ønsker å inkludere i en blokk, noe annen data og til sist litt tilfeldig data.

    Alt dette setter de inn i en hash-funksjon.

    Om svaret var lavt nok har de akkurat laget en gyldig bitcoin-blokk – men mest sannsynlig hadde de ikke korrekt svar. De må dermed endre på den tilfeldige dataen, og prøve på nytt.

    Moderne bitcoin-maskiner klarer å gjøre disse operasjonene svimlende raskt. I skrivende stund er Antminer S19 Pro+ Hyd den raskeste hashing-maskinen på markedet. Den utfører 198 terra-hashes i sekundet. Det betyr at maskinen gjør 198 000 000 000 000 hash-beregninger hvert eneste sekund. Begrip det den som kan. 

    Bitcoin Script

    Whitepaper: ikke omtalt 

    Da Satoshi designet bitcoin gjorde han med vilje systemet meget fleksibelt. I stedet for å komme med en forhåndsdefinert mengde transaksonstyper, inkluderte bitcoin et lite programmeringsspråk – Bitcoin Script.

    Bitcoin Script er et programmeringsspråk som bestemmer hvem som får lov til å bevege på bitcoin.

    De vanligste og enkleste eksemplene er når person A sender penger til person B. Programmet kan da for eksempel si at person B kan bruke disse pengene, om hun fremviser en gyldig digital signatur.

    Bitcoin Script kan også gjøre en del andre operasjoner. Eksempler på slike operasjoner kan være: 

    • Transaksjonen er gyldig, om både person A, B og C alle viser gyldige transaksjoner
    • Transaksjonen er gyldig om person A gjetter riktig svar på en hash-funksjon.
    • Transaksjonen er gyldig kun etter et visst tidspunkt.

    Disse operasjonene kan også kombineres, for eksempel gjennom å si at “enten må betingelse A og B være oppfylt, eller betingelse C må være oppfylt”. 

    Om du har programmert litt før vil dette kanskje høres kjent ut – og om det er forvirrende er det ikke så fryktelig farlig.

    Hovedpoenget er at bitcoin-transaksjoner inkluderer et lite programmeringsspråk, og dette programmeringsspråket lar oss flytte på penger og data gjennom kode.

    Det er dette som kalles smartkontrakter, som kanskje først og fremst forbindes med alternative kryptovalutaer som Ethereum. Bitcoins smartkontrakter var først ute, og er med vilje designet veldig annerledes enn Ethereum sine. Nøyaktig hva forskjellene er og hva de betyr er et stort tema i seg selv, og utenfor rammene for denne artikkelen. 

    Hva er så poenget med denne programmeringen?

    Kort forklart lar den oss bygge mer komplekse systemer, enn kun enkle pengeoverføringer fra person A til B.

    For eksempel kan vi lage multisignaturløsninger, som oppbevarer bitcoin på en tryggere enn ordinære oppbevaringsløsninger. Vi kan også lage såkalte andrelagsnettverk – Layer 2 på engelsk. Eksempler på dette er Lightning, og sidekjeder (sidechains, på engelsk). Dette kommer vi nærmere inn på i senere artikler i denne serien – så her er det bare å glede seg.

    Kryptografen vil rette en stor takk til Torkel Rogstad for uvurderlig bistand i utformingen av denne artikkelen.

    Back