Wat is Hashing?

Delen
Copied to clipboard!
Wat is Hashing?
Luister naar het artikel
00:00 / 00:00

Hashing verwijst naar het proces van het genereren van een vaste productie van een invoer van variabele grootte. Dit wordt gedaan door het gebruik van wiskundige formules die bekend staan als hash-functies (geïmplementeerd als hashing algoritmen). 

Hoewel niet alle hash-functies het gebruik van  cryptografie met zich meebrengen, vormen de zogenaamde cryptografische hash-functies de kern van cryptocurrencies. Daar door kunnen blockchains en andere gedistribueerde systemen een erg hoog niveaus van gegevensintegriteit en veiligheid bereiken.

Zowel conventionele als cryptografische hashfuncties zijn deterministisch. Bepalend zijn betekent dat, zolang de invoer niet verandert, het hashing-algoritme altijd dezelfde uitvoer blijft produceren. Beter bekend als digest of hash.

Gewoonlijk zijn de hashing-algoritmen van cryptocurrencies ontworpen als eenrichtingsfuncties, wat betekent dat ze niet gemakkelijk kunnen worden teruggedraaid zonder grote hoeveelheden programmeringen en middelen. Met andere woorden, het is vrij eenvoudig om de output van de input te creëren, maar relatief moeilijk om in de tegenovergestelde richting te gaan (om alleen de input van de output te genereren). Over het algemeen geldt dat hoe moeilijker het is om de invoer te vinden, hoe veiliger het hashing-algoritme wordt beschouwd.


Hoe werkt een hash functie?

Verschillende hash-functies produceren output van verschillende groottes, maar de mogelijke outputgroottes voor elk hashing-algoritme zijn altijd constant. Het SHA-256-algoritme kan bijvoorbeeld alleen ouputs van 256 bits produceren, terwijl de SHA-1 altijd een 160-bits outputs genereert.

Om te illustreren gaan we de woorden “Binance” en “binance” uitvoeren via het SHA-256 hashing algoritme (het algoritme dat in Bitcoin wordt gebruikt).

SHA-256

Input

Output (256 bits)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Merk op dat een kleine wijziging (Een hoofdletter) resulteerde in een totaal andere hash-waarde. Maar omdat we SHA-256 gebruiken, hebben de uitgangen altijd een vaste grootte van 256-bits (of 64 tekens) - ongeacht de invoergrootte. Het maakt ook niet uit hoe vaak we de twee woorden door het algoritme laten verwerken, de twee ouputs blijven altijd gelijk.

Als we daarentegen dezelfde invoer via het SHA-1-hash-algoritme uitvoeren, hebben we de volgende resultaten:

SHA-1

Input

Output (160 bits)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


De afkorting SHA staat voor Secure Hash Algorithms. Het verwijst naar een set cryptografische hashfuncties die de SHA-0- en SHA-1-algoritmen bevatten, samen met de SHA-2- en SHA-3-groepen. De SHA-256 maakt deel uit van de SHA-2-groep, samen met SHA-512 en andere varianten. Momenteel worden alleen de SHA-2- en SHA-3-groepen als veilig beschouwd.


Waarom is dat belangrijk?

Conventionele hashfuncties hebben een breed scala aan gebruiksmogelijkheden waaronder het doorzoeken van databases, analyses van grote bestanden en gegevensbeheer. Aan de andere kant worden cryptografische hash-functies uitgebreid gebruikt in informatie beveiligingsapplicaties, zoals bericht verificatie en digitale vingerafdrukken. Als het gaat om Bitcoin, zijn cryptografische hashfuncties een essentieel onderdeel van het mining proces en spelen ze ook een rol bij het genereren van nieuwe adressen en keys.

De echte kracht van hashing komt kijken bij het verwerken van enorme hoeveelheden informatie. Je kunt bijvoorbeeld een groot bestand of een set data uitvoeren via een hash-functie en vervolgens de ouput gebruiken om de nauwkeurigheid en integriteit van de gegevens snel te verifiëren. Dit is mogelijk vanwege de deterministische aard van hash-functies: de input resulteert altijd in een vereenvoudigde, compactere output (hash). Met een dergelijke techniek is het niet meer nodig om grote hoeveelheden gegevens op te “slaan”.

Hashing is met name handig in de context van blockchain-technologie. De Bitcoin-blockchain heeft verschillende bewerkingen waarbij hashing is betrokken, de meeste binnen het mining proces. In feite vertrouwen bijna alle cryptocurrency protocollen op hashing om groepen transacties in blokken te koppelen en samen te voegen, en ook om cryptografische koppelingen tussen elk blok te produceren, waardoor er een effectieve blockchain wordt gecreëerd.


Cryptografische hash functies

Nogmaals, een hashfunctie die cryptografische technieken implementeert, kan worden gedefinieerd als een cryptografische hashfunctie. Over het algemeen vereist het breken van een cryptografische hashfunctie talloze brute-force-pogingen. Om een cryptografische hashfunctie “terug“ te zetten, moeten ze raden wat de input was totdat de bijbehorende ouput is geproduceerd. Er is echter ook de mogelijkheid dat verschillende inputs exact dezelfde output produceren, in welk geval een “botsing“ optreedt.

Technisch gezien moet een cryptografische hashfunctie aan drie eigenschappen voldoen om als effectief veilig te worden beschouwd. We kunnen deze beschrijven collision resistance, preimage resistance, en second preimage resistance.

Laten we voordat we alle eigenschap bespreken, de drie verschillen in een aantal korte zinnen samenvatten.

  • Collision resistance: Het is niet haalbaar om twee verschillende inputs te vinden die dezelfde hash produceren als output.

  • Preimage resistance: niet haalbaar om de hash-functie “terug te draaien” (de input van een bepaalde output vinden).  

  • Second-preimage resistance: is niet haalbaar om een tweede input te vinden die botst met een opgegeven input.


Collision resistance

Zoals hier boven beschreven, ontstaat er een botsing wanneer verschillende inputs exact dezelfde hash produceren. Een hashfunctie wordt dus beschouwd als collision-resistant tot het moment dat iemand een botsing vindt. Let op dat er altijs een mogelijkheid bestaat op een botsingen voor elke hashfunctie omdat de mogelijke inputs oneindig zijn, terwijl de mogelijke outputs niet oneindig zijn.

Anders gezegd, een hashfunctie is collision-resistant wanneer de mogelijkheid om een botsing te vinden zo laag is dat miljoenen berekeningen nodig zijn. Dus ondanks het feit dat er geen collision-free hash-functies zijn, zijn sommige ervan sterk genoeg om als resistent te worden beschouwd (bijv. SHA-256).

Onder de verschillende SHA-algoritmen zijn de SHA-0- en SHA-1-groepen niet langer veilig meer bevonden omdat er botsingen zijn waargenomen. Momenteel worden de SHA-2 en SHA-3 groepen beschouwd als resistent tegen botsingen.


Preimage resistance

De eigenschap van preimage resistance is gerelateerd aan het concept van een eenrichtingsfuncties. Een hash-functie wordt als preimage-resistant beschouwd wanneer er een zeer lage kans is dat iemand de input vindt die een bepaalde uitput heeft gegenereerd.

Merk op dat deze eigenschap verschilt van de vorige omdat een aanvaller probeert te raden wat de input was door naar een gegeven output te kijken. Aan de andere kant kan een botsing plaats vinden wanneer iemand twee verschillende inputs vindt die dezelfde output genereren, en het maakt niet uit welke inputs zijn gebruikt.

De eigenschap van preimage resistance is waardevol voor het beschermen van gegevens, omdat een eenvoudige hash van een bericht de authenticiteit ervan kan bewijzen, zonder dat de informatie hoeft te worden vrijgegeven. In de praktijk gebruiken veel serviceproviders en webapplicaties hashes die zijn gegenereerd op basis van wachtwoorden in plaats van de wachtwoorden in platte tekst.


Second-preimage resistance

Om te eenvoudig te houden kunnen we zeggen dat de second-preimage resistance zich ergens tussen de andere twee eigenschappen bevindt. Een second-preimage attack vindt plaats wanneer iemand in staat is om een specifieke input te vinden die dezelfde output genereert van een andere input die hij al kent.

Met andere woorden, een second-preimage attack omvat het vinden van een botsing, maar in plaats van te zoeken naar twee willekeurige inputs die dezelfde hash genereren, zoeken ze naar een input die dezelfde hash genereert die werd gegenereerd door een andere specifieke input.

Daarom is elke hashfunctie die bestand is tegen botsingen ook bestand tegen second-preimage attacks, aangezien deze laatste altijd een botsing impliceren. Men kan echter nog steeds een preimage attack uitvoeren op een collision-resistant functie omdat dit inhoudt dat een enkele input van een enkele output wordt gevonden.


Mining

Er zijn vele handelingen in Bitcoin mining die hash functies met zich meebrengen, zoals het controleren van saldi, het koppelen van transacties input en outputs, en het opslaan van transacties in een blok om een Merkle Tree te vormen. Maar een van de belangrijkste redenen het Bitcoin blockchain veilig is, komt door het feit dat miners veel hashing operaties moeten uitvoeren om uiteindelijk een geldige oplossing te vinden voor het volgende blok.

In het bijzonder moet een miner verschillende inputs proberen bij het creëren van een hash-waarde voor zijn candidate block. In wezen kunnen ze hun blok alleen valideren als ze een outputhash genereren die begint met een bepaald aantal nullen. Het aantal nullen is wat bepalend is voor de mining-moeilijkheid, en het varieert vervolgens de hash-snelheid die aan het netwerk wordt besteed.

In dit geval geeft de hash-snelheid aan hoeveel computerkracht wordt geïnvesteerd in Bitcoin-mining. Als de hashsnelheid van het netwerk toeneemt, past het Bitcoin-protocol automatisch de mining-moeilijkheidsgraad aan, zodat de gemiddelde tijd die nodig is om een block te minen bijna 10 minuten blijft. Als verschillende miners daarentegen besluiten te stoppen met minen, waardoor de hash-snelheid aanzienlijk daalt, worden het mine-difficulty aangepast, waardoor het gemakkelijker wordt te minen (totdat de gemiddelde bloktijd weer op 10 minuten uitkomt).

Let op dat de miners geen botsingen hoeven te vinden omdat er meerdere hashes zijn die ze kunnen genereren als een geldige output (vanaf een bepaald aantal nullen). Er zijn dus verschillende mogelijke oplossingen voor een bepaald blok, en miners hoeven er maar één te vinden - volgens de waarde die wordt bepaald door de mining difficulty. 

Omdat Bitcoin-mining een kostenintensieve bezigheid is, hebben mijnwerkers geen reden om het systeem te saboteren, omdat dit tot aanzienlijke financiële verliezen zou kunnen leiden. Als meer miners lid worden van een blockchain, hoe groter en sterker de blockchain wordt.


Tot slot

Het lijdt geen twijfel dat hashfuncties essentiële hulpmiddelen zijn in de informatica, vooral wanneer het gaat om enorme hoeveelheden gegevens. In combinatie met cryptografie kunnen hashing-algoritmen behoorlijk veelzijdig zijn en op veel verschillende manieren beveiliging en authenticatie bieden. Als zodanig zijn cryptografische hashfuncties van vitaal belang voor bijna alle cryptocurrencies-netwerken, dus het begrijpen van hun eigenschappen en werkingsmechanismen is zeker nuttig voor iedereen die geïnteresseerd is in blockchain-technologie.

Loading