Krypteringstilstand - en metode til at anvende en blokchiffer (algoritme), der giver dig mulighed for at konvertere en sekvens af åbne datablokke til en sekvens af krypterede datablokke . I dette tilfælde kan data fra en anden blok bruges til at kryptere en blok.
Typisk bruges krypteringstilstande til at ændre krypteringsprocessen, så resultatet af kryptering af hver blok er unikt uanset de data, der krypteres og ikke tillader nogen konklusioner om deres struktur. Dette skyldes primært, at blokcifre krypterer data i blokke af en fast størrelse, og derfor er der mulighed for lækage af information om gentagne dele af data krypteret med samme nøgle .
I 1981 blev FIPS 81- standarden vedtaget . Standarden beskrev de første former for blokcifre: ECB, CBC, OFB og CFB. I 2001 reviderede NIST Institute ( US National Institute of Standards and Technology ) listen over tilstande og tilføjede en beskrivelse af driften af AES -blokchifferet i CTR-tilstand ( SP800-38A ) til den. I januar 2010 tilføjede NIST en beskrivelse af driften af AES -chifferet i XTS-tilstand (SP800-38E) til standarden.
Standarden beskriver ikke alle tilstande, men kun de tilstande, der er godkendt af NIST -instituttet . For eksempel er CTS -tilstanden ( ciphertext stealing ) ikke beskrevet i standarden, men er implementeret i mange populære kryptografiske biblioteker .
Krypteringstilstande er defineret af en række nationalt og internationalt anerkendte organisationer. Den mest indflydelsesrige af disse er NIST .
Nedenfor er en beskrivelse af flere krypteringstilstande ved hjælp af blokcifre [1] .
I GOST 28147-89 kaldes denne tilstand den simple udskiftningstilstand .
Kryptering:
Lad en besked gives ( klartekst , bitsekvens, data).
Under kryptering udføres følgende handlinger:
Dekryptering:
udføres af funktionen med den samme tast k :
Ejendommeligheder:
Ulemper ved ECB:
Almindelig tekst som billede | Kryptogram opnået ved kryptering i ECB-tilstand. Billedet viser træk ved det originale billede | Kryptogram opnået ved ikke-ECB-kryptering. Billedet er en pseudo-tilfældig sekvens af pixels |
Fordele ved ECB:
Denne tilstand kaldes den elektroniske kodebogstilstand, da det er muligt at oprette en bog, hvor hver blok af almindelig tekst vil blive forbundet med en blok med chiffertekst. At skabe en bog er dog ikke en triviel opgave. Hvis blokstørrelsen er x bit, vil bogen indeholde 2 x poster, og hver bog vil svare til én nøgle.
For at kryptere en besked udføres følgende trin [4] .
Dekryptering udføres af funktionen ved hjælp af den samme nøgle k og initialiseringsvektor IV :
Ulemper ved CBC:
Fordele ved CBC:
Manglerne ved CBC-tilstanden førte til skabelsen af en forbedret form for udbredelse af cipher-blok-kæde (Propagating Cipher Block Chaining, PCBC) [4] . Naturligvis ligner denne tilstand CBC, bortset fra at den forrige bloktekstblok og den foregående chiffertekstblok er XORed med den aktuelle bloktekstblok før eller efter kryptering. [1]
Følgelig dekryptering: hvor er initialiseringsvektoren
RSVS-krypteringstilstanden bruges i Kerberos 4-protokolversionen og giver dig mulighed for at opdage fejl. Denne krypteringstilstand er ikke en føderal eller international standard. PCBC-tilstanden er en variant af CBC-tilstanden, som har en specifik egenskab - en krypteringsfejl fører til forkert dekryptering af alle efterfølgende blokke. Dette betyder følgelig, at kontrol af byggeblokken i slutningen af meddelelsen sikrer integriteten af hele meddelelsen.
Denne tilstand er naturligvis ikke uden fejl, da udskiftning af to blokke med chiffertekst bevirker, at de to tilsvarende blokke af klartekst dekrypteres forkert, men på grund af XOR over almindelig tekst og chiffertekst kompenseres yderligere fejl. Derfor, hvis integritetskontrollen kun tjekker de sidste par blokke af den dekrypterede tekst, kan du ende med en delvist beskadiget besked. Selvom ingen endnu har udnyttet denne sårbarhed i Kerberos, er version 5 allerede skiftet til CBC-tilstand.
Chiffertekstfeedback - tilstand , chifferfeedback - tilstand , CFB [ 4 ] . Under kryptering tilføjes hver almindelig tekstblok modulo 2 til den blok, der er krypteret i det foregående trin.
Styrken af CFB bestemmes af styrken af den anvendte chiffer. Blokke af almindelig tekst er "blandet" ("maskeret") med blokke af chiffertekst . Hvis der er to identiske blokke med chiffertekst i CFB-tilstand med fuld blokfeedback, vil resultatet af for eksempel DES-kryptering i næste trin være det samme. Krypteringshastigheden for CFB-tilstanden med fuld blokfeedback er den samme som blokchifferens, og muligheden for at parallelisere krypteringsproceduren er begrænset [1] .
Output-feedback -tilstanden (OFB) [4] forvandler blokchifferet til en synkron strømchiffer: den genererer nøgleblokke, der er resultatet af tilføjelse med klartekstblokke for at opnå chifferteksten. Ligesom med andre stream-cifre producerer spejling i chifferteksten en spejlet bit i klarteksten på samme sted. Denne egenskab tillader mange fejlkorrigerende koder at fungere normalt, selv når fejlkorrektion anvendes før kodning.
På grund af symmetrien i tilføjelsesoperationen ligner kryptering og dekryptering:
Hver operation af udgangsfeedbackblokchifferet afhænger af alle de foregående og kan derfor ikke udføres parallelt. Men fordi almindelig tekst eller chiffertekst kun bruges til den endelige tilføjelse, kan blokchiffer-handlingerne udføres i forvejen, hvilket gør det muligt at udføre den endelige kryptering parallelt med klarteksten.
Feedback på output til k bit anbefales ikke af sikkerhedsmæssige årsager . OFB-tilstanden har følgende fordel i forhold til CFB-tilstanden: fejl, der er et resultat af transmission over en støjende kanal, "smøres" ikke over hele chifferteksten under dekryptering, men lokaliseres inden for en blok. Klarteksten kan dog ændres ved visse manipulationer af chiffertekstblokkene. På trods af at OFB-kryptering ikke kan paralleliseres, kan effektiviteten af proceduren forbedres ved at prægenerere en uafhængig sekvens af blokke. [en]
Denne metode kaldes også " output feedback mode ".
OFB foreslår også en vis forbedring med hensyn til metoden til at generere en uafhængig sekvens af blokke: For at opnå den næste blok, foreslås det at kryptere ikke med , men med c , hvor er en initialiseringsvektor.
Tællertilstanden (CTR) [4] indebærer, at værdien af en eller anden tæller, der er akkumuleret siden starten, returneres til input fra den tilsvarende blokchifferalgoritme. Tilstanden laver en blokchiffer-strøm, det vil sige, den genererer en sekvens, hvorpå XOR-operationen anvendes med beskedteksten. Klarteksten og chiffertekstblokken har samme blokstørrelse som den underliggende chiffer (såsom DES eller AES ). [5] CTR-tilstand giver følgende funktioner.
Kryptering i CTR-tilstandDekryptering i CTR-tilstand
— tællerværdi for den i-te blok.
Tællerværdierne skal naturligvis være unikke for hver blok af klartekst kodet af en given chiffer med en given nøgle (ellers er blokke af chiffertekst krypteret med identiske tællerværdier i fare). Dette krav opfyldes i to trin.
For det første opnås tællerværdierne for kryptering af blokke i en enkelt meddelelse fra den indledende tællerværdi ved hjælp af inkrementfunktionen. For at sikre tilfældighed kan mængden af stigning afhænge af bloknummeret. Standardinkrementfunktionen kan anvendes på hele tællerblokken eller på en del af den. Lad tællerværdien repræsentere en blok af b bits, og lad inkrementfunktionen anvendes på de m mindst signifikante bits.
er sammenkædningsfunktionen ; - lavere bits; - senior bits. Det unikke af tællerværdierne er sikret for alle blokke af meddelelsen, forudsat at . Hvor er antallet af blokke, som beskeden er opdelt i.
For det andet vælges de indledende tællerværdier for hver besked for at sikre, at alle anvendte tællerværdier er unikke. Dette kan opnås på mange måder. For eksempel, hvis meddelelser er krypteret sekventielt, så kan resultatet af anvendelsen af stigningsfunktionen på den sidste værdi af den forrige meddelelsestæller bruges som startværdien af tælleren for denne meddelelse. Desuden, hvis inkrementfunktionen bruger m bit, bør det samlede antal bloktekstblokke ikke overstige . En anden tilgang foreslår at opdele den binære repræsentation af tælleren i to dele. De mest signifikante cifre tildeles nonce af meddelelsen, og inkrementerfunktionen [6] vil blive anvendt på de resterende cifre .
I mangel af feedback kan krypterings- og dekrypteringsalgoritmerne i CTR-tilstand udføres parallelt. Desuden kan den store mængde beregning, der er involveret i kryptering af tællerværdier, udføres i forvejen, før almindelig tekst eller chiffertekst er tilgængelig. Dette giver CTR-tilstanden en fordel i forhold til CFB- og OFB-tilstandene.
Random Delta-tilstanden bruges til at eliminere forudsigeligheden af tællerændringer i CTR-tilstand. For eksempel er dette AES, og blokstørrelsen er 16 bytes. En tilfældig initialiseringsvektor tages (for eksempel ved at bruge RdRand ). Dens nederste 8 bytes betragtes som tilfældigt delta - Random Delta (RD):
Initial (initialiseringsvektor) krypteres og sendes i begyndelsen af beskeden. Blok 0 er XORed med Initial før kryptering. For hver efterfølgende blok stiger værdien af Initial med Delta (i heltalsrepræsentation uden fortegn - uint128 += uint64):
Dette eliminerer forudsigeligheden ved at ændre tælleren i CTR-tilstand. Hvis der altid er et, er delta her et tilfældigt tal, et af 2^64. Det er ligesom Initial ukendt for angriberen.
CTR er også alarmerende på grund af den direkte nærhed af klarteksten til chifferteksten via XOR. I Random Delta ligger AES mellem klarteksten og chifferteksten.
Åbenheden i den indledende transmission rejser også spørgsmål. Jo mindre angriberen ser, jo bedre. Jo længere klarteksten er fra chifferteksten, jo bedre. Alle kendte modes - ECB, CBC, OFB, CTR - har nogle af disse mangler. I Random Delta ligger alt bag AES, og Initial og Delta er tilfældige variabler , som er ukendte for angriberen.
En af ulemperne ved CTR i RD er dog til stede. At kende formatet af de transmitterede data tillader tilfældige forvrængninger at blive smidt ind på bestemte steder af disse data, som kan bruges til et angreb. En hash kan tilføjes til bloksekvensen for at kontrollere integriteten:
Det ser ud til, at Random Delta + Hash ikke har disse ulemper. Overført til offentlig ejendom.
En vigtig pointe: der skal være mange AES-permutationer mellem den lukkede tekst og den åbne tekst, ellers svækker det krypteringsdybden. Den lukkede tekst som en funktion af den åbne tekst, gennem XOR alene , annullerer krypteringsdybden, som AES giver (nemlig, dette er den metode, der bruges af OFB, CFB, CTR-tilstande).
Sikkerheden i Random Delta er ikke meget lavere end for AES selv.
Hvis der kræves en højere grad af deltatilfældighed (f.eks. 128-bit), kan den genereres separat og sendes i begyndelsen af meddelelsen sammen med Initial.
Ligesom CTR giver Random Delta dig mulighed for at kryptere / dekryptere blokke parallelt, med større ydeevne, uden at vente på kryptering / dekryptering af den forrige blok (hvilket er en nødvendighed i CBC, PCBC, CFB, OFB).
"Random Delta 128"-tilstanden er kendetegnet ved brugen af separate 128-bit Initial og Delta. Giver mere tilfældighed til skyggen.
Galois/tællertilstand (tæller med Galois -godkendelse ) er en mere sikker modifikation af CTR, der giver autentificeret kryptering med vedhæftede data ( AEAD-blokchiffertilstand ).
I kryptografi repræsenterer initialiseringsvektoren ( ) et tal, som regel skal det være tilfældigt eller pseudo-tilfældigt . Tilfældighed er afgørende for at opnå semantisk sikkerhed, som, når man genbruger et skema under den samme nøgle, vil forhindre en angriber i at udlede relationer mellem krypterede meddelelsessegmenter. For blokcifre er brugen beskrevet efter driftsmåder. Randomisering er også påkrævet for andre primitiver såsom universelle hash-funktioner og meddelelsesgodkendelseskoder baseret på dem.
I sådanne krypteringstilstande som CBC, CFB og OFB tilføres initialiseringsvektoren ( ) som input. Desuden skal både afsender og modtager i begyndelsen af kommunikationssessionen have det samme . Værdien behøver slet ikke at være hemmelig og kan meget vel overføres sammen med den første blok af chifferteksten. Det, der virkelig er vigtigt, er, at i CBC- og CFB-tilstande skal denne værdi være uforudsigelig, og i OFB-tilstand skal den være unik [2] .
Uforudsigelighed i CBC- og CFB-tilstande kan opnås på flere måder. For eksempel er det muligt at transformere værdien af en tæller (f.eks. beskedtælleren) med den samme funktion. Eller brug GPC til at generere en pseudo-tilfældig sekvens af den ønskede længde.
I OFB-tilstand behøver initialiseringsvektoren ikke at være uforudsigelig, men den skal være unik for alle kommunikationssessioner, hvor den samme hemmelige krypteringsnøgle bruges i OFB . Dette kan opnås igen ved hjælp af en beskedtæller. Hvis dette krav ikke følges, kan hemmeligholdelsen af meddelelsen i OFB-tilstand nemt kompromitteres. En konsekvens af dette krav er, at den næste initialiseringsvektor for OFB-tilstand ikke kan genereres ved at anvende en funktion med den samme nøgle .
ECB-, CBC- og PCBC-tilstandene fungerer med almindelige tekstmeddelelser, der skal være et multiplum af længden af en blok. Hvis denne egenskab ikke er opfyldt, skal det nødvendige antal bit, kaldet udfyldning, tilføjes til meddelelsen . For eksempel foreslår "udfyldningsmetode 2" ISO/IEC 9797-1 at tilføje en enkelt bit til slutningen af meddelelsen og udfylde resten med nuller [7] .
Med denne metode skal modtageren af chifferteksten vide sig sikker på, at beskeden indeholder en udfyldning. Dette kan opnås ved at vedhæfte udfyldning til hver besked, selvom det ikke er påkrævet (i hvilket tilfælde det sendes som en separat blok). Dette er ikke den eneste løsning - du kan for eksempel sende information om dens længde med hver besked [6] .
For enhver tilstand forårsager en fejlbit i en chiffertekstblok, at resultatet af dens dekryptering bliver ødelagt. I CFB-, OFB- og CTR-tilstande vil den korrupte bit have samme position i den dekrypterede blok som fejlbitten i chiffertekstblokken, og fejlen vil ikke forplante sig til de resterende bits i blokken. I ECB- og CBC-tilstande kan en hvilken som helst del af blokken blive ødelagt med en sandsynlighed på omkring 50 % (afhængigt af selve chifferens styrke). Samtidig er det i ECB-, OFB- og CTR-tilstandene kun den blok, der er et resultat af dekrypteringen af den korrupte blok, der er beskadiget. I CBC-tilstand er den næste blok også genstand for fejlagtig dekryptering, og de korrupte bits vil svare til fejlbits i chifferteksten i den foregående blok. I CFB-tilstand påvirker en fejlbit i et chiffertekstsegment de næste b/s (afrundet til nærmeste heltal, b er bloklængden, s er segmentlængden) af segmenterne, og enhver af bits i den dekrypterede tekst kan være fejlagtig [6] .
Tilstedeværelsen af fejlbits i initialiseringsvektoren er også skadelig for dekrypteringsprocessen. I OFB-tilstand rammer fejlbitten i IV hver chiffertekstblok i den tilsvarende meddelelse. I CFB-tilstand vil fejl i initialiseringsvektoren ødelægge mindst det første segment af chifferteksten. Hvorvidt resten af segmenterne er korrupte afhænger af positionen af bit længst til højre i IV (i værste tilfælde vil b/s af chiffertekstsegmenterne blive påvirket). Når du bruger OFB- og CFB-tilstandene, kan enhver bit af den korrupte chiffertekst blive ødelagt som følge af en fejlbit i IV. I CBC-tilstand vil kun de bits i den første chiffertekstblok, der er i positioner svarende til fejlbittene i initialiseringsvektoren, blive ødelagt.
For CTR-tilstand bevirker en fejlbit i tællerværdien, at enhver bit i dekrypteringen af den tilsvarende chiffertekst bliver ødelagt med en sandsynlighed på omkring 50 %.
Ud over forekomsten af en fejlbit i en chiffertekstblok, kan sletning eller bitindsættelse også forekomme. Dette fører til overtrædelse af grænserne for alle efterfølgende blokke af chifferteksten, og resultaterne af dekrypteringen vil være helt forkerte, indtil grænserne er synkroniseret. Når du bruger 1-bit CFB-tilstanden, gendannes synkroniseringen automatisk b+1-positioner, efter at en bit vises eller forsvinder. I andre tilstande forekommer automatisk gendannelse af synkronisering ikke [6] .
Valget af krypteringstilstand afhænger af dit mål.
Til almindelig klartekst kan du bruge CBC, CFB eller OFB. For at kryptere filer er det bedre at bruge CBC: sikkerheden øges kraftigt, når der opstår fejl i lagrede data, svigter synkronisering næsten aldrig. Den specifikke tilstand afhænger af dine krav. Generelt er valget af krypteringsmetode en søgen efter et kompromis mellem effektivitet og ydeevne [8] .