Nøgleafledningsfunktioner: PBKDF2, bcrypt og Argon2
Sammenlign algoritmer til hashing af adgangskoder ud fra deres modstandsdygtighed over for GPU- og ASIC-angreb, og forstå, hvordan arbejdsfaktorer og memory hardness justeres.
Nøgleafledningsfunktioner: PBKDF2, bcrypt og Argon2 er en gratis Cloud & IT Cert Prep-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cloud & IT Cert Prep, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.
Hvorfor hashing af adgangskoder er anderledes
Lagring af adgangskoder kræver en særlig klasse kryptografisk funktion, der kaldes en funktion til hashing af adgangskoder (PHF) eller en nøgleafledningsfunktion (KDF). Almindelige kryptografiske hashfunktioner som SHA-256 er designet til at være hurtige — en moderne GPU kan beregne milliarder af SHA-256-hashværdier i sekundet. Denne hastighed er katastrofal ved lagring af adgangskoder: En angriber, der stjæler en hashedatabase, kan afprøve milliarder af gæt i sekundet. Adgangskode-KDF'er er med vilje langsomme og kan indstilles, så brute-force-angreb bliver beregningsmæssigt urealistiske, samtidig med at legitim login stadig kan gennemføres på millisekunder.
Salte: Sådan besejres regnbuetabeller
Før der fandtes dedikerede KDF'er til adgangskoder, brugte angribere regnbuetabeller — forudberegnede tilknytninger fra hashværdier tilbage til klartekstadgangskoder. Et salt er en tilfældig værdi, der er unik for hver bruger, og som sættes foran eller efter adgangskoden før hashing. Det gør hver hashværdi unik, selv når adgangskoderne er identiske. Salte gemmes sammen med hashværdien i databasen — de er ikke hemmelige, kun tilfældige. Et korrekt salt skal være på mindst 16 byte, genereres af en kryptografisk sikker tilfældighedsgenerator og gemmes separat for hver bruger (aldrig genbrugt på tværs af konti).
PBKDF2: Standarden for adgangskoder
PBKDF2 (Password-Based Key Derivation Function 2) er defineret i RFC 8018 og godkendt af NIST. Den fungerer ved gentagne gange at anvende en HMAC-funktion (typisk HMAC-SHA-256) på adgangskoden og saltet et konfigurerbart antal iterationer. Antallet af iterationer er arbejdsfaktoren — NIST anbefaler mindst 600.000 iterationer af PBKDF2-HMAC-SHA256 fra og med 2023. PBKDF2 bruges i vid udstrækning (Django, iOS Keychain, WPA2-PSK), men har en svaghed: Den kan implementeres effektivt på GPU'er, hvilket gør den mindre modstandsdygtig over for GPU-angreb end alternativerne.
# PBKDF2 example (Python pseudocode concept)
# import hashlib
# dk = hashlib.pbkdf2_hmac(
# 'sha256', # hash algorithm
# b'password', # password bytes
# b'random_salt', # salt bytes
# 600000 # iterations
# )bcrypt: Modstandsdygtighed over for hukommelses- og CPU-angreb
bcrypt blev designet af Niels Provos og David Mazieres i 1999 og er stadig udbredt. Den vigtigste nyskabelse er en omkostningsfaktor (parameteren rounds), hvor hver forøgelse fordobler beregningstiden. bcrypt bruger et modificeret Blowfish-chiffer med en Eksblowfish-nøgleopsætning, der kræver meget både CPU- og hukommelse, hvilket gør det betydeligt sværere at accelerere på GPU'er end PBKDF2. bcrypt begrænser også adgangskodeinput til 72 byte (længere adgangskoder afkortes), så lange adgangskoder i nogle implementeringer først skal hashes med SHA-256.
# bcrypt cost factor
# Cost 10 = ~100ms on modern hardware
# Cost 12 = ~400ms
# Cost 14 = ~1600ms
# Each +1 doubles the work
# Recommended: cost 12-14 for web apps
# Command: htpasswd -bnBC 12 username passwordArgon2: Den moderne vinder
Argon2 vandt konkurrencen om hashing af adgangskoder i 2015 og er den aktuelle anbefaling fra OWASP. Den findes i tre varianter: Argon2d (hurtigere, sårbar over for sidekanaler, bedst til kryptovaluta), Argon2i (konstant køretid, bedst til hashing af adgangskoder) og Argon2id (hybrid, anbefalet til de fleste anvendelser). Argon2id kan konfigureres langs tre dimensioner: tidsomkostning (iterationer), hukommelsesomkostning (krævet RAM) og parallelitet (tråde). De høje krav til hukommelse gør det ekstremt vanskeligt at parallelisere på GPU'er og fuldstændig urealistisk på ASIC'er.
# Argon2id recommended parameters (OWASP 2023)
# Memory: 64MB (65536 KiB)
# Iterations: 3
# Parallelism: 4 threads
# Output length: 32 bytes
# argon2 -id -t 3 -m 16 -p 4 -l 32Hukommelseskrav: Hvorfor GPU-angreb besejres
GPU'er har tusindvis af kerner, men begrænset hukommelse pr. kerne — de er fremragende til at parallelisere simple beregninger, der kræver lidt hukommelse. Hukommelseskrævende funktioner som Argon2 og scrypt kræver store mængder RAM for hver hashberegning. Hvis en angriber vil køre 10.000 parallelle Argon2id-beregninger, der hver kræver 64 MB hukommelse, skal vedkommende bruge 640 GB GPU-RAM — langt mere end nogen tilgængelig GPU-klynge har. Denne egenskab, der kaldes hukommelseskrav, tvinger angribere til enten at bruge langsomme, sekventielle beregninger eller investere i ekstraordinært dyr hardware, som gør angreb økonomisk urentable.
Justering af arbejdsfaktoren i praksis
Den rette arbejdsfaktor afhænger af din hardware og den acceptable latenstid. Det generelle mål er 100-300 ms på serverens produktionshardware for hver godkendelse. Efterhånden som hardwaren bliver bedre, bør du øge arbejdsfaktoren — derfor gemmer bcrypt og Argon2 parametrene sammen med hashværdien, hvilket muliggør gennemsigtige opgraderinger: Ved næste login verificeres adgangskoden, hvorefter den hashes igen med de nye, højere parametre. OWASP vedligeholder aktuelle anbefalede minimumsparametre for PBKDF2, bcrypt og Argon2id, som bør gennemgås årligt.
scrypt: Den anden hukommelseskrævende KDF
scrypt, der blev designet af Colin Percival i 2009, var den første bredt anvendte hukommelseskrævende KDF og bruges af Litecoin og mange adgangskodeadministratorer. scrypt parametriseres med N (CPU-/hukommelsesomkostning), r (blokstørrelse) og p (paralleliseringsfaktor). Ligesom Argon2 kræver høje N-værdier store mængder RAM pr. beregning. scrypt betragtes som sikker, men Argon2id foretrækkes generelt til nye applikationer, fordi den vandt PHC og har gennemgået mere kryptografisk analyse. Begge er acceptable valg.
Hvad du IKKE skal bruge: MD5, SHA-1 og SHA uden salt
Flere metoder til hashing må aldrig bruges til adgangskoder: MD5 (brudt, milliarder af hashværdier i sekundet på almindelig forbrugerhardware), SHA-1 (samme problem), SHA-256 uden salt (hurtig, regnbuetabeller gør angreb trivielle) og simpel kryptering (reversibel, så tyveri af nøglen svarer til tyveri af alle adgangskoder). Historiske databrud som LinkedIn (2012) brugte SHA-1 uden salt, hvilket afslørede 117 millioner adgangskoder, der blev knækket på få dage. Adobe (2013) krypterede adgangskoder (i stedet for at hashe dem) — en grundlæggende misforståelse, der afslørede 153 millioner konti. Disse hændelser indgår i Security+-eksamens pensum.
Nøgleafledning til krypteringsnøgler
KDF'er bruges også til at udlede krypteringsnøgler fra adgangskoder (i modsætning til lagring af hashværdier for adgangskoder). Når en bruger angiver en hovedadgangskode til et krypteret digitalt pengeskab, bruger applikationen en KDF til at udlede den faktiske AES-256-krypteringsnøgle fra adgangskoden. Derfor kan adgangskodeadministratorer dekryptere dit pengeskab lokalt — de kører KDF'en på din hovedadgangskode for at genskabe krypteringsnøglen, som aldrig forlader din enhed. HKDF (HMAC-based Key Derivation Function) er standarden til at udlede flere nøgler fra én enkelt entropirig hemmelighed og bruges i TLS 1.3 til at udlede håndtryks- og applikationsnøgler.
Beskyttelse mod credential stuffing og KDF'er
Credential stuffing-angreb genbruger brugernavn/adgangskode-par, der er stjålet ved ét databrud, mod andre tjenester. Stærke KDF'er reducerer tidsvinduet for offline-cracking efter et databrud — hvis angriberen skal bruge 300 ms pr. gæt i stedet for mikrosekunder, bliver det beregningsmæssigt umuligt at knække en tilfældig adgangskode på 10 tegn. KDF'er beskytter dog ikke mod genbrug af adgangskoder på tværs af websteder — det kræver, at brugerne anvender unikke adgangskoder. Kombinationen af unikke adgangskoder + Argon2id-lagring + MFA gør legitimationsbaserede angreb praktisk talt ineffektive.
Hurtig kontrol
Afprøv din forståelse af CompTIA Security+ (SY0-701)-begreberne fra denne lektion.
Opsummering af lektionen
I denne lektion lærte du, at adgangskode-KDF'er er langsomme med vilje og har justerbare arbejdsfaktorer, så offline brute force-angreb bliver beregningsmæssigt umulige, at hukommelseskrævende funktioner som Argon2id og scrypt modvirker GPU-parallellisering ved at kræve meget RAM pr. beregning, og at MD5, SHA-1 og usaltede hashes er helt utilstrækkelige til lagring af adgangskoder, hvilket flere opsigtsvækkende databrud har vist. Dernæst ser vi på postkvantekryptografi og de algoritmer, som NIST har valgt til at erstatte RSA og ECC.
Lær Cloud & IT Cert Prep med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 150
- Lektioner
- 600
Ofte stillede spørgsmål
Er lektionen “Nøgleafledningsfunktioner: PBKDF2, bcrypt og Argon2” gratis?
Ja — hele teksten til “Nøgleafledningsfunktioner: PBKDF2, bcrypt og Argon2” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cloud & IT Cert Prep-kurset, skal du opgradere til CoddyKit PRO. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Nøgleafledningsfunktioner: PBKDF2, bcrypt og Argon2”?
Sammenlign algoritmer til hashing af adgangskoder ud fra deres modstandsdygtighed over for GPU- og ASIC-angreb, og forstå, hvordan arbejdsfaktorer og memory hardness justeres. Du øver dig i Cloud & IT Cert Prep med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Cloud & IT Cert Prep?
Der kræves ingen tidligere erfaring. Cloud & IT Cert Prep på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Nøgleafledningsfunktioner: PBKDF2, bcrypt og Argon2”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Cloud & IT Cert Prep-lektion?
Ja. Alle Cloud & IT Cert Prep-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- TLS 1.3-handshake og 0-RTT-genoptagelse
- Godkendt kryptering: AES-GCM og ChaCha20-Poly1305
- Nøgleafledningsfunktioner: PBKDF2, bcrypt og Argon2
- Post-kvantekryptografi: CRYSTALS-Kyber og Dilithium