Hash achtergrond

Wat is een Hash? - simpele uitleg

Door Patrick op vr, 26/10/2018 - 06:00

Wanneer je leest over blockchain en cryptocurrency's dan ben je vast al vaker de woorden 'hash' en 'hashing' tegengekomen. Wanneer je de blockchaintechnologie goed wilt snappen, dan is het zeker belangrijk om deze termen te kennen. Maar, maak je geen zorgen, na het lezen van dit artikel snap jij het helemaal! 

Navigatie

Wat is hashing?

Hashing is een Engels woord en betekent in het Nederlands 'mengelmoes'. Het is het proces waarbij je een string van iedere lengte omvormt naar een string van een vaste lengte. Een string is in deze context een reeks aan getallen en/of letters. De omvorming van de ene string naar de andere wordt gedaan door middel van een hashing algoritme. Bitcoin gebruikt bijvoorbeeld het SHA-256 algoritme, waar SHA staat voor Secure Hashing Algorithm. Zo'n algoritme zorgt ervoor dat de blockchain veilig blijft.

In deze beginzinnen worden een aantal lastige woorden gebruikt. Voor het gemak kan je hashing zien als een machine waar je iets instopt en vervolgens iets anders uithaalt. Je kan er alle soorten letters en cijfers ingooien en er komt altijd een nieuwe reeks aan cijfers en getallen uit. In het geval van Bitcoin bestaat deze reeks uit 64 tekens. De reeks die eruit komt noemen we een hash

De volgende tabel geeft een aantal voorbeelden van invoer en de daarbij horende hashes. Op deze website kan je zelf woorden en zinnen veranderen naar een hash. Zoals je in de tabel ziet wordt alles omgetoverd tot een reeks van 64 getallen en letters.

Invoer Hash uitkomst
Hallo 753692ec36adb4c794c973945eb2a99c1649703ea6f76bf259abb4fb838e013e
Hoe gaat het met jou? 815cbea3d1a07b54f7eb75ad237234bf1e2996c23d94b60c50663ede13374e26
Met mij gaat het goed. c5c96770ac7745c653d73bf03e42ef1b5babfc3d58839d33dbe80d20340286e5

Transaction hash

Een Bitcoin-transactie wordt ook weergegeven als een hash, dit noemen ze een transaction hash. Om hier een voorbeeld van te geven:
 

Invoer Hash
Alice maakt 2 BTC over naar Bob 0bbd1748f16d2da847698b77ef4f9966c0c79b126d675fee121a5fc5c97ce214

De details van jouw transactie kan je dan opzoeken in de blockchain explorer. Je kopieert de transaction hash en plakt deze in de explorer. Zowel jij als anderen kunnen zien tussen welke twee adressen er 2 BTC is uitgewisseld. De namen van de personen staan er echter niet bij. De data van deze transactie wordt door middel van een Merkle Tree op de blockchain opgeslagen.

Merkle tree

De data van een transactie wordt op de blockchain opgeslagen door de hashes ervan op te slaan. De Merkle tree is een van de manieren om dit te doen en maakt het mogelijk om grote hoeveelheden data efficiënt en veilig op te slaan. Zoals de naam al doet vermoeden is dit een data-structuur die lijkt op een boom. De blaadjes van deze boom bevatten hashes van data die je wilt opslaan in de blockchain.

Zoals in afbeelding 1 is te zien, worden van de transacties een eigen hash gemaakt, van deze 4 hashes worden vervolgens 2 hashes gemaakt en tot slot worden deze twee samengevoegd tot 1 hoofdhash. Deze hoofdhash wordt ook wel de Merkle root of Root Hash genoemd. De Merkle root is dus de hash van de hashes van alle transacties in een block. Het is daarmee de samenvatting van alle transacties, opgeslagen in een block. Een kleine wijziging onderaan de boom zorgt ervoor dat de Merkle root compleet anders wordt. 

De Merkle tree zorgt ervoor dat je transacties kan verifiëren zonder dat je alle tekst van de transactie hoeft op te nemen in de Block Header. Dit is een ruimte die alle informatie van het block voor de blockchain bevat. Een gebruiker kan zijn transactie terugvinden door zijn transaction hash in te vullen bij blockexplorer. Hier kan je dan ook terugvinden in welk block het is opgeslagen. 

Voordelen van een Merkle Tree

  1. Het bundelt een grote hoeveelheid data in één hash. Hierdoor is er minder opslagplek nodig en blijft het systeem snel werken;
  2. Het biedt een manier om de integriteit en geldigheid van data te bewijzen;
  3. Het zorgt ervoor dat blockchain de data in chronologische volgorde kan houden. Het verifieert dat een nieuw block in de blockchain alle informatie bevat van het eerdere block en dat alle data in chronologische volgorde wordt opgeslagen. 
Image
Afbeelding 1 - Merkle Tree

 

Het topje van de Merkle Tree, de Merkle root, is weer een onderdeel van de Block Header.  In afbeelding 2 zie je dat de Merkle Tree de informatie levert voor het Tx_Root. Om hier wat dieper op in te gaan, lopen we de Merkle Tree van even onder naar boven met je door. 

Je ziet in de onderstaande afbeelding dat Transactie 0 (Tx0) en Transactie 1 (Tx1) allebei gehasht worden en daarna Hash0 en Hash1 heten. De Hash0 en Hash1 worden leaf nodes genoemd. Deze twee worden ook weer gehasht en vormen samen Hash01. Deze Hash01 wordt een parent node genoemd. De Hash01 en Hash23 worden ook weer samen gehasht en vormen samen de Merkle Root, die in de afbeelding is aangegeven als Tx_Root. Deze Tx_Root is een van de vier onderdelen van de Block Header. Ieder onderdeel bevat zijn eigen soort informatie.

  1. Prev_Hash: bevat de hash-waarde van het vorige block, in de afbeelding is dit van block 10. Het doel is dat alle blocks aan elkaar worden gelinkt zodat het een keten van blokken kan worden, ofwel blockchain.
  2. Tx_Root: de root-hash-waarde van de Merkle Tree die alle transacties bevat
  3. Timestamp: de tijd waarin het block is gecreëerd
  4. Nonce: ieder willekeurig nummer dat wordt toegevoegd om ervoor te zorgen dat de hashwaarde van dit block lager is dan de target hashwaarde. Het cryptocurrency-netwerk zet een target-waarde voor zijn hash die de miners proberen te raden. Wanneer de miners deze raden, hebben ze een nieuw block gecreëerd en krijgen ze cryptomunten als beloning. Bij Bitcoin zijn dit er op dit moment 12,5 BTC.
Image
Afbeelding 2 - Connectie tussen Merkle Tree en Block Header

 

    Cryptografische hashfunctie

    Om het hashing-proces te doen kan je verschillende soorten hashfuncties gebruiken. Een daarvan is de cryptografische hashfunctie. Deze vorm leent zich perfect voor blockchain en cryptocurrency's. Het bezit 5 eigenschappen die erg handig zijn, namelijk:

    1. Deterministisch
      Dit betekent dat iedere tekst die je invoert altijd zal resulteren in dezelfde hash. Als ik nu opnieuw 'Hallo' invoer dan zal er weer de hash uit de bovenstaande tabel tevoorschijn komen.
    2. Snel rekenen
      De cryptografische hashfunctie kan ontzettend snel een tekst omzetten in een hash. Hierdoor kan het systeem heel snel en efficiënt werken.
    3. De functie werkt één kant op
      Het is bijna onhaalbaar om vanuit de hash de invoertekst te bepalen. Het is niet onmogelijk, maar wel ontzettend lastig om dit te doen. Het is vergelijkbaar met een vingerafdruk. Steeds wanneer jij met dezelfde wijsvinger een vingerafdruk maakt, dan zal het eindresultaat keer-op-keer hetzelfde zijn. Daarentegen is het bijna onhaalbaar om een vinger te vinden die bij een vingerafdruk hoort. Je zou dan aan miljarden mensen moeten vragen of je hun vingers mag testen. Een hash wordt daarom ook wel gezien als een digitale vingerafdruk.
    4. Een kleine aanpassing verandert de totale hash
      Wanneer ik 'Hallo' zonder hoofdletter had geschreven dan was de hash totaal anders geweest:
      Invoer Hash
      Hallo 753692ec36adb4c794c973945eb2a99c1649703ea6f76bf259abb4fb838e013e
      hallo  d3751d33f9cd5049c4af2b462735457e4d3baf130bcbb87f389e349fbaeb20b9

    De volgende video geeft in ruim 3 minuten een visuele weergave van hashing en Merkle Trees:

    Minen van Bitcoin

    De mensen die Bitcoin minen, lossen lastige rekensommen op om een block aan de blockchain toe te voegen. Wat ze in werkelijkheid doen is het raden van de juiste input die hoort bij de hash. Zoals eerder is aangegeven is dit bijna onhaalbaar. Het is een soort loterij voor de miners. Zodra iemand de juiste input raadt, hebben ze een nieuw block gevonden en ontvangen ze 12,5 Bitcoins als beloning. 

    Het zoeken naar de juiste oplossing van de puzzel was eerst mogelijk met je laptop. De som wordt echter steeds lastiger en tegenwoordig heb je speciale apparatuur nodig om er een te vinden. Het kost nu namelijk veel computerkracht. Dit is de reden dat minen tot het consensus mechanisme Proof of Work behoort. 

    Wat is een hashrate?

    De hashrate bepaalt hoe snel het proces van hashing wordt gedaan. Een hoge hash rate betekent dat er meer mensen deelnemen aan het miningproces en hierdoor het systeem goed werkt. Wanneer de hashrate te hoog is, dan wordt de moeilijkheidsgraad naar boven bijgesteld en wanneer hij te laag is, dan zal hij naar beneden worden bijgesteld. 

    Slotwoord

    Hashing is erg belangrijk in de wereld van blockchain en cryptocurrency's. Het zorgt ervoor dat je grote hoeveelheden data kan samenvoegen tot één hash. Hierdoor kan je met minder opslagplek meer data opslaan. Dit is erg belangrijk om het systeem goed te laten werken, ook wanneer het aantal transacties stijgt. Daarnaast is het een goede manier om de data te controleren en vervolgens op te slaan in een chronologische volgorde. 

    We hebben ons best gedaan deze abstracte informatie op een toegankelijke manier uit te leggen. Mocht het zo zijn dat je bepaalde delen niet goed snapt, schroom dan niet om de vraag te stellen op ons Crypto Forum. We gaan graag met je erover in gesprek.
     

     
    Bronnen

     

    Reacties

    Er zijn nog geen reacties.

    Log in of Registreer om een reactie te plaatsen!