Wat is KDF (Key Derivation Function)?

Home » Hub » Begrippen » Wat is KDF (Key Derivation Function)?

Een Key Derivation Function (KDF) is een cryptografische functie die een wachtwoord of geheime sleutel omzet in een langere, willekeurig uitziende binaire sleutel, die geschikt is voor cryptografische toepassingen.

Key Derivation Function uitgelegd

Een Key Derivation Function (KDF) is een speciaal soort cryptografisch algoritme dat is ontworpen om de veiligheid van versleutelde informatie te verbeteren. Het basisidee is relatief eenvoudig: het neemt een stukje informatie, zoals een wachtwoord of een geheime sleutel, en transformeert het in een langere binaire sleutel die geschikt is voor gebruik in andere cryptografische operaties, zoals encryptie of digitale handtekeningen.

Er zijn verschillende redenen waarom KDF’s belangrijk zijn. Ten eerste kunnen veel cryptografische operaties, zoals symmetrische encryptie, alleen werken met sleutels van een vaste lengte. Echter, de wachtwoorden die mensen typisch kiezen hebben zelden de juiste lengte of vorm. Een KDF kan worden gebruikt om een wachtwoord van elke lengte om te zetten in een sleutel van de juiste lengte.

Ten tweede, het is vaak noodzakelijk om meerdere gerelateerde sleutels te genereren uit een enkele geheime waarde. Bijvoorbeeld, je zou een encryptiesleutel en een authenticatiesleutel nodig kunnen hebben. Een KDF kan worden gebruikt om deze gerelateerde sleutels op een veilige manier te genereren.

Tot slot helpen KDF’s om de beveiliging van wachtwoorden te verbeteren door het moeilijker te maken voor aanvallers om brute-force aanvallen uit te voeren. Ze doen dit door het transformeren van het wachtwoord in een proces dat computationally intensief is, wat betekent dat het veel rekenkracht en tijd kost om het wachtwoord te raden.

Geschiedenis Key Derivation Function

De geschiedenis van Key Derivation Functions (KDFs) is nauw verbonden met de ontwikkeling van cryptografie en computerbeveiliging.

Wachtwoordhashing

In de vroege dagen van computerbeveiliging, werden wachtwoorden vaak in platte tekst opgeslagen, wat betekende dat iedereen die toegang had tot de opslaglocatie de wachtwoorden kon lezen. Dit leidde tot het ontwikkelen van wachtwoordhashing, waarbij wachtwoorden worden omgezet in een vaste reeks tekens met behulp van een hashfunctie voordat ze worden opgeslagen. Dit was een voorloper van moderne KDFs.

PBKDF2

Met de tijd werd het duidelijk dat gewone hashfuncties niet voldoende waren voor het omzetten van wachtwoorden in cryptografische sleutels. Dit leidde tot de ontwikkeling van gespecialiseerde KDFs, zoals PBKDF2 (Password-Based Key Derivation Function 2), die in 2000 werd gepubliceerd als onderdeel van de RSA Laboratories’ Public-Key Cryptography Standards (PKCS). PBKDF2 gebruikt een pseudorandom functie (zoals een hashfunctie) om een wachtwoord en een zout te transformeren in een afgeleide sleutel. Het herhaalt deze transformatie een groot aantal keren om brute-force aanvallen moeilijker te maken.

bcrypt en scrypt

Na verloop van tijd werden nog geavanceerdere KDFs ontwikkeld. bcrypt, bijvoorbeeld, is een KDF die is ontworpen om het geheugen en de rekentijd die nodig is voor het afleiden van een sleutel te maximaliseren, waardoor het extreem moeilijk wordt voor een aanvaller om brute-force aanvallen uit te voeren met gespecialiseerde hardware. scrypt is een vergelijkbare functie die nog meer geheugen gebruikt om het moeilijker te maken voor aanvallers om parallelle aanvallen uit te voeren.

Deze en andere KDFs zijn in de loop der jaren opgenomen in tal van cryptografische protocollen en beveiligingsstandaarden en worden veel gebruikt in moderne software en hardware.

KDF Voorbeelden

Laten we een paar voorbeelden bekijken van hoe een KDF werkt:

  1. Wachtwoordhashing: Stel dat je een website hebt waar gebruikers een wachtwoord moeten invoeren om toegang te krijgen. Je wilt de wachtwoorden van de gebruikers niet in platte tekst opslaan, omdat een aanvaller die toegang krijgt tot de database dan gemakkelijk de wachtwoorden zou kunnen stelen. In plaats daarvan kun je een KDF gebruiken om elk wachtwoord om te zetten in een lange binaire sleutel, en dan alleen de resulterende sleutel opslaan. Wanneer een gebruiker probeert in te loggen, kun je het ingevoerde wachtwoord door dezelfde KDF halen en het resultaat vergelijken met de opgeslagen waarde.
  2. Sleutelafgeleide: Stel dat je een encryptieprogramma hebt dat een geheime sleutel nodig heeft om gegevens te versleutelen. Je wilt niet dat de gebruiker deze sleutel elke keer moet invoeren, dus besluit je om de sleutel af te leiden van het wachtwoord van de gebruiker. De gebruiker voert zijn wachtwoord in, en het programma gebruikt een KDF om dit wachtwoord om te zetten in een lange binaire sleutel die wordt gebruikt voor de encryptie.

In beide voorbeelden is het belangrijk om een ‘salt’ toe te voegen aan het wachtwoord voordat het door de KDF wordt gehaald. Een ‘salt’ is een willekeurige waarde die ervoor zorgt dat zelfs als twee gebruikers hetzelfde wachtwoord kiezen, de resulterende sleutels totaal verschillend zullen zijn. Dit maakt het moeilijker voor aanvallers om vooraf berekende tabellen met gehashte wachtwoorden (rainbow tables) te gebruiken om de wachtwoorden te raden.