Stream cipher
Inom kryptografi är ett stream cipher ett symmetriskt nyckelchiffer där klartextbitar kombineras med en pseudorandomisk chifferbitsström (keystream) med hjälp av en exklusiv-or-operation (xor). I ett stream cipher krypteras klartextsiffrorna en i taget, och omvandlingen av på varandra följande siffror varierar under krypteringstillståndet. Ett alternativt namn är en state cipher, eftersom krypteringen av varje siffra är beroende av det aktuella tillståndet. I praktiken är siffrorna vanligtvis enskilda bitar eller bytes.
Stream ciphers är en annan metod för symmetrisk kryptering än block ciphers. Blockchiffrer arbetar med stora block av fast längd. Stream ciphers körs vanligtvis med högre hastighet än block ciphers och har lägre krav på hårdvara. Stream ciphers kan dock vara känsliga för allvarliga säkerhetsproblem om de används på fel sätt; exempelvis får samma starttillstånd aldrig användas två gånger.
En stream cipher använder sig av en mycket mindre och bekvämare kryptografisk nyckel, till exempel 128 bitar. Med hjälp av denna nyckel genereras en pseudorandomisk nyckelström som kan kombineras med klartextsiffrorna på ett liknande sätt som vid en engångsblock-krypteringsalgoritmen. Eftersom nyckelströmmen är pseudorandomisk och inte riktigt slumpmässig kan den säkerhet som är förknippad med engångsblocket inte tillämpas, och det är fullt möjligt att en stream cipher är helt osäker.
Hur nyckelflödesgeneratorn i A5/1 fungerar, ett LFSR-baserat strömchiffer som används för att kryptera samtal i mobiltelefoner.
Typer av strömchiffer
En stream cipher genererar på varandra följande element i nyckelströmmen baserat på ett internt tillstånd. Detta tillstånd uppdateras på två sätt:
- Om tillståndet ändras oberoende av meddelandet i klartext eller chiffertext klassificeras chiffret som ett synkront strömchiffer.
- Om tillståndet uppdateras på grundval av tidigare ändringar av chiffertextens siffror klassificeras chiffret som en självsynkroniserande strömchiffer.
Synkrona strömchiffer
I ett synkront strömchiffer genereras en ström av pseudo slumpmässiga siffror oberoende av meddelandet med klartext och chiffertext, och kombineras sedan med klartexten (för att kryptera) eller med chiffertexten (för att dekryptera). I den vanligaste formen används binära siffror (bitar), och nyckelströmmen kombineras med klartexten med hjälp av XOR-operationen (exclusive or). Detta kallas binärt additivt strömsiffer.
I ett synkront strömchiffer måste avsändaren och mottagaren vara synkrona för att dekrypteringen ska lyckas. Om siffror läggs till eller tas bort från meddelandet under överföringen förloras synkroniseringen. För att återställa synkroniseringen kan man systematiskt prova olika förskjutningar för att få en korrekt dekryptering. Ett annat tillvägagångssätt är att markera chiffertexten med markörer vid regelbundna punkter i utdata.
Om en siffra däremot skadas under överföringen, snarare än läggs till eller försvinner, påverkas endast en enda siffra i klartexten och felet sprider sig inte till andra delar av meddelandet. Denna egenskap är användbar när överföringsfelprocenten är hög, men gör det mindre sannolikt att felet upptäcks utan ytterligare mekanismer. På grund av denna egenskap är synkrona strömchiffrar dessutom mycket känsliga för aktivaattacker - om en angripare kan ändra en siffra i chiffertexten, kan han kanske göra förutsägbara ändringar av motsvarande bit i klartext; till exempel, om en bit i chiffertexten vänds, får samma bit att vändas (Toggled) i klartexten.
Självsynkroniserande strömchiffrar
Självsynkroniserande stream ciphers är en annan teknik som använder en del av de föregående N chiffertexterna för att beräkna nyckelströmmen. Sådana system är också kända som asynkrona stream ciphers eller ciphertext autokey (CTAK). Idén om självsynkronisering patenterades 1946 och har den fördelen att mottagaren automatiskt synkroniserar sig med nyckelströmgeneratorn efter att ha tagit emot N chiffertextsiffror, vilket gör det lättare att återställa om siffror tappas bort eller läggs till i meddelandeströmmen. Fel med en enda siffra har begränsad effekt och påverkar endast upp till N klartextsiffror. Det är något svårare att utföra aktiva attacker på självsynkroniserande strömchiffrar än på synkrona motsvarigheter.
Ett exempel på ett självsynkroniserande strömchiffer är ett blockchiffer i cipher-feedback-läge (CFB).
Linjär återkoppling av skiftregisterbaserade strömchiffrar
Binära strömsiffror konstrueras ofta med hjälp av linjära återkopplade skiftregister (LFSR) eftersom de lätt kan implementeras i hårdvara och snabbt kan analyseras matematiskt. Det räcker dock inte att använda enbart LFSR för att ge god säkerhet. Olika system har utformats för att öka säkerheten hos LFSR.
Icke-lineära kombinationsfunktioner
Eftersom LFSR:er är linjära i sig är en teknik för att ta bort linjäriteten att mata utgångarna från en grupp parallella LFSR:er till en icke-linjär boolesk funktion för att bilda en kombinationsgenerator. Olika egenskaper hos en sådan kombinationsfunktion är viktiga för att garantera säkerheten hos det resulterande systemet, t.ex. för att undvika korrelationsattacker.
Klockstyrda generatorer
LFSR:erna är normalt stegvisa. En metod för att införa icke-linjäritet är att låta LFSR:n klockas oregelbundet, vilket styrs av utgången från en andra LFSR. Sådana generatorer är bland annat stop-and-go generatorn, generatorn för växlande steg och krympningsgeneratorn.
Stop-and-go generatorn (Beth och Piper, 1984) består av två LFSRs. Den ena LFSR:n klockas om den andra LFSR:ns utgång är en "1", annars upprepar den sin tidigare utgång. Detta resultat kombineras sedan (i vissa versioner) med resultatet från en tredje LFSR som klockas med en regelbunden hastighet.
Skrumpningsgeneratorn använder en annan teknik. Två LFSRs används, som båda klockas regelbundet på följande sätt:
- Om den första LFSR:ns utgång är "1" blir den andra LFSR:ns utgång generatorns utgång.
- Om resultatet av den första LFSR:n är "0", förkastas resultatet av den andra och ingen bit skickas ut av generatorn.
Denna teknik lider av tidsattacker mot den andra generatorn, eftersom utgångshastigheten är variabel på ett sätt som beror på den andra generatorns tillstånd. Detta kan förbättras genom att buffra utgången.
Filtergenerator
En annan metod för att förbättra säkerheten hos en LFSR är att överföra hela tillståndet hos en enda LFSR till en icke-linjär filtreringsfunktion.
Andra konstruktioner
I stället för en linjär drivanordning kan man använda en icke-linjär uppdateringsfunktion. Klimov och Shamir föreslog t.ex. triangulära funktioner (T-funktioner) med en enda cykel på n bitord.
Säkerhet
För att vara säker måste perioden för nyckelströmmen (antalet siffror som skrivs ut innan strömmen upprepas) vara tillräckligt lång. Om sekvensen upprepas kan de överlappande chiffertexterna anpassas till varandra "på djupet", och det finns tekniker som gör det möjligt att extrahera klartexten från chiffertexter som genererats med dessa metoder.
Användning
Stream ciphers används ofta i tillämpningar där klartext kommer i mängder av okänd längd, som i säkra trådlösa anslutningar. Om en blockchiffer skulle användas i denna typ av tillämpning måste konstruktören välja antingen överföringseffektivitet eller komplexitet i genomförandet, eftersom blockchiffer inte direkt kan arbeta med block som är kortare än deras blockstorlek. Om ett 128-bitars blockchiffer till exempel tar emot separata 32-bitars block av klartext, behöver tre fjärdedelar av de överförda uppgifterna fyllas på. Blockchiffer måste användas i läget för stöld av chiffertext eller avslutande av resterande block för att undvika stoppning, medan strömchiffer eliminerar detta problem genom att arbeta med den minsta överförda enheten (vanligtvis byte).
En annan fördel med stream ciphers inom militär kryptografi är att chifferströmmen kan genereras av en krypteringsenhet som omfattas av strikta säkerhetsåtgärder och sedan matas till andra enheter, t.ex. en radioapparat, som utför xor-operationen som en del av sin funktion. Den andra enheten kan vara utformad för att användas i mindre säkra miljöer.
RC4 är den mest använda stream cipher i mjukvara; andra inkluderar: Andra är A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 och WAKE.
RC4 är en av de mest använda stream cipher-konstruktionerna.
Jämförelse av strömskeppsfunktioner
StreamCipher | CreationDate | Hastighet | (bitar) | Attack | |||
Effektivt | Initialiseringsvektor | InternalState | Mest kända | Beräkningskomplexitet | |||
A5/1 | 1989 | Röst (Wphone) | 54 | 114 | 64 | Aktiv KPA OR | ~2 sekunder OR239.91 |
A5/2 | 1989 | Röst (Wphone) | 54 | 114 | 64? | Aktiv | 4,6 millisekunder |
FISK | 1993 | Ganska snabbt (Wsoft) | Stor | Attack med känd text | 211 | ||
Korn | Före 2004 | Snabbt | 80 | 64 | 160 | Nyckelavledning | 243 |
HC-256 | Före 2004 | 4 (WP4) | 256 | 256 | 65536 | ||
ISAAC | 1996 | 2,375 (W64-bit) | 8-8288 vanligtvis | N/A | 8288 | (2006) Första omgången Svaga interna staters avledning i första omgången | 4.67×101240 (2001) |
MUGI | 1998-2002 | 128 | 128 | 1216 | N/A (2002) | ~282 | |
PANAMA | 1998 | 2 | 256 | 128? | 1216? | Hashkollisioner (2001) | 282 |
Phelix | Före 2004 | upp till 8 (Wx86) | 256 + en 128-bitars nonce | 128? | Differential (2006) | 237 | |
Gädda | 1994 | 0,9 x FISH (Wsoft) | Stor | N/A (2004) | N/A (2004) | ||
Py | Före 2004 | 2.6 | 8-2048? | 64 | 8320 | Kryptanalytisk teori (2006) | 275 |
Kanin | 2003-feb | 3,7(WP3)-9,7(WARM7) | 128 | 64 | 512 | N/A (2006) | N/A (2006) |
1987 | Imponerande | 8-2048 vanligtvis | 8 | 2064 | Shamir Initial-Bytes Key-Derivation OR KPA | 213 OR 233 | |
Salsa20 | Före 2004 | 4.24 (WG4) -11 | 128 + en 64-bitars nonce | 512 | 512 + 384 (nyckel+IV+index) | Differential (2005) | N/A (2005) |
Scream | 2002 | 4 - 5 (Wsoft) | 128 + en 128-bitars nonce | 32? | 64-bitars runda funktion | ||
SEAL | 1997 | Mycket snabb (W32-bit) | 32? | ||||
SNOW | Före 2003 | Mycket bra (W32-bit) | 128 ELLER 256 | 32 | |||
SOBER-128 | 2003 | upp till 128 | Meddelande smedja | 2−6 | |||
SOSEMANUK | Före 2004 | Mycket bra (W32-bit) | 128 | 128 | |||
Trivium | Före 2004 | 4 (Wx86) - 8 (WLG) | 80 | 80 | 288 | Brute force-attack (2006) | 2135 |
Turing | 2000-2003 | 5.5 (Wx86) | 160 | ||||
VEST | 2005 | 42 (WASIC) -64 (WFPGA) | Variabel vanligen | Variabel vanligen | 256 - 800 | N/A (2006) | N/A (2006) |
WAKE | 1993 | Snabbt | 8192 | CPA OCH CCA | Sårbar | ||
StreamCipher | CreationDate | Hastighet | (bitar) | Attack | |||
Effektivt | Initialiseringsvektor | InternalState | Mest kända | Beräkningskomplexitet |
Relaterade sidor
- eSTREAM
Frågor och svar
F: Vad är en stream cipher?
S: Ett stream cipher är ett symmetriskt nyckelchiffer där klartextbitar kombineras med en pseudotillfällig chifferbitsström (keystream) med hjälp av en exklusiv-or (xor)-operation.
F: Hur skiljer det sig från blockchiffer?
S: Stream ciphers körs vanligtvis med högre hastighet än block ciphers och har lägre hårdvarukrav. Blockchiffrer arbetar med stora block av fast längd, medan strömchiffrer krypterar siffror en i taget och omvandlingen av på varandra följande siffror varierar under krypteringstillståndet.
F: Vilken typ av nycklar används?
S: Stream ciphers använder sig av mycket mindre och bekvämare kryptografiska nycklar, t.ex. 128-bitars nycklar.
F: Hur genereras nyckelströmmen?
S: Nyckelströmmen genereras baserat på den kryptografiska nyckel som används, på samma sätt som vid en engångskodningsalgoritmen. Men eftersom nyckelströmmen är pseudoallvarlig och inte riktigt slumpmässig kan den säkerhet som är förknippad med engångsblocket inte tillämpas.
F: Varför får man aldrig använda samma starttillstånd två gånger?
S: Att använda samma starttillstånd två gånger kan leda till allvarliga säkerhetsproblem eftersom det gör det lättare för angripare att dekryptera data utan att känna till eller ha tillgång till din kryptografiska nyckel.
F: Finns det någon risk med att använda strömchiffer?
S: Ja, om de används felaktigt eller utan att vidta lämpliga försiktighetsåtgärder finns det en risk förknippad med att använda stream ciphers eftersom de kan vara helt osäkra om de inte hanteras på rätt sätt.