Salsa 20

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 2. huhtikuuta 2015 tarkistetusta versiosta . vahvistus vaatii 31 muokkausta .

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 .

Algoritmin kuvaus

Käsitteet

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

Algoritmissa käytetyt funktiot

quarterround(y)

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)
= (0x08008145; 0x00000080; 0x00010200; 0x20500000)

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

Avaimen laajennus Salsa20:lle

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

Salsa20-salaustoiminto

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ä

Suorituskyky

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-versiot

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] .

XSalsa20 variantti

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] .

Cryptanalysis

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ä.

ChaCha

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ä.

Muistiinpanot

  1. Arkistoitu kopio . Haettu 11. marraskuuta 2010. Arkistoitu alkuperäisestä 15. joulukuuta 2017.
  2. Arkistoitu kopio . Haettu 13. syyskuuta 2016. Arkistoitu alkuperäisestä 18. syyskuuta 2018.
  3. Arkistoitu kopio . Haettu 11. marraskuuta 2010. Arkistoitu alkuperäisestä 2. toukokuuta 2018.

Linkit