Dette oplæg fortæller om de matematiske principper bag kryptovalua og blockchain. Der er afsæt i følgende tre matematiske temaer.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!
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.
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.
Man kan udforske alle blokke via følgende link: https://live.blockcypher.com.
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 :
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 så 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.
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.
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å .
YouTuberen 3Blue1Brown producerer fremragende videoer om matematik generelt. Nedenfor en video, hvor han forklarer bitcoin og blockchain meget pædagogisk.
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.
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.
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.
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.
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 .
Khan Academy har et forløb omkring modulær aritmetik, som også kommer ind på hurtig eksponentiering.
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.
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.
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 så .
Talteorien, som gør at krypteringssystemet RSA virker er gemt i følgende resultat.
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 så jvf (1.4). Den hemmelige nøgle er nu .
Krypteringen af meddelelsen , hvor finder sted med den offentlige nøgle :
Dekryptering finder sted med den hemmelige nøgle :
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.
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 omMan plejer ikke at underskrive den (ofte lange) oprindelige meddelelse, men versionen som er blevet kørt gennem en kryptografisk hash funktion som SHA-256.
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.
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
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 somHvis 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 .
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.
Lad os se hvordan det diskrete logaritmeproblem kan bruges i kryptografi.
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
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.
Verificer til sidst at den digitale signatur er korrekt.