Security+ Academy · Lektion

Hashing og dataintegritet

Lær, hvordan SHA-256, MD5 og HMAC genererer digests med fast længde, som bekræfter, at data ikke er blevet ændret under overførsel eller lagring.

Lektion 3 af 413 trin

Hashing og dataintegritet er en gratis Security+ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Security+ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Security+ Academy-kurset indeholder 4 lektioner i alt.

Hvad er en hashfunktion?

En kryptografisk hashfunktion er en matematisk algoritme, der tager et input af vilkårlig størrelse og producerer et output med fast længde, kaldet en hash, en digest eller et fingeraftryk. Hashfunktioner er envejsfunktioner: Ud fra en hash skal det være beregningsmæssigt umuligt at bestemme det oprindelige input. De er deterministiske: Det samme input giver altid den samme hash. Hashfunktioner danner grundlaget for verificering af dataintegritet, digitale signaturer, lagring af adgangskoder og mange andre sikkerhedsmekanismer.

Egenskaber ved sikre hashfunktioner

En sikker kryptografisk hashfunktion skal have fire centrale egenskaber. Modstandsdygtighed over for præbilleder: Når man kender et hash-output, skal det være beregningsmæssigt umuligt at finde et input, der giver dette output. Modstandsdygtighed over for andet præbillede: Når man kender et input, skal det være umuligt at finde et andet input med den samme hash. Kollisionsmodstandsdygtighed: Det skal være umuligt at finde to forskellige input, der giver det samme hash-output. Lavineeffekt: Selv en ændring af én enkelt bit i inputtet giver et helt andet hash-output, så manipulation bliver mulig at opdage.

# Avalanche effect demonstration
echo -n 'Hello' | sha256sum
# 185f8db32...  (completely different when one char changes)
echo -n 'Hello!' | sha256sum
# 334d016f7...  (entirely different hash)

# Same input ALWAYS produces same hash (deterministic)
echo -n 'Security+' | sha256sum
echo -n 'Security+' | sha256sum
# Both outputs are identical

MD5: Brudt og udfaset

MD5 (Message Digest 5) producerer en 128-bit-hash og blev tidligere brugt meget. Forskere påviste dog kollisionsangreb mod MD5 i 2004 — det vil sige, at man kan finde to forskellige input, der giver den samme hash. Det er katastrofalt for verificering af integritet: En angriber kan erstatte en legitim fil med en ondsindet fil, der har den samme MD5-hash som originalen. MD5 er fuldstændig brudt som kryptografisk sikkerhed og må ikke bruges til verificering af integritet, digitale signaturer eller hashing af adgangskoder. MD5 ses stadig lejlighedsvis i kontrolsummer, der ikke bruges til sikkerhed (for eksempel ældre filverificering), hvilket kun er acceptabelt til at opdage utilsigtet beskadigelse.

SHA-familien: SHA-1, SHA-256, SHA-3

Secure Hash Algorithm (SHA)-familien er det vigtigste sæt hashfunktioner i Security+. SHA-1 (160 bit) var standarden i mange år, men blev brudt af et praktisk kollisionsangreb i 2017 (Googles SHAttered-projekt) og er nu udfaset. SHA-256 (en del af SHA-2-familien med et output på 256 bit) er den aktuelle industristandard for digitale signaturer, TLS-certifikater og verificering af filintegritet. SHA-3 (Keccak) er NISTs alternative algoritme, som giver modstandsdygtighed over for angreb, der retter sig mod SHA-2's struktur, selv om SHA-256 fortsat er det dominerende valg i de fleste anvendelser.

# Common hash computations
echo -n 'password123' | sha256sum
# a665a4592...64 hex chars = 256 bits

echo -n 'password123' | sha512sum  
# b109f3bb...128 hex chars = 512 bits (SHA-512)

# File integrity check
sha256sum /path/to/downloaded_file.iso > file.sha256
sha256sum -c file.sha256
# file.iso: OK

Hashfunktioner til lagring af adgangskoder

Det er aldrig acceptabelt at gemme adgangskoder som almindelig tekst. Når en bruger opretter en adgangskode, gemmes en hash i databasen i stedet for selve adgangskoden. Når brugeren logger ind, hashes den indtastede adgangskode og sammenlignes med den gemte hash. Standardalgoritmen SHA-256 er dog for hurtig til lagring af adgangskoder — angribere bruger GPU'er til at teste milliarder af hashes i sekundet mod stjålne adgangskodedatabaser. Specialudviklede hashfunktioner til adgangskoder som bcrypt, PBKDF2 og Argon2 tilføjer beregningsomkostninger (arbejdsfaktorer) og hukommelseskrav, som gør massevis af cracking upraktisk.

# bcrypt hash example (Python-style pseudocode)
import bcrypt
password = b'mySecretPassword'
# Hash with work factor of 12 (2^12 = 4096 iterations)
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Stored in DB: $2b$12$H0qS/LkPkAiH8KlxJb3lFuK...

# Verify (never compare raw hashes for bcrypt)
bcrypt.checkpw(password, hashed)  # Returns True

Saltning: Sådan besejres regnbuetabeller

En regnbuetabel er en forudberegnet opslagstabel, der knytter almindelige adgangskoder til deres hashes — så en angriber straks kan slå en hash op og finde den oprindelige adgangskode. For at besejre regnbuetabeller skal adgangskodehashes saltes. Et salt er en tilfældig værdi, der føjes til adgangskoden før hashing, så hver brugers hash bliver unik, selv hvis to brugere har den samme adgangskode. Saltet gemmes sammen med hashen (det behøver ikke at være hemmeligt). Selv hvis en angriber har hele din adgangskodedatabase, er forudberegnede regnbuetabeller ubrugelige, fordi der blev brugt et forskelligt salt til hver hash.

# Salt demonstration
# Without salt: same password = same hash (rainbow table attack works)
# SHA256('password123') = always the same hash

# With salt: same password + random salt = unique hash
# SHA256('password123' + 'aBc8xZ') = unique hash for this user
# SHA256('password123' + 'mK2pYq') = completely different hash

# The salt is stored in the database alongside the hashed value
# Format: $salt$hash or combined as in bcrypt output

HMAC: Tilføjelse af godkendelse til hashing

HMAC (Hash-based Message Authentication Code) er en konstruktion, der bruger en hashfunktion sammen med en hemmelig nøgle til at producere en godkendelseskode. I modsætning til en almindelig hash kan en HMAC kun beregnes og verificeres af parter, der kender den hemmelige nøgle. Det giver både integritet (registrering af ændringer) og godkendelse (bevis på, at meddelelsen kom fra nogen med nøglen). HMAC-SHA256 bruges i vid udstrækning til API-godkendelse (signering af API-anmodninger), JWT-tokens og TLS MAC-operationer. Det forhindrer en angriber, der opsnapper en meddelelse, i at erstatte den med et konstrueret alternativ.

# Compute HMAC-SHA256 with OpenSSL
openssl dgst -sha256 -hmac 'my-secret-api-key' -hex api_request.json
# Output: HMAC-SHA256(api_request.json)= 3d4e2f...

# Only someone with 'my-secret-api-key' can generate or verify this HMAC
# Used in AWS Signature V4 for API authentication
# Used in JWT HS256 algorithm for token integrity

Hashfunktioner i digitale signaturer

Hashfunktioner spiller en central rolle i digitale signaturer. Når du signerer et stort dokument, krypterer du ikke hele dokumentet med den private nøgle (det ville være ekstremt langsomt). I stedet gør du følgende: (1) beregner dokumentets hash (hurtigt og med et lille digest med fast længde) og (2) signerer den lille hash med den private nøgle. Signaturen er blot en krypteret hash. Verificering følger det samme mønster: Dekryptér signaturen for at få hashen, hash dokumentet uafhængigt, og sammenlign dem. SHA-256 er obligatorisk i alle moderne PKI-certifikater; SHA-1 er forbudt i nye certifikater.

Overvågning af filintegritet (FIM)

Overvågning af filintegritet (FIM) bruger hashfunktioner til at opdage uautoriserede ændringer i kritiske systemfiler. Som grundlag hasher FIM-værktøjet alle overvågede filer og gemmer hasherne sikkert. Med jævne mellemrum (eller løbende) hasher det filerne igen og sammenligner dem med grundlaget. Enhver uoverensstemmelse viser, at en fil er blevet ændret — muligvis af malware eller som følge af en uautoriseret administratorhandling. FIM-værktøjer som Tripwire, AIDE (Linux) og Windows' egen integritetskontrol bruger SHA-256-hashes. FIM er påkrævet af overholdelsesrammer som PCI-DSS for at beskytte miljøer med kortholderdata.

# AIDE (Advanced Intrusion Detection Environment) - Linux FIM
# Initialize baseline database
aide --init
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# Check for changes (run via cron daily)
aide --check
# Output shows any files that were added, changed, or deleted
# File: /etc/passwd changed
# MD5 : old_hash != new_hash

Kontrolsummer kontra kryptografiske hashes

Det er vigtigt at skelne mellem kontrolsummer og kryptografiske hashes. Kontrolsummer som CRC32 er udviklet til at opdage utilsigtet beskadigelse af data under overførsel — de er hurtige og enkle, men kan nemt forfalskes af en angriber. Kryptografiske hashes (SHA-256) er udviklet til at være kollisionsmodstandsdygtige og afsløre manipulation, selv over for målrettede ændringer fra en modstander. Brug kontrolsummer, når du kun har brug for at kontrollere, at en download ikke blev beskadiget under overførslen; brug kryptografiske hashes, når du skal kontrollere, at en fil ikke med vilje er blevet manipuleret af en angriber.

Hashkollisionsangreb i praksis

Hashkollisionsangreb har konsekvenser i den virkelige verden. I 2017 oprettede forskere to forskellige PDF-filer med den samme SHA-1-hash — hvilket viste, at SHA-1-certifikater kunne forfalskes. I 2008 brugte forskere MD5-kollisioner til at oprette et falsk CA-certifikat, der så legitimt ud. Det er grunden til, at browsere afviser MD5- og SHA-1-certifikater, og at certifikatmyndigheder som minimum skal bruge SHA-256. Når du forstår kollisionsangreb, kan du bedre forklare, hvorfor algoritmer udfases, og hvorfor »men den producerer jo stadig en hash« ikke er et tilstrækkeligt argument for at bruge brudte algoritmer.

Hurtig kontrol

Test din forståelse af CompTIA Security+-begreberne (SY0-701) fra denne lektion.

Opsummering af lektionen

I denne lektion har du lært, at hashfunktioner producerer digests med fast længde til verificering af integritet; at MD5 og SHA-1 er brudte og udfasede; at SHA-256 er den aktuelle standard; at saltning besejrer angreb med regnbuetabeller; og at HMAC tilføjer godkendelse til hashing ved hjælp af en delt hemmelig nøgle. Dernæst ser vi på nøgleudveksling og hybridkryptering.

Gratis at komme i gang

Lær Security+ Academy 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
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Hashing og dataintegritet” gratis?

Ja — alle 3 lektioner i læringssporet Security+ Academy, inklusive “Hashing og dataintegritet”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Security+ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Hashing og dataintegritet”?

Lær, hvordan SHA-256, MD5 og HMAC genererer digests med fast længde, som bekræfter, at data ikke er blevet ændret under overførsel eller lagring. Du øver dig i Security+ Academy 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å Security+ Academy?

Der kræves ingen tidligere erfaring. Security+ Academy 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 “Hashing og dataintegritet”?

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 Security+ Academy-lektion?

Ja. Alle Security+ Academy-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

  1. Symmetriske krypteringsalgoritmer
  2. Asymmetrisk kryptering og nøglepar
  3. Hashing og dataintegritet
  4. Nøgleudveksling og hybridkryptering
← Tilbage til Security+ Academy