Salsa20 — система потокового шифрування, розроблена Деніелом Бернштейном. Алгоритм був представлений на конкурсі «eSTREAM», метою якого було створення європейських стандартів для шифрування даних, переданих поштовими системами. Алгоритм став переможцем конкурсу в першому профілі (потокові шифри для програмного застосування з великою пропускною здатністю).
Шифр Salsa20 використовує наступні операції:
- додавання 32-бітних чисел;
- побітове додавання по модулю 2 (xor);
- зсув бітів.
Алгоритм використовує геш-функцію з 20 циклами. Основні її перетворення нагадують алгоритм AES.
Опис алгоритму
Поняття
Словом далі будемо називати елемент множини {0,1,...,232-1} і записувати його в шістнадцятковому вигляді з префіксом 0х.
Операцію додавання двох слів по модулю 232 будемо позначати символом «».
Виключне або (побітове додавання) будемо позначати символом «»
-бітовий циклічний зсув вліво слова , який будемо позначати . Якщо представити як , тоді
Функції, які використовуються в алгоритмі
quarterround(y)
Основним блоком системи є перетворення над чотирма словами. З нього будуються далі описані більш загальні перетворення. Його суть полягає в тому, що для кожного слова ми складаємо два попередніх, зсуваємо (циклічно) суму на певну кількість біт і побітово підсумовуємо результат з вибраним словом. Подальші операції проводяться з новими значеннями слів.
Припустимо, що — послідовність слів 4 . Тоді функція де
Наприклад:
quarterround(0x00000001; 0x00000000; 0x00000000; 0x00000000) = (0x08008145; 0x00000080; 0x00010200; 0x20500000)
Можна розглядати цю функцію перетворення слів y0, y1, y2 y3. Кожне з таких перетворень оборотне, як і функція в цілому.
rowround(y)
В цьому перетворенні ми беремо 16 слів. Представимо їх у вигляді матриці 4х4. Беремо кожен рядок цієї матриці і перетворимо слова цієї матриці функцією . Слова з рядка беруться за порядком, починаючи з i-го для i-го рядка, де i={0,1,2,3}.
Нехай — послідовність 16 слів, тоді — також послідовність 16 слів де
columnround(y)
Тут ми беремо стовпці такої ж матриці. Перетворимо їх функцією за аналогією підставляючи в неї значення, починаючи з j-го для j-го стовпця, де j={0,1,2,3}.
Функція columnround(y)=(z) теж оперує послідовністю 16 слів так, що
doubleround(y)
Функція doubleround(y) є послідовним застосуванням функцій columnround а потім rowround: doubleround(y) = rowround(columnround(y))
Salsa20()
Даний алгоритм використовує запис слова, що починається з молодшого байта. Для цього тут введено перетворення
Нехай — 4-байтова послідовність, тоді — слово, таке, що
Підсумкове перетворення — це побітове додавання вихідної послідовності і результату 20 раундів почергових перетворень стовпців і рядків.
де
- …
x[i] — байти x, а xj — слова, які використовуються в описаних вище функціях.
Якщо
,
тоді Salsa20(x) є послідовністю результатів
Розширення ключа для Salsa20
Розширення перетворює 32-байтний або 16-байтний ключ k і 16-байтний номер n в 64-байтну послідовність .
Для розширення k використовуються константи
для 32-бітного k і
для 16-бітного k. Це записи «expand 32-byte k» і «expand 16-byte k» ASCII-коді.
Нехай k0,k1,n — 16-байтові послідовності, тоді
.
Якщо у нас тільки одна 16-байтові послідовність k то
Функція шифрування Salsa20
Шифром -байтної послідовності , для буде
— унікальний 8-байтовий номер (nonce). Шифротекст буде розміром байт, так само, як вихідний текст.
Salsa20k(v) — послідовність у 270 байт.
Де — унікальна послідовність у 8 байт така що Відповідно
Де
Продуктивність
Завдяки тому, що перетворення кожного стовпця і кожного рядка не залежать один від одного, обчислення, необхідні для шифрування, легко розпаралелюються. Це дає суттєвий виграш у швидкості для більшості сучасних платформ.
Алгоритм практично не має накладних обчислень, необхідних для запуску циклу шифрування. Це так само відноситься до зміни ключа. Велика кількість шифросистем розраховує на попередні обчислення, результати яких повинні зберігатися в кеші першого рівня (L1) процесора. Так як вони залежать від ключа, обчислення доведеться проводити заново. У Salsa20 ж достатньо просто завантажити ключ в пам'ять.
Варіанти Salsa20/8 і Salsa20/12
Salsa20/8 і Salsa20/12 - це шифросистеми, що використовують той же механізм, що і Salsa20, але з 8 і 12 раундами шифрування, відповідно, замість 20 оригінальних. Salsa20 був зроблений з великим запасом стійкості. Тоді як Salsa20/8 показує хороші результати у швидкодії, обганяючи в більшості випадків багато інших шифросистем, в тому числі AES і RC4
Варіант XSalsa20
Існує варіант алгоритму Salsa20, також запропонований Даніелем Бернштейном, в якому довжина nonce збільшена з 64 до 192 біт. Цей варіант називається XSalsa20. Збільшений розмір nonce дозволяє використовувати для його генерації криптографічно стійкого генератора псевдовипадкових чисел, в той час як для безпечного шифрування з 64-бітним nonce необхідне використання лічильника через високу ймовірність колізій..
Криптоаналіз
У 2005 році Paul Crowley оголосив про атаки на Salsa20/5 з розрахунковою складністю по часу 2165. Ця і наступні атаки засновані на урізаному диференціальному криптоаналізі (truncated differential криптоаналіз). За цей криптоаналіз він отримав нагороду в 1000$ від автора Salsa20.
B 2006, Fischer, Meier, Berbain, Biasse, і Robshaw повідомили про атаку на Salsa/6 зі складністю 2117, і про атаку з пов'язаними ключами на Salsa20/7 зі складністю 2217
B 2008 році Aumasson, Fischer, Khazaei, Meier і Rechberger повідомили про атаку на Salsa20/7 зі складністю 2153 і про першу атаку на Salsa20/8 зі складністю 2251.
Поки що не було публічних повідомлень про атаки на Salsa20/12 і повну Salsa20/20.
ChaCha
У 2008 році Даніель Берштейн опублікував споріднене сімейство потокових шифрів під назвою ChaCha, метою якого було поліпшення перемішування даних за один раунд і, ймовірно, поліпшення криптостійкості при тій же, або навіть трохи більшій швидкості.
ChaCha20 описаний в RFC 7539 (травень 2015).
Основний блок системи тут працює інакше. Тепер кожна операція змінює одне з слів. Зміни відбуваються циклічно «у зворотний бік», починаючи з 0-го слова. Чергуються операції додавання побітової суми разом із зсувом, кожне слово складається з попереднім.
Функція quarterround(a, b, c, d), де a, b, c, d-слова, в ChaCha виглядає наступним чином
Тут використовуються ті ж самі арифметичні операції, але кожне слово змінюється два рази за перетворення замість одного.
Примітки
- Daniel J. Bernstein. (PDF). cr.yp.to (англ.). Архів оригіналу (PDF) за 15 грудня 2017. Процитовано 10 квітня 2018.
- Daniel J. Bernstein (4 лютого 2011). (PDF). cr.yp.to (англ.). Архів оригіналу (PDF) за 18 вересня 2018. Процитовано 10 квітня 2018.
- Daniel J. Bernstein ? (28 січня 2008). (PDF). cr.yp.to (англ.). Архів оригіналу (PDF) за 2 травня 2018. Процитовано 10 квітня 2018.
Посилання
- Salsa20 Домашня сторінка [ 14 травня 2011 у Wayback Machine.]
- Специфікація [ 15 грудня 2017 у Wayback Machine.]
- Salsa20/8 і Salsa20/12 [ 15 грудня 2017 у Wayback Machine.]
- Сторінка Salsa20 на eSTREAM [ 5 квітня 2016 у Wayback Machine.]
- Сімейство шифрів ChaCha [ 7 грудня 2020 у Wayback Machine.]
- Salsa20 speed [ 25 серпня 2017 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Salsa20 sistema potokovogo shifruvannya rozroblena Denielom Bernshtejnom Algoritm buv predstavlenij na konkursi eSTREAM metoyu yakogo bulo stvorennya yevropejskih standartiv dlya shifruvannya danih peredanih poshtovimi sistemami Algoritm stav peremozhcem konkursu v pershomu profili potokovi shifri dlya programnogo zastosuvannya z velikoyu propusknoyu zdatnistyu Shifr Salsa20 vikoristovuye nastupni operaciyi dodavannya 32 bitnih chisel pobitove dodavannya po modulyu 2 xor zsuv bitiv Algoritm vikoristovuye gesh funkciyu z 20 ciklami Osnovni yiyi peretvorennya nagaduyut algoritm AES Opis algoritmuPonyattya Slovom dali budemo nazivati element mnozhini 0 1 232 1 i zapisuvati jogo v shistnadcyatkovomu viglyadi z prefiksom 0h Operaciyu dodavannya dvoh sliv po modulyu 232 budemo poznachati simvolom displaystyle Viklyuchne abo pobitove dodavannya budemo poznachati simvolom displaystyle oplus c displaystyle c bitovij ciklichnij zsuv vlivo slova u displaystyle u yakij budemo poznachati u c displaystyle u lll c Yaksho u displaystyle u predstaviti yak u i 02iui displaystyle u sum i 0 2 i u i todi u c i 02i cmod32ui displaystyle u lll c sum i 0 2 i c mod 32 u i Funkciyi yaki vikoristovuyutsya v algoritmi quarterround y0 y1 y2 y3 displaystyle quarterround y 0 y 1 y 2 y 3 quarterround y Osnovnim blokom sistemi ye peretvorennya quarterround y displaystyle quarterround y nad chotirma slovami Z nogo buduyutsya dali opisani bilsh zagalni peretvorennya Jogo sut polyagaye v tomu sho dlya kozhnogo slova mi skladayemo dva poperednih zsuvayemo ciklichno sumu na pevnu kilkist bit i pobitovo pidsumovuyemo rezultat z vibranim slovom Podalshi operaciyi provodyatsya z novimi znachennyami sliv Pripustimo sho y displaystyle y poslidovnist sliv 4 y y0 y1 y2 y3 displaystyle y y 0 y 1 y 2 y 3 Todi funkciya quarterround y z0 z1 z2 z3 displaystyle quarterround y z 0 z 1 z 2 z 3 de z1 y1 y0 y3 7 displaystyle z 1 y 1 oplus y 0 y 3 lll 7 z2 y2 z1 y0 9 displaystyle z 2 y 2 oplus z 1 y 0 lll 9 z3 y3 z2 z1 13 displaystyle z 3 y 3 oplus z 2 z 1 lll 13 z0 y0 z3 z2 18 displaystyle z 0 y 0 oplus z 3 z 2 lll 18 Napriklad quarterround 0x00000001 0x00000000 0x00000000 0x00000000 0x08008145 0x00000080 0x00010200 0x20500000 Mozhna rozglyadati cyu funkciyu peretvorennya sliv y0 y1 y2 y3 Kozhne z takih peretvoren oborotne yak i funkciya v cilomu rowround y y y0y1y2y3y4y5y6y7y8y9y10y11y12y13y14y15 displaystyle y begin pmatrix y 0 amp y 1 amp y 2 amp y 3 y 4 amp y 5 amp y 6 amp y 7 y 8 amp y 9 amp y 10 amp y 11 y 12 amp y 13 amp y 14 amp y 15 end pmatrix V comu peretvorenni mi beremo 16 sliv Predstavimo yih u viglyadi matrici 4h4 Beremo kozhen ryadok ciyeyi matrici i peretvorimo slova ciyeyi matrici funkciyeyu quarterround y displaystyle quarterround y Slova z ryadka berutsya za poryadkom pochinayuchi z i go dlya i go ryadka de i 0 1 2 3 Nehaj y y0 y1 y2 y15 displaystyle y y 0 y 1 y 2 y 15 poslidovnist 16 sliv todi rowround y z0 z1 z2 z15 displaystyle rowround y z 0 z 1 z 2 z 15 takozh poslidovnist 16 sliv de z0 z1 z2 z3 quarterround y0 y1 y2 y3 displaystyle z 0 z 1 z 2 z 3 quarterround y 0 y 1 y 2 y 3 z5 z6 z7 z4 quarterround y5 y6 y7 y4 displaystyle z 5 z 6 z 7 z 4 quarterround y 5 y 6 y 7 y 4 z10 z11 z8 z9 quarterround y10 y11 y8 y9 displaystyle z 10 z 11 z 8 z 9 quarterround y 10 y 11 y 8 y 9 z15 z12 z13 z14 quarterround y15 y12 y13 y14 displaystyle z 15 z 12 z 13 z 14 quarterround y 15 y 12 y 13 y 14 columnround y Tut mi beremo stovpci takoyi zh matrici Peretvorimo yih funkciyeyu quarterround y displaystyle quarterround y za analogiyeyu pidstavlyayuchi v neyi znachennya pochinayuchi z j go dlya j go stovpcya de j 0 1 2 3 Funkciya columnround y z tezh operuye poslidovnistyu 16 sliv tak sho z0 z4 z8 z12 quarterround y0 y4 y8 y12 displaystyle z 0 z 4 z 8 z 12 quarterround y 0 y 4 y 8 y 12 z5 z9 z13 z1 quarterround y5 y9 y13 y1 displaystyle z 5 z 9 z 13 z 1 quarterround y 5 y 9 y 13 y 1 z10 z14 z2 z6 quarterround y10 y14 y2 y6 displaystyle z 10 z 14 z 2 z 6 quarterround y 10 y 14 y 2 y 6 z15 z3 z7 z11 quarterround y15 y3 y7 y11 displaystyle z 15 z 3 z 7 z 11 quarterround y 15 y 3 y 7 y 11 doubleround y Funkciya doubleround y ye poslidovnim zastosuvannyam funkcij columnround a potim rowround doubleround y rowround columnround y Salsa20 Danij algoritm vikoristovuye zapis slova sho pochinayetsya z molodshogo bajta Dlya cogo tut vvedeno peretvorennya littleendian b displaystyle littleendian b Nehaj b b0 b1 b2 b3 displaystyle b b 0 b 1 b 2 b 3 4 bajtova poslidovnist todi littleendian b displaystyle littleendian b slovo take sho littleendian b b0 28b1 216b2 224b3 displaystyle littleendian b b 0 2 8 b 1 2 16 b 2 2 24 b 3 Pidsumkove peretvorennya ce pobitove dodavannya vihidnoyi poslidovnosti i rezultatu 20 raundiv pochergovih peretvoren stovpciv i ryadkiv Salsa20 x x doubleround10 x displaystyle Salsa20 x x oplus doubleround 10 x de x x 0 x 1 x 63 displaystyle x x 0 x 1 x 63 x0 littleendian x 0 x 1 x 2 x 3 displaystyle x 0 littleendian x 0 x 1 x 2 x 3 x1 littleendian x 4 x 5 x 6 x 7 displaystyle x 1 littleendian x 4 x 5 x 6 x 7 x15 littleendian x 60 x 61 x 62 x 63 displaystyle x 15 littleendian x 60 x 61 x 62 x 63 x i bajti x a xj slova yaki vikoristovuyutsya v opisanih vishe funkciyah Yaksho z0 z1 z15 doubleround10 x0 x1 x15 displaystyle z 0 z 1 z 15 doubleround 10 x 0 x 1 x 15 todi Salsa20 x ye poslidovnistyu rezultativ littleendian 1 z0 x0 littleendian 1 z15 x15 displaystyle littleendian 1 z 0 x 0 littleendian 1 z 15 x 15 Rozshirennya klyucha dlya Salsa20 Rozshirennya peretvoryuye 32 bajtnij abo 16 bajtnij klyuch k i 16 bajtnij nomer n v 64 bajtnu poslidovnist Salsa20k n displaystyle Salsa20 k n Dlya rozshirennya k vikoristovuyutsya konstanti s0 101 120 112 97 s1 110 100 32 51 s2 50 45 98 121 s3 116 101 32 107 displaystyle sigma 0 101 120 112 97 sigma 1 110 100 32 51 sigma 2 50 45 98 121 sigma 3 116 101 32 107 dlya 32 bitnogo k i t0 101 120 112 97 t1 110 100 32 49 t2 54 45 98 121 t3 116 101 32 107 displaystyle tau 0 101 120 112 97 tau 1 110 100 32 49 tau 2 54 45 98 121 tau 3 116 101 32 107 dlya 16 bitnogo k Ce zapisi expand 32 byte k i expand 16 byte k ASCII kodi Nehaj k0 k1 n 16 bajtovi poslidovnosti todi Salsa20k0 k1 n Salsa20 s0 k0 s1 n s2 k1 s3 displaystyle Salsa20 k 0 k 1 n Salsa20 sigma 0 k 0 sigma 1 n sigma 2 k 1 sigma 3 Yaksho u nas tilki odna 16 bajtovi poslidovnist k to Salsa20k n Salsa20 t0 k t1 n t2 k t3 displaystyle Salsa20 k n Salsa20 tau 0 k tau 1 n tau 2 k tau 3 Funkciya shifruvannya Salsa20 Shifrom l displaystyle l bajtnoyi poslidovnosti m displaystyle m dlya l 0 1 270 displaystyle l in 0 1 2 70 bude Salsa20k v m displaystyle Salsa20 k v oplus m v displaystyle v unikalnij 8 bajtovij nomer nonce Shifrotekst bude rozmirom l displaystyle l bajt tak samo yak vihidnij tekst Salsa20k v poslidovnist u 270 bajt Salsa20k v 0 Salsa20k v 1 Salsa20k v 2 Salsa20k v 264 1 displaystyle Salsa20 k v underline 0 Salsa20 k v underline 1 Salsa20 k v underline 2 Salsa20 k v underline 2 64 1 De i displaystyle underline i unikalna poslidovnist u 8 bajt i0 i1 i7 displaystyle i 0 i 1 i 7 taka sho i i0 28i1 256i7 displaystyle i i 0 2 8 i 1 2 56 i 7 Vidpovidno Salsa20k v m 0 m 1 m l 1 c 0 c 1 c l 1 displaystyle Salsa20 k v oplus m 0 m 1 m l 1 c 0 c 1 c l 1 De c i m i Salsa20k v bi 64 c imod64 displaystyle c i m i oplus Salsa20 k v mathcal b underline i 64 mathcal c i mod 64 ProduktivnistZavdyaki tomu sho peretvorennya kozhnogo stovpcya i kozhnogo ryadka ne zalezhat odin vid odnogo obchislennya neobhidni dlya shifruvannya legko rozparalelyuyutsya Ce daye suttyevij vigrash u shvidkosti dlya bilshosti suchasnih platform Algoritm praktichno ne maye nakladnih obchislen neobhidnih dlya zapusku ciklu shifruvannya Ce tak samo vidnositsya do zmini klyucha Velika kilkist shifrosistem rozrahovuye na poperedni obchislennya rezultati yakih povinni zberigatisya v keshi pershogo rivnya L1 procesora Tak yak voni zalezhat vid klyucha obchislennya dovedetsya provoditi zanovo U Salsa20 zh dostatno prosto zavantazhiti klyuch v pam yat Varianti Salsa20 8 i Salsa20 12Salsa20 8 i Salsa20 12 ce shifrosistemi sho vikoristovuyut toj zhe mehanizm sho i Salsa20 ale z 8 i 12 raundami shifruvannya vidpovidno zamist 20 originalnih Salsa20 buv zroblenij z velikim zapasom stijkosti Todi yak Salsa20 8 pokazuye horoshi rezultati u shvidkodiyi obganyayuchi v bilshosti vipadkiv bagato inshih shifrosistem v tomu chisli AES i RC4Variant XSalsa20Isnuye variant algoritmu Salsa20 takozh zaproponovanij Danielem Bernshtejnom v yakomu dovzhina nonce zbilshena z 64 do 192 bit Cej variant nazivayetsya XSalsa20 Zbilshenij rozmir nonce dozvolyaye vikoristovuvati dlya jogo generaciyi kriptografichno stijkogo generatora psevdovipadkovih chisel v toj chas yak dlya bezpechnogo shifruvannya z 64 bitnim nonce neobhidne vikoristannya lichilnika cherez visoku jmovirnist kolizij KriptoanalizU 2005 roci Paul Crowley ogolosiv pro ataki na Salsa20 5 z rozrahunkovoyu skladnistyu po chasu 2165 Cya i nastupni ataki zasnovani na urizanomu diferencialnomu kriptoanalizi truncated differential kriptoanaliz Za cej kriptoanaliz vin otrimav nagorodu v 1000 vid avtora Salsa20 B 2006 Fischer Meier Berbain Biasse i Robshaw povidomili pro ataku na Salsa 6 zi skladnistyu 2117 i pro ataku z pov yazanimi klyuchami na Salsa20 7 zi skladnistyu 2217 B 2008 roci Aumasson Fischer Khazaei Meier i Rechberger povidomili pro ataku na Salsa20 7 zi skladnistyu 2153 i pro pershu ataku na Salsa20 8 zi skladnistyu 2251 Poki sho ne bulo publichnih povidomlen pro ataki na Salsa20 12 i povnu Salsa20 20 ChaChaVariant ChaCha funkciyi quarterround a b c d U 2008 roci Daniel Bershtejn opublikuvav sporidnene simejstvo potokovih shifriv pid nazvoyu ChaCha metoyu yakogo bulo polipshennya peremishuvannya danih za odin raund i jmovirno polipshennya kriptostijkosti pri tij zhe abo navit trohi bilshij shvidkosti ChaCha20 opisanij v RFC 7539 traven 2015 Osnovnij blok sistemi tut pracyuye inakshe Teper kozhna operaciya zminyuye odne z sliv Zmini vidbuvayutsya ciklichno u zvorotnij bik pochinayuchi z 0 go slova Cherguyutsya operaciyi dodavannya pobitovoyi sumi razom iz zsuvom kozhne slovo skladayetsya z poperednim Funkciya quarterround a b c d de a b c d slova v ChaCha viglyadaye nastupnim chinom a b d a d 16 displaystyle a b d oplus a d lll 16 c d b c b 12 displaystyle c d b oplus c b lll 12 a b d a d 8 displaystyle a b d oplus a d lll 8 c d b c b 7 displaystyle c d b oplus c b lll 7 Tut vikoristovuyutsya ti zh sami arifmetichni operaciyi ale kozhne slovo zminyuyetsya dva razi za peretvorennya zamist odnogo PrimitkiDaniel J Bernstein PDF cr yp to angl Arhiv originalu PDF za 15 grudnya 2017 Procitovano 10 kvitnya 2018 Daniel J Bernstein 4 lyutogo 2011 PDF cr yp to angl Arhiv originalu PDF za 18 veresnya 2018 Procitovano 10 kvitnya 2018 Daniel J Bernstein 28 sichnya 2008 PDF cr yp to angl Arhiv originalu PDF za 2 travnya 2018 Procitovano 10 kvitnya 2018 PosilannyaSalsa20 Domashnya storinka 14 travnya 2011 u Wayback Machine Specifikaciya 15 grudnya 2017 u Wayback Machine Salsa20 8 i Salsa20 12 15 grudnya 2017 u Wayback Machine Storinka Salsa20 na eSTREAM 5 kvitnya 2016 u Wayback Machine Simejstvo shifriv ChaCha 7 grudnya 2020 u Wayback Machine Salsa20 speed 25 serpnya 2017 u Wayback Machine