- •Курсовая работа
- •Задание на курсовую работу студентам
- •1.Тема работы: «Потоковый шифр Salsa20»
- •3.Содержание расчётно-пояснительной записки
- •Реферат
- •Перечень условных обозначений и сокращений
- •1 Описание алгоритма шифрования salsa20, основные понятия и базовые операции 10
- •2 Основные функции алгоритма salsa20 13
- •1 Описание алгоритма шифрования salsa20, основные понятия и базовые операции
- •1.1 Преимущества и применение
- •3 Демонстрация работы алгоритма salsa20 22
- •1.2 Основные понятия и базовые операции
- •2 Основные функции алгоритма salsa20
- •2.1 Функция quarterround(y)
- •2.2 Функция rowround(y)
- •2.3 Функции columnround(y) и doubleround(y)
- •2.4 Функция littleendian(b)
- •2.6 Функция расширения ключа для Salsa20
- •3 Демонстрация работы алгоритма salsa20
- •3.1 Функция шифрования Salsa20
- •3.2 Демонстрация работы алгоритма Salsa20 в среде Mathcad
- •Перечень источников
2.4 Функция littleendian(b)
Хеш-функция Salsa20 использует запись слова, начинающуюся с младшего байта. Для того чтобы преобразовать последовательность байт в слово используется littleendian(b). Пусть b = (b0, b1, b2, b3) – 4-байтовая последовательность, тогда littleendian(b) – слово, такое что:
littleendian(b0, b1, b2, b3) = b0 + 28b1 + 216b2 + 224b3 (2.6)
Например: littleendian(255; 255; 255; 250) = 0xfaffffff. Стоит отметить, что эта функция обратима. Реализация функции littleendian (b) при помощи пакета Mathcad идентична (2.6).
О
братная
функции littleendian
(b)
является функция unlittleendian(D),
а также unlittleendian4(D),
реализация которых при
помощи пакета Mathcad
представлена на рис. 2.4:
Рисунок 2.4 - Реализация функций unlittleendian(D) и unlittleendian4(D)
Функция unlittleendian(D) преобразует число D в последовательность b из n байт:
unlittleendian(D) = (b0, b1,…, bn) (2.7)
Функция unlittleendian4(D) делает то же самое, но только с 32-битным словом D, соответственно на выходе всегда последовательность 4 байт.
2.5 Хеш-функция Salsa20
Если x = (x[0], x[1],…,x[63]) – последовательность 64 байт, то Salsa20(х) – тоже последовательность 64 байт:
Salsa20(x) = x + doubleround10(x) (2.8)
Итоговое преобразование Salsa20 — это суммирование по модулю 232 исходной последовательности х и результата 20 раундов чередующихся преобразований столбцов и строк.
Каждые 4 байта 64-байтной последовательности могут быть представлены словом, начинающемся с младшего байта. Имеем 16 слов:
(2.9)
где x[i] – байты x, а xj – слова.
Если:
(z0, z1,…, z15) = doubleround10(x0, x1,…, x15), (2.10)
тогда Salsa20(x) является последовательностью результатов:
littleendian-1(z0 + x0), littleendian-1(z1 + x1), …, littleendian-1(z15 + x15), где zi + xi – сумма двух слов по модулю 232.
Р
еализация
хеш-функции Salsa20(x)
при помощи пакета
Mathcad
представлена на рис. 2.5:
Рисунок 2.5 – Реализация в Mathcad хеш-функции Salsa20(x)
2.6 Функция расширения ключа для Salsa20
Расширение преобразует 32-байтный или 16-байтный ключ k и 16-байтную последовательность n в 64-байтную последовательность Salsa20k(n). Для расширения k используются константы:
Для 32-байтового k: σ0 = (101, 120, 112, 97), σ1 = (110, 100, 32, 51), σ2 = (50, 45, 98, 121), σ3 = (116, 101, 32, 107);
Для 16-байтового k: τ0 = (101, 120, 112, 97), τ1 = (110, 100, 32, 49), τ2 = (54, 45, 98, 121), τ3 = (116, 101, 32, 107);
Пусть k - 32-байтный ключ, который можно представить в виде двух 16-байтных ключей k0 и k1, n – 16-байтовая последовательность, тогда:
Salsa20
(n)
= Salsa20(σ0,
k0,
σ1,
n, σ2,
k1,
σ3). (2.11)
Пусть k - 16-байтный ключ, n – 16-байтовая последовательность, то:
Salsa20k (n) = Salsa20(τ0, k, τ1, n, τ2, k, τ3). (2.12)
Расширение ключа для Salsa20 реализовано при помощи пакета Mathcad в виде последовательности нескольких операций.
Сначала выполняется объединение массивов в один массив М (рис.2.6):
(а)
(б)
Рисунок 2.6 - Объединение массивов в один массив М: а) в случае 32-байтового ключа; б) в случае 16-байтового ключа
Где σ0, σ1, σ2, σ3, τ0, τ1, τ2, τ3 – массивы констант; k – массив ключа (32-байтный или 16-байтный); n – 16-байтовая последовательность.
На данный момент программа представляет М массивом, внутри которого 7 различных массивов. Для того чтобы из М получить единую 64-байтовую последовательность E используется функция exp(M) (рис.2.7):
Рисунок 2.7 – Реализация в Mathcad функции exp(M)
После этого выполняется преобразование Salsa20(E) по формулам (2.11) или (2.12), где Е – последовательность 64 байт.
