Cryptografische hashfunctie

Definitie

Een cryptografische hashfunctie is een wiskundig algoritme dat willekeurige invoergegevens, hoe groot of klein ook, omzet in een hash van vaste lengte. Sommige moderne versies, eXtendable Output Functions (XOF's genoemd), kunnen uitvoer produceren met een aanpasbare lengte. Hashfuncties hebben een aantal essentiële eigenschappen: ze zijn deterministisch, wat betekent dat dezelfde invoer altijd dezelfde uitvoer oplevert; ze zijn preimage-resistent, waardoor het praktisch onmogelijk is om een ​​hash om te keren en de oorspronkelijke invoer te vinden; ze zijn botsingsbestendig, waardoor het vrijwel onmogelijk is om twee verschillende invoeren te vinden die dezelfde hash produceren; en ze vertonen het lawine-effect, waarbij zelfs een kleine verandering in de invoer resulteert in een volledig andere uitvoer. Bitcoin gebruikt SHA-256 voor mining en transactiehashing, terwijl Ethereum Keccak-256 gebruikt, een variant van SHA-3. Hashfuncties vormen de basis van blockchainbeveiliging — ze maken alles mogelijk, van het bewijzen van werk bij mining tot het creëren van Merkle-boombewijzen en het ondertekenen van transacties.

Eigenschappen van hashfuncties geïllustreerd

SHA-256 hash-voorbeelden: Invoer: “Hello” Uitvoer: 185f8db32271fe25f561a6fc938b2e26…

Invoer: “hello” (kleine letters) Uitvoer: 2cf24dba5fb0a30e26e83b2ac5b9e29e… → Volledig anders (lawine-effect)

Invoer: filmbestand van 10 MB. Uitvoer: nog steeds slechts 64 hexadecimale tekens (256 bits) → Vaste uitvoergrootte, ongeacht de invoergrootte.

Demonstratie van preimage-resistentie: Doel: Een invoer vinden die "0000abc…" produceert. Enige methode: Brute force (miljarden invoeren proberen). Bitcoin-mining: Precies dit – een nonce vinden die een hash produceert die lager is dan het doel. Bij 500 exahash/seconde (Bitcoin-netwerk): ~500,000,000,000,000,000,000 pogingen/seconde.

Botsingsbestendigheid: Doel: Twee verschillende invoerwaarden vinden die dezelfde hash opleveren. SHA-256: Geen botsingen gevonden (2^128 bewerkingen om er één te vinden). SHA-1 (verouderd): Botsingen gevonden (Google, 2017) → Niet langer betrouwbaar.

Hashfuncties gebruikt in cryptografie

Hash-functie Uitvoerformaat Gebruikt in Status
SHA-256 256 beetjes Bitcoin (mining, transacties) Beveilig
Keccak-256 256 beetjes Ethereum (adressen, transacties) Beveilig
SHA-3-256 256 beetjes Enkele nieuwere protocollen Beveilig
BLAKE2/BLAKE3 Variabele (als een XOF) Zcash, enkele protocollen Veilig, sneller
SHA-1 160 beetjes Verouderd (niet meer beschikbaar) BESCHADIGD (botsing geconstateerd)
MD5 128 beetjes Verouderd (niet meer beschikbaar) KAPOT (botsing triviaal)
RIPE®-160 160 beetjes Afleiding van Bitcoin-adressen Beveiligd (met SHA-256)

FAQ

V: Waarom kunnen we een hash niet omkeren om de invoer te vinden?

Hashfuncties maken gebruik van niet-omkeerbare wiskundige bewerkingen – ze gooien opzettelijk informatie weg. Je kunt verifiëren dat hash(input) = output, maar je kunt hash(output) → input niet wiskundig omkeren. De enige bekende algemene aanval is brute force: probeer veel inputs totdat je er een vindt die de gewenste hash oplevert. Voor 256-bits outputs zijn hiervoor ongeveer 2^256 pogingen nodig – meer dan het aantal atomen in het waarneembare universum. Deze onomkeerbaarheid maakt hashfuncties nuttig voor wachtwoordopslag, digitale handtekeningen en proof-of-work.

V: Wat is het "lawine-effect" en waarom is het belangrijk?

Het lawine-effect houdt in dat het wijzigen van zelfs maar één bit (één teken) in de invoer een volledig andere hash-uitvoer oplevert – doorgaans verandert ongeveer de helft van de bits in de uitvoer. Dit is van belang voor de beveiliging van blockchain: als een blokheader ook maar een klein beetje wordt gewijzigd (om een ​​tijdstempel of een transactie te veranderen), verandert de hash volledig en wordt deze ongeldig, waardoor het volledige bewijs van werk opnieuw moet worden uitgevoerd. Hierdoor is de transactiegeschiedenis van blockchain in feite onveranderlijk.

V: Hoe worden hashfuncties gebruikt in digitale handtekeningen?

In plaats van een groot document direct te ondertekenen, hash je het document eerst (wat 256 bits oplevert, ongeacht de grootte van het document), en onderteken je vervolgens de hash met je privésleutel. Dit is efficiënt (het ondertekenen van een hash met een vaste grootte is veel sneller dan het ondertekenen van een bestand van een gigabyte) en waarborgt de veiligheid (de handtekening bewijst dat je dit specifieke document hebt ondertekend – elke wijziging verandert de hash en maakt de handtekening ongeldig). Alle blockchain-transactiehandtekeningen volgen dit patroon.

Nieuws & Evenementen