Nyckelavledningsfunktion (KDF) – definition och användning i kryptografi
Förstå nyckelavledningsfunktioner (KDF): vad de är, hur de säkrar lösenord och återanvänder nycklar i kryptografi, med praktiska exempel och rekommendationer.
I kryptografi skapar en nyckelavledningsfunktion (KDF) en lång hemlig nyckel (som kallas "hash") från en hemlig fras, t.ex. ett lösenord. Resultatet av en nyckelavledningsfunktion kommer att se likadant ut som ett annat resultat från en slumpmässig fras. De används också för att återanvända hemliga nycklar i ett visst format, som att använda en delad hemlig nyckel från Diffie-Hellman-nyckelutbytet för att skicka hemligheter i AES.
Vad är en KDF?
En nyckelavledningsfunktion (KDF) är en ensriktad funktion som tar in en källa av entropi (t.ex. ett lösenord eller ett delat hemligt värde) och eventuellt extra data (salt, kontextinformation) och producerar en eller flera kryptografiska nycklar av önskad längd. KDF:er bygger ofta på hashfunktioner eller HMAC och är designade för att vara svåra att utvinna ursprungsinformationen från.
Användningsområden
- Hashning av lösenord (lagring och verifiering) för att göra brute-force attacker dyrare.
- Derivering av symmetriska krypteringsnycklar (t.ex. AES) från ett delat sekret, till exempel efter ett Diffie-Hellman-nyckelutbyte.
- Nyckelseparation och nyckelhierarkier: skapa separata nycklar för olika ändamål (kryptering, MAC, nyckeluppdatering) utan att dela samma nyckelmaterial direkt.
- Protokoll som TLS, SSH och andra använder KDF:er för att generera sessionnycklar och IV:er från master-nycklar.
Hur fungerar de?
- Salt: Ett unikt, icke-hemligt värde som adderas för att förhindra förbyggda tabeller (rainbow tables) och göra attacker mot flera lösenord oberoende av varandra.
- Iterationer/Stretching: Upprepade tillämpningar av en intern funktion eller hög arbetskostnad gör avläsning (brute force) dyrare för en angripare.
- Memory-hardness: Vissa KDF:er (t.ex. scrypt, Argon2) kräver mycket minne för beräkning, vilket gör specialiserad hårdvara mindre effektiv.
- Extract–Expand: Vissa moderna KDF:er, som HKDF, fungerar i två steg – först extraheras entropi, sedan expanderas den till önskad nyckellängd.
- Determinism: En KDF är deterministisk: samma ingångsvärden (inklusive salt och parametrar) ger alltid samma utdata. För verifiering av lösenord är detta en nödvändig egenskap.
Vanliga KDF:er
- PBKDF2 – enkel och välstuderad; bygger på HMAC och iterationsantal. Används fortfarande i många system.
- scrypt – minneskrävande KDF som gör ASIC-accelererad brute force svårare.
- Argon2 – vinnaren av Password Hashing Competition; finns i varianterna Argon2i, Argon2d och Argon2id (Argon2id rekommenderas ofta för lösenord).
- HKDF – HMAC-baserad KDF med extract–expand-mekanik, vanlig i nätverksprotokoll för att derivera flera nycklar.
Säkerhetsråd och bästa praxis
- Använd välgranskade, standardiserade KDF:er (PBKDF2, scrypt, Argon2, HKDF) — undvik egenutvecklade lösningar.
- Använd alltid ett unikt salt per lösenord/nyckel och spara saltet tillsammans med den avledda nyckeln.
- Välj parametrar (iterationer, minne, parallellism) som gör brute-force praktiskt svårt idag, och tänk på att uppgradera parametrar över tid.
- Om möjligt, använd minneskrävande KDF:er (t.ex. Argon2) för lösenord eftersom de är mer motståndskraftiga mot specialiserad hårdvara.
- Spara också vilken KDF och vilka parametrar som användes så att verifiering och uppgradering fungerar korrekt.
- Överväg att kombinera salt med en serverlagrad "pepper" (hemlig extra bit) för extra skydd, men hantera peppern säkert eftersom den måste vara hemlig.
- Använd konstanttidsjämförelse vid verifiering för att undvika timingattacker.
Exempel (kort)
Efter ett Diffie-Hellman-nyckelutbyte får parterna ett gemensamt hemligt värde. Ett KDF kan användas för att omvandla detta råa delade sekret till en eller flera säkra sessionnycklar (t.ex. en AES-nyckel och en MAC-nyckel), ofta med information om kontext inbakad (protokoll-ID, version, etc.).
Sammanfattning
KDF:er är centrala i modern kryptografi för att omvandla lösenord eller delade hemligheter till säkra nycklar. Rätt val och konfiguration av KDF är avgörande för att motstå brute-force och specialiserade attacker — använd standardlösningar, unika salt, och väl övervägda parametrar.
Använd
Nyckelavledningsfunktioner är viktiga för säkerheten. De gör det möjligt att utvidga en mindre "hemlig fras" till en större nyckel (med en fast längd som bestäms av KDF:s sammanställningsstorlek). Detta gör det svårare att hitta den ursprungliga "hemliga frasen". Nyckelns längd gör det svårare att upptäcka frasen eller den dolda hemligheten genom försök och misstag (dvs. genom brute-forcing), genom att göra det svårt för en dator att gissa den. Ibland läggs en liten mängd slumpmässiga data (s.k. salt) till den hemliga frasen innan den används med en KDF för att göra det svårare att gissa den ursprungliga "hemliga frasen" med hjälp av en lista över kända "hash".
Det gör det säkrare att kontrollera lösenord utan att använda det riktiga lösenordet. I stället för att behålla det riktiga lösenordet behålls en "hash" av nyckeln, och när lösenordet kontrolleras kontrolleras "hash" av det riktiga lösenordet med inmatningen. Vissa programvaror sätter en gräns för längden på ett lösenord och används ibland för att göra större hemliga fraser mindre. KDF:er är också utformade på ett sådant sätt att det kräver en viss ansträngning för en dator att skapa "hash". Detta gör det svårt att göra en förteckning över möjliga kombinationer.
Vanligt använda KDF:er
- SHA-2
- PBKDF2
- Scrypt
- Bcrypt
- Argon2
- Chacha20
Sök