Hashning och dataintegritet
Lär dig hur SHA-256, MD5 och HMAC skapar digestvärden med fast längd som verifierar att data inte har ändrats under överföring eller lagring.
Hashning och dataintegritet är en gratis lektion i Cloud & IT Cert Prep på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Cloud & IT Cert Prep, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.
Vad är en hashfunktion?
En kryptografisk hashfunktion är en matematisk algoritm som tar emot en indata av valfri storlek och producerar en utdata med fast längd, kallad en hash, digest eller fingeravtryck. Hashfunktioner är envägsfunktioner: givet en hash ska det vara beräkningsmässigt orimligt att fastställa den ursprungliga indatan. De är deterministiska: samma indata ger alltid samma hash. Hashfunktioner utgör grunden för verifiering av dataintegritet, digitala signaturer, lösenordslagring och många andra säkerhetsmekanismer.
Egenskaper hos säkra hashfunktioner
En säker kryptografisk hashfunktion måste ha fyra viktiga egenskaper. Motstånd mot urbildsattacker: givet en hashutdata ska det vara beräkningsmässigt orimligt att hitta en indata som ger den. Motstånd mot andra urbilden: givet en indata ska det vara orimligt att hitta en annan indata med samma hash. Kollisionsresistens: det ska vara orimligt att hitta två olika indata som ger samma hashutdata. Lavineffekt: även en ändring av en enda bit i indatan orsakar en helt annan hashutdata, vilket gör manipulering upptäckbar.
# 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 identicalMD5: Knäckt och föråldrad
MD5 (Message Digest 5) producerar en 128-bitars hash och användes tidigare i stor utsträckning. År 2004 demonstrerade forskare dock kollisionsattacker mot MD5 – det går alltså att hitta två olika indata som producerar samma hash. Detta är katastrofalt för integritetsverifiering: en angripare skulle kunna ersätta en skadlig fil som har samma MD5-hash som originalet. MD5 är helt knäckt för kryptografisk säkerhet och får inte användas för integritetsverifiering, digitala signaturer eller lösenordshashning. Den förekommer fortfarande ibland i kontrollsummor utan säkerhetskrav (äldre filverifiering), vilket endast är acceptabelt för att upptäcka oavsiktlig korruption.
SHA-familjen: SHA-1, SHA-256, SHA-3
Familjen Secure Hash Algorithm (SHA) är den viktigaste uppsättningen hashfunktioner för Security+. SHA-1 (160 bitar) var standard i många år men knäcktes genom en praktiskt genomförbar kollisionsattack 2017 (Googles SHAttered-projekt) och är nu föråldrad. SHA-256 (en del av SHA-2-familjen, med 256-bitars utdata) är dagens branschstandard för digitala signaturer, TLS-certifikat och verifiering av filintegritet. SHA-3 (Keccak) är NIST:s alternativa algoritm och erbjuder motstånd mot attacker som riktar sig mot SHA-2:s struktur, även om SHA-256 fortfarande är det dominerande valet i de flesta tillämpningar.
# 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: OKHashfunktioner för lösenordslagring
Det är aldrig acceptabelt att lagra lösenord i klartext. När en användare skapar ett lösenord lagras en hash i databasen i stället för själva lösenordet. När användaren loggar in hashas det angivna lösenordet och jämförs med den lagrade hashen. Vanlig SHA-256 är dock för snabb för lösenordslagring – angripare använder GPU:er för att testa miljarder hashningar per sekund mot stulna lösenordsdatabaser. Specialiserade lösenordshashfunktioner som bcrypt, PBKDF2 och Argon2 ökar beräkningskostnaden (arbetsfaktorerna) och minneskraven, vilket gör massknäckning opraktisk.
# 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 TrueSaltning: Stoppa regnbågstabeller
En regnbågstabell är en förberäknad uppslagstabell som kopplar vanliga lösenord till deras hashvärden. Den gör det möjligt för en angripare att omedelbart slå upp en hash och hitta det ursprungliga lösenordet. För att stoppa regnbågstabeller måste lösenordshashar saltas. Ett salt är ett slumpmässigt värde som läggs till lösenordet före hashningen, så att varje användares hash blir unik även om två användare har samma lösenord. Saltet lagras tillsammans med hashen och behöver inte vara hemligt. Även om en angripare har hela lösenordsdatabasen är förberäknade regnbågstabeller oanvändbara, eftersom varje hash har skapats med ett annat salt.
# 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 outputHMAC: Lägg till autentisering i hashning
HMAC (Hash-based Message Authentication Code) är en konstruktion som använder en hashfunktion tillsammans med en hemlig nyckel för att skapa en autentiseringskod. Till skillnad från en vanlig hash kan en HMAC endast beräknas och verifieras av parter som känner till den hemliga nyckeln. Detta ger både integritet (upptäckt av ändringar) och autentisering (bevis på att meddelandet kommer från någon som har nyckeln). HMAC-SHA256 används i stor utsträckning för API-autentisering (signering av API-begäranden), JWT-token och TLS-MAC-operationer. Det hindrar en angripare som avlyssnar ett meddelande från att ersätta det med ett egenkonstruerat 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 integrityHashfunktioner i digitala signaturer
Hashfunktioner spelar en central roll i digitala signaturer. När ett stort dokument signeras krypterar man inte hela dokumentet med den privata nyckeln, eftersom det skulle vara extremt långsamt. I stället gör man följande: (1) beräknar dokumentets hash (snabbt och med en liten digest med fast längd) och (2) signerar den lilla hashen med den privata nyckeln. Signaturen är alltså en krypterad hash. Verifieringen följer samma mönster: dekryptera signaturen för att få fram hashen, hasha dokumentet separat och jämför resultaten. SHA-256 är obligatoriskt i alla moderna PKI-certifikat, medan SHA-1 är förbjudet i nya certifikat.
Övervakning av filintegritet (FIM)
Övervakning av filintegritet (FIM) använder hashfunktioner för att upptäcka obehöriga ändringar i kritiska systemfiler. Vid etablering av en baslinje hashar FIM-verktyget alla övervakade filer och lagrar hashvärdena säkert. Med jämna mellanrum, eller kontinuerligt, hashas filerna på nytt och jämförs med baslinjen. En avvikelse visar att en fil har ändrats, potentiellt av skadlig kod eller genom en obehörig administratörsåtgärd. FIM-verktyg som Tripwire, AIDE (Linux) och Windows egna integritetskontroller använder SHA-256-hashar. FIM krävs enligt efterlevnadsramverk som PCI-DSS för att skydda miljöer med kortinnehavaruppgifter.
# 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_hashKontrollsummor jämfört med kryptografiska hashvärden
Det är viktigt att skilja mellan kontrollsummor och kryptografiska hashvärden. Kontrollsummor som CRC32 är utformade för att upptäcka oavsiktlig datakorruption under överföring. De är snabba och enkla, men kan lätt förfalskas av en angripare. Kryptografiska hashfunktioner (SHA-256) är utformade för att vara kollisionsresistenta och avslöja manipulering, även vid avsiktlig manipulation av en angripare. Använd kontrollsummor när Ni endast behöver verifiera att en hämtning inte skadades under överföringen, och använd kryptografiska hashvärden när Ni behöver verifiera att en fil inte avsiktligt har manipulerats av en angripare.
Hashkollisionsattacker i praktiken
Hashkollisionsattacker får verkliga konsekvenser. År 2017 skapade forskare två olika PDF-filer med samma SHA-1-hash, vilket visade att SHA-1-certifikat kunde förfalskas. År 2008 använde forskare MD5-kollisioner för att skapa ett falskt CA-certifikat som såg legitimt ut. Det är därför webbläsare avvisar MD5- och SHA-1-certifikat och certifikatutfärdare måste använda minst SHA-256. Genom att förstå kollisionsattacker blir det lättare att förklara varför algoritmer fasas ut och varför ”men den producerar ju fortfarande en hash” inte är ett tillräckligt argument för att använda knäckta algoritmer.
Snabbtest
Testa Er förståelse av begreppen i CompTIA Security+ (SY0-701) från den här lektionen.
Sammanfattning av lektionen
I den här lektionen har Ni lärt Er att hashfunktioner producerar digester med fast längd för integritetsverifiering, att MD5 och SHA-1 är knäckta och föråldrade, att SHA-256 är dagens standard, att saltning stoppar attacker med regnbågstabeller och att HMAC lägger till autentisering i hashning med hjälp av en delad hemlig nyckel. Härnäst utforskar vi Nyckelutbyte och hybridkryptering.
Lär dig Cloud & IT Cert Prep med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 150
- Lektioner
- 600
Vanliga frågor
Är lektionen ”Hashning och dataintegritet” gratis?
Ja – hela texten till ”Hashning och dataintegritet” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Cloud & IT Cert Prep, kan Ni uppgradera till CoddyKit PRO. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.
Vad lär jag mig i ”Hashning och dataintegritet”?
Lär dig hur SHA-256, MD5 och HMAC skapar digestvärden med fast längd som verifierar att data inte har ändrats under överföring eller lagring. Ni övar på Cloud & IT Cert Prep med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Cloud & IT Cert Prep?
Du behöver inga förkunskaper. Utbildningen i Cloud & IT Cert Prep på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Hashning och dataintegritet”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Cloud & IT Cert Prep-lektionen?
Ja. Varje Cloud & IT Cert Prep-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Symmetriska krypteringsalgoritmer
- Asymmetrisk kryptering och nyckelpar
- Hashning och dataintegritet
- Nyckelutbyte och hybridkryptering