= ChaCha šifras = '''ChaCha''' ir jos pradinė versija Salsa20 yra srauto šifrai ( angl. Stream cipher). Skirtingai nuo įprastų blokinių šriftų, srautiniai šifrai nereikalauja duomenų grupuoti į šifruojamus blogus ir gali būti naudojami šifruojant nuoseklų duomenų srautą. Pagrindinis šių ChaCha ir Salsa20 privalumas yra tai, kad jie naudoja tik ARX (add-rotate-XOR) operacijas ir leidžia pasiekti dideli šifravimo greiti be aparatinės akceleracijos. == ChaCha šifro istorija == * 2005 m. publikuota primoji šifro versija Salsa20 (Daniel Julius Bernstein) * 2008 m. eSTREAM Salsa20 išrinko kaip vieną iš 4 geriausių “software” kandidatų * 2008 m. D. J. Bersteinas publikavo patobulintą Salsa20 versiją, pavadinta ChaCha. * 2014 m. Google pradėjo naudoti [[ChaCha|ChaCha20]] TLS šifravimui tarp Android mobiliųjų telefonų ir savo servisų. * Nuo 2014 m. [[ChaCha|ChaCha20]] naudojama FreeBSD, NetBSD, OpenBSD pseudo-atsitiktinų numerių generavimui. * Nuo 2016 m. [[ChaCha|ChaCha20]] naudojama Linux kernel 4.8 neblokuojančiam atsitiktinų numerių generavimui (/dev/urandom) * 2016 m. pirmosios WireGuard VPN versijos * 2018 metais išleidus TLS 1.3 standartą [[ChaCha|ChaCha20]] tapo oficialią jo dalimi == Salsa20 ir ChaCha šifro veikimo principas == Salsa20 ir ChaCha skirtingai negu įprasti blokiniai šriftai nenaudoja specialaus algoritmo šifravimo operacijai, šifravimas ir dešifravimas čia yra atliekamas naudojant paprastą XOR operaciją tarp datos bitų ir rakto bitų srautų. Nors šis metodas ir supaprastina pačią šifravimo operaciją, saugiam jo realizavimui reikalingas saugus rakto srauto generavimo algoritmas === ChaCha rakto sudėtis === Salsa20 ir ChaCha vienas rakto srautas yra 512 bitų ilgio ir generuojamas iš: a. 128 bitų konstantos, skirtos užtikrinti algoritmo saugumą jeigu visi kiti bitai butų lygus nuliui, pagal Salsa20 ir ChaCha standartą ši konstanta yra ASCII koduotas „expand 32-byte k“ sakinys. a. 256 bitų vartotojo sugeneruoto rakto. a. 64 bitų srauto pozicijos numerio, pasirenkamo pagal tai kurioje srauto pozicijoje yra norima informacija. Srauto pozicijos numeris suteikia šifrui unikalią savybę „peršokti“ srauto dalį ir šifruoti/dešifruoti sekančia dalį, be ankstesnių duomenų iššifravimo ar naujo rakto poreikio. a. 64 bitų nonce (angl. number used once), tik viena karta sraute naudojamo skaičiaus (dažniausiai naudojamas kaip pozicijos numerio tęsinys). === ChaCha rakto srauto algoritmas === a. 512 bitų rinkinys yra patalpinamas į 4x4 matricą a. Su kiekvienu matricos stulpeliu iš eilės atliekama speciali quarter-round funkcija turinti 4 įėjimus ir 4 išėjimus, vėliau ta pati operacija yra atliekama nuosekliai ir su kiekviena įstrižaine a. Punktas b yra kartojamas 4, 6 arba 10 kartų nuo pasirinkto ChaCha sunkumo lygio ir galiausiai gautam 512 bitų rezultatui yra atliekamas XOR su pradinių 512 bitų rinkinių, taip apsaugant algoritmą nuo atvirkštino proceso. === ChaCha quarter-round funkcija === . {{{ a += b; d ^= a; d <<<= 16; }}} <
> {{{ c += d; b ^= c; b <<<= 12; }}} <
> {{{ a += b; d ^= a; d <<<= 8; }}} <
> {{{ c += d; b ^= c; b <<<= 7; }}} <
> == Literatūra == https://cr.yp.to/snuffle/salsafamily-20071225.pdf https://cr.yp.to/chacha/chacha-20080128.pdf [[https://link.springer.com/chapter/10.1007/978-3-642-37682-5_24|https://link.springer.com/chapter/10.1007%2F978-3-642-37682-5_24]] https://en.wikipedia.org/wiki/Salsa20 ---- CategoryŽodis