19/10/2012
I den digitale verden er beskyttelsen af information altafgørende. En af grundpillerne i moderne datasikkerhed er kryptering, og kernen i mange krypteringssystemer er det, vi kalder et blokchiffer. Et blokchiffer er en algoritme, der opererer på datablokke af en fast størrelse. For eksempel tager velkendte algoritmer som DES og AES henholdsvis 64-bit og 128-bit blokke af klartekst og omdanner dem til krypteret tekst af samme størrelse ved hjælp af en hemmelig nøgle. Men i virkeligheden er de meddelelser eller filer, vi ønsker at beskytte, næsten altid meget større end en enkelt blok. Hvordan håndterer vi så krypteringen af store datamængder på en sikker måde? Svaret ligger i driftstilstande (modes of operation). En driftstilstand er et sæt regler, der definerer, hvordan man gentagne gange anvender et blokchiffers enkeltbloks-operation til sikkert at transformere større mængder data. Valget af driftstilstand har en enorm indflydelse på den overordnede sikkerhed og ydeevne af krypteringssystemet.

Forståelse af Kernebegreber
Før vi dykker ned i de specifikke tilstande, er det vigtigt at forstå et par grundlæggende begreber, der ofte anvendes i denne sammenhæng.
- Initialiseringsvektor (IV): En IV er en blok af bits, der bruges til at randomisere krypteringsprocessen. Formålet er at producere unik krypteret tekst, selv når den samme klartekst krypteres flere gange med den samme nøgle. IV'en behøver ikke at være hemmelig, men den skal være unik og uforudsigelig for hver krypteringssession.
- Nonce: Står for "Number used Once". Det er et tilfældigt eller pseudotilfældigt tal, der bruges for at sikre, at tidligere kommunikation ikke kan genbruges i såkaldte replay-angreb. I mange sammenhænge bruges IV og Nonce synonymt.
- Padding: Da blokchiffre arbejder med blokke af fast størrelse, vil den sidste del af en meddelelse sjældent passe perfekt ind i en blok. Padding er processen med at tilføje ekstra data til den sidste blok for at fylde den op til den korrekte størrelse. Der findes forskellige padding-skemaer til at sikre, at dette gøres på en entydig og sikker måde.
De 5 Grundlæggende Driftstilstande
Der findes adskillige driftstilstande, men fem af dem betragtes som de mest fundamentale og udbredte. Lad os gennemgå dem en for en for at forstå deres mekanismer, fordele og ulemper.
1. Electronic Codebook (ECB)
Dette er den simpleste af alle driftstilstande. I ECB-tilstand bliver meddelelsen opdelt i blokke, og hver blok krypteres fuldstændig uafhængigt af de andre ved hjælp af den samme nøgle. Man kan forestille sig det som en gigantisk kodebog, hvor hver mulig klartekstblok har en tilsvarende krypteret tekstblok.
Mekanisme:C_i = E_K(P_i)
Styrker:
- Simpel og let at implementere.
- Tillader parallel kryptering, da hver blok er uafhængig.
Svagheder:
- Den største svaghed er, at den er deterministisk. Hvis den samme klartekstblok optræder flere gange i meddelelsen, vil den altid blive krypteret til den samme krypterede tekstblok. Dette lækker information om mønstre i de oprindelige data. Et berømt eksempel er et billede af en pingvin krypteret med ECB, hvor omridset af pingvinen stadig er synligt i den krypterede version.
- Den er sårbar over for angreb, hvor en angriber kan omarrangere, slette eller gentage blokke.
Anvendelse: På grund af dens alvorlige sikkerhedsmæssige svagheder bør ECB generelt undgås. Den er kun egnet til sikker transmission af meget korte, enkelte værdier, som f.eks. en midlertidig krypteringsnøgle.
2. Cipher Block Chaining (CBC)
CBC-tilstand løser det store problem med mønstergenkendelse i ECB ved at introducere en afhængighed mellem blokkene. Før hver klartekstblok krypteres, bliver den kombineret (via en XOR-operation) med den foregående krypterede tekstblok. For den allerførste blok, hvor der ikke er nogen foregående krypteret tekst, bruges en initialiseringsvektor (IV).
Mekanisme:C_i = E_K(P_i ⊕ C_{i-1}), hvor C_0 = IV.

Styrker:
- Skjuler mønstre i klarteksten effektivt. Den samme klartekstblok vil resultere i forskellig krypteret tekst afhængigt af dens position i meddelelsen.
- Ændringer i en klartekstblok påvirker den pågældende og alle efterfølgende krypterede tekstblokke.
Svagheder:
- Kryptering er sekventiel og kan ikke paralleliseres, da hver blok afhænger af den forrige. Dekryptering kan dog paralleliseres.
- En bitfejl i en krypteret tekstblok vil ødelægge dekrypteringen af den pågældende blok fuldstændigt og vende den tilsvarende bit i den efterfølgende blok.
Anvendelse: CBC er en meget udbredt og robust tilstand, der er velegnet til kryptering af store datamængder som filer og e-mails.
3. Cipher Feedback (CFB)
CFB er en tilstand, der gør det muligt for et blokchiffer at opføre sig som et stream cipher. Dette er nyttigt, når data ankommer i en strøm (f.eks. en terminalsession) og skal krypteres og sendes med det samme, uden at man skal vente på en hel blok. I CFB-tilstand krypteres den foregående krypterede tekstblok, og resultatet XOR'es med den nuværende klartekstenhed (som kan være mindre end en fuld blok) for at producere den nuværende krypterede tekstenhed.
Mekanisme:C_i = P_i ⊕ E_K(C_{i-1}), hvor C_0 = IV.
Styrker:
- Kan håndtere klartekst af vilkårlig længde (f.eks. enkelte tegn eller bits).
- Dekryptering bruger kun krypteringsfunktionen fra blokchifferet.
Svagheder:
- Ligesom CBC er krypteringen sekventiel.
- Fejludbredelse: En bitfejl i den krypterede tekst påvirker dekrypteringen af den nuværende enhed og de efterfølgende enheder, indtil fejlen er 'skubbet ud' af feedback-registeret.
Anvendelse: Stream-orienteret datakryptering og i visse autentificeringsprotokoller.
4. Output Feedback (OFB)
OFB er en anden tilstand, der omdanner et blokchiffer til et stream cipher. Den ligner CFB, men adskiller sig på et afgørende punkt: feedback-mekanismen er uafhængig af både klartekst og krypteret tekst. I stedet genereres en pseudotilfældig nøglestrøm (keystream) ved gentagne gange at kryptere en startværdi (IV'en). Denne nøglestrøm XOR'es derefter med klarteksten for at producere den krypterede tekst.
Mekanisme:O_i = E_K(O_{i-1}) og C_i = P_i ⊕ O_i, hvor O_0 = IV.

Styrker:
- Nøglestrømmen kan forudberegnes, hvilket kan forbedre ydeevnen i situationer med bursty trafik.
- Bitfejl i den krypterede tekst påvirker kun den tilsvarende bit i klarteksten og spredes ikke. Dette gør OFB ideel til støjende kommunikationskanaler (f.eks. satellit-tv).
Svagheder:
- Sikkerheden er ekstremt afhængig af, at IV'en aldrig genbruges med den samme nøgle. Hvis den gør det, vil to meddelelser blive krypteret med den samme nøglestrøm, hvilket gør det trivielt at afkode dem.
Anvendelse: Kryptering over støjende kanaler, hvor fejlspredning er uønsket.
5. Counter Mode (CTR)
Counter Mode (CTR) er en mere moderne og meget populær tilstand, der også fungerer som et stream cipher. Ligesom OFB genererer den en nøglestrøm, der er uafhængig af meddelelsen. Men i stedet for en feedback-mekanisme, krypterer den en sekvens af værdier genereret af en 'tæller'. Tælleren er typisk en kombination af en nonce (for at sikre unikhed pr. meddelelse) og en simpel tæller, der øges for hver blok (0, 1, 2, 3...).
Mekanisme:O_i = E_K(Nonce || Counter_i) og C_i = P_i ⊕ O_i.
Styrker:
- Meget høj ydeevne, da både kryptering og dekryptering kan paralleliseres fuldt ud.
- Tillader tilfældig adgang (random access) til enhver blok i den krypterede data uden at skulle behandle de foregående blokke.
- Simpel og effektiv.
Svagheder:
- Ligesom OFB er den kritisk afhængig af, at tællerværdien (nonce/counter-parret) aldrig genbruges med den samme nøgle.
Anvendelse: Meget udbredt i applikationer med høje hastighedskrav, såsom netværkskryptering (f.eks. i IPSec og TLS 1.3).
Sammenligningstabel over Driftstilstande
| Tilstand | Type | Parallelisering (Kryptering) | Fejlhåndtering | Typisk Anvendelse |
|---|---|---|---|---|
| ECB | Blok | Ja | 1-bit fejl i C påvirker 1 hel P-blok | Sikker transmission af enkelte værdier (bør undgås) |
| CBC | Blok | Nej | 1-bit fejl i C påvirker 2 P-blokke | Bulk datakryptering (filer, e-mail) |
| CFB | Stream | Nej | 1-bit fejl i C påvirker flere P-enheder | Stream-kryptering, autentificering |
| OFB | Stream | Ja (kun keystream) | 1-bit fejl i C påvirker kun 1 P-bit | Støjende kanaler (satellit) |
| CTR | Stream | Ja | 1-bit fejl i C påvirker kun 1 P-bit | Højhastighedsnetværk (IPSec, TLS) |
Ud over Fortrolighed: Autentificeret Kryptering
Det er vigtigt at understrege, at de ovennævnte tilstande i sig selv kun giver fortrolighed. De garanterer ikke, at data ikke er blevet ændret, enten ved et uheld eller af en ondsindet tredjpart. For at sikre dataintegritet og autenticitet skal man bruge en Message Authentication Code (MAC). Traditionelt har man kombineret en driftstilstand som CBC med en MAC-algoritme som HMAC. I moderne kryptografi er der dog udviklet nye driftstilstande, kendt som Authenticated Encryption with Associated Data (AEAD) modes, der kombinerer fortrolighed og integritet i en enkelt, effektiv operation. Eksempler på disse er GCM (Galois/Counter Mode) og CCM (Counter with CBC-MAC), som nu er standard i mange protokoller, herunder AES.
Ofte Stillede Spørgsmål (FAQ)
- Hvad er den største svaghed ved ECB-tilstand?
- Dens deterministiske natur. Identiske klartekstblokke krypteres altid til identiske krypterede tekstblokke, hvilket afslører mønstre i de oprindelige data og gør den usikker for de fleste anvendelser.
- Hvorfor er det så farligt at genbruge en IV/Nonce?
- I stream cipher-tilstande som OFB og CTR, hvor en nøglestrøm genereres uafhængigt af meddelelsen, vil genbrug af en IV/Nonce med den samme nøgle resultere i den samme nøglestrøm. Hvis en angriber får fat i to krypterede tekster, der er krypteret med den samme nøglestrøm, kan de XOR'e dem sammen og fjerne nøglestrømmen, hvilket efterlader et XOR af de to oprindelige klartekster – et stort brud på sikkerheden.
- Hvilken tilstand er hurtigst?
- CTR-tilstand er generelt anset for at være den hurtigste, fordi dens operationer (både kryptering og dekryptering) kan udføres fuldt ud parallelt. Dette gør den ideel til hardwareimplementeringer og software, der kan udnytte flere CPU-kerner.
- Kan jeg bruge CBC til at kryptere en livestream af video?
- Det er ikke ideelt. CBC's sekventielle natur for kryptering gør den mindre egnet til realtidsdata. Desuden vil en enkelt bitfejl i transmissionen ødelægge en hel blok og påvirke den næste, hvilket ville være meget synligt i en video. En stream cipher-tilstand som OFB eller CTR ville være et bedre valg, da en fejl kun påvirker en enkelt bit eller en lille del af dataene.
Hvis du vil læse andre artikler, der ligner Driftstilstande for et Blokchiffer Forklaret, kan du besøge kategorien Sundhed.
