Wat is Hashfunctie?

Functie die uit gegevens van willekeurige lengte een waarde van vaste lengte (een hashwaarde) berekent. Hashfuncties voor cryptografie, zoals SHA-256, zijn zo gebouwd dat het praktisch onmogelijk is om uit een hashwaarde de oorspronkelijke gegevens te vinden of twee stukken gegevens met dezelfde hashwaarde te vinden, en ze worden gebruikt voor het detecteren van manipulatie, digitale handtekeningen en de opslag van wachtwoorden.

Japanse benaming: ハッシュ関数

“Hashfunctie” komt voor in 8 oefenvragen uit 3 onderwerpen, bijv. Basis van informatiebeveiliging, Datastructuren en algoritmen, Hardware voor kwantumcomputers.

Vakgebied: Basis van informatiebeveiliging

Eigenschappen die cryptografische hashfuncties moeten hebben

Hashfuncties voor cryptografie moeten drie eigenschappen hebben. Preimage-bestendigheid (eenrichtingseigenschap) betekent dat het moeilijk is een invoer te vinden die een gegeven hashwaarde oplevert. Tweede-preimage-bestendigheid betekent dat het bij een gegeven invoer moeilijk is een andere invoer met dezelfde hashwaarde te vinden. Botsingsbestendigheid betekent dat het moeilijk is willekeurig welke twee verschillende invoeren met dezelfde hashwaarde te vinden. Daarnaast hebben ze de eigenschap dat een wijziging van één bit van de invoer ongeveer de helft van de bits van de uitvoer verandert (het lawine-effect).

Uitvoerlengte en veiligheid

Bij een ideale hashfunctie met een uitvoer van n bits kost het vinden van een preimage met brute force ongeveer 2^n berekeningen, maar door de verjaardagsparadox wordt een botsing al na ongeveer 2^(n/2) berekeningen waarschijnlijk. SHA-256 wordt daarom geacht een sterkte van ongeveer 128 bits tegen botsingen te hebben. Voor MD5 en SHA-1 zijn methoden gevonden om met veel minder berekeningen dan brute force botsingen te maken, dus ze horen niet te worden gebruikt waar veiligheid vereist is, zoals bij digitale handtekeningen.

Belangrijkste toepassingen

Een hashwaarde kan dienen als „vingerafdruk” van gegevens. Door de hash van een gedownload bestand te vergelijken met de officieel gepubliceerde waarde, blijkt of het beschadigd of vervangen is (op voorwaarde dat de officiële waarde zelf via een betrouwbaar kanaal is verkregen). Bij digitale handtekeningen wordt in plaats van een lang document de hashwaarde ervan ondertekend. Voor de opslag van wachtwoorden wordt een salt toegevoegd en worden methoden gebruikt die bewust zwaar zijn gemaakt, zoals bcrypt of Argon2. HMAC, dat een hash met een sleutel combineert, wordt als berichtauthenticatiecode gebruikt om manipulatie te detecteren.

Nu oefenen: vragen over Hashfunctie

Welke uitspraak over een eigenschap van hashfuncties die in de cryptografie worden gebruikt (cryptografische hashfuncties) is juist?

  1. ADe oorspronkelijke gegevens kunnen met een privésleutel uit de hashwaarde worden teruggehaald
  2. BDe hashwaarde wordt langer naarmate de invoer langer is
  3. CDezelfde invoer geeft altijd dezelfde hashwaarde, en een verschil van zelfs één bit in de invoer verandert de hashwaarde ingrijpend en onvoorspelbaar
Antwoord en toelichting tonen

Antwoord: C. Dezelfde invoer geeft altijd dezelfde hashwaarde, en een verschil van zelfs één bit in de invoer verandert de hashwaarde ingrijpend en onvoorspelbaar

Een hashfunctie berekent uit gegevens van willekeurige lengte een waarde van vaste lengte (een hashwaarde of digest). SHA-256 geeft bijvoorbeeld een waarde van 256 bits, ongeacht de lengte van de invoer. Dezelfde invoer geeft altijd dezelfde waarde, en zelfs een kleine wijziging in de invoer verandert de uitvoer ingrijpend en onvoorspelbaar. Hashfuncties voor cryptografie moeten het bovendien praktisch onmogelijk maken om uit een hashwaarde de oorspronkelijke invoer te vinden (eenrichtingseigenschap, preimage-bestendigheid) en moeilijk maken om twee verschillende invoeren met dezelfde hashwaarde te vinden (botsingsbestendigheid). Een hashfunctie is een berekening zonder sleutel en geen versleuteling, dus ze kan niet worden ontsleuteld tot het origineel. Ze wordt gebruikt voor het detecteren van manipulatie, digitale handtekeningen, de opslag van wachtwoorden en meer.

Welke combinatie geeft voor een ideale hashfunctie met een uitvoer van 256 bits het geschatte aantal berekeningen voor een brute-force-aanval in twee gevallen: een invoer vinden die een gegeven hashwaarde oplevert (een preimage-aanval), en willekeurig welke twee verschillende invoeren vinden die dezelfde hashwaarde opleveren (een botsingsaanval)?

  1. APreimage-aanval ongeveer 2^256, botsingsaanval ongeveer 2^128
  2. BPreimage-aanval ongeveer 2^128, botsingsaanval ongeveer 2^256
  3. CZowel de preimage-aanval als de botsingsaanval ongeveer 2^256
Antwoord en toelichting tonen

Antwoord: A. Preimage-aanval ongeveer 2^256, botsingsaanval ongeveer 2^128

Een ideale hashfunctie met een uitvoer van n bits heeft 2^n mogelijke hashwaarden, en elke geprobeerde invoer komt met kans 1/2^n overeen met een gegeven hashwaarde. Een preimage-aanval vergt daarom ongeveer 2^n berekeningen, voor n = 256 dus ongeveer 2^256. Bij een botsingsaanval mogen echter willekeurig welke twee invoeren overeenkomen, dus k geprobeerde invoeren leveren ongeveer k^2/2 te vergelijken paren op. Zodra k^2/2 in de buurt van 2^n komt, dus als k rond 2^(n/2) ligt, wordt een botsing waarschijnlijk; voor n = 256 is dat ongeveer 2^128. Dit is hetzelfde idee als de verjaardagsparadox, waarbij in een groep van 23 personen de kans dat twee dezelfde verjaardag hebben groter is dan 50%, en daarom heet dit een verjaardagsaanval. De sterkte van een hashfunctie tegen botsingen wordt dus geschat op de helft van de uitvoerlengte, en voor een sterkte van 128 bits is een uitvoer van 256 bits nodig.

Veelgestelde vragen

Wat is het verschil tussen een hashfunctie en versleuteling?

Versleuteling is een omzetting met een sleutel die kan worden teruggedraaid (ontsleuteld), terwijl een hashfunctie geen sleutel gebruikt en een eenrichtingsberekening is die niet kan worden teruggedraaid. Hashwaarden worden daarom niet gebruikt om geheimen te bewaren, maar om na te gaan of gegevens gelijk zijn.

Hoeveel bits is een hashwaarde van SHA-256?

256 bits (64 hexadecimale tekens), ongeacht de lengte van de invoer. Een invoer van één teken en een groot bestand geven allebei een waarde van dezelfde lengte.

“Hashfunctie” in de toelichting

Vragen met “Hashfunctie” (8)

  1. Welke uitspraak over een eigenschap van hashfuncties die in de cryptografie worden gebruikt (cryptografische hashfuncties) is juist?
  2. Welke combinatie geeft voor een ideale hashfunctie met een uitvoer van 256 bits het geschatte aantal berekeningen voor een brute-force-aanval in twee gevallen: een invoer vinden die een gegeven hashwaarde oplevert (een preimage-aanval), en willekeurig welke twee verschillende invoeren vinden die dezelfde hashwaarde opleveren (een botsingsaanval)?
  3. Voor het opslaan van wachtwoorden wordt aanbevolen niet een snelle hashfunctie zoals SHA-256 rechtstreeks te gebruiken, maar een methode die bewust zo is ontworpen dat de berekening tijd kost, zoals bcrypt of Argon2. Waarom?
  4. De sleutels 10, 17, 24 en 3 worden in deze volgorde opgeslagen in een hashtabel van grootte 7 (posities 0 tot 6) met de hashfunctie h(k) = k mod 7. Botsingen worden opgelost met lineair proberen (linear probing): de positie schuift telkens één plaats op (na 6 komt 0) tot er een vrije plaats is gevonden. Op welke positie wordt sleutel 3 opgeslagen?
  5. Welke beschrijving van post-kwantumcryptografie (PQC) is juist?
  6. Wanneer een webdienst de wachtwoorden van gebruikers opslaat, voegt hij aan het wachtwoord een willekeurige waarde toe die per gebruiker verschilt (een salt) voordat hij de hashwaarde berekent en opslaat. Wat is het belangrijkste doel van de salt?
  7. Welke uitspraak vergelijkt een berichtauthenticatiecode (MAC) juist met een digitale handtekening?
  8. Welke beschrijving van een botsing (collision) in een hashtabel is juist?

Verwante termen

Digitale handtekening Salt Hashtabel (hash table) GPU Modulo-operatie Post-kwantumcryptografie (PQC) Algoritme van Shor Berichtauthenticatiecode (message authentication code) Cross-site scripting (XSS) Multifactorauthenticatie (MFA)

Naar de woordenlijst