Hashing — wat is het, cryptografische algoritmen en toepassing

Auteur: IT Sectr Gepubliceerd: 2026-04-02 Leestijd: 8 min

Hashing is het proces van het omzetten van gegevens van willekeurige grootte naar een tekenreeks van vaste lengte, gebruikt voor het controleren van integriteit en veilig opslaan van wachtwoorden. Volgens Open Web Application Security Project (OWASP, 2025) voorkomt correct gebruik van hashfuncties tot 70% van de kwetsbaarheden die verband houden met het lekken van inloggegevens. Cryptografische hashes vormen de basis van digitale handtekeningen, blockchain-technologieën en versiebeheer.

Belangrijkste punten

  • Hashfunctie zet invoergegevens om in een tekenreeks van vaste lengte — digest.
  • Cryptografische hashes hebben de eigenschap van onomkeerbaarheid: op basis van de hash kunnen de originele gegevens niet worden hersteld.
  • SHA-256 — standaard voor cryptografisch hashen aanbevolen door NIST voor moderne systemen.
  • Zout — willekeurige gegevens die aan het wachtwoord worden toegevoegd vóór hashen ter bescherming tegen regenboogtabellen.
  • Hashing wordt veel gebruikt in mobiele apps voor het opslaan van wachtwoorden en het controleren van gegevensintegriteit.

Wat is hashing?

Hashing — het proces van het berekenen van een hashfunctie die een willekeurige set invoergegevens omzet in een bitreeks van vaste lengte, een digest of hashwaarde genoemd. In tegenstelling tot versleuteling is hashing een eenrichtingsproces: het herstellen van originele gegevens uit de hash is onmogelijk.

Basiseigenschappen van hashfuncties

Cryptografische hashfuncties hebben vier verplichte eigenschappen: determinisme (dezelfde invoer geeft altijd dezelfde hash), onomkeerbaarheid (het is computationeel onmogelijk om de invoer uit de hash te herstellen), lawine-effect (verandering van één bit in de invoer verandert gemiddeld de helft van de hashbits) en botsingsbestendigheid (het is computationeel onmogelijk om twee verschillende invoeren met dezelfde hash te vinden).

Verschil tussen hashen en versleutelen

Het is belangrijk om het verschil te begrijpen tussen hashen en versleutelen. Versleutelen is een tweerichtingsproces: versleutelde gegevens kunnen worden ontsleuteld met een sleutel. Hashen is een eenrichtingsproces: na omzetting kunnen gegevens niet worden hersteld. Deze eigenschap maakt hashen ideaal voor het opslaan van wachtwoorden: het systeem slaat alleen de hash op, en zelfs bij een datalek blijven wachtwoorden beschermd.

Cryptografische en niet-cryptografische hashfuncties

Niet alle hashfuncties zijn even geschikt voor beveiligingstaken. De indeling in cryptografische en niet-cryptografische categorieën is van cruciaal belang bij het kiezen van een algoritme voor een specifieke taak in mobiele ontwikkeling.

Cryptografische hashfuncties

Deze functies zijn opzettelijk traag en complex om brute-force-aanvallen te bemoeilijken. Ze moeten bestand zijn tegen botsingen en preimage-aanvallen. De SHA-2-familie (SHA-224, SHA-256, SHA-384, SHA-512) is gecertificeerd door NIST en wordt aanbevolen voor gebruik in overheidssystemen. Voor het hashen van wachtwoorden worden bovendien de algoritmen bcrypt, scrypt en Argon2 gebruikt met instelbare complexiteit.

Niet-cryptografische hashfuncties

Deze functies zijn geoptimaliseerd voor snelheid, niet voor beveiliging. Voorbeelden: CityHash, MurmurHash, xxHash. Ze worden gebruikt in hashtabellen, gegevensdeduplicatie en controlesommen voor snelle integriteitscontrole van niet-kritieke gegevens. Het is belangrijk ze nooit te gebruiken voor het opslaan van wachtwoorden of het verifiëren van digitale handtekeningen — hoge snelheid maakt ze kwetsbaar voor brute-force-aanvallen.

TypeVoorbeeldenToepassingsgebied
CryptografischSHA-256, SHA-3, bcryptWachtwoorden, handtekeningen, TLS
Niet-cryptografischMurmurHash, xxHashHashtabellen, cache
Wachtwoord-KDFbcrypt, scrypt, Argon2Wachtwoordopslag

Laten we de meest gebruikte hashalgoritmen in moderne mobiele ontwikkeling bekijken. Elk heeft zijn sterke en zwakke punten.

SHA-256

SHA-256 — het symbool van moderne cryptografie, aanbevolen door NIST in het kader van de FIPS 180-4-standaard. Het algoritme produceert een 256-bit digest en is het hoofdbestanddeel van TLS-protocollen, blockchain-netwerken en versiebeheersystemen. Volgens het rapport van NCC Group (2025) wordt SHA-256 gebruikt in 96% van de TLS-certificaten voor het ondertekenen van certificate transparency.

SHA-3 — opvolger van SHA-2

SHA-3 — de nieuwste familie hashfuncties, gestandaardiseerd door NIST in 2015 als FIPS 202. In tegenstelling tot SHA-2, gebouwd op de Merkle–Damgård-structuur, is SHA-3 gebaseerd op een andere Keccak-constructie met een sponsfunctie. Dit maakt SHA-3 bestand tegen aanvallen die in de toekomst op SHA-2 zouden kunnen verschijnen. Voor mobiele ontwikkelaars is SHA-3 beschikbaar via standaard cryptografische bibliotheken vanaf Android 7.0 en iOS 13.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

bcrypt voor wachtwoorden

Voor het opslaan van wachtwoorden zijn algemene cryptografische hashes niet voldoende — ze zijn te snel. bcrypt is speciaal ontworpen voor het hashen van wachtwoorden: het bevat zout en een kostenparameter die de rekentijd regelt. Het verhogen van de kosten met een factor 2 verdubbelt de hashtijd, waardoor brute-force-aanvallen ineffectief worden, zelfs op krachtige hardware.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — moderne standaard

Argon2 — winnaar van de Password Hashing Competition (2015), aanbevolen door OWASP als de beste keuze voor het hashen van wachtwoorden. Argon2id — een variant die bestand is tegen side-channel-aanvallen en time-memory trade-off-aanvallen. In tegenstelling tot bcrypt kan Argon2 de uitvoertijd, geheugengebruik en paralellisme afzonderlijk configureren, wat flexibele bescherming biedt tegen verschillende soorten aanvallen.

Toepassing van hashing in mobiele apps

Hashing lost veel praktische taken op in mobiele ontwikkeling — van gebruikersauthenticatie tot het controleren van de integriteit van gedownloade bestanden. Laten we de belangrijkste gebruiksscenario’s bekijken.

Wachtwoordopslag

Het belangrijkste scenario — veilige wachtwoordopslag aan de serverzijde. Bij registratie stuurt de app het wachtwoord naar de server, waar het met zout wordt gehasht met bcrypt of Argon2 en in de database wordt opgeslagen. Bij inloggen hasht de server het ingevoerde wachtwoord en vergelijkt het met de opgeslagen hash. OWASP raadt het gebruik van Argon2id aan met parameters: tijd 2 seconden, geheugen 64 MB, paralellisme 4.

Bestandsintegriteit controleren

Bij het downloaden van grote bestanden, zoals OBB-pakketten of inhoudsupdates, kunnen mobiele apps hun integriteit controleren via hashing. De server publiceert de SHA-256-hash van het bestand en de app berekent de hash van de gedownloade gegevens en vergelijkt ze. Dit garandeert dat het bestand niet is beschadigd of vervangen tijdens de overdracht. Volgens Google Play Console (2025) voorkomt hashverificatie van gecertificeerde apps tot 99,9% van de aanvallen met beschadigde downloads.

Caching en deduplicatie

Hashes worden actief gebruikt voor het bouwen van efficiënte caches en gegevensdeduplicatie. Het adres van een afbeelding of JSON-antwoord wordt gehasht en gebruikt als cachesleutel: bij een herhaald verzoek vergelijkt het systeem de hashes en retourneert het opgeslagen resultaat als de gegevens niet zijn gewijzigd. Voor deze taak zijn niet-cryptografische hashfuncties zoals MurmurHash of xxHash geschikt, die maximale prestaties leveren.

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Veelgemaakte fouten bij het gebruik van hashes

Zelfs ervaren ontwikkelaars maken fouten bij het werken met hashing. Laten we de meest voorkomende problemen bekijken die alle voordelen van cryptografische bescherming teniet kunnen doen.

Gebruik van MD5 of SHA-1

MD5 en SHA-1 — verouderde algoritmen waarvoor praktische botsingsaanvallen bestaan. MD5 werd in 2004 gekraakt door een groep Chinese onderzoekers (botsing binnen een uur). SHA-1 werd in 2017 gekraakt door het team van Google en Centrum Wiskunde & Informatica (SHAttered-aanval). Het gebruik van deze algoritmen in nieuwe projecten wordt volgens de OWASP-classificatie beschouwd als een grove beveiligingsfout.

Hashen zonder zout

Het hashen van wachtwoorden zonder zout — een kritieke kwetsbaarheid. Zout is een willekeurige tekenreeks, uniek voor elke gebruiker, die aan het wachtwoord wordt toegevoegd vóór hashen. Zonder zout geven twee identieke wachtwoorden dezelfde hash, waardoor regenboogtabellen kunnen worden gebruikt voor brute-force. OWASP raadt het gebruik aan van cryptografisch sterk zout met een lengte van ten minste 32 bytes, afzonderlijk gegenereerd voor elke gebruiker.

Onvoldoende aantal iteraties

Zelfs bij gebruik van bcrypt of Argon2 kan de bescherming worden verzwakt door een te lage kostenparameter te kiezen. Volgens OWASP (2025) moet het minimum aantal bcrypt-iteraties 10 zijn (2^10 = 1024 iteraties), en voor Argon2id — rekentijd van ten minste 1 seconde op het doelplatform. Te lage parameters maken brute-force-aanvallen praktisch uitvoerbaar op GPU-farms.

Veelgestelde vragen

Wat is het verschil tussen hashen en versleutelen?

Hashen — een eenrichtingsproces waarvan het resultaat niet kan worden teruggedraaid naar originele gegevens. Versleutelen is een tweerichtingsproces: versleutelde gegevens kunnen worden ontsleuteld met een sleutel. Hashen wordt gebruikt voor wachtwoordopslag en integriteitscontrole, versleutelen voor vertrouwelijke overdracht van gegevens tussen client en server.

Welk hashalgoritme is het beste voor wachtwoorden?

OWASP beveelt Argon2id aan als de beste keuze voor het hashen van wachtwoorden vanwege de configureerbare bescherming tegen GPU-aanvallen en side-channel-aanvallen. Alternatieven: bcrypt (bewezen en eenvoudig in te stellen), scrypt (bestand tegen ASIC-aanvallen) en PBKDF2. SHA-256 en SHA-512 zijn niet geschikt voor wachtwoorden — ze zijn te snel en beschermen niet tegen massale brute-force.

Wat is een hashbotsing en waarom is het gevaarlijk?

Botsing — een situatie waarin twee verschillende invoergegevenssets dezelfde hash produceren. Voor cryptografische hashfuncties moet het vinden van botsingen computationeel onmogelijk zijn. De kans op een SHA-256-botsing voor twee willekeurige berichten is bijvoorbeeld ongeveer 1 op 2^128 — een verwaarloosbaar kleine waarde.

Moet ik handmatig zout toevoegen aan bcrypt?

Nee, bcrypt neemt automatisch zout op in zijn algoritme. Bij aanroep van BCrypt.hashToString() genereert de bibliotheek cryptografisch sterk zout van 16 bytes en voegt het samen met de hash en de kostenparameter in de uitvoertekenreeks in. Scrypt en Argon2 werken op dezelfde manier. Dit is een van de redenen waarom experts aanbevelen om gespecialiseerde KDF te gebruiken in plaats van algemene hashfuncties voor wachtwoordbeveiliging.

Kan hashing worden gebruikt voor bescherming tegen malware?

Ja, hashes worden gebruikt voor het maken van witte en zwarte lijsten van bestanden. Antivirusdatabases bevatten hashes van bekende malware. Aanvallers kunnen echter één byte in een programma wijzigen, waardoor de hash volledig verandert. Daarom gebruiken moderne systemen fuzzy-hashing (SSDeep, TLSH), die semantisch vergelijkbare bestanden vindt, niet alleen exacte overeenkomsten.

Samenvatting

  • Hashing — eenrichtingsomzetting van gegevens naar een tekenreeks van vaste lengte met garantie van onomkeerbaarheid.
  • Cryptografische hashfuncties bieden botsingsbestendigheid en het lawine-effect.
  • SHA-256 — NIST-standaard voor cryptografisch hashen in moderne systemen.
  • Wachtwoord-KDF (bcrypt, Argon2, scrypt) zijn verplicht voor veilige wachtwoordopslag.
  • Zout beschermt tegen regenboogtabellen en moet uniek zijn voor elke gebruiker.
  • MD5 en SHA-1 worden als gebroken beschouwd en mogen niet worden gebruikt in nieuwe projecten.
  • Hashing wordt toegepast voor wachtwoordopslag, gegevensintegriteitscontrole, caching en antivirusbescherming.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook