Сторінка не перевірена
Salsa20 — системапотокового шифрування, розробленаДеніелом Бернштейном. Алгоритм був представлений на конкурсі«eSTREAM», метою якого було створення європейських стандартів для шифрування даних, переданих поштовими системами. Алгоритм став переможцем конкурсу в першому профілі (потокові шифри для програмного застосування з великою пропускною здатністю).
Шифр Salsa20 використовує наступні операції:
Алгоритм використовуєгеш-функцію з 20 циклами. Основні її перетворення нагадують алгоритмAES.
Словом далі будемо називати елемент множини {0,1,...,232-1} і записувати його в шістнадцятковому вигляді з префіксом 0х.
Операціюдодавання двох слів по модулю 232 будемо позначати символом «».
Виключне або (побітове додавання) будемо позначати символом «»
-бітовий циклічний зсув вліво слова, який будемо позначати. Якщо представити як, тоді
Основним блоком системи є перетворення над чотирма словами. З нього будуються далі описані більш загальні перетворення.Його суть полягає в тому, що для кожного слова ми складаємо два попередніх, зсуваємо (циклічно) суму на певну кількість біт і побітово підсумовуємо результат з вибраним словом. Подальші операції проводяться з новими значеннями слів.
Припустимо, що — послідовність слів 4. Тоді функція де
Наприклад:
quarterround(0x00000001; 0x00000000; 0x00000000; 0x00000000) = (0x08008145; 0x00000080; 0x00010200; 0x20500000)
Можна розглядати цю функцію перетворення слів y0, y1, y2 y3. Кожне з таких перетворень оборотне, як і функція в цілому.
В цьому перетворенні ми беремо 16 слів. Представимо їх у вигляді матриці 4х4. Беремо кожен рядок цієї матриці і перетворимо слова цієї матриці функцією. Слова з рядка беруться за порядком, починаючи зi-го дляi-го рядка, деi={0,1,2,3}.
Нехай — послідовність 16 слів, тоді — також послідовність 16 слів де
Тут ми беремо стовпці такої ж матриці. Перетворимо їх функцією за аналогією підставляючи в неї значення, починаючи зj-го дляj-го стовпця, деj={0,1,2,3}.
Функція columnround(y)=(z) теж оперує послідовністю 16 слів так, що
Функціяdoubleround(y) є послідовним застосуванням функційcolumnround а потімrowround:doubleround(y) =rowround(columnround(y))
Даний алгоритм використовує запис слова,що починається з молодшого байта. Для цього тут введено перетворення
Нехай — 4-байтова послідовність, тоді — слово, таке, що
Підсумкове перетворення — це побітове додавання вихідної послідовності і результату 20 раундів почергових перетворень стовпців і рядків.
де
x[i] — байти x, а xj — слова, які використовуються в описаних вище функціях.
Якщо
,
тоді Salsa20(x) є послідовністю результатів
Розширення перетворює 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 то
Шифром-байтної послідовності, для буде
— унікальний 8-байтовий номер (nonce).Шифротекст буде розміром байт, так само, як вихідний текст.
Salsa20k(v) — послідовність у 270 байт.
Де — унікальна послідовність у 8 байт така щоВідповідно
Де
Завдяки тому, що перетворення кожного стовпця і кожного рядка не залежать один від одного, обчислення, необхідні для шифрування, легкорозпаралелюються. Це дає суттєвий виграш у швидкості для більшості сучасних платформ.
Алгоритм практично не має накладних обчислень, необхідних для запуску циклу шифрування. Це так само відноситься до зміни ключа. Велика кількість шифросистем розраховує на попередні обчислення, результати яких повинні зберігатися вкеші першого рівня (L1)процесора. Так як вони залежать від ключа, обчислення доведеться проводити заново. У Salsa20 ж достатньо просто завантажити ключ в пам'ять.
Salsa20/8 і Salsa20/12 - це шифросистеми, що використовують той же механізм, що і Salsa20, але з 8 і 12 раундами шифрування, відповідно, замість 20 оригінальних.Salsa20 був зроблений з великим запасом стійкості. Тоді як Salsa20/8 показує хороші результати у швидкодії, обганяючи в більшості випадків багато інших шифросистем, в тому числіAES іRC4[1]
Існує варіант алгоритму Salsa20, також запропонований Даніелем Бернштейном, в якому довжинаnonce збільшена з 64 до 192 біт. Цей варіант називається XSalsa20. Збільшений розмір nonce дозволяє використовувати для його генераціїкриптографічно стійкого генератора псевдовипадкових чисел, в той час як для безпечного шифрування з 64-бітним nonce необхідне використання лічильника через високу ймовірність колізій.[2].
У 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.
У 2008 році Даніель Берштейн опублікував споріднене сімействопотокових шифрів під назвою ChaCha, метою якого було поліпшення перемішування даних за один раунд і, ймовірно, поліпшеннякриптостійкості при тій же, або навіть трохи більшій швидкості[3].
ChaCha20 описаний вRFC 7539 (травень 2015).
Основний блок системи тут працює інакше. Теперкожна операція змінює одне з слів. Зміни відбуваються циклічно «у зворотний бік», починаючи з 0-го слова. Чергуються операції додавання побітової суми разом із зсувом, кожне слово складається з попереднім.
Функція quarterround(a, b, c, d), де a, b, c, d-слова, в ChaCha виглядає наступним чином
Тут використовуються ті ж самі арифметичні операції, але кожне слово змінюється два рази за перетворення замість одного.