Nieuwsbrief

Blijf wekelijks op de hoogte van het beste uit De Kennis van Nu en het laatste nieuws!

hash1

Een hash-functie maakt van een willekeurig lange rij cijfers een unieke 'handtekening' van 128 of 256 bits (~ 40 of 80 decimale cijfers). Een goede hash maakt het onmogelijk om de oorspronkelijke rij, of zelfs maar een deel daarvan, te reconstrueren. Ook moet het onmogelijk zijn, om een tweede rij te verzinnen die dezelfde hash heeft *. Tenslotte moeten twee rijen cijfers die maar op één punt verschillen, toch een totaal verschillende hash hebben.

* het is weliswaar onvermijdelijk dat heel veel rijen dezelfde hash hebben – immers, rijen kunnen veel langer zijn dan hun hash, dus daar zijn er veel meer van - maar het moet onmogelijk zijn om die tussen de talloos veel mogelijke rijen te vinden.

Echte hash-functies zijn zo gecompliceerd dat ze alleen met een computer zijn toe te passen. Hier presenteren we de Wtnschp10 hash, die ook met potlood en papier kan:
Stel dat we een 10-cijfer hash willen maken van de eerste 25 decimalen van het getal pie: 141592 6535897932384626433
Schrijf de decimalen in het diagram van links naar rechts en van boven naar beneden. Bepaal in elke kolom en elke rij de som van de vijf cijfers, waarbij je alleen op het laatste cijfer van de optelling let (dus in de bovenste rij 1+4+1+5+9 = 20 = 0).
De Wtnschp10 hash is dan 0163858546. Je kunt je voorstellen, dat het, gegeven zo'n hash, lastig is om het diagram zo in te vullen dat alle tien de optellingen kloppen, al zal dat altijd op heel veel manieren kunnen.
Bij een volwaardige hash-functie is het in de praktijk onmogelijk om, gegeven een volledige 256-bits hash, een rij getallen te vinden die precies die hash heeft. Wat wel kan, is een rij vinden die maar gedeeltelijk dezelfde hash heeft, of begint met een voorgeschreven serie getallen, bijvoorbeeld een aantal nullen. Dit is de opgave die een miner moet oplossen om nieuwe bitcoins te delven.
In de Wtnschp10 hash-functie komt zo'n opgave bijvoorbeeld neer op het diagram zodanig invullen dat je een hash krijgt van de vorm ?0?0?0?0?0. Nb: de nullen staan hier om en om, want vijf nullen aan het begin is wel heel makkelijk op te lossen.        

hash2

Als je een hash wilt maken van een rij van meer dan 25 cijfers, kun je als volgt te werk gaan: vul de hash van de eerste 25 cijfers in een leeg diagram in (dit zijn de tien rode cijfers; diagonaal verspreid zodat elke kolom en elke rij twee cijfers van de hash bevat). In de overgebleven hokjes kun je nu 15 nieuwe cijfers invullen (in dit voorbeeld de volgende 15 decimalen van pie: 832795028841971).
De nieuwe hash wordt 8010111017. Zo kun je achereenvolgens 25, 40, 55, 70,.... cijfers hashen.
In het bitcoin-algoritme wordt dit ook gebruikt: iedere nieuwe transactie levert een nieuw blok cijfers op, die word gecombineerd met de meest recente hash van alle vorige transacties tot een nieuwe hash.

Dit is slechts een simpel voorbeeld om het principe duidelijk te maken, het is veel te zwak voor serieuze toepassingen.