1 Om bitcoin og kryptovaluta

Kommentarer/spørgsmål?

1.1 Oplæg om kryptovaluta og matematik

Dette oplæg fortæller om de matematiske principper bag kryptovalua og blockchain. Der er afsæt i følgende tre matematiske temaer.

  1. Kryptografiske hash-funktioner og proof of work.
  2. Lidt sandsynlighedsregning omkring den geometriske fordeling.
  3. Digital signatur og det diskrete logaritmeproblem.

1.1.1 Diskret matematik i det supplerende stof

Oplægget kan benyttes som inspiration til det supplerende stof omkring diskret matematik i gymnasieskolen. I denne kontekst er indfaldsvinklen et forløb i Euklids algoritme og regning med kongruenser med formålet at forstå den digitale signatur i RSA kryptosystemet. Alt efter niveau kan man vælge omfanget af talteorien.

Denne vinkel er skitseret i afsnittet Justerbar talteori. For at få en fornemmelse for nogle af elementerne i forløbet kan man kigge på Khan Academys online forløb om modulær aritmetik (med indbyggede opgaver).

Den drivende motivation i forløbet kan feks være nødvendigheden af digital signatur i Bitcons blockchain, hvor sidstnævnte kan forklares til eleverne i overordnede termer evt med referencer til de adskillige YouTube videoer, der findes om blockchain.

Mantraet er at eleverne skal undervises i tal for at have en overordnet forståelse for hvordan deres penge er beskyttet online.

Oplægget kan også bruges som eksempel på anvendelser af sandsynlighedsregning i kernestoffet. Her er motivationen mining algoritmen i bitcoin.

1.1.2 SRP

Oplægget kan også benyttes som inspiration til et SRP forløb i gymnasiet, hvor man går dybere ind i den reelle kryptering, som bruges i bitcoin herunder det diskrete logaritmeproblem.

1.1.3 Interaktiv feedback

Jeg vil meget gerne have feedback på denne version af mit oplæg om bitcoin. Det er muligt at annotere dette interaktive kapitel. Se videoen nedenfor for yderligere instruktioner.

Kommentarer/spørgsmål?

1.2 Introduktion

I December 1998 blev PayPal oprettet som et medium til online betaling for e-handel på nettet. Stifterne inkluderede veritable kendisser som Elon Musk og Peter Thiel. For at kunne hæve beløb fra PayPal er det nødvendigt at have sin egen bankkonto tilknyttet mht overførsler.

Det har længe været en drøm i det kryptografiske samfund at kunne lave sikre internetpenge uden at involvere en tredjepart som PayPal eller en bank. En person på nettet uden en bankkonto skal have mulighed for at modtage og sende penge til en hvilken som helst anden person på nettet uden at en tredjepart er involveret.

1.3 Om bitcoins historie

Denne drøm blev realiseret i et berømt white paper af Satoshi Nakamoto i 2008. Her blev det teoretiske fundament for den første kryptovaluta, bitcoin, lanceret.

Bitcoins historie frem til 2014 er glimrende illustreret på http://historyofbitcoin.org/.

Som en god introduktion til bitcoin kan anbefales Morgan Spurlocks dokumentarfilm om bitcoin nedenfor.

Kommentarer/spørgsmål?

Interessen for bitcoin er vokset eksplosivt det sidste stykke tid og fra at være kurssat til omkring 650 USD for et år siden ligger kursen nu (1/11/2017) omkring 6000 USD.

Det estimeres at den illusoriske Satoshi Nakamoto ejer en million bitcoins, hvilket i dag svarer til 6 milliarder dollars (nummer ca 239 over verdens rigeste og rigere end Donald Trump, som angives til en net worth på 3,1 milliarder dollars på Forbes listen over verdens dollarmilliardærer).

Kursudviklingen på bitcoin (BTC) kan udforskes via nedenstående interaktive graf.

Der er de sidste år kommet adskillige børser for kryptovalutaer i verden. Så vidt jeg ved er der endnu ikke en i Danmark, selvom det er muligt at købe feks bitcoins i Danmark (København).

Der er livlig handel med bitcoins 24/7: https://www.gdax.com/trade/BTC-USD.

Bitcoin var den første decentraliserede kryptovaluta, men siden er over 1000 kryptovalutaer kommet til.

Hele maskineret drives af open source software (skrevet i C++), som kan hentes på GitHub af enhver med netadgang.

1.4 Principperne bag

I kryptovaluta og specielt bitcoin er regnskabet decentraliseret. Der er tale om en slags distribueret netbank, som i princippet ejes af alle på internettet, men med matematisk veldefinerede regler for bogføring af transaktioner.

Det traditionelle finansielle system er afbildet i (A). Her er der en central instans (en bank), som holder øje med pengene. Afbildet i (C) er det distribuerede system, hvor alle med adgang til nettet kan agere bank og bogføre transaktioner.

Regnskabsbogen kaldes for the blockchain. Navnet skyldes at transaktioner organiseres i blokke, som er kædet sammen.

Udfordringen er at få alle de distribuerede banker til at bogføre konsistent i en fælles veldefineret regnskabsbog. Lad os en gang for alle slå fast: Alle knuderne i netværket har adgang til hele blokkæden, alle transaktioner foretaget tilbage til den såkaldte genesis block.

1.4.1 Transaktioner er krypteret med digital signatur

Bitcoin benytter et offentligt nøgle kryptosystem til brug ved digital signatur af transaktioner.

Som bruger på bitcoin netværet har man en 160 bit adresse som feks

En bitcoin adresse er genereret ud fra den offentlige nøgle, som er på 256 bits.

Opgave

Den offentlige nøgle er konstant. Bitcoin adressen er associeret med den offentlige nøgle og kan (bør) genereres på ny for hver transaktion. Hvordan hænger det sammen? Er det usikkert at nøjes med en konstant bitcoin adresse?

Konsulter evt følgende artikel.

Denne adresse bruges af folk, der sender penge til en. En mere teknisk beskrivelse kan findes her. Der er tale om en 160 bit hash af ens offentlige nøgle i ECDSA nøgleparret. Den private nøgle benyttes til digital signatur af ens transaktion, når man sender bitcoins over netværket. Nedenstående kan ikke indskærpes kraftigt nok!

Hvis man mister eller får stjålet sin private nøgle har man tabt alle sine bitcoins.

En af de forhenværende større bitcoin børser Mt Gox fik stjålet 850.000 bitcoins og gik konkurs i 2014.

I bitcoin protokollen benyttes elliptisk kurve kryptografi. En af de smukkeste anvendelser af moderne algebraisk geometri. Det er kritisk at denne digitale signatur implementeres korrekt. Fejlagtige implementationer har ledt til tyveri af bitcoins.

Transaktioner underskrives af afsenderen med hans/hendes private nøgle, organiseres med tidsstempel i blokke og kædes sammen.

Hvordan holder hele verden styr på dette? Hvordan bliver de enige om den samme blokkæde? Hvordan undgår man at en ondsindet person bruger den samme bitcoin to gange?

Svarene på disse spørgsmål er det nyskabende i Nakamotos artikel. For at få godkendt en blok i blokkæden kræves at den er afsluttet med et såkaldt proof of work, som er arbejdet med at løse et tidskrævende matematisk problem hvis løsning nemt kan verificeres.

Processen med at løse dette matematiske problem kaldes mining, fordi man får (miner) bitcoins ved at løse det. Faktisk er dette måden bitcoins bliver født på.

Bitcoin protokollen siger at minere tjener 50 BTC for hver af de første 210.000 blokke, 25 BTC for de næste 210.000 blokke etc. Pt er belønningen 12.5 BTC for at mine en blok.

Quiz

Med protokollen for udbetalingen af bitcoins for mining er der en øvre grænse for hvor mange bitcoins der vil være i fremtiden. Hvor stor er denne (mindste) øvre grænse?
42.000.000 BTC
21.000.000 BTC
84.000.000 BTC
100.000.000 BTC

Bitcoin er en levende organisme og transaktioner bliver foretaget hvert sekund og sat ind i the blockchain. Nedenfor vises transaktioner og mining live fra hjemmesiden https://blockexplorer.com.

1.4.2 Udforskning af the blockchain

Man kan udforske alle blokke via følgende link: https://live.blockcypher.com.

1.5 Mining

Bitcoin skal svare til digitalt guld. En guldmønts værdi svarer til værdien af guldet, som indgår i den. En bitcoins værdi svarer til den mængde strøm, der medgår til at mine (lave) den. I dette afsnit kommer vi ind på hvad det vil sige at mine bitcoins.

Ideen kommer fra en artikel fra 1993, hvor temaet er en protokol for at forhindre junk mail. Computeren skal løse et matematisk problem for at sende en email til modtageren (eller kontakte en server). En email har en standard header , som består af en streng taget fra mængden af strenge over et alfabet, som typisk er computerens synlige tegn. Headeren kunne feks være

Antag nu vi har en uforudsigelig (hash) funktion

hvor er et stort tal (oftest bits).

En uforudsigelig eller kryptografisk hash funktion er en hash-funktion, som er sværd at invertere. I forhold til bitcoin er SHA-256 den interessante kryptografiske hash-funktion. Det skal være umanerligt svært at finde to forskellige strenge og med (et sådant par kaldes en kollision for ). Prøv selv nedenfor ved at indtaste forskellige strenge for og !


x :

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855


y :

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855


Opgaven går nu ud på at beregne en streng , så

hvor er et givet tal. Jo mindre er, jo sværere er opgaven. Den svære matematiske opgave går ud på at finde
starter med et nærmere angivet antal nuller i hex-notation.

Nedenfor et interaktivt element, hvor proof of work illustreres i eksemplet ovenfor. Tryk på knappen for at starte arbejdet med at finde . Strengen markeret med blåt angiver den aktuelle rekord mht antal nuller i hash-funktionen . Nullerne i hash-funktion er angivet med rødt i sidste linje.

Antal hashes: ---
2017:11:1:13:20:niels@math.au.dk:------------------------------
---------------------------------------------------------------
---------------------------------------------------------------

I det nuværende globale bitcoin mining netværk benyttes specialiseret hardware. Bitcoin mining er ikke længere for den almindelige borger, som det var tiltænkt fra starten. Nyere kryptovalutaer som Monero og Ethereum benytter andre mining algoritmer så almindelige GPUer kan benyttes. Så sent som 24/10/2017 blev den alternative bitcoin gold indført, som en fork fra den originale blockchain. Målet med bitcoin gold er at gøre mining mere tilgængeligt.

Javascript applikationen ovenfor har en meget langsom hash rate sammenlignet med feks det globale bitcoin mining netværk, som pt hasher

gange i sekundet. Bitcoin parametrene justeres løbende så man opnår at det tager i gennemsnit 10 minutter at mine en blok.

Quiz

Hvad er sandsynligheden for at output fra SHA-256 starter med nuller ?

1.5.1 Den geometriske fordeling anvendt på mining tid

Betragt et stokastisk eksperiment, hvor sandsynligheden for succes er . Antag nu at eksperimentet udføres indtil man får succes sammenfattet i den stokastiske variabel .

Sandsynligheden for at eksperimentet stopper efter trin er så

svarende til ikke succesrigt udfald i de første trin efterfulgt af succes i det -te trin. Denne fordeling kaldes den geometriske fordeling med sandsynlighed .

Middelværdien for er

Dette fortolkes som den gennemsnitlige ventetid på succes. Hvis man feks slår plat og krone med en fair mønt skal man gennemsnitligt vente to slag på krone.

Formlen (1.1) giver også sandsynligheden for at man skal vente mere end trin på succes som

Bemærk at
Sidste approksimation holder for små pga rækkeudviklingen
Sandsynligheden for at vente længere end forventet ligger altså omkring
for små .

Opgave

  1. Hvor mange hashes kræves i gennemsnit for at ramme nuller?
  2. Find den seneste blok på https://blockexplorer.com. Tæl antallet af ledende nuller i BlockHashen. Hvis vi antager at det tog 10 minutter at lave BlockHashen som proof of work, hvor mange hashes per sekund har nettet så formentlig gennemført?
  3. Hvad sandsynligheden for at en mining tager 20 minutter?

1.6 Bitcoin forklaret af 3Blue1Brown

YouTuberen 3Blue1Brown producerer fremragende videoer om matematik generelt. Nedenfor en video, hvor han forklarer bitcoin og blockchain meget pædagogisk.

Kommentarer/spørgsmål?

1.7 Justerbar talteori

Et forløb i diskret matematik kan som overordnet motivation have sikkerhed af penge online og man kan skrue på forløbet ud fra C, B og A-niveau. Man kan feks vælge at stoppe ved Euklids algoritme og ikke give den fulde underbygning for digital signatur.

1.7.1 Primtal

Talteori er den del af matematikken, som beskæftiger sig med de naturlige tal . Her kan primtal passende uddybes i starten af forløbet som en appetitvækker, måske med visualisering i form af Eratosthenes si (fra Wikipedia):

Man kan illustrere Euklids vidunderlige bevis for at der er uendeligt mange primtal, skitsere primfaktorisering og antyde at store primtal benyttes i kryptografi.

1.7.2 Største fælles divisor og Euklids algoritme

Største fælles divisor af to naturlige tal og introduceres på den enkleste måde, som det største naturlige tal, der går op i både og . Efter nogle indledende eksempler omkring største fælles divisor, kan man guide eleverne i retning af

for for at ende med
hvor
er division af med med rest . Dette er hjørnestenen i Euklids algoritme.

Man bør måske nævne at to tal er primiske, hvis deres største fælles divisor er og nævne (vise ud fra Euklids algoritme) at et primtal går op i et produkt hvis og kun hvis det går op i en af faktorerne.

1.7.3 Euklids udvidede algoritme

Her kommer den første større pædagogiske udfordring: At forklare at Euklids algoritme faktisk giver mere end blot største fælles divisor af og , men også to hele tal (som kan være negative) og , så

Man kan vælge at opstille Euklids algoritme i tabelform ud fra trin og skitsere, hvordan og bliver opdateret fra gang til gang. Et helt præcist bevis føler jeg ikke er nødvendigt her. Jeg tror de færreste gymnasieelever vil kunne forstå notationen i det.

1.7.4 Kongruensregning og endelig aritmetik

Den oprindelige definition, som Gauss skrev ned er meget kortfattet: To tal (nu hele) og er kongruente modulo , hvis går op i . Dette skrives

En første opgave kunne her være at se ud fra (1.3) at
Ethvert tal er kongruent med sin rest modulo . Dette leder så frem til endelig aritmetik med kun tal, hvor man indfører addition og multiplikation modulo .

Multiplikation modulo .

Hovedeksemplet skal her være algoritmen til at udregne modulo , hvor er et meget stort tal. Interessen kan skærpes ved først at spørge: Er der en god ide til at løse følgende problem, når man kun må bruge en enkel lommeregner og ikke Maple: Hvad er resten af
divideret med ?

Khan Academy har et forløb omkring modulær aritmetik, som også kommer ind på hurtig eksponentiering.

1.7.5 Fermats lille sætning

Fermats lille sætning siger at hvis er et primtal, så gælder

for alle tal , som ikke går op i. Dette resultat er adgangsbilletten til at forstå den digitale signatur i RSA. Man kan lade eleverne eksperimentere (som i tabellen nedenfor) og undres over dette resultat.

Fermats lille sætning for og fra cryptofundamentals.

Et bevis kan gennemføres (hvis klassen er til det) ved at benytte at et primtal går op i et produkt hvis og kun hvis det går op i en af faktorerne.

Nu er vi endelig fremme, hvor vi kan forklare den digitale signatur via talteori.

1.8 Digital signatur i RSA

Begynd med at generere to meget store primtal og og lad .

Det er ikke muligt at gå i detaljer med det i gymnasiet, men primtallene bliver kun genereret probabilistisk i.e., de er kun primtal med en vis sandsynlighed (dog meget, meget tæt på ).

Meddelelser som skal krypteres oversættes til tal .

Talteorien, som gør at krypteringssystemet RSA virker er gemt i følgende resultat.

Lad være et (helt) tal og et naturligt tal. Så gælder

Bevis

Her skal man dreje beviset for at komme til at benytte Fermats lille sætning. Første observation er at går op i et tal hvis og kun hvis og gør det. Så vi kan nøjes med at bevise at
( behandles analogt). Hvis er dette rigtigt. Hvis følger dette fra Fermats lille sætning på formen

RSA krypteringssystemet er et offentligt nøgle krypteringssystem. Den offentlige nøgle vælges som et tal primisk med dvs

Vi kan så benytte Euklids udvidede algoritme til at finde tallene og
jvf (1.4). Den hemmelige nøgle er nu .

1.8.1 Kryptering

Krypteringen af meddelelsen , hvor finder sted med den offentlige nøgle :

1.8.2 Dekryptering

Dekryptering finder sted med den hemmelige nøgle :

1.8.3 Hvorfor virker det?

Pga (1.5) er

ud fra Sætning 1.6. Dvs modtageren af en meddelelse krypteret med vedkommendes offentlige nøgle kan læses ud fra kendskab til den hemmelige nøgle .

Kryptering og dekryptering kan som sagt udregnes effektivt via exponentiation by squaring.

1.8.4 Digital signatur via RSA

Digital signatur går ud på at underskrive et dokument elektronisk. Der er ikke tale om en almindelig underskrift. Underskriften afhænger af det underskrevne!

I offentlig nøgle kryptografi skal alle have mulighed for at kunne checke at jeg er den retmæssige underskriver ved at benytte den offentlige nøgle.

Princippet bag digital signatur via RSA er nogenlunde ligetil: En meddelelse underskrives ved hjælp af den hemmelige nøgle som parret , hvor

Alle kan nu verificere med den offentlige nøgle at underskriveren er den rette (kun underskriveren har kendskab til den hemmelige nøgle) ved at checke om

Man plejer ikke at underskrive den (ofte lange) oprindelige meddelelse, men versionen som er blevet kørt gennem en kryptografisk hash funktion som SHA-256.

Nem ID anvender pt digital signatur med SHA-256 og RSA med mindst 2048 bits (dvs tallet er ). Du har som borger dog ikke direkte adgang til din private nøgle, som opbevares på en central server. Adgangen til nøglen er sikret gennem den velkendte to-faktor autentifikationsløsning med nøgleviser/kort.

Her er det lidt interessant at bemærke at krypteringen af bitcoin via det diskrete logaritmeproblem og elliptisk kurve kryptografi anses for at være stærkere end Nem IDs kryptering.

Man kan evt illustrere i klassen at RSA og digital signatur går ud fra enorme tal i praksis ved at inddrage computere (CAS) som nedenfor.

Programmeringssproget python er frit tilgængeligt for alle platforme og har et væld af nyttige biblioteker, som feks :

Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import rsa
>>> (pub, priv) = rsa.newkeys(512)
>>> pub
PublicKey(773210119200510362244948221013384369395793712975685405379287359770670046558601102610
1511729442512782385132059910405865820157668463435425587867747433155067, 65537)
>>> priv
PrivateKey(77321011920051036224494822101338436939579371297568540537928735977067004655860110261
01511729442512782385132059910405865820157668463435425587867747433155067, 65537, 75125391077119
3338515789903737556847363269000220329643910027952465892333386570357824688709264287340055431300
5220241264198438070170490991336173806251072161, 4948461313383035895125571010215329187890541505
284523843836126989339364176784221743, 15625263495733021897191462443560828458083733841982069207
76444667133063669)

Den offentlige nøgle har formen . Den private nøgle har formen . Vi kan underskrive et dokument via den kryptografiske hash funktion SHA-256 og verificere den digitale signatur efterfølgende:

>>> transaktion = 'Overfør 1 bitcoin til Niels'
>>> signature = rsa.sign(transaktion, priv, 'SHA-256')
>>> rsa.verify(transaktion, signature, pub)
True
>>> transaktion = 'Overfør 2 bitcoins til Niels'
>>> rsa.verify(transaktion, signature, pub)
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.7/dist-packages/rsa/pkcs1.py", line 315, in verify
    raise VerificationError('Verification failed')
rsa.pkcs1.VerificationError: Verification failed

1.9 Det diskrete logaritmeproblem

Meget overordnet er det diskrete logaritme problem mht en given abelsk gruppe at løse ligningen

med for givne . Hvis gruppen er de positive reelle tal med multiplikation, så kan (1.6) løses som

Hvis er en endelig abelsk gruppe er der oftest ingen analog til den klassiske logaritme og løsningen af (1.6) anses for at være svær specielt for den multiplikative gruppe

hvor er et stort primtal og som i bitcoins tilfælde for gruppen af punkter
over for en nøjere valgt elliptisk kurver . For en endelig abelsk gruppe kaldes (1.6) det diskrete logaritmeproblem i .

I ovenstående formulering er den diskrete logaritme strengt taget ikke veldefineret, når gruppen er endelig. Med har vi nemlig og dermed
Den diskrete logaritme er det mindste , som opfylder (1.6). Dette mindste betegnes .

Lad os helt konkret kigge på gruppen , hvor er primtallet . Her er en gruppe mht multiplikation af restklasser og den er cyklisk med frembringer . Hvad er

I princippet er der ikke andre metoder end at prøve sig frem med . Det glædede mig at opdage at problemet kan løses i WolframAlpha som

Prøv selv i WolframAlpha.

Hvad giver

som resultat?

Grunder til at det diskrete logaritmeproblem er svært at løse kan man måske ane ved at kigge på potenser af i gruppen for et mindre primtal . Nedenfor et snapshot taget fra bogen An Introduction to Mathematical Cryptography, Hoffstein et al.

Ren Kaos! Dog er den såkaldte Shanks baby-step giant-step algoritme en hurtigere metode til at finde den diskrete logaritme gennegået i videoen nedenfor.

Kommentarer/spørgsmål?

Lad os se hvordan det diskrete logaritmeproblem kan bruges i kryptografi.

1.9.1 Elgamal kryptering

El Gamal krypteringssystemet blev indført af Taher Elgamal i 1985. Det bygger på det diskrete logaritmeproblem.

En bruger Bob vælger en hemmelig nøgle, som er et stort naturligt tal . Dernæst offentliggøres som den offentlige nøgle, hvor

Kryptosystemet bygger på at det er svært at finde ud fra i.e., det diskrete logaritmeproblem er svært i gruppen .

Alice sender en meddelelse til Bob ved først at generere et tilfældigt tal (det er her yderst vigtigt at de genererede tal er naturligt tilfældige) og sender så parret

til Bob, som kan dekryptere det modtagne par og finde den sendte meddelelse som

Opgave

Lad , hvor og . Hvis den hemmelige nøgle er , hvad er da
  1. den offentlige nøgle?
  2. indkodningen af meddelelsen hvis det tilfældige tal er ?
Check også at dekrypteringen af den krypterede meddelelse ovenfor giver det rigtige.

1.9.2 Elgamal digital signatur

Digital signatur mht det diskrete logaritmeproblem er en anelse mere kompliceret end for RSA. Udgangspunktet er stadig en hemmelig nøgle og en offentlig nøgle . Vi vil her tage udgangspunkt i gruppen

Hvis er punkter på en elliptisk kurve modulo som i bitcoins signeringsalgoritme er algoritmen en anelse mere kompliceret. De fleste moderne browsere har ECDSA indbygget.

For flere detaljer omkring elliptisk kurve kryptografi er her et link til Cloudfares blog.

Hvad vil det sige at underskrive en meddelelse med en digital signatur, som kommer fra den hemmelige nøgle ?

Her er meddelelsen et tal , som opfylder . Bob underskriver meddelelsen med sin hemmelige nøgle som

hvor igen er et kryptografisk sikkert tilfældigt tal. Den digitale signatur kan nu verificeres gennem identiteten
hvor er Bobs offentlige nøgle.

Opgave

Lad , og . Udregn først den offentlige nøgle hørende til disse oplysninger. Underskriv dernæest meddelelsen ud fra det tilfældige tal .

Verificer til sidst at den digitale signatur er korrekt.