Virtasalaus: määritelmä, toimintaperiaate ja turvallisuus
Virtasalaus: määritelmä, toimintaperiaate ja turvallisuus — opi avainvirrasta, riskeistä ja käytännön suojaustoimista.
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.
Kuvagalleria
2 KuvatToimintaperiaate
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.

Virtapiirien tyypit
Virtasalaus tuottaa avainvirran peräkkäiset elementit sisäisen tilan perusteella. Tätä tilaa päivitetään kahdella tavalla:
- Jos tila muuttuu selkoteksti- tai salatekstiviesteistä riippumatta, salaus luokitellaan synkroniseksi virtasalakirjoitukseksi.
- Jos tila päivitetään salaustekstin numeroiden aiempien muutosten perusteella, salaus luokitellaan itsesynkronoivaksi virtasalaimeksi.
Synkroniset virtasalakirjoitukset
Synkronisessa virtasalakirjoituksessa pseudosattumanumerovirta luodaan selvä- ja salatekstiviesteistä riippumatta ja yhdistetään sitten selvätekstiin (salausta varten) tai salatekstiin (salauksen purkua varten). Yleisimmässä muodossa käytetään binäärilukuja (bittejä), ja avainvirta yhdistetään selkotekstiin käyttämällä eksklusiivista tai -operaatiota (XOR). Tätä kutsutaan binääriseksi additiiviseksi virtasalakirjoitukseksi.
Synkronisessa virtasalakirjoituksessa lähettäjän ja vastaanottajan on oltava synkronissa, jotta salauksen purkaminen onnistuu. Jos viestiin lisätään tai poistetaan numeroita lähetyksen aikana, synkronointi katoaa. Synkronoinnin palauttamiseksi voidaan kokeilla systemaattisesti erilaisia siirtoja oikean dekoodauksen saamiseksi. Toinen lähestymistapa on merkitä salausteksti merkinnöillä säännöllisissä kohdissa tulostetta.
Jos kuitenkin jokin numero korruptoituu siirron aikana, eikä sitä ole lisätty tai kadonnut, virhe vaikuttaa vain yksittäiseen numeroon selväkielisessä tekstissä, eikä virhe leviä viestin muihin osiin. Tämä ominaisuus on hyödyllinen, kun lähetysvirheiden määrä on suuri, mutta se vähentää kuitenkin todennäköisyyttä, että virhe havaittaisiin ilman muita mekanismeja. Lisäksi tämän ominaisuuden vuoksi synkroniset virtasalakirjoittajat ovat hyvin alttiita aktiivisillehyökkäyksille - jos hyökkääjä pystyy muuttamaan salatekstin numeroa, hän saattaa pystyä tekemään ennustettavissa olevia muutoksia vastaavaan selkotekstin bittiin; esimerkiksi bitin kääntäminen salatekstissä aiheuttaa saman bitin kääntämisen (Toggled) selkotekstissä.
Itsesynkronoituvat virtasalakirjoitukset
Itsesynkronoituvat virtasalakirjoitukset ovat toinen tekniikka, jossa osa edellisen N salaustekstin numeroista käytetään avainvirran laskemiseen. Tällaisia järjestelmiä kutsutaan myös asynkronisiksi virta-salauksiksi tai salatekstin automaattiseksi avaimeksi (CTAK). Itsesynkronoinnin idea patentoitiin vuonna 1946, ja sen etuna on, että vastaanotin synkronoituu automaattisesti avainvirran generaattorin kanssa saatuaan N salatekstin numeroa, mikä helpottaa palautusta, jos numeroita on pudotettu tai lisätty viestivirtaan. Yhden numeron virheiden vaikutus on rajallinen, sillä ne vaikuttavat vain N:ään selkotekstin numeroon asti. Aktiivisten hyökkäysten suorittaminen itsesynkronoiviin virtauskoodereihin on hieman vaikeampaa kuin synkronoiviin vastaaviin koodereihin.
Esimerkki itsesynkronoivasta virtasalakirjoituksesta on lohkosalakirjoitus salakirjoitusvirtapalautteella (CFB).
Lineaariseen takaisinkytkentään perustuvat siirtorekisteripohjaiset virtasalakirjoitukset
Binäärivirran salakirjoituksissa käytetään usein lineaarisen takaisinkytkennän siirtorekistereitä (linear feedback shift registers, LFSR), koska ne on helppo toteuttaa laitteistolla ja ne voidaan analysoida nopeasti matemaattisesti. Pelkästään LFSR:ien käyttö ei kuitenkaan riitä hyvään tietoturvaan. LFSR:ien turvallisuuden lisäämiseksi on suunniteltu erilaisia järjestelmiä.
Epälineaariset yhdistävät funktiot
Koska LFSR:t ovat luonnostaan lineaarisia, yksi tekniikka lineaarisuuden poistamiseksi on syöttää rinnakkaisten LFSR:ien ryhmän ulostulot epälineaariseen Boolen funktioon yhdistelmägeneraattorin muodostamiseksi. Tällaisen yhdistelmäfunktion erilaiset ominaisuudet ovat tärkeitä tuloksena syntyvän järjestelmän turvallisuuden varmistamiseksi, esimerkiksi korrelaatiohyökkäysten välttämiseksi.
Kello-ohjatut generaattorit
Normaalisti LFSR:t astuvat säännöllisesti. Yksi tekniikka epälineaarisuuden aikaansaamiseksi on se, että LFSR:ää tahdistetaan epäsäännöllisesti toisen LFSR:n ulostulon ohjaamana. Tällaisia generaattoreita ovat esimerkiksi stop-and-go -generaattori, vaihtuvan askeleen generaattori ja kutistumisgeneraattori.
Stop-and-go -generaattori (Beth ja Piper, 1984) koostuu kahdesta LFSR:stä. Toista LFSR:ää kellotetaan, jos toisen LFSR:n ulostulo on "1", muuten se toistaa edellisen ulostulonsa. Tämän jälkeen (joissakin versioissa) tämä ulostulo yhdistetään kolmannen LFSR:n ulostuloon, jota kellotetaan säännöllisellä tahdilla.
Kutistumisgeneraattori käyttää eri tekniikkaa. Käytetään kahta LFSR:ää, jotka molemmat tahdistetaan säännöllisesti seuraavalla tavalla:
- Jos ensimmäisen LFSR:n ulostulo on "1", toisen LFSR:n ulostulosta tulee generaattorin ulostulo.
- Jos ensimmäisen LFSR:n ulostulo on "0", toisen LFSR:n ulostulo hylätään, eikä generaattori anna yhtään bittiä.
Tämä tekniikka kärsii toiseen generaattoriin kohdistuvista ajoitushyökkäyksistä, koska ulostulon nopeus muuttuu tavalla, joka riippuu toisen generaattorin tilasta. Tätä voidaan parantaa puskuroimalla ulostulo.
Suodattimen generaattori
Toinen tapa parantaa LFSR:n turvallisuutta on siirtää yhden LFSR:n koko tila epälineaariseen suodatusfunktioon.
Muut mallit
Lineaarisen ajolaitteen sijasta voidaan käyttää epälineaarista päivitysfunktiota. Esimerkiksi Klimov ja Shamir ehdottivat kolmiomaisia funktioita (T-funktioita), joilla on yksi sykli n-bittisille sanoille.
Turvallisuus
Jotta avainvirta olisi turvallinen, sen jakson (numeroiden määrä, joka tulostuu ennen kuin virta toistuu) on oltava riittävän suuri. Jos jakso toistuu, päällekkäiset salakirjoitustekstit voidaan sovittaa toisiinsa "syvyydellä", ja on olemassa tekniikoita, joiden avulla selkoteksti voidaan poimia näillä menetelmillä tuotetuista salakirjoitusteksteistä.
Käyttö
Virtamuunnoksia käytetään usein sovelluksissa, joissa selkotekstiä on määrällisesti tuntemattoman pituisia määriä, kuten suojatuissa langattomissa yhteyksissä. Jos lohkosalakirjoitusta käytettäisiin tämäntyyppisissä sovelluksissa, suunnittelijan olisi valittava joko siirtotehokkuus tai toteutuksen monimutkaisuus, koska lohkosalakirjoittajat eivät voi suoraan käsitellä lohkokokoa lyhyempiä lohkoja. Jos esimerkiksi 128-bittinen lohkosalauslaite vastaanottaa erillisiä 32-bittisiä selkotekstipätkiä, kolme neljäsosaa lähetetystä datasta tarvitsee täytettä. Lohkosalakirjoituksia on käytettävä salatun tekstin varastamisen tai jäljelle jäävän lohkon lopetustilassa, jotta pehmusteiden lisääminen voidaan välttää, kun taas virtasalakirjoitukset poistavat tämän ongelman toimimalla pienimmällä lähetetyllä yksiköllä (yleensä tavuilla).
Virtapiirien etuna sotilassalauksessa on myös se, että salausvirta voidaan luoda salauslaitteella, johon sovelletaan tiukkoja turvatoimia, ja syöttää sitten muille laitteille, esimerkiksi radiolaitteelle, jotka suorittavat xor-operaation osana toimintaansa. Toinen laite voidaan suunnitella käytettäväksi vähemmän turvallisissa ympäristöissä.
RC4 on ohjelmistoissa yleisimmin käytetty virran salausmenetelmä: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 ja WAKE.
Virtaussalausten vertailu
| StreamCipher | CreationDate | Nopeus | (bittiä) | Hyökkäys | |||
| Tehokas | Aloitusvektori | InternalState | Parhaiten tunnettu | ComputationalComplexity | |||
| A5/1 | 1989 | Puhe (Wphone) | 54 | 114 | 64 | Aktiivinen KPA TAI | ~2 sekuntia OR239.91 |
| A5/2 | 1989 | Puhe (Wphone) | 54 | 114 | 64? | Aktiivinen | 4,6 millisekuntia |
| KALAT | 1993 | Melko nopea (Wsoft) | Valtava | Tunnetun tekstin hyökkäys | 211 | ||
| Vilja | Ennen vuotta 2004 | Nopea | 80 | 64 | 160 | Avain-derivointi | 243 |
| HC-256 | Ennen vuotta 2004 | 4 (WP4) | 256 | 256 | 65536 | ||
| ISAAC | 1996 | 2.375 (W64-bit) | 8-8288 yleensä | N/A | 8288 | (2006) Ensimmäisen kierroksen heikko sisäinen valtion sisäinen eroaminen | 4.67×101240 (2001) |
| MUGI | 1998-2002 | 128 | 128 | 1216 | N/A (2002) | ~282 | |
| PANAMA | 1998 | 2 | 256 | 128? | 1216? | Hash Collisions (2001) | 282 |
| Phelix | Ennen vuotta 2004 | enintään 8 (Wx86) | 256 + 128-bittinen nonce | 128? | Differentiaali (2006) | 237 | |
| Pike | 1994 | 0,9 x FISH (Wsoft) | Valtava | N/A (2004) | N/A (2004) | ||
| Py | Ennen vuotta 2004 | 2.6 | 8-2048? | 64 | 8320 | Kryptoanalyyttinen teoria (2006) | 275 |
| Kani | 2003-helmikuu | 3.7(WP3)-9.7(WARM7) | 128 | 64 | 512 | N/A (2006) | N/A (2006) |
| 1987 | Vaikuttava | 8-2048 tavallisesti | 8 | 2064 | Shamir Initial-Bytes Key-Derivation OR KPA KPA | 213 OR 233 | |
| Salsa20 | Ennen vuotta 2004 | 4,24 (WG4) -11 | 128 + 64-bittinen nonce | 512 | 512 + 384 (avain+IV+indeksi) | Differentiaali (2005) | N/A (2005) |
| Scream | 2002 | 4 - 5 (Wsoft) | 128 + 128-bittinen nonce | 32? | 64-bittinen kierrosfunktio | ||
| SEAL | 1997 | Erittäin nopea (W32-bit) | 32? | ||||
| LUMI | Ennen vuotta 2003 | Erittäin hyvä (W32-bit) | 128 TAI 256 | 32 | |||
| SOBER-128 | 2003 | jopa 128 | Viesti Forge | 2−6 | |||
| SOSEMANUK | Ennen vuotta 2004 | Erittäin hyvä (W32-bit) | 128 | 128 | |||
| Trivium | Ennen vuotta 2004 | 4 (Wx86) - 8 (WLG) | 80 | 80 | 288 | Brute force -hyökkäys (2006) | 2135 |
| Turing | 2000-2003 | 5.5 (Wx86) | 160 | ||||
| LIIVI | 2005 | 42 (WASIC) -64 (WFPGA) | Vaihtelee yleensä | Vaihtelee yleensä | 256 - 800 | N/A (2006) | N/A (2006) |
| WAKE | 1993 | Nopea | 8192 | CPA & CCA | Haavoittuva | ||
| StreamCipher | CreationDate | Nopeus | (bittiä) | Hyökkäys | |||
| Tehokas | Aloitusvektori | InternalState | Parhaiten tunnettu | ComputationalComplexity | |||
Aiheeseen liittyvät sivut
- eSTREAM
Kysymyksiä ja vastauksia
K: Mikä on virran salaus?
V: Virta-salaus on symmetrisen avaimen salaus, jossa selkotekstin bitit yhdistetään pseudosatunnaiseen salausbittien virtaan (avainvirtaan) käyttämällä eksklusiivista tai (xor) -operaatiota.
K: Miten se eroaa lohkosalauksista?
V: Virtasalakirjoitukset toimivat yleensä nopeammin kuin lohkosalakirjoitukset, ja niiden laitteistovaatimukset ovat alhaisemmat. Lohkosalakirjoittajat toimivat suurilla kiinteän pituisilla lohkoilla, kun taas virtasalakirjoittajat salakirjoittavat numeroita yksi kerrallaan ja peräkkäisten numeroiden muunnos vaihtelee salaustilan aikana.
Kysymys: Minkälaisia avaimia käytetään?
V: Virtasalaimet käyttävät paljon pienempiä ja kätevämpiä salausavaimia, esimerkiksi 128-bittisiä avaimia.
K: Miten se luo avainvirran?
V: Avainjono luodaan käytetyn salausavaimen perusteella samalla tavalla kuin one-time pad -salausalgoritmi. Koska avainvirta on kuitenkin pseudosatunnainen eikä aidosti satunnainen, one-time pad -menetelmään liittyvää turvallisuutta ei voida soveltaa.
Kysymys: Miksi samaa alkutilaa ei saa koskaan käyttää kahdesti?
V: Saman alkutilan käyttäminen kahdesti voi johtaa vakaviin tietoturvaongelmiin, sillä hyökkääjien on helpompi purkaa tiedot tietämättä salausavaimesta tai saamatta sitä käyttöönsä.
K: Liittyykö virtasalakirjoitusten käyttöön riskejä?
V: Kyllä, jos niitä käytetään väärin tai ilman asianmukaisia varotoimia, virtauskoodereiden käyttöön liittyy riski, sillä ne voivat olla täysin turvattomia, jos niitä ei käsitellä oikein.
Aiheeseen liittyvät artikkelit
Tekijä
AlegsaOnline.com Virtasalaus: määritelmä, toimintaperiaate ja turvallisuus Leandro Alegsa
URL: https://fi.alegsaonline.com/art/94230
Lähteet
- security.ece.orst.edu : (PDF)
