A Salsa20 egy Daniel Bernstein által kifejlesztett adatfolyam-titkosítási rendszer. Az algoritmust az eSTREAM versenyen mutatták be , melynek célja a levelezőrendszerek által továbbított adatok titkosítására vonatkozó európai szabványok megalkotása volt. Az algoritmus a verseny győztese lett az első profilban (stream cipherek nagy áteresztőképességű szoftveralkalmazásokhoz).
A Salsa20 titkosító a következő műveleteket használja:
Az algoritmus 20 ciklusú hash függvényt használ . Fő transzformációi az AES algoritmushoz hasonlítanak .
A következőkben a {0,1,…,2 32 −1} halmaz egy elemét szónak nevezzük, és hexadecimális formában írjuk fel 0x előtaggal.
A modulo 2 32 két szó hozzáadásának műveletét a " " jel jelöli .
A kizárólagos vagy (bitenkénti összegzés) a " " szimbólummal lesz jelölve
- a szó bites ciklikus balra eltolása a -val lesz jelölve . Ha elképzeled, hogyan , akkor
A rendszer fő egysége a négy szón keresztüli átalakítás. Az alábbiakban ismertetett általánosabb transzformációk ebből épülnek fel.
Lényege abban rejlik, hogy minden szóhoz összeadjuk a két előzőt, eltolja (ciklikusan) az összeget meghatározott számú bittel és bitenként összegzi az eredményt a kiválasztott szóval. A későbbi műveletek új szójelentésekkel kerülnek végrehajtásra.
Tegyük fel, hogy ez egy 4 szóból álló sorozat, akkor a függvény a hol
Például:
negyedkör(0x00000001; 0x00000000; 0x00000000; 0x00000000)Ezt a függvényt az y 0 , y 1 , y 2 és y 3 szavak transzformációjaként is felfoghatjuk . Ezen átalakítások mindegyike visszafordítható, akárcsak a funkció egésze.
rowround(y)
Ebben az átalakításban 16 szót veszünk fel. 4x4-es mátrix formájában ábrázoljuk őket. Ennek a mátrixnak minden sorát vesszük, és ennek a mátrixnak a szavait átalakítjuk a függvénnyel . A sorból származó szavakat a rendszer sorban veszi az i -ediktől kezdve az i -edik sorhoz, ahol i = {0,1,2,3}.
Legyen 16 szóból álló sorozat, akkor legyen 16 szóból álló sorozat is ahol
oszlopkör(y)Itt ugyanannak a mátrixnak az oszlopait vesszük. Alakítsuk át őket a függvénnyel , analógia útján behelyettesítve az értékeket, kezdve a j -edik oszlopból a j -edik oszlopba, ahol j = {0,1,2,3}.
A columnround(y)=(z) függvény szintén 16 szóból álló sorozaton működik úgy, hogy
doubleround(y)A doubleround(y) függvény a columnround , majd a rowround függvények szekvenciális alkalmazása : doubleround (y) = rowround(columnround(y))
Salsa20()Ez az algoritmus az alacsony bájttal kezdődő szóbevitelt használ . Ehhez itt van egy átalakítás
Legyen egy 4 bájtos sorozat, akkor legyen olyan szó, hogy
A végső transzformáció az eredeti sorozat bitenkénti összegzése, valamint 20 fordulós váltakozó oszlop- és sortranszformáció eredménye.
Ahol
…x[i] az x bájt, az x j pedig a fenti függvényekben használt szavak.
Ha egy
,
akkor a Salsa20(x) az eredmények sorozata
A kiterjesztés egy 32 bájtos vagy 16 bájtos kulcsot k és egy 16 bájtos n számot alakít át 64 bájtos sorozatmá .
A k kiterjesztés a konstansokat használja
32 bájtos k és
16 bájtos k esetén .
Ezek az "expand 32-byte k" és a "expand 16-byte k" ASCII kódban.
Legyen k 0 ,k 1 ,n 16 bájtos sorozata, akkor .
Ha csak egy 16 bájtos k sorozatunk van, akkor
Byte-szekvencia titkosítás , mert lesz
— egyedi 8 bájtos szám (nem egyszer).
A titkosított szöveg bájt méretű lesz , akárcsak a sima szöveg.
A Salsa20 k ( v ) egy 270 bájtos sorozat.
Hol van egy 8 bájtból álló egyedi sorozat , amelyre ill
Ahol
Tekintettel arra, hogy az egyes oszlopok és sorok transzformációi függetlenek egymástól, a titkosításhoz szükséges számítások könnyen párhuzamosíthatók . Ez jelentős sebességnövekedést biztosít a legtöbb modern platform számára.
Az algoritmus gyakorlatilag nem igényel többletköltséget a titkosítási ciklus futtatásához. Ez vonatkozik a legfontosabb változtatásokra is. Sok rejtjelező rendszer előszámításokra támaszkodik, amelyek eredményeit a processzor első szintű (L1) gyorsítótárában kell tárolni . Mivel ezek a kulcstól függenek, a számításokat újra el kell végezni. A Salsa20-ban elég egyszerűen betölteni a kulcsot a memóriába.
A Salsa20/8 és a Salsa20/12 titkosítási rendszerek, amelyek ugyanazt a mechanizmust használják, mint a Salsa20, de az eredeti 20 helyett 8, illetve 12 titkosítási körrel. A Salsa20 nagy kitartással készült. Míg a Salsa20/8 jó eredményeket mutat sebességben, a legtöbb esetben megelőzve sok más titkosítási rendszert, beleértve az AES -t és az RC4 -et [1] .
A Salsa20 algoritmusnak van egy változata, amelyet szintén Daniel Bernstein javasolt, és amely 64 bitről 192 bitre növeli a nonce hosszát. Ezt a változatot XSalsa20-nak hívják. A nonce megnövelt mérete lehetővé teszi egy kriptográfiailag erős pszeudo-véletlenszám-generátor használatát annak előállításához , míg a biztonságos titkosítás 64 bites nonce-val az ütközések nagy valószínűsége miatt számláló használatát igényli [2] .
2005-ben Paul Crowley bejelentette a Salsa20/5 elleni támadást 2165 -re becsült időbonyolítással . Ez és az azt követő támadások csonka differenciális kriptográfiai elemzésen alapulnak . Ezért a kriptoanalízisért 1000 dollár jutalmat kapott a Salsa20 szerzőjétől.
2006-ban Fischer, Meier, Berbain , Biasse és Robshaw 2117-es összetettségi támadásról számolt be a Salsa/6 ellen, és egy 2217-es összetettségi támadásról a Salsa20 /7 ellen linkelt kulcsokkal .
2008-ban Aumasson, Fischer, Khazaei, Meier és Rechberger a Salsa20/7 elleni támadásról 2153 -as nehézséggel, a Salsa20/8 elleni első támadásról pedig 2251 -es nehézséggel számoltak be .
Eddig nem érkeztek nyilvános jelentések a Salsa20/12 és a teljes Salsa20/20 elleni támadásokról.
2008-ban Daniel Bernstein kiadott egy kapcsolódó adatfolyam -rejtjel-családot ChaCha néven, amelynek célja az volt, hogy javítsa az adatkeverést egy körben, és állítólag javítsa a kriptográfiai erősséget ugyanolyan vagy akár valamivel gyorsabb sebesség mellett [3] .
A ChaCha20 leírását az RFC 7539 (2015. május) írja le.
A rendszer fő egysége itt másként működik. Most minden művelet megváltoztatja az egyik szót. A változások ciklikusan „ellentétes irányban” mennek végbe, a 0. szótól kezdve. Az összeadás és a bitenkénti összeg műveletei váltakoznak az eltolás mellett, a szó hozzáadódik az előzőhöz.
A negyedkör(a, b, c, d) függvény, ahol a, b, c, d-szavak, a ChaCha-ban így néz ki:
Ugyanazokat az aritmetikai műveleteket használjuk itt is, de minden szót átalakításonként kétszer módosítunk, nem egyszer.
Ezenkívül a titkosítás kezdeti állapota (kulcskiterjesztés) megváltozik a Salsához képest: az első 128 bit konstans, ezt követi a kulcs 256 bitje, a számláló 32 bitje, majd egy egyedi nonce sorozat 96 bitje.
Szimmetrikus titkosítási rendszerek | |
---|---|
Rejtjelfolyam adatfolyam | |
Feistel hálózat | |
SP hálózat | |
Egyéb |