Virta-salaus (engl. stream cipher) on salakirjoituksessa käytetty symmetrinen avainsalaus, jossa selkotekstin bitit tai tavut yhdistetään pseudosatunnaiseen avainvirtaan) käyttäen eksklusiivista tai-operaatiota (xor). Tyypillisesti selkotekstin numerot salataan yksi kerrallaan, ja peräkkäisten numeroiden muunnos voi vaihdella salauksen aikana. Tämän vuoksi virta-salausta kutsutaan myös tilasalaus -nimellä: kunkin numeron salaus riippuu senhetkisestä tilasta (tunnetaan myös nimellä salauksen sisäinen tila). Käytännössä salattavat numerot ovat tavallisesti yksittäisiä bittejä tai tavuja.

Toimintaperiaate

Virtasalaus muodostaa ensin lyhyestä salausavaimesta (esimerkiksi 128-bittinen) ja yleensä kutsettavaan arvoon eli alkutilaan tai nonceen perustuvan pseudosatunnaisen avainvirran. Tämä avainvirta XORataan (exclusive OR) selkotekstin kanssa ja tuloksena syntyy salattu teksti. Purettaessa sama avainvirta XORataan jälleen salatun tekstin kanssa, jolloin saadaan alkuperäinen selkoteksti takaisin.

Vertaus one-time pad -menetelmään on opettavainen: samoin kuin one-time pad, virta-salaus yhdistää selkotekstin ja avainvirran bititasolla. Erot tulevat siitä, että one-time padissa avainvirta on aidosti satunnainen ja käytetään vain kerran; käytännön virtasalaimet taas tuottavat avainvirran deterministisesti pienemmästä avaimesta, eli avainvirta on pseudosatunnainen, mikä asettaa omat turvallisuusvaatimuksensa.

Avainvirran tuottajat ja toteutustavat

Avainvirran generoimiseksi käytetään erilaisia rakenteita, mm. lineaarisia ja epälineaarisia siirtorekistereitä (LFSR, NLFSR), kryptografisia satunnaislukugeneraattoreita (PRNG), sekä lohkoalgebraattisia rakennelmia. Tunnettuja esimerkkejä ovat historiallisen merkityksen omaava RC4 sekä modernimmat algoritmit kuten Salsa20 ja ChaCha20. Lisäksi lohkosalaimia voidaan käyttää virta-salaustapaan (esimerkiksi CTR-tila: lohkojen laskenta tuottaa avainvirran), jolloin lohkosalaimen turvallisuus periytyy siihen käytetystä lohkosalausalgoritmista.

Synkroniset vs. itse-synkronoituvat virta-salaimet

  • Synkroniset: avainvirta riippuu vain avaimesta ja mahdollisesta noncesta/alkutilasta. Lähettäjä ja vastaanottaja on synkronoitava niin, että heillä on sama avainvirta samaan aikaan. Virheistä tai paketteja kadotettaessa synkronointi voi rikkoutua.
  • Itse-synkronoituvat (resynchronizing): avainvirta muodostuu myös aiemmista bittivirheistä tai aiemmasta ciphertextistä, jolloin vastaanottaja voi synkronoida itse itsensä tietyn määrän vastaanotettujen symboleiden jälkeen. Näissä salauksissa virheiden vaikutus rajoittuu yleensä tiettyyn ikkunan pituuteen.

Edut ja rajoitukset

  • Suuri nopeus ja pieni laitteistovaatimus: virta-salaimet ovat usein nopeampia ja resurssitehokkaampia kuin lohkosalaimet, erityisesti laitteistotasolla.
  • Joustavuus: sopivat virta- tai bittitason salaukseen ja reaaliaikaiseen virtaan.
  • Haitat: väärin käytettynä ne voivat aiheuttaa vakavia turvallisuusongelmia. Erityisesti samaa alkutilaa/alkaa (eli samaa avainta ja noncea) ei saa koskaan käyttää kahdesti—muuten syntyy ns. kaksittainen pad -tilanne, josta voidaan johtaa selkotekstejä tai avainvirtaa.
  • Koska avainvirta on pseudosatunnainen, sen laatu ja generaattorin kryptografinen vahvuus määräävät koko järjestelmän turvallisuuden. Huonosti suunnitellut generaattorit ovat alttiita tilan palautus- ja erotteluhyökkäyksille.

Turvallisuus ja hyvät käytännöt

Keskeisiä turvallisuusperiaatteita virta-salausta käytettäessä:

  • Älä koskaan käytä samaa avainta ja samaa alkutilaa/noncea kahteen kertaan. Tämä on yksi yleisimmistä vakavista virheistä.
  • Käytä hyväksi todettuja ja nykyaikaisia algoritmeja (esim. ChaCha20), älä vanhentuneita tai murrettuja kuten RC4 tai heikosti suunniteltuja kotitekoisia generaattoreita.
  • Lisää viestien eheys- ja autentikointimekanismi (esim. MAC) tai vielä mieluummin käytä auktorisoitua salausmuotoa kuten ChaCha20-Poly1305 tai AES-GCM, koska tavallinen virta-salaus ei suojaa viestin muuttelua vastaan.
  • Varmista noncen/IV:n uniikkius ja tarvittaessa satunnaisuus tai laskennallinen järjestys riippuen käytetystä algoritmista. Joissain menetelmissä riittää uniikkius; toisissa tarvitaan satunnainen arvo.
  • Huolehdi avainhallinnasta: riittävän pitkä avain, turvallinen siirto ja säännöllinen avainten vaihto vähentävät riskejä.
  • Suojaudu sivukanavahyökkäyksiltä erityisesti laitteisto- ja ohjelmistototeutuksissa (ajoitus, virrankulutus, lämpötila). Implementaation tulee olla vakaa eikä vuotaa tilatietoa.

Tunnettuja hyökkäystyyppejä

  • Kaksinkertainen käyttö (key reuse): jos sama avainvirta käytetään kahdella eri selkotekstillä, XORamalla kahta ciphertextiä saadaan selkoteksteistä järjestään informaatio, mikä voi johtaa purkamiseen.
  • Tilanhavaitseminen ja tilan palautus: heikot PRNGt mahdollistavat generaattorin sisäisen tilan palauttamisen, jolloin hyökkääjä voi ennustaa tulevaa avainvirtaa.
  • Erotteluhyökkäykset: erottelija erottaa avainvirran todellisesta satunnaisuudesta, mikä voi olla lähtökohtana laajemmille murroille.

Käyttökohteet ja suositukset

Virtasalaus on yleinen valinta tilanteissa, joissa tarvitaan tehokasta reaaliaikaista salausta (esim. radioliikenne, mobiiliverkot, tietyt VPN-tilat ja salatut kotitiedonsiirrot). Suositellaan käyttämään nykyaikaisia, auditoituja algoritmeja ja yhdistämään salaukseen aina eheys- ja autentikointikerros. Esimerkiksi ChaCha20-Poly1305 on nykyaikainen ja turvallinen valinta ohjelmistoille, kun taas laitteistoissa voidaan hyödyntää kevyitä mutta vahvoja LFSR-pohjaisia konstrukteja vain huolella analysoituna.

Yhteenvetona: virtasalaus tarjoaa tehokkaan ja joustavan tavan salata bittivirtaa, mutta sen turvallisuus perustuu täysin avainvirran laatuun, noncen/alkutilan asianmukaiseen käyttöön ja siihen, että käytetään hyväksi todettuja algoritmeja sekä eheys- ja autentikointimenettelyjä. Sama alkutilaa ei saa koskaan käyttää kahdesti.