Srautinis šifras
Kriptografijoje srautinis šifras yra simetrinis rakto šifras, kai atvirojo teksto bitai sujungiami su pseudorandominiu šifro bitų srautu (rakto srautu) naudojant išskirtinio arba (xor) operaciją. Srautiniame šifre paprasto teksto skaitmenys užšifruojami po vieną, o vienas po kito einančių skaitmenų transformacija keičiasi šifravimo būsenos metu. Alternatyvus pavadinimas yra būsenos šifras, nes kiekvieno skaitmens šifravimas priklauso nuo esamos būsenos. Praktikoje skaitmenys paprastai yra pavieniai bitai arba baitai.
Srautiniai šifrai yra kitoks simetrinio šifravimo būdas nei blokiniai šifrai. Blokiniai šifrai veikia su dideliais fiksuoto ilgio blokais. Srautiniai šifrai paprastai veikia didesniu greičiu nei blokiniai šifrai ir jiems keliami mažesni aparatinės įrangos reikalavimai. Tačiau netinkamai naudojant srautinius šifrus gali kilti rimtų saugumo problemų, pavyzdžiui, ypač niekada negalima du kartus naudoti tos pačios pradinės būsenos.
Srautinis šifras naudoja daug mažesnį ir patogesnį kriptografinį raktą, pavyzdžiui, 128 bitų raktą. Remdamasis šiuo raktu, jis generuoja pseudorandominį raktų srautą, kurį galima sujungti su atvirojo teksto skaitmenimis panašiai kaip ir vienkartinio šifravimo algoritmą. Tačiau kadangi raktų srautas yra pseudorandominis, o ne iš tikrųjų atsitiktinis, su vienkartine kaladėle susijęs saugumas negali būti taikomas, todėl srautinis šifras gali būti visiškai nesaugus.
A5/1, srautinio šifro, pagrįsto LFSR ir naudojamo mobiliųjų telefonų pokalbiams šifruoti, raktų srauto generatoriaus veikimas.
Srautinių šifrų tipai
Srautinis šifras generuoja iš eilės einančius raktų srauto elementus pagal vidinę būseną. Ši būsena atnaujinama dviem būdais:
- Jei būsena keičiasi nepriklausomai nuo atvirojo teksto ar šifro pranešimo, šifras priskiriamas sinchroniniam srautiniam šifrui.
- Jei būsena atnaujinama remiantis ankstesniais šifro teksto skaitmenų pokyčiais, šifras priskiriamas prie savaime sinchronizuojančių srautinių šifrų.
Sinchroniniai srautiniai šifrai
Sinchroninio srautinio šifro atveju pseudo-atsitiktinių skaitmenų srautas generuojamas nepriklausomai nuo atvirojo ir užšifruoto teksto pranešimų, o tada sujungiamas su atviruoju tekstu (užšifruoti) arba su užšifruotu tekstu (iššifruoti). Dažniausiai naudojami dvejetainiai skaitmenys (bitai), o raktų srautas sujungiamas su atviru tekstu naudojant išskirtinę arba operaciją (XOR). Tai vadinama dvejetainiu adityviniu srautiniu šifru.
Sinchroninio srautinio šifro atveju, kad dešifravimas būtų sėkmingas, siuntėjas ir gavėjas turi būti sinchroniški. Jei perduodant į pranešimą pridedami arba iš jo pašalinami skaitmenys, sinchronizacija prarandama. Norint atkurti sinchronizaciją, galima sistemingai bandyti įvairius poslinkius, kad būtų gautas teisingas iššifravimas. Kitas būdas - žymėti šifro tekstą žymekliais reguliariose išvesties taškuose.
Tačiau jei perduodant skaitmenys sugadinami, o ne pridedami ar prarandami, paveikiamas tik vienas grynojo teksto skaitmuo ir klaida nepersiduoda į kitas pranešimo dalis. Ši savybė naudinga, kai perdavimo klaidų dažnis yra didelis; tačiau dėl jos mažesnė tikimybė, kad klaida bus aptikta be papildomų mechanizmų. Be to, dėl šios savybės sinchroniniai srautiniai šifrai yra labai jautrūs aktyviomsatakoms - jei užpuolikas gali pakeisti skaitmenį šifruotame tekste, jis gali sugebėti atlikti nuspėjamus atitinkamo grynojo teksto bito pakeitimus; pavyzdžiui, bito apvertimas šifruotame tekste sukelia to paties bito apvertimą(Toggled) paprastajame tekste.
Savaime sinchronizuojantys srautiniai šifrai
Savaime sinchronizuojantys srautiniai šifrai yra dar vienas metodas, kai raktų srautui apskaičiuoti naudojama dalis ankstesnių N šifro teksto skaitmenų. Tokios schemos dar vadinamos asinchroniniais srautiniais šifrais arba šifro teksto automatiniu raktu (CTAK). Autosinchronizacijos idėja buvo užpatentuota 1946 m. Jos privalumas tas, kad gavęs N šifro teksto skaitmenų imtuvas automatiškai sinchronizuojasi su raktų srauto generatoriumi, todėl lengviau atsistatyti, jei skaitmenų srautas buvo nutrauktas arba pridėtas. Vieno skaitmens klaidų poveikis yra ribotas - jos paveikia tik iki N atvirojo teksto skaitmenų. Aktyvias atakas prieš savaime sinchronizuojančius srautinius šifrus, o ne prieš sinchroninius analogus, atlikti šiek tiek sunkiau.
Savaime sinchronizuojančio srautinio šifro pavyzdys yra blokinis šifras, veikiantis šifro grįžtamojo ryšio režimu (CFB).
Linijiniu grįžtamuoju ryšiu grįsti srautiniai šifrai
Dvejetainiai srautiniai šifrai dažnai kuriami naudojant tiesinio grįžtamojo ryšio poslinkio registrus (LFSR), nes juos lengva įgyvendinti aparatine įranga ir galima greitai atlikti matematinę analizę. Tačiau norint užtikrinti gerą saugumą nepakanka naudoti vien tik LFSR. Siekiant padidinti LFSR saugumą, buvo sukurtos įvairios schemos.
Netiesinės derinimo funkcijos
Kadangi LFSR iš esmės yra tiesiniai, vienas iš tiesiškumo pašalinimo būdų yra lygiagrečių LFSR grupės išėjimų pateikimas netiesinei loginei funkcijai, kad būtų suformuotas kombinacijų generatorius. Įvairios tokios kombinavimo funkcijos savybės yra svarbios užtikrinant gautos schemos saugumą, pavyzdžiui, siekiant išvengti koreliacijos atakų.
Laikrodžiu valdomi generatoriai
Įprastai LFSR yra reguliariai laiptuojami. Vienas iš netiesiškumo įvedimo būdų yra nereguliarus LFSR taktavimas, kurį kontroliuoja antrojo LFSR išėjimas. Tokie generatoriai yra stop-and-go generatorius, kintamo žingsnio generatorius ir susitraukimo generatorius.
"Stop-and-go" generatorių (Beth ir Piper, 1984) sudaro du LFSR. Vieno LFSR laikrodis suveikia, jei antrojo išvestis yra "1", priešingu atveju jis pakartoja savo ankstesnę išvestį. Po to šis išėjimas (kai kuriose versijose) sujungiamas su trečiojo LFSR išėjimu, kurio taktinis dažnis reguliarus.
Mažinimo generatorius naudoja kitokį metodą. Naudojami du LFSR, kurie abu reguliariai taktuojami taip:
- Jei pirmojo LFSR išėjimas yra "1", antrojo LFSR išėjimas tampa generatoriaus išėjimu.
- Jei pirmojo LFSR išvestis "0", antrojo išvestis atmetama, o generatorius neišveda jokio bito.
Šis metodas susiduria su antrojo generatoriaus laiko atakomis, nes išėjimo greitis kinta priklausomai nuo antrojo generatoriaus būsenos. Tai galima pagerinti buferizuojant išėjimą.
Filtrų generatorius
Kitas būdas pagerinti LFSR saugumą - visą vieno LFSR būseną perduoti netiesinei filtravimo funkcijai.
Kiti dizainai
Vietoj tiesinio vairavimo įtaiso galima naudoti netiesinę atnaujinimo funkciją. Pavyzdžiui, Klimovas ir Šamiras pasiūlė trikampes funkcijas (T-funkcijas) su vienu ciklu n bitų žodžiuose.
Saugumas
Norint užtikrinti saugumą, raktų srauto periodas (skaitmenų skaičius, išvedamas prieš srautui pasikartojant) turi būti pakankamai didelis. Jei seka kartojasi, persidengiančius šifro tekstus galima suderinti tarpusavyje "į gylį", ir yra metodų, leidžiančių išgauti atvirąjį tekstą iš šiais metodais sukurtų šifro tekstų.
Naudojimas
Srautiniai šifrai dažnai naudojami tais atvejais, kai atvirasis tekstas yra nežinomo ilgio, pavyzdžiui, saugiuose belaidžiuose ryšiuose. Jei blokinis šifras būtų naudojamas tokio tipo programose, projektuotojas turėtų rinktis arba perdavimo efektyvumą, arba įgyvendinimo sudėtingumą, nes blokiniai šifrai negali tiesiogiai dirbti su blokais, trumpesniais už jų bloko dydį. Pavyzdžiui, jei 128 bitų blokinis šifras gautų atskiras 32 bitų atvirojo teksto atkarpas, tris ketvirtadalius perduodamų duomenų reikėtų užpildyti. Blokiniai šifrai turi būti naudojami šifro teksto vagystės arba likutinio bloko užbaigimo režimu, kad būtų išvengta užpildymo, o srautiniai šifrai pašalina šią problemą, nes dirba su mažiausiu perduodamu vienetu (paprastai baitais).
Kitas srautinių šifrų privalumas karinėje kriptografijoje yra tas, kad šifro srautą gali generuoti šifravimo įrenginys, kuriam taikomos griežtos saugumo priemonės, ir perduoti kitiems įrenginiams, pvz., radijo imtuvui, kuris atlieka xor operaciją kaip savo funkcijos dalį. Kitas įrenginys gali būti skirtas naudoti mažiau saugioje aplinkoje.
RC4 yra plačiausiai programinėje įrangoje naudojamas srautinis šifras; kiti yra šie: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 ir WAKE.
RC4 yra vienas iš plačiausiai naudojamų srautinių šifrų.
Srautinių šifrų palyginimas
"StreamCipher" | CreationDate | Greitis | (bitų) | Ataka | |||
Efektyvus | Inicializacijos vektorius | InternalState | Geriausiai žinomas | Skaičiavimo sudėtingumas | |||
A5/1 | 1989 | Balsas (Wphone) | 54 | 114 | 64 | Aktyvus KPA arba | ~2 sekundės OR239.91 |
A5/2 | 1989 | Balsas (Wphone) | 54 | 114 | 64? | Aktyvus | 4,6 milisekundės |
ŽUVYS | 1993 | Gana greitai (Wsoft) | Didžiulis | Žinomo teksto ataka | 211 | ||
Grūdai | Iki 2004 m. | Greitai | 80 | 64 | 160 | Rakto išskyrimo funkcija | 243 |
HC-256 | Iki 2004 m. | 4 (WP4) | 256 | 256 | 65536 | ||
ISAAC | 1996 | 2.375 (W64 bitų) | 8-8288 paprastai | NETAIKOMA | 8288 | (2006 m.) Pirmojo rato silpnosios vidinės valstybės padalijimas | 4.67×101240 (2001) |
MUGI | 1998-2002 | 128 | 128 | 1216 | NETAIKOMA (2002 M.) | ~282 | |
PANAMA | 1998 | 2 | 256 | 128? | 1216? | "Hash Collisions" (2001 m.) | 282 |
Feliksas | Iki 2004 m. | iki 8 (Wx86) | 256 + 128 bitų kodas | 128? | Diferencialas (2006 m.) | 237 | |
Pike | 1994 | 0,9 x FISH (Wsoft) | Didžiulis | NETAIKOMA (2004 M.) | NETAIKOMA (2004 M.) | ||
Py | Iki 2004 m. | 2.6 | 8-2048? | 64 | 8320 | Kriptanalitinė teorija (2006) | 275 |
Triušis | 2003 m. vasario mėn. | 3,7(WP3)-9,7(WARM7) | 128 | 64 | 512 | NETAIKOMA (2006 M.) | NETAIKOMA (2006 M.) |
1987 | Įspūdingas | 8-2048 paprastai | 8 | 2064 | Šamiro pradinių bitų rakto atskyrimas ARBA KPA | 213 OR 233 | |
Salsa20 | Iki 2004 m. | 4,24 (WG4) -11 | 128 + 64 bitų kodas | 512 | 512 + 384 (raktas+IV+indeksas) | Diferencialas (2005 m.) | NETAIKOMA (2005 M.) |
Scream | 2002 | 4 - 5 (Wsoft) | 128 + 128 bitų kodas | 32? | 64 bitų apvalinimo funkcija | ||
SEAL | 1997 | Labai greitai (W32 bitų) | 32? | ||||
SNOW | Iki 2003 m. | Labai geras (W32 bitų) | 128 ARBA 256 | 32 | |||
SOBER-128 | 2003 | iki 128 | Pranešimų kalvė | 2−6 | |||
SOSEMANUK | Iki 2004 m. | Labai geras (W32 bitų) | 128 | 128 | |||
Trivium | Iki 2004 m. | 4 (Wx86) - 8 (WLG) | 80 | 80 | 288 | Brute force ataka (2006 m.) | 2135 |
Turing | 2000-2003 | 5.5 (Wx86) | 160 | ||||
VEST | 2005 | 42 (WASIC) -64 (WFPGA) | Kintama paprastai | Kintama paprastai | 256 - 800 | NETAIKOMA (2006 M.) | NETAIKOMA (2006 M.) |
WAKE | 1993 | Greitai | 8192 | CPA IR CCA | Pažeidžiamas | ||
"StreamCipher" | CreationDate | Greitis | (bitų) | Ataka | |||
Efektyvus | Inicializacijos vektorius | InternalState | Geriausiai žinomas | Skaičiavimo sudėtingumas |
Susiję puslapiai
- eSTREAM
Klausimai ir atsakymai
K: Kas yra srautinis šifras?
A: Srautinis šifras yra simetrinio rakto šifras, kai atvirojo teksto bitai sujungiami su pseudorandominiu šifro bitų srautu (rakto srautu) naudojant išskirtinio arba (xor) operaciją.
K: Kuo jis skiriasi nuo blokinių šifrų?
A: Srautiniai šifrai paprastai veikia didesniu greičiu nei blokiniai šifrai ir jiems keliami mažesni aparatinės įrangos reikalavimai. Blokiniai šifrai veikia su dideliais fiksuoto ilgio blokais, o srautiniai šifrai šifruoja skaitmenis po vieną, ir šifravimo metu keičiasi vienas po kito einančių skaitmenų transformacija.
K: Kokio tipo raktai naudojami?
A: Srautiniai šifrai naudoja daug mažesnius ir patogesnius kriptografinius raktus, pavyzdžiui, 128 bitų raktus.
K: Kaip generuojamas raktų srautas?
A: Raktų srautas generuojamas pagal naudojamą kriptografinį raktą, panašiai kaip vienkartinio šifravimo algoritme. Tačiau kadangi raktų srautas yra pseudorandominis, o ne iš tikrųjų atsitiktinis, su vienkartiniu bloknotu susijęs saugumas negali būti taikomas.
Klausimas: Kodėl niekada negalima naudoti tos pačios pradinės būsenos du kartus?
A: Du kartus naudojant tą pačią pradinę būseną, gali kilti rimtų saugumo problemų, nes užpuolikams lengviau iššifruoti duomenis nežinant jūsų kriptografinio rakto arba neturint prieigos prie jo.
K: Ar yra kokia nors rizika, susijusi su srautinių šifrų naudojimu?
A: Taip, jei naudojami netinkamai arba nesiimant tinkamų atsargumo priemonių, su srautinių šifrų naudojimu susijusi rizika, nes netinkamai elgiantis su jais gali būti visiškai nesaugu.