Blockkrypteringsläge

Autentiserad kryptering med tilläggsdata (AEAD) ModesEdit

Huvudartikel: Autentiserad kryptering

Ett antal driftssätt har utformats för att kombinera sekretess och autentisering i en enda kryptografisk primitiv. Exempel på sådana lägen är extended cipher block chaining (XCBC), integrity-aware cipher block chaining (IACBC), integrity-aware parallelizable mode (IAPM), OCB, EAX, CWC, CCM och GCM. Autentiserade krypteringslägen klassificeras som single-pass-lägen eller double-pass-lägen. Vissa autentiserade krypteringsalgoritmer med enkelpass, t.ex. OCB-läget, är belagda med patent, medan andra har utformats och släppts på ett sätt som gör det möjligt att undvika sådan beläggning.

Den finns dessutom en del lägen som också tillåter autentisering av okrypterade tillhörande data, och dessa kallas AEAD-system (autentiserad kryptering med tillhörande data). Exempelvis är EAX-läget ett AEAD-system med dubbelpass medan OCB-läget är ett AEAD-system med enkelpass.

Galois/counter (GCM)Edit

GCM

Galois/counter

Kryptering kan parallelliseras

Ja

Dekryptering som kan parallelliseras

Ja

Random lästillgång

Ja

Galois/counter-läget (GCM) kombinerar välkända krypteringssättet med det nya Galois-sättet för autentisering. Den viktigaste egenskapen är att det är lätt att parallellberäkna Galoisfältets multiplikation som används för autentisering. Denna funktion möjliggör högre genomströmning än krypteringsalgoritmer.

GCM definieras för blockchiffer med en blockstorlek på 128 bitar. Galois message authentication code (GMAC) är en variant av GCM som endast gäller autentisering och som kan bilda en inkrementell meddelandeautentiseringskod. Både GCM och GMAC kan acceptera initialiseringsvektorer av godtycklig längd. GCM kan dra full nytta av parallellbearbetning och genomförandet av GCM kan effektivt utnyttja en instruktionspipeline eller en hårdvarupipeline. CBC-operationsläget ger upphov till pipeline stalls som hämmar dess effektivitet och prestanda.

Som i CTR numreras blocken sekventiellt, och sedan kombineras detta blocknummer med en IV och krypteras med ett blockchiffer E, vanligen AES. Resultatet av denna kryptering XOR-ordnas sedan med klartexten för att producera chiffertexten. Liksom alla counter modes är detta i huvudsak ett stream cipher, och det är därför viktigt att en annan IV används för varje stream som krypteras.

De krypterade blocken betraktas som koefficienter till ett polynom som sedan utvärderas vid en nyckelberoende punkt H, med hjälp av aritmetik för finita fält. Resultatet krypteras sedan och ger en autentiseringsmärkning som kan användas för att verifiera uppgifternas integritet. Den krypterade texten innehåller sedan IV, chiffertext och autentiseringstaggen.

Counter with cipher block chaining message authentication code (CCM)Edit

Counter with cipher block chaining message authentication code (counter with CBC-MAC; CCM) är en autentiserad krypteringsalgoritm som är utformad för att ge både autentisering och konfidentialitet. CCM-läget definieras endast för blockchiffer med en blocklängd på 128 bitar.

Syntetisk initialiseringsvektor (SIV)Redigera

Syntetisk initialiseringsvektor (SIV) är ett blockchifferläge som är motståndskraftigt mot nonce-missbruk.

SIV syntetiserar ett internt IV med hjälp av en pseudotillfällig funktion S2V. S2V är en nyckelhash baserad på CMAC, och ingången till funktionen är:

  • Att ytterligare autentiserade data (noll, ett eller flera AAD-fält stöds)
  • Plaintext
  • Autentiseringsnyckel (K1).

SIV krypterar S2V-utgången och klartexten med AES-CTR, nyckelat med krypteringsnyckeln (K2).

SIV kan stödja extern nonce-baserad autentiserad kryptering, i vilket fall ett av fälten för autentiserade data används för detta ändamål. RFC5297 specificerar att det sista autentiserade datafältet för driftskompatibilitet bör användas som extern nonce.

På grund av användningen av två nycklar, autentiseringsnyckeln K1 och krypteringsnyckeln K2, kan namngivningssystem för SIV AEAD-varianter leda till viss förvirring; till exempel AEAD_AES_AES_SIV_CMAC_256 hänvisar till AES-SIV med två AES-128-nycklar och inte AES-256.

AES-GCM-SIVEdit

AES-GCM-SIV är ett driftsläge för Advanced Encryption Standard som ger liknande prestanda som Galois/counter-läge samt motståndskraft mot missbruk i händelse av återanvändning av en kryptografisk nonce. Konstruktionen definieras i RFC 8452.

AES-GCM-SIV syntetiserar det interna IV. Den härleder en hash av de ytterligare autentiserade uppgifterna och klartexten med hjälp av POLYVAL Galois hash-funktionen. Hashvärdet krypteras sedan med en AES-nyckel och används som autentiseringsmärke och AES-CTR-initieringsvektor.

AES-GCM-SIV är en förbättring av den mycket likadant namngivna algoritmen GCM-SIV, med några mycket små ändringar (t.ex. hur AES-CTR initialiseras), men som ger praktiska fördelar för dess säkerhet ”Detta tillägg gör det möjligt att kryptera upp till 250 meddelanden med samma nyckel, jämfört med den betydande begränsning på endast 232 meddelanden som var tillåten med GCM-SIV.”

Endast konfidentialitetslägenRedigera

Många driftlägen har definierats. Några av dessa beskrivs nedan. Syftet med chifferlägen är att maskera mönster som finns i krypterade data, vilket illustreras i beskrivningen av ECB:s svaghet.

Olika chifferlägen maskerar mönster genom att kaskadera utdata från chifferblocket eller andra globalt deterministiska variabler i det efterföljande chifferblocket. Ingångarna för de förtecknade lägena sammanfattas i följande tabell:

Sammanfattning av lägen
Mode Formler Ciphertext
Elektronisk kodbok (ECB) Yi = F(PlainTexti, Key) Yi
Cipher block chaining (CBC) Yi = PlainTexti XOR Ciphertexti-1 F(Y, Key); Ciphertext0 = IV
Propagerande CBC (PCBC) Yi = PlainTexti XOR (Ciphertexti-1 XOR PlainTexti-1) F(Y, Key); Ciphertext0 = IV
Cipher feedback (CFB) Yi = Ciphertexti-1 Plaintext XOR F(Y, Key); Ciphertext0 = IV
Output feedback (OFB) Yi = F(Yi-1, Key); Y0 = F(IV, Key) Plaintext XOR Yi
Counter (CTR) Yi = F(IV + g(i), Key); IV = token() Plaintext XOR Yi

Note: g(i) är en deterministisk funktion, ofta identitetsfunktionen.

Elektronisk kodbok (ECB)Redigera

ECB

Elektronisk kodbok

Kryptering parallelliserbar

Ja

Dekryptering parallelliserbar

.

Ja

Random read access

Ja

Det enklaste krypteringsläget är läget med elektronisk kodbok (ECB) (uppkallat efter konventionella fysiska kodböcker). Meddelandet delas upp i block och varje block krypteras separat.

Nackdelen med denna metod är bristande spridning. Eftersom ECB krypterar identiska klartextblock till identiska chiffertextblock döljer den inte datamönster bra. ECB rekommenderas inte för användning i kryptografiska protokoll.

Ett slående exempel på i vilken grad ECB kan lämna kvar klartextdatamönster i chiffertexten kan ses när ECB-läget används för att kryptera en bitmappbild som använder stora områden med enhetlig färg. Även om färgen på varje enskild pixel krypteras kan den övergripande bilden fortfarande urskiljas, eftersom mönstret av identiskt färgade pixlar i originalet finns kvar i den krypterade versionen.

Originalbild

Krypterad med ECB-läge

Andra lägen än ECB resulterar i pseudo slumpmässighet

Den tredje bilden är hur bilden kan se ut krypterad med CBC, CTR eller någon av de andra säkrare metoderna – inte att skilja från slumpmässigt brus. Observera att den tredje bildens slumpmässiga utseende inte garanterar att bilden har krypterats på ett säkert sätt; många typer av osäker kryptering har utvecklats som skulle ge ett resultat som ser lika ”slumpmässigt” ut.

ECB-läge kan också göra protokoll utan integritetsskydd ännu mer mottagliga för replay-attacker, eftersom varje block dekrypteras på exakt samma sätt.

Cipher block chaining (CBC)Edit

CBC

Cipher block chaining

Kryptering parallelliserbar

.

Nej

Dekryptering parallelliserbar

Ja

Random lästillgång

Ja

Ehrsam, Meyer, Smith och Tuchman uppfann CBC (cipher block chaining) 1976. I CBC-läget XOR-ordnas varje block av klartext med det föregående chiffertextblocket innan det krypteras. På så sätt är varje chiffertextblock beroende av alla de klartextblock som behandlats fram till dess. För att göra varje meddelande unikt måste en initialiseringsvektor användas i det första blocket.

Om det första blocket har index 1 är den matematiska formeln för CBC-kryptering

C i = E K ( P i ⊕ C i – 1 ) , {\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),}

C 0 = I V , {\displaystyle C_{0}=IV,}

medan den matematiska formeln för CBC-dekryptering är

P i = D K ( C i ) ⊕ C i – 1 , {\displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},}

C 0 = I V . {\displaystyle C_{0}=IV.}

ExempelRedigera

CBC har varit det vanligaste sättet att arbeta. De största nackdelarna är att krypteringen är sekventiell (dvs. den kan inte parallelliseras) och att meddelandet måste fyllas upp till en multipel av krypteringsblockets storlek. Ett sätt att hantera det sistnämnda problemet är genom en metod som kallas ciphertext stealing (stöld av chiffertext). Observera att en ändring på en bit i en klartext eller initialiseringsvektor (IV) påverkar alla följande chiffertextblock.

Dekryptering med en felaktig IV gör att det första klartextblocket blir korrupt men att efterföljande klartextblock blir korrekta. Detta beror på att varje block XOR-ordnas med det föregående blockets chiffertext, inte klartexten, så man behöver inte dekryptera det föregående blocket innan man använder det som IV för dekryptering av det aktuella blocket. Detta innebär att ett block med klartext kan återställas från två intilliggande block med chiffertext. Följaktligen kan dekryptering parallelliseras. Observera att en ändring av chiffertexten med en bit leder till att motsvarande block av klartext förstörs helt och hållet och att motsvarande bit i det följande blocket av klartext inverteras, men att resten av blocken förblir intakta. Denna egenhet utnyttjas i olika padding oracle-attacker, t.ex. POODLE.

Explicit initialiseringsvektorer utnyttjar denna egenskap genom att ett enda slumpmässigt block läggs före klartexten. Kryptering sker som vanligt, förutom att IV inte behöver kommuniceras till dekrypteringsrutinen. Oavsett vilket IV som används vid dekryptering är det endast det slumpmässiga blocket som ”korrumperas”. Det kan säkert kasseras och resten av dekrypteringen är den ursprungliga klartexten.

Propagating cipher block chaining (PCBC)Edit

PCBC

Propagating cipher block chaining

Kryptering parallelliserbar

.

No

Dekryptering parallelliserbar

No

Random lästillgång

No

Den fortlöpande chifferblockkedjan eller klartextchiffer-block chaining-läget utformades så att små förändringar i chiffertexten fortplantas på obestämd tid vid dekryptering, såväl som vid kryptering. I PCBC-läget XOR-ordnas varje block av klartext med både det föregående klartextblocket och det föregående chiffertextblocket innan det krypteras. Liksom i CBC-läge används en initialiseringsvektor i det första blocket.

Krypterings- och dekrypteringsalgoritmerna är följande:

C i = E K ( P i ⊕ P i – 1 ⊕ C i – 1 ) , P 0 ⊕ C 0 = I V , {\displaystyle C_{i}=E_{K}(P_{i}\oplus P_{i-1}\oplus C_{i-1}),P_{0}\oplus C_{0}=IV,}

P i = D K ( C i ) ⊕ P i – 1 ⊕ C i – 1 , P 0 ⊕ C 0 = I V . {\displaystyle P_{i}=D_{K}(C_{i})\oplus P_{i-1}\oplus C_{i-1},P_{0}\oplus C_{0}=IV.}

PCBC används framför allt i Kerberos v4 och WASTE, men är annars inte vanligt förekommande. På ett meddelande krypterat i PCBC-läge, om två intilliggande chiffertextblock utbyts, påverkar detta inte dekrypteringen av efterföljande block. Av denna anledning används PCBC inte i Kerberos v5.

Cipher feedback (CFB)Edit

Full-block CFBEdit

CFB

Cipher feedback

Kryptering parallelliserbar

Nej

Dekryptering parallelliserbar

Ja

Random read access

Ja

Läge för cipher feedback (CFB), i sin enklaste form är att använda hela blockchifferns utdata. I denna variant, som är mycket lik CBC, görs ett blockchiffer till ett självsynkroniserande strömchiffer. CFB-dekryptering i denna variant är nästan identisk med CBC-kryptering i omvänd ordning:

C i = { IV , i = 0 E K ( C i – 1 ) ⊕ P i , annars P i = E K ( C i – 1 ) ⊕ C i , {\displaystyle {\begin{aligned}C_{i}&={\begin{cases}{\text{IV}},&i=0\\E_{K}(C_{i-1})\oplus P_{i},&{\text{otherwise}}\end{cases}}\\P_{i}&=E_{K}(C_{i-1})\oplus C_{i},\end{aligned}}}

CFB-1, CFB-8, CFB-64, CFB-128 etc. Redigera

NIST SP800-38A definierar CFB med en bitbredd. CFB-läget kräver också en heltalsparameter, betecknad s, så att 1 ≤ s ≤ b. I specifikationen av CFB-läget nedan består varje klartextsegment (Pj) och chiffertextsegment (Cj) av s bitar. Värdet på s ingår ibland i namnet på läget, t.ex. 1-bitars CFB-läge, 8-bitars CFB-läge, 64-bitars CFB-läge eller 128-bitars CFB-läge.

Dessa lägen kommer att avkorta utgången av det underliggande blockchiffret.

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

I i = ( ( ( I i – 1 ≪ s ) + C i ) mod 2 b , {\displaystyle I_{i}={\big (}(I_{i-1}\ll s)+C_{i}{\big )}{\bmod {2}}}^{b},}

C i = MSB s ( E K ( I i – 1 ) ) ) ⊕ P i , {\displaystyle C_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus P_{i},}

P i = MSB s ( E K ( I i – 1 ) ) ⊕ C i , {\displaystyle P_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus C_{i},}

CFB-1 anses vara självsynkroniserande och motståndskraftig mot förlust av chiffertext; ”När CFB-läget med 1 bit används återställs synkroniseringen automatiskt b+1 positioner efter den infogade eller borttagna biten. För andra värden på s i CFB-läget och för de andra konfidentialitetslägena i denna rekommendation måste synkroniseringen återställas externt.” (NIST SP800-38A). D.v.s. 1 bit förlust i ett 128-bitars blockchiffer som AES kommer att göra 129 ogiltiga bitar innan giltiga bitar sänds ut.

CFB kan också självsynkronisera i vissa andra specialfall än de som anges. Till exempel kommer en ändring på en bit i CFB-128 med ett underliggande 128-bitars blockchiffer att synkroniseras på nytt efter två block. (CFB-128 etc. kommer dock inte att hantera bitförlust på ett elegant sätt; en bitförlust på en bit kommer att leda till att dekrypteraren förlorar sin anpassning till krypteraren)

CFB jämfört med andra lägenRedigera

Likt CBC-läget fortplantar sig ändringar i klartexten för evigt i chiffertexten, och kryptering kan inte parallelliseras. Liksom CBC kan dekryptering också parallelliseras.

CFB, OFB och CTR har två gemensamma fördelar jämfört med CBC-läget: blockchiffret används alltid bara i krypteringsriktningen, och meddelandet behöver inte fyllas upp till en multipel av chifferblockets storlek (även om stöld av chiffertext också kan användas för CBC-läget för att göra fyllning onödig).

Output feedback (OFB)Redigera

OFB

Output feedback

Kryptering parallelliserbar

Nej

Dekryptering parallelliserbart

No

Random read access

No

Läget för återkoppling av utdata (OFB) gör ett blockchiffer till ett synkront strömchiffer. Det genererar nyckelströmblock som sedan XOR-ordnas med klartextblocken för att få fram chiffertexten. Precis som med andra strömchiffreringar ger vändning av en bit i chiffertexten en vändning av en bit i klartexten på samma plats. Denna egenskap gör att många felkorrigerande koder kan fungera normalt även när de används före kryptering.

På grund av XOR-operationens symmetri är kryptering och dekryptering exakt likadana:

C j = P j ⊕ O j , {\displaystyle C_{j}=P_{j}\oplus O_{j},}

P j = C j ⊕ O j , {\displaystyle P_{j}=C_{j}\oplus O_{j},}

O j = E K ( I j ) , {\displaystyle O_{j}=E_{K}(I_{j}),}

I j = O j – 1 , {\displaystyle I_{j}=O_{j-1},}

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

Varje blockchifferoperation med återkoppling av utdata är beroende av alla tidigare operationer och kan därför inte utföras parallellt. Eftersom klartexten eller chiffertexten endast används för den slutliga XOR-analysen kan dock blockchifferoperationerna utföras i förväg, vilket gör att det sista steget kan utföras parallellt när klartexten eller chiffertexten är tillgänglig.

Det är möjligt att erhålla en nyckelström i OFB-läge genom att använda CBC-läge med en konstant sträng av nollor som indata. Detta kan vara användbart eftersom det gör det möjligt att använda snabba hårdvaruimplementationer av CBC-läge för OFB-lägeskryptering.

Användning av OFB-läge med ett partiellt block som återkoppling som CFB-läge minskar den genomsnittliga cykellängden med en faktor 232 eller mer. En matematisk modell som föreslogs av Davies och Parkin och som styrktes av experimentella resultat visade att endast med full återkoppling kan en genomsnittlig cykellängd nära det maximala värdet uppnås. Av denna anledning togs stödet för trunkerad återkoppling bort från specifikationen för OFB.

Counter (CTR)Edit

CTR

Counter

Kryptering parallelliserbar

Ja

Dekryptering parallelliserbar

Ja

Random read access

Ja

Note: CTR-läget (CM) är också känt som ICM-läget (heltalsräknarläge) och SIC-läget (segmenterat heltalsräknarläge).

Likt OFB förvandlar counter mode ett blockchiffer till ett strömchiffer. Det genererar nästa nyckelströmblock genom att kryptera successiva värden av en ”räknare”. Räknaren kan vara vilken funktion som helst som producerar en sekvens som garanterat inte kommer att upprepas under lång tid, även om en riktig inkrement-för-ett-räknare är den enklaste och mest populära. Användningen av en enkel deterministisk inmatningsfunktion var tidigare kontroversiell; kritiker hävdade att ”det innebär en onödig risk att medvetet utsätta ett kryptosystem för en känd systematisk inmatning”. I dag är dock CTR-läget allmänt accepterat och eventuella problem betraktas som en svaghet hos det underliggande blockchiffret, som förväntas vara säkert oberoende av systematisk bias i dess indata. Tillsammans med CBC är CTR-läget ett av två blockchifferlägen som rekommenderas av Niels Ferguson och Bruce Schneier.

CTR-läget introducerades av Whitfield Diffie och Martin Hellman 1979.

CTR-läget har liknande egenskaper som OFB, men tillåter också en slumpmässig tillgångsegenskap under dekryptering. CTR-läget är väl lämpat för att fungera på en maskin med flera processorer där block kan krypteras parallellt. Dessutom lider det inte av det kortcykelproblem som kan påverka OFB.

Om IV/nonce är slumpmässiga kan de kombineras tillsammans med räknaren med hjälp av någon inverterbar operation (concatenation, addition eller XOR) för att producera det egentliga unika räknarblocket för kryptering. Om det rör sig om en icke slumpmässig nonce (t.ex. en paketräknare) bör nonce och räknare sammanlänkas (t.ex. genom att lagra nonce i de övre 64 bitarna och räknaren i de nedre 64 bitarna i ett 128-bitars räknarblock). Att bara addera eller XOR-kombinera nonce och räknare till ett enda värde skulle i många fall bryta mot säkerheten vid en attack med utvald text (chosen-plaintext), eftersom angriparen kan manipulera hela IV-räknarparet för att orsaka en kollision. När en angripare kontrollerar IV-räknarparet och klartexten skulle XOR av chiffertexten med den kända klartexten ge ett värde som, när det XOR-ordnas med chiffertexten för det andra blocket som delar samma IV-räknarpar, skulle dekryptera det blocket.

Bemärk att nonce i det här diagrammet är likvärdigt med initialiseringsvektorn (IV) i de andra diagrammen. Om informationen om offset/lokalisering är skadad kommer det dock att vara omöjligt att delvis återskapa sådana data på grund av beroendet av byteoffset.

Lämna ett svar

Din e-postadress kommer inte publiceras.