Inden for kryptografi er en stream cipher en symmetrisk nøglecipher, hvor bits i klartekst kombineres med en pseudo-tilfældig cipherbitstrøm (keystream) ved hjælp af en eksklusiv-eller-operation (xor). I en stream cipher krypteres klartekstcifrene én ad gangen, og transformationen af de på hinanden følgende cifre varierer under krypteringstilstanden. Et alternativt navn er en tilstandschiffer, da krypteringen af hvert enkelt ciffer afhænger af den aktuelle tilstand. I praksis er cifrene typisk enkelte bits eller bytes.

Stream ciphers repræsenterer en anden tilgang til symmetrisk kryptering end blokcifre. Blokchiffrer opererer med store blokke af fast længde. Stream ciphers udføres typisk med en højere hastighed end block ciphers og har lavere krav til hardwaren. Stream ciphers kan imidlertid være udsat for alvorlige sikkerhedsproblemer, hvis de anvendes forkert; f.eks. må den samme starttilstand aldrig anvendes to gange.

En stream cipher anvender en meget mindre og mere praktisk kryptografisk nøgle, f.eks. 128 bit-nøgler. På grundlag af denne nøgle genererer den en pseudorandom nøglestrøm, som kan kombineres med klartekstcifrene på samme måde som en engangskrypteringsalgoritmen. Men fordi nøglestrømmen er pseudorandom og ikke virkelig tilfældig, kan den sikkerhed, der er forbundet med one-time pad'en, ikke anvendes, og det er meget muligt for en stream cipher at være fuldstændig usikker.

Hvordan fungerer en stream cipher?

Grundideen er enkel: en intern tilstand (initialiseret fra nøgle og ofte en initialiseringsvektor/nonce) driver en pseudorandom generator, som producerer en løbende keystream. Hver bit eller byte af klarteksten kombineres med tilsvarende bit/byte fra keystreamen med en XOR-operation, hvilket giver chifferteksten. Ved dekryptering genbruges samme keystream (samme nøgle og nonce) og XOR'er med chifferteksten for at genskabe klarteksten.

Typer af stream ciphers

  • Synchronous stream ciphers: Keystreamen afhænger kun af nøgle og eventuel nonce; sender og modtager må holde samme tilstand for at synkronisere. Tab eller indsættelse af bits kan ødelægge synkroniseringen.
  • Self-synchronizing (autokorrelérende) stream ciphers: Nøglestrømmen afhænger også af tidligere chiffertekstbits, så modtageren kan automatisk genoprette korrekt tilstand efter et vist antal bits.
  • Block-cipher-baserede modes: Blokchiffrer kan bruges i tilstande som CTR for at opføre sig som stream ciphers; disse kombinerer fordelene ved velundersøgte blokalgoritmer med streaming-egenskaber.
  • Moderne designs: Eksempler på moderne, sikre streamcifre eller strømlignende konstruktioner er blandt andet Salsa20/ChaCha (ofte brugt med AEAD som ChaCha20-Poly1305), og små hardware-orienterede cifre som Trivium og Grain.

Fordele

  • Høj gennemstrømning og lav latenstid — velegnet til realtidsdata (f.eks. stemme, video).
  • Enkle og billige i hardware, ofte lave hukommelseskrav.
  • Kan kryptere data af vilkårlig længde uden padding.

Sikkerhedsrisici og almindelige fejl

  • Genbrug af samme nøglestrøm: Hvis samme nøgle/nonce-kombination bruges to gange, får en angriber XOR af to klartekster (detaljer kan afsløres direkte).
  • Forkert IV/nonce-håndtering: Nonce skal være unik (ofte sekventielt eller tilfældigt men uden gentagelse) for hver kryptering under samme nøgle.
  • Mangler ved keystream-generatoren: Statistiske bias eller forudsigelighed i PRNG'en kan gøre keystreamen sårbar for kryptanalyse.
  • Manglende autentificering: Enkel XOR-kryptering er malleabel — uden MAC eller AEAD kan en angriber ændre chifferteksten uden at blive opdaget.
  • Implementationsfejl: Sidekanalangreb, svag nøglehåndtering eller genbrug af nøgler i protokoller kan bryde sikkerheden.

Anbefalinger og bedste praksis

  • Brug velrenommerede og gennemgranskede algoritmer (fx ChaCha20-Poly1305 til moderne anvendelser fremfor forældede som RC4).
  • Anvend AEAD (Authenticated Encryption with Associated Data) for både fortrolighed og integritet.
  • Sørg for entydige noncer/IV'er pr. nøgle — dokumentér kravene i protokollen og håndhæv dem i implementationen.
  • Rotation af nøgler og sikker nøgleadministration reducerer risikoen ved kompromittering.
  • Undersøg og test random-kilder og PRNG-implementeringer; undgå hjemmebyggede designs uden peer review.

Praktiske anvendelser

Stream ciphers bruges ofte i situationer med krav om lav latenstid eller begrænsede ressourcer, fx i netværkskryptering, trådløs kommunikation og indlejrede systemer. Når effektivitet og lave krav til memory er vigtige, kan et godt designet stream cipher være et godt valg — forudsat at kravene til nonce-håndtering og autentificering overholdes.

Konklusion

Stream ciphers er et kraftfuldt værktøj i symmetrisk kryptografi: de kan være meget effektive og enkle, men stiller krav til korrekt brug (særligt unik initialisering og autentificering). Moderne anbefalinger går ofte på at bruge velanmeldte konstruktioner og AEAD-samlinger for at undgå de klassiske faldgruber såsom genbrug af nøglestrømme og manglende integritetssikring.