Denna artikel är ett utdrag ur boken Layman’s Guide to Bitcoin av Logan Brutsche och publiceras här med författarens tillstånd.
Kryptografi är vetenskapen om att tillämpa matematiska funktioner på databitar för att garantera deras säkerhet.
En hel del populär fiktion innebär att alla system kan hackas, så länge du har en tillräckligt bra hackare. Denna “Hollywood-hacking” är inte hur den verkliga världen fungerar – en hacker måste hitta en sårbarhet i ett system att utnyttja, till exempel ett olåst serverrum, ett lätt att gissa lösenord, en oskyddad nätverksport eller en “bakdörr” installeras som ett insidajobb för att få obehörig åtkomst senare.
Även om det är sant kan vi aldrig garantera att ett visst system inte har några sårbarheter – trots allt är system gjorda av ofullkomliga människor – känslan att “allt kan hackas” är falskt. Sedan början av 90-talet har vi haft tillgång till kryptografiska tekniker som helt enkelt är immuna mot hacking. Det är tillämpningen av sådana tekniker som ibland kan ge utrymme för exploatering.
Kryptografi i sig kan inte hackas för att skapa en förfalskad kryptografisk signatur (definieras inom kort), precis som matematik inte kan hackas för att göra 2 + 2 = 5 – även om både kryptografi och matematik kan användas felaktigt. Om ett system som använder kryptografi misslyckas beror det på att en designer använde kryptografi felaktigt. Det är inte för att kryptografi inte fungerade, eller för att någon “hackat” kryptografin – precis som det inte är matematikens fel om din bank misshandlar ditt konto eller e-postfelet när din mamma laddar ner en okänd bilaga och får ett datavirus . Detta är en viktig skillnad, eftersom Bitcoin är mycket direkt en tillämpning av etablerad kryptografi.
Kryptografi är inte en ny, okontrollerad teknik. Alla de kryptografiska tekniker som används av Bitcoin har använts sedan starten av Internet och är väsentliga för många vanliga internetprotokoll som används varje dag. Vetenskapen om kryptografi anses vara tillförlitlig och nödvändig av datavetenskapare på samma sätt som raketvetenskap anses vara tillförlitlig och nödvändig av NASA.
Keypairs: The Cornerstone of Cryptography
Tangentbord är hörnstenen i kryptografin som används i blockkedjor. Ett tangentbord har två delar: en privat nyckel och en offentlig nyckel. Dessa nycklar är egentligen inget annat än mycket stora siffror med en specifik matematisk relation, som används istället för lösenord och användarnamn.
Du skulle hantera en offentlig nyckel som ditt förnamn eller ett användarnamn: i de flesta fall delar du den med alla som frågar, och de som har den kan använda den för att referera till eller kontakta dig. Det är knutet till ditt rykte (eller i Bitcoins fall din transaktionshistorik), så du kan ha flera offentliga nycklar (och därmed flera tangentbord) som du använder för olika ändamål. En offentlig nyckel kan användas för att referera till eller visa ett konto, men kan inte i sig själv auktorisera någon åtgärd på det kontot.
Den privata nyckeln ska behandlas som ett lösenord: den ska inte delas med någon och används för att autentisera vissa åtgärder, som att skicka BTC.
Men det finns en viktig skillnad mellan en privat nyckel och ett lösenord. För att använda ett lösenord måste du skicka ut det till en person eller server så att det kan kontrolleras mot deras register. Du måste lita på att lösenordet hanteras ansvarsfullt efter att det har skickats. Däremot kan en privat nyckel användas för att autentisera dig själv utan att skicka den någonstans. Det enda stället det någonsin har lagrats eller använts direkt är på din lokala enhet.
Detta är viktigt, för om du kan autentisera dig själv utan att skicka hemligheten någonstans kan du behålla fullständig kontroll över dess säkerhet – du är inte sårbar för andra systems säkerhetsfel. Detta är en väsentlig del av det som gör Bitcoin obackbar. Det finns inga lösenord eller privata nycklar lagrade på Bitcoin själv för en angripare att kompromissa, och ändå kan användare fortfarande autentisera transaktioner.
Men hur kan du använda en privat nyckel för att autentisera en transaktion, om du aldrig skickar den privata nyckeln någonstans? Svaret har att göra med det matematiska förhållandet mellan privata och offentliga nycklar: kryptografiska signaturer.
Kryptografiska signaturer
Det finns flera olika tekniker för att generera och validera kryptografiska signaturer, och de matematiska satser som gör det möjligt för dem att arbeta ligger långt utanför tillämpningsområdet för denna artikel. För de som inte känner till kryptografi kanske processen som beskrivs här initialt låter helt omöjlig. Jag minns tydligt att jag hade detta intryck när jag började forska i Bitcoin för fyra år sedan.
För nu kommer jag helt enkelt att notera igen att dessa tekniker används i många vanliga internetprotokoll och är en etablerad del av informationsvetenskap.
Föreställ dig två personer, Alice och Bob, som redan har bytt offentliga nycklar personligen. Alice vill skicka ett meddelande till Bob, men Bob är en mycket misstänksam person och litar inte på att meddelandet faktiskt kom från Alice om han inte kan bevisa det matematiskt, över alla tvivel. För att underlätta detta bevis godkänner de att använda en kryptografisk signatur.
För att generera signaturen använder Alice sin dators algoritm för signaturgenerering, som tar som inmatning hennes privata nyckel och hennes fullständiga meddelande och genererar en kryptografisk signatur. Sedan skickar hon Bob detta meddelande / signaturkombination – men avgörande, skickar inte sin privata nyckel.
När Bob tar emot meddelandet och signaturen har han en kompletterande algoritm för signaturvalidering att använda. Denna algoritm tar som inmatning meddelandet och signaturen och bestämmer offentlig nyckel till tangentbordet som Alice använde för att generera signaturen. När Bob ser sin algoritm mata ut Alis offentliga nyckel har han matematiskt bevisat att signaturen måste ha genererats med Alice tangentbord, även om han inte vet och inte kan beräkna den privata halvan av Alice..
Sätt mer kortfattat, den här kryptografiska signaturprocessen gör det möjligt för Bob att verifiera att meddelandet inte skapades eller modifierades av någon tredje part och måste ha genererats med Alices privata nyckel utan att behöva (eller kunna) känna hennes privata nyckel. Allt han behöver är meddelandet / signaturkombinationen och hennes offentliga nyckel.
Intuitivt verkar detta omöjligt, och du kan känna att du har missförstått något. Om Alice privata och offentliga nycklar är så nära besläktade och Alice använde sin privata nyckel för att generera signaturen som Bob får, hur kan han då hämta sin offentliga nyckel men inte hitta sin privata nyckel? Svaret på detta kräver en mycket djupare förståelse av matematik än vad de flesta har, och ligger långt utanför ramen för denna bok.
Ändå är den här tekniken beroende av och används varje dag och anses vara solid i kryptografisamhället. När du besöker en webbplats och dess adress börjar med https, anger “s” att webbplatsen har validerat sig själv med en kryptografisk signatur. Din dator använde en signaturvalideringsalgoritm, precis som Bob gjorde i exemplet ovan, för att verifiera att webbplatsen verkligen kom från rätt knappsats. Denna kryptografiska signatur är beroende av för att säkerställa att ytterligare interaktion mellan dig och webbplatsen är krypterad och giltig. Om detta test misslyckas kommer moderna webbläsare att varna dig och flagga webbplatsen som farlig.
Tillräckligt stora siffror
Tidigare nämnde jag kort att privata och offentliga nycklar fungerar som användarnamn och lösenord, men i verkligheten är det inget annat än extremt stora siffror med en speciell matematisk relation. Med tanke på det får jag ofta följande frågor:
”Kan inte någon bara ha en dator gissning eller räkna igenom en massa siffror och prova dem som privata nycklar? Skulle de inte så småningom köra över en privat nyckel i något riktat knappsats och därigenom få kontroll över den identiteten? ” I fallet med Bitcoin skulle detta tillåta en angripare att stjäla de pengar som innehas av något tangentbord.
Det är en bra fråga, och ändå händer det inte. Som tidigare nämnts finns det flera Bitcoin-adresser med miljontals dollar i BTC som inte har flyttat på flera år – även om allt som behövs för att stjäla det är rätt privat nyckel – rätt stort antal! Om du kan gissa den privata nyckeln till dessa adresser är pengarna dina att skicka var som helst. Till skillnad från ett lösenord kan du kontrollera privata nycklar lokalt på din egen maskin, och det finns ingen server som begränsar hur många gånger eller hur snabbt du provar dem.
Så varför har inte någon stulit dessa pengar ännu? Svaret ligger i den nästan absurda storleken på siffrorna som används som privata nycklar. Dom är tillräckligt stor.
Låt oss börja med ett enkelt tankeexperiment. Föreställ dig att din privata nyckel var tillräckligt stor för att om alla världens datorer fungerade tillsammans, skulle det ta dem hela 24 timmar att brutet gissa det. Om du lägger till bara en siffra till din privata nyckel skulle det finnas tio gånger fler permutationer för datorerna att gå igenom, så det skulle ta tio dagar istället för en. Sex ytterligare siffror skulle ge det 27 000 år.
I båda fallen förblir generering av den privata nyckeln – som bara kräver förmågan att skapa slumptal – trivialt. Att använda den privata nyckeln för att generera signaturer, liksom att kontrollera dessa signaturer mot den offentliga nyckeln, förblir också beräkningsenligt. Men det arbete som krävs för att gissa den privata nyckeln växer exponentiellt med varje extra siffra. För att göra privata nycklar ”immuna” mot gissning i kraft, behöver vi bara lägga till tillräckligt med siffror – vi behöver bara göra dem tillräckligt stora.
Så hur enormt är tillräckligt stort? De privata nycklarna som används i Bitcoin är 256-bitars heltal, vilket motsvarar ett tal som är sjuttiosex siffror långt. Kraften i storleken på detta nummer är otrolig. Följande illustration är starkt härledd från Bruce Schneiers bok Tillämpad kryptografi, och är en övertygande demonstration av tillräckligt stort antal.
Först måste du inse att en specifik konsekvens av termodynamikens andra lag är att det krävs ett minimum av energi för att ändra en enda binär bit av information (ändra a 1 till 0 eller vice versa). Detta betyder att varje beräkningsprocess kräver lite energi att utföra, oavsett vilken hårdvara som används.
Antag nu att du bara kunde utnyttja solens hela energiproduktion för att driva en specialdesignad dator, vars uppgift är att räkna igenom eller gissa privata nycklar, i hopp om att hitta den privata nyckeln till ett tangentbord (som kan styra BTC).
Med lite matematik och termodynamik kommer du att upptäcka att en perfekt effektiv dator kan räkna genom 2178 värden med tanke på solens hela årliga energiproduktion. Om vi delar upp detta värde i antalet möjliga privata nycklar, 2256, finner vi att denna hypotetiska dator bara skulle kunna gissa eller räkna genom 0.0000000000000000000003% av det totala antalet möjliga privata nycklar – med tanke på hela solens årliga energiproduktion.
Dessutom räknas det bara och inkluderar inte den mycket mer komplexa uppgiften att faktiskt kontrollera varje privat nyckel för att se om den motsvarar rätt offentlig nyckel. Så i 0,000000000000000000000003% chansen att den här datorn inträffade över rätt privata nyckel i slutet av ett år skulle den inte ens inse det.
Dessa siffror har inget att göra med enheternas teknik; de är de maximala som är möjliga enligt de termodynamiska lagarna som har fastställts sedan 1930-talet. Och de antyder starkt att brute-force-attacker mot 256-bitars nycklar (som Bitcoin använder) kommer att vara omöjliga tills datorer är byggda från något annat än materia och upptar något annat än utrymme.
Detta är kraften i tillräckligt stora antal. Det spelar ingen roll hur bra en hackare är. Om han inte kan utnyttja kraften från tre hundra sextillion solar i ett år, eller en sol i tre hundra sextillion år, kan hans dator inte ens räkna genom alla privata nycklar – än mindre testa eller på annat sätt använda dem.
För en mer ingående titt på Bitcoin och kryptografi, plocka upp Logan Brutsches bok, Layman’s Guide to Bitcoin.