Salsa20 on Daniel Bernsteinin kehittämä tietovirran salausjärjestelmä. Algoritmi esiteltiin eSTREAM- kilpailussa , jonka tarkoituksena oli luoda eurooppalaiset standardit postijärjestelmien välittämän tiedon salaukselle. Algoritmi voitti kilpailun ensimmäisessä profiilissa (suorat salakirjoitukset ohjelmistosovelluksille, joilla on suuri suorituskyky).
Salsa20-salaus käyttää seuraavia toimintoja:
Algoritmi käyttää hash-funktiota 20 syklillä . Sen päämuunnokset muistuttavat AES -algoritmia .
Seuraavassa joukon {0,1,…,2 32 −1} elementtiä kutsutaan sanaksi ja kirjoitetaan se heksadesimaalimuodossa etuliitteellä 0x.
Kahden sanan modulo 2 32 lisääminen merkitään merkillä " ".
Yksinomainen tai (bittinen summaus) merkitään symbolilla " "
- sanan bittisyklinen siirto vasemmalle merkitään . Jos kuvittelet kuinka niin
Järjestelmän pääyksikkö on neljän sanan muunnos. Alla kuvatut yleisemmät muunnokset on rakennettu siitä.
Sen olemus on siinä, että jokaiseen sanaan lisäämme kaksi edellistä, siirrämme (syklisesti) summaa tietyllä määrällä bittejä ja bitti bitiltä summaamme tuloksen valitulla sanalla. Seuraavat toiminnot suoritetaan uusilla sanamerkityksillä.
Oletetaan, että se on 4 sanan sarja, niin funktio on missä
Esimerkiksi:
neljänneskierros(0x00000001; 0x00000000; 0x00000000; 0x00000000)Voit ajatella tätä funktiota muunnoksena sanoista y 0 , y 1 , y 2 ja y 3 . Jokainen näistä muunnoksista on palautuva, kuten myös toiminto kokonaisuudessaan.
rowround(y)
Tässä muunnoksessa otetaan 16 sanaa. Edustamme niitä 4x4-matriisin muodossa. Otetaan tämän matriisin jokainen rivi ja muunnetaan tämän matriisin sanat funktiolla . Sanat riviltä otetaan järjestyksessä alkaen i -:nnestä rivistä, jossa i = { 0,1,2,3 }.
Antaa olla 16 sanan sekvenssi, sitten myös 16 sanan sekvenssi missä
columnround(y)Tässä otetaan saman matriisin sarakkeet. Muunnetaan ne funktiolla , analogisesti korvaamalla arvot siihen, alkaen j -sarakkeesta j - sarakkeeseen, missä j = {0,1,2,3}.
Funktio columnround(y)=(z) toimii myös 16 sanan sekvenssillä niin, että
doubleround(y)Doubleround (y) -funktio on peräkkäinen sovellus sarakkeen ympäri ja sitten rivikierrosfunktioista : doubleround(y) = rowround(columnround(y))
Salsa20()Tämä algoritmi käyttää sanasyöttöä , joka alkaa pienellä tavulla . Tätä varten tässä on muunnos
Antaa olla 4-tavuinen sekvenssi, sitten sana sellainen
Lopullinen muunnos on alkuperäisen sekvenssin ja 20 kierroksen vuorottelevien sarake- ja rivimuunnosten tulos.
Missä
…x[i] ovat tavuja x ja x j ovat sanoja, joita käytetään yllä olevissa funktioissa.
Jos
,
niin Salsa20(x) on tulossarja
Laajennus muuntaa 32- tai 16-tavuisen avaimen k ja 16-tavuisen luvun n 64-tavuiseksi sekvenssiksi .
K - laajennus käyttää vakioita
32-tavuiselle k ja
16-tavuiselle k .
Nämä ovat "expand 32-byte k" ja "expand 16-byte k" ASCII - koodissa.
Olkoon k 0 ,k 1 ,n:llä 16-tavuisia sekvenssejä, niin .
Jos meillä on vain yksi 16-tavuinen sekvenssi k , niin
Tavusekvenssin salaus , koska tulee olemaan
— yksilöllinen 8-tavuinen numero (ei kerran).
Salateksti on tavukokoinen , aivan kuten tavallinen teksti.
Salsa20 k ( v ) on 270 tavun sekvenssi.
Missä on ainutlaatuinen 8 tavun sekvenssi , joka vastaavasti
Missä
Koska kunkin sarakkeen ja jokaisen rivin muunnokset ovat toisistaan riippumattomia, salaukseen tarvittavat laskelmat voidaan helposti rinnastaa . Tämä antaa merkittävän nopeuden lisäyksen useimmille nykyaikaisille alustoille.
Algoritmilla ei käytännössä ole ylimääräistä laskentaa, joka tarvitaan salaussyklin suorittamiseen. Tämä koskee myös keskeisiä muutoksia. Monet salausjärjestelmät käyttävät esilaskutoimituksia, joiden tulokset on tallennettava prosessorin ensimmäisen tason (L1) välimuistiin . Koska ne riippuvat avaimesta, laskelmat on suoritettava uudelleen. Salsa20:ssä riittää, että avain ladataan muistiin.
Salsa20/8 ja Salsa20/12 ovat salausjärjestelmiä, jotka käyttävät samaa mekanismia kuin Salsa20, mutta niissä on 8 ja 12 salauskierrosta alkuperäisen 20:n sijaan. Salsa20 tehtiin suurella kestovoimalla. Sen sijaan Salsa20/8 osoittaa hyviä tuloksia nopeudessa, ohittaen useimmissa tapauksissa monet muut salausjärjestelmät, mukaan lukien AES ja RC4 [1] .
Salsa20-algoritmista on myös Daniel Bernsteinin ehdottama muunnelma, joka kasvattaa nonce- pituuden 64 bitistä 192 bittiin. Tämän muunnelman nimi on XSalsa20. Noncen kasvanut koko mahdollistaa kryptografisesti vahvan näennäissatunnaislukugeneraattorin käytön sen luomiseen , kun taas turvallinen salaus 64-bittisellä noncen kanssa vaatii laskurin käyttöä törmäysten suuren todennäköisyyden vuoksi [2] .
Vuonna 2005 Paul Crowley ilmoitti hyökkäyksestä Salsa20/5:tä vastaan, jonka arvioitu aikamonimutkaisuus on 2165 . Tämä ja sitä seuraavat hyökkäykset perustuvat typistettyyn differentiaaliseen kryptausanalyysiin . Tästä kryptoanalyysistä hän sai 1 000 dollarin palkinnon Salsa20:n kirjoittajalta.
Vuonna 2006 Fischer, Meier, Berbain , Biasse ja Robshaw raportoivat 2117 kompleksisuushyökkäyksestä Salsa/6:ta vastaan ja 2217 monimutkaisuudesta Salsa20 /7:ää vastaan linkitetyillä avaimilla .
Vuonna 2008 Aumasson, Fischer, Khazaei, Meier ja Rechberger raportoivat hyökkäyksestä Salsa20/7:ään vastaan vaikeudella 2153 ja ensimmäisestä hyökkäyksestä Salsa20/8:aan vaikeudella 2251 .
Toistaiseksi ei ole ollut julkisia raportteja Salsa20/12:een ja koko Salsa20/20:een kohdistuvista hyökkäyksistä.
Vuonna 2008 Daniel Bernstein julkaisi ChaCha-nimisen stream - salausperheen, jonka tarkoituksena oli parantaa tietojen sekoittamista yhdellä kierroksella ja oletettavasti parantaa kryptografista vahvuutta samalla tai jopa hieman suuremmalla nopeudella [3] .
ChaCha20 on kuvattu RFC 7539:ssä (toukokuu 2015).
Järjestelmän pääyksikkö toimii täällä eri tavalla. Nyt jokainen operaatio muuttaa yhden sanan. Muutokset tapahtuvat syklisesti "vastakkaiseen suuntaan", alkaen 0. sanasta. Summa- ja bittisummaoperaatiot vuorottelevat siirron mukana, sana lisätään edelliseen.
Funktio Quarterround(a, b, c, d), jossa a, b, c, d-sanat, ChaChassa näyttää tältä:
Tässä käytetään samoja aritmeettisia operaatioita, mutta jokaista sanaa muutetaan kahdesti konversiota kohden yhden kerran sijaan.
Lisäksi salauksen alkutilaa (avaimen laajennus) muutetaan Salsaan verrattuna: ensimmäiset 128 bittiä ovat vakioita, joita seuraa 256 bittiä avainta, 32 bittiä laskuria ja sitten 96 bittiä ainutlaatuista nonce-sekvenssiä.
Symmetriset salausjärjestelmät | |
---|---|
Suoratoista salauksia | |
Feistelin verkko | |
SP verkko | |
Muut |