Stel je voor dat je elk stuk data — een enkel woord, een roman, een video van 4 GB — kunt reduceren tot een korte reeks tekens van vaste lengte die het uniek identificeert. Verander een enkele komma in het origineel en de reeks wordt compleet anders. En er is geen manier om het proces om te keren om de originele data te herstellen.
Dat is precies wat een cryptografische hashfunctie doet. Het is een van de meest fundamentele bouwstenen van moderne beveiliging, en het beschermt stilletjes bijna alles wat je online doet.
De vingerafdrukmetafoor
Een hash werkt als een digitale vingerafdruk. Je vingerafdruk identificeert je uniek, maar niemand kan je gezicht reconstrueren op basis ervan. Op dezelfde manier identificeert een cryptografische hash een stuk data uniek zonder te onthullen wat die data is.
Voer een willekeurige invoer in een hashfunctie in en je krijgt een digest (ook wel hashwaarde of checksum genoemd) — een reeks hexadecimale tekens van vaste lengte. SHA-256, een van de meest gebruikte algoritmen, produceert altijd een output van 64 tekens, ongeacht de invoergrootte.
| Invoer | SHA-256 digest (eerste 16 tekens) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Volledige Wikipedia-dump | (nog steeds 64 tekens) |
De vier essentiële eigenschappen
Een functie kwalificeert zich alleen als cryptografische hash als het aan deze eigenschappen voldoet:
- Deterministisch. Dezelfde invoer produceert altijd dezelfde uitvoer, op elke machine, op elk moment.
- Eenrichtingsverkeer (pre-image resistance). Gegeven een hash is het computationeel onhaalbaar om de originele invoer te vinden. Je kunt data niet "ont-hashen".
- Botsingsbestendig. Het is praktisch onmogelijk om twee verschillende invoeren te vinden die dezelfde digest produceren. Voor SHA-256 is de kans op een toevallige botsing ongeveer 1 op 2^128 — een getal groter dan het aantal atomen in het waarneembare universum.
- Lawine-effect. Het wijzigen van een enkele bit in de invoer verandert ongeveer de helft van de bits in de uitvoer. Er is geen detecteerbaar patroon of relatie tussen vergelijkbare invoeren.
Belangrijk onderscheid: Hashing is geen versleuteling. Versleuteling is omkeerbaar met een sleutel; hashing is opzettelijk onomkeerbaar. Je versleutelt data om het te beschermen tijdens transport. Je hasht data om de integriteit te verifiëren of een bewijs op te slaan zonder het origineel te bewaren.
Veelgebruikte hash-algoritmen
MD5 (1991)
- Output: 128 bits (32 hexadecimale tekens)
- Status: Cryptografisch gebroken. Onderzoekers kunnen in seconden botsingen genereren op een laptop.
- Nog te zien bij: Niet-beveiligingschecksums voor bestandsdownloads en legacysystemen.
SHA-1 (1995)
- Output: 160 bits (40 hexadecimale tekens)
- Status: Verouderd voor beveiliging. Google demonstreerde een praktische botsing in 2017 (de "SHAttered"-aanval).
- Nog te zien bij: Oudere Git-repositories, sommige legacy-certificaten.
SHA-256 (2001)
- Output: 256 bits (64 hexadecimale tekens)
- Status: Huidige standaard. Geen bekende praktische aanvallen.
- Gebruikt voor: TLS-certificaten, Bitcoin, wachtwoordhashing, digitale handtekeningen, verificatie van bestandsintegriteit.
SHA-3 (2015)
- Output: Variabel (meestal 256 bits)
- Status: Nieuwste standaard, gebaseerd op een volledig ander intern ontwerp (Keccak-sponsconstructie) dan de SHA-2-familie.
- Gebruikt voor: Toekomstgerichte systemen, Ethereum, situaties die algoritmediversiteit vereisen.
| Algoritme | Outputgrootte | Veilig? | Snelheid |
|---|---|---|---|
| MD5 | 128 bits | Nee | Zeer snel |
| SHA-1 | 160 bits | Nee | Snel |
| SHA-256 | 256 bits | Ja | Gemiddeld |
| SHA-3-256 | 256 bits | Ja | Gemiddeld |
Waar cryptografische hashing wordt gebruikt
Wachtwoordopslag
Wanneer je een account aanmaakt, slaat een goed ontworpen systeem je wachtwoord nooit op in platte tekst. Het slaat de hash op. Wanneer je inlogt, hasht het systeem wat je typt en vergelijkt het met de opgeslagen waarde. Zelfs als de database wordt gehackt, krijgen aanvallers hashes — geen wachtwoorden.
Moderne systemen gaan verder door een willekeurige salt toe te voegen (extra data toegevoegd voor het hashen) en opzettelijk trage algoritmen te gebruiken zoals bcrypt, scrypt of Argon2 om brute-force raden onpraktisch te maken.
Verificatie van bestandsintegriteit
Softwaredistributeurs publiceren SHA-256-checksums naast hun downloads. Na het downloaden bereken je de hash van het bestand op je machine en vergelijk je. Een overeenkomst bewijst dat het bestand niet is beschadigd of gemanipuleerd tijdens het transport.
Digitale handtekeningen
Wanneer je een document digitaal ondertekent, hasht het systeem eerst het document en versleutelt vervolgens de hash met je privésleutel. De ontvanger ontsleutelt het met je publieke sleutel en vergelijkt het met hun eigen hash van het document. Dit is veel efficiënter dan het versleutelen van het hele document en bewijst zowel auteurschap als integriteit.
Blockchain
Elk blok in een blockchain bevat de hash van het vorige blok, wat een onveranderbare keten creëert. Het wijzigen van een eerdere transactie verandert de hash van dat blok, wat de keten vanaf dat punt verbreekt en manipulatie direct zichtbaar maakt.
Waarom MD5 en SHA-1 als gebroken worden beschouwd
Een hash-algoritme is "gebroken" wanneer iemand opzettelijk twee verschillende invoeren kan creëren die dezelfde hash produceren (een botsing). Dit ondermijnt elke toepassing die op uniciteit vertrouwt.
- MD5: Botsingen kunnen in seconden worden gegenereerd. Onderzoekers hebben twee verschillende PDF-bestanden gemaakt met identieke MD5-hashes.
- SHA-1: De SHAttered-aanval in 2017 produceerde twee verschillende PDF's met dezelfde SHA-1-hash, wat ongeveer 6.500 jaar single-CPU-berekening vereiste (haalbaar met cloudresources).
Praktische regel: Gebruik MD5 of SHA-1 nooit voor iets beveiligingsgerelateerds — wachtwoorden, certificaten, digitale handtekeningen of integriteitscontroles waarbij een tegenstander betrokken kan zijn. Gebruik in plaats daarvan SHA-256 of SHA-3.
Verder lezen
Hashing is een van die concepten die intuïtief worden zodra je ermee experimenteert. Probeer een zin te hashen, verander dan één teken en observeer het lawine-effect met eigen ogen.
- Hashes genereren en verifiëren — stapsgewijze tutorial
- Hash-generator — bereken SHA-256, MD5, SHA-512 en meer direct in je browser
- Hash-identificeerder — plak een onbekende hash en identificeer het algoritme
