Blockchain basics: cryptografie. Wat is het en hoe werkt het?

Tientallen jaren hebben wetenschappers geprobeerd digitaal geld te creëren dat los staat van de traditionele banken. Eén voor één zijn deze digitale munten gesneuveld, vaak door het centrale karakter van deze initiatieven. De Bitcoin whitepaper  bracht hier verandering in: voor het eerst was het mogelijk om digitaal geld zonder centrale tussenpartij over te dragen. Ingenieus? Absoluut. Origineel? Dat valt mee. De onderliggende techniek – blockchain – is een slim uitgewerkte combinatie van een aantal bestaande technieken, waarvan peer-to-peer, databases en cryptografie de belangrijkste zijn. In dit eerste artikel van blockchain basics gaan we in op deze laatste: cryptografie.

Korte historie van cryptografie

De oorsprong van cryptografie gaat eeuwen terug – naar de tijd van het oude Egypte – maar ontleent zijn naam aan de Griekse woorden kryptos en grafia: geheim en schrift. In de tijd van de Grieken moest er op lange afstand gecommuniceerd worden tussen generaals. Berichten – en daarmee complete strategieën – konden onderschept worden, wat het noodzakelijk maakte deze berichten onleesbaar te maken voor de onderscheppende partij. Generaal A schreef een bericht in geheimschrift, de boodschapper ging hiermee naar generaal B en deze laatste wist hoe hij dit bericht kon ontcijferen. Als er onderweg iets gebeurde met de boodschapper, was het bericht veilig, de boodschapper daarentegen vaak minder. Een van de eerste methodes van cryptografie is de substitutiemethode of de transpositiemethode:

Output substitutiemethode:

aft bvhvtuvt

Output transpositiemethode:

aut gzessuu

Het oorspronkelijke bericht (input) van beide methodes is “zes augustus”, maar beide berichten zien er anders uit en hebben een andere vorm van ontcijferen. Om het eerste bericht te ontcijferen, dienen alle letters één letter terug te gaan in het alfabet. A wordt Z, B wordt A, etc. Dit is een gemakkelijk te breken encryptie omdat de ontcijfering gebaseerd is op een lineair verband, maar dit kunnen we vermoeilijken door dit te vervangen door een niet-lineair of willekeurig verband: A wordt P, L wordt Q, etc.

In het tweede voorbeeld worden letters met elkaar verwisseld: de Z wordt de vierde letter, de E zesde letter, etc. Dit is over het algemeen een minder sterke vorm van cryptografie, maar het idee achter cryptografie moge duidelijk zijn.

Cryptografie in het digitale tijdperk

Fast-forward 2000 jaar. In de 70-er jaren van vorige eeuw – samen met de opkomst van informatietechnologie – kwam er een boost in onderzoek naar cryptografie en in het huidige tijdperk is cryptografie niet meer weg te denken: denk aan de end-to-end encryptie van berichtendiensten als Whatsapp, het opslaan van wachtwoorden op alledaagse websites, en zo ongeveer ieder computernetwerk. Het onderscheppen van berichten is makkelijker in de digitale wereld, en daarmee is versleuteling belangrijker dan ooit tevoren.

Cryptografische hashfuncties

Cryptografie in Bitcoin gaat net weer een stapje verder dan alledaagse encryptie sleutels. Het Bitcoin protocol maakt gebruik van cryptografische hashfuncties: dit is een combinatie van de eerder beschreven cryptografische beveiliging (maar dan nét een tikkeltje geavanceerder) en een techniek genaamd hashfuncties. Deze techniek zet iedere grootte en vorm van data (de input) om naar een reeks letters en cijfers van vaste lengte (de output). Deze techniek wordt in IT-land veelvuldig gebruikt omdat het de grootte van data ten goede komt en daarmee zoeken binnen grote hoeveelheden data versnelt.

Door deze twee technieken te combineren, onstaan cryptografische hashfuncties. In tegenstelling tot eerdere vormen van digitale versleuteling, is het nagenoeg onmogelijk om vanuit de output terug te gaan naar de input. Dit wordt hiding (letterlijk: verstoppen) genoemd. Bovendien kunnen twee verschillende inputs, (bijna) nooit dezelfde output opleveren. Dit wordt collision resistance genoemd (letterlijk: niet kunnen botsen). De hash van X kan nooit dezelfde hash opleveren als de hash van Y, zoals bijvoorbeeld we te zien is in onderstaande figuur:

De laatste eigenschap van cryptografische hashfuncties is dat er geen simpele manier is om vanuit de ouptut naar de input terug te gaan. Alleen door trial-and-error (dwz: simpelweg verschillende inputs te proberen en dit te blijven herhalen) kan de input achterhaald worden. Dit wordt puzzle friendliness (puzzel vriendelijkheid) genoemd

De eigenschappen op een rij:

  • Hiding: de output lijkt geenszins op de input
  • Collision free: twee verschillende inputs leveren nooit dezelfde output op
  • Puzzle friendliness: door trial-and-error kan relatief simpel de input achterhaald worden door te vergelijken met de output

Bekende cryptografische hash functies zijn MD-5 en SHA-1, maar het Bitcoin protocol, en vele andere cryptocurrencies, maken gebruik van het meer geavanceerde SHA-256, ontwikkeld door de NSA (jongens, lezen jullie mee?). Kort samengevat: iedere vorm van data (input) wordt versleuteld en heeft als resultaat een (bijna) unieke set letters en cijfers van 64 karakters, ofwel 256 bits of 32 bytes.

Als we SHA-256 toepassen op het eerdere voorbeeld, krijgen we het volgende:

Input: zes augustus

Output SHA256: f76be76a7671cea71e8264d7a20f7bca4606a9573cb16ebd96815e15a3b25618

En we zien direct dat alle drie de eigenschappen stand houden:

  • Hiding: door het zien van deze 64 karakters, kan je niet afleiden dat initiële boodschap zes augustus is
  • Collision free: een kleine aanpassing aan de input, levert een compleet andere output op. Als we de spatie tussen de twee woorden weghalen, krijgen we namelijk 9c1b777e724bd249a3d3429de090a6bf45cbfc143bc84304ba0fed03d77bd2d4
  • Puzzle friendliness: de methode om vanuit de output terug te gaan naar de input is relatief simpel, maar vergt extreem veel pogingen en daarmee tijd

Onder deze link kan je zelf eens uitproberen als je benieuwd bent naar hoe dit eruit ziet.

Wellicht is je opgevallen dat we een aantal keer woorden als “nagenoeg onmogelijk” en ‘bijna” hebben gebruikt als het gaat om hashing. Het is namelijk theoretisch wel degelijk mogelijk om vanuit verschillende inputs op dezelfde output uit te komen. Het aantal inputs is namelijk vele malen groter dan het aantal mogelijke outputs (dit is namelijk “slechts” 64 karakters):

De kans hierop is echter zo klein, dat dit te verwaarlozen is. Hoe klein is klein zal je denken? 2256 +1 keer als het even tegenzit en gemiddeld 2128. Dit getal is zo groot, dat een computer die 10.000 hashes per seconde kan berekenen, hier 1027 jaar over doet. Hoeveel?! Als iedere computer die ooit door de mensheid geproduceerd is, vanaf het ontstaan van het universum tot aan nu met deze snelheid zou rekenen, zou de kans alsnog verwaarloosbaar klein zijn om twee dezelfde outputs te vinden. Voorbeeld en uitleg met dank aan de knappe koppen van Princeton.

Cryptografie in het Bitcoin protocol

Waar vinden we cryptografie terug in het Bitcoin protocol? Dit wordt onder andere gebruikt in Bitcoin adressen en het Proof of Work algoritme van miners:

  • Bitcoin adressen: iedere public key heeft een unieke private key. De public key is een hash van de private key, zoals gebruikt in het handtekening-algoritme van Bitcoin: ECDSA (Elliptical Curve Digital Signature Algorithm). De private key wordt gebruikt om transacties te ondertekenen in de blockchain en wanneer vergeven, niet meer terug te halen.
  • Proof of Work algoritme: bij Bitcoin mining moeten miners een complexe puzzel oplossen om zo nieuwe blocks aan de blockchain toe te kunnen voegen en beloond te worden met een uitbetaling in bitcoin. Deze puzzel wordt een hash-puzzel genoemd en werkt (ongeveer) zo: het algoritme geeft de output, miners moeten de input raden met een vooraf aangegeven restrictive (moeilijkheidsgraad). Dit is een willekeurige input die vervolgens gehasht wordt en tot de gegeven output moet leiden. Er is geen andere manier om deze puzzel op te lossen dan te blijven raden. Vandaar ook de naam proof of

Meer weten over deze complexe, maar fascinerende methode van geheimschrift anno 2018? Kijk eens naar hoofdstuk 1 van het (gratis) boek Bitcoin and Cryptocurrency Technologies, geschreven door een vijftal professoren aan Princeton.

By |2018-08-14T13:16:16+00:006 augustus , 2018|