- •Курсовая работа
- •Задание на курсовую работу студентам
- •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
- •Перечень источников
3 Демонстрация работы алгоритма salsa20
3.1 Функция шифрования Salsa20
Шифром l-байтной последовательности m для l ϵ {0,1,…270} является Salsa20k (υ) m, где υ – уникальное 8-байтовое число «nonce», k – 32 или 16-байтовый ключ, m – исходное сообщение.
Salsa20k (υ) – это последовательность 270 байт, представляет собой:
Salsa20k (υ,1), Salsa20k (υ,2), …,Salsa20k (υ,264-1), где i – уникальная 8-байтовая последовательность (i0, i1,…, i7), такая что i = i0 + 28i1 + … + 256i7
Формула Salsa20k (υ) m неявно укорачивает Salsa20k (υ) до той же длинны, что и m:
Salsa20k (υ) (m[0], m[1], …, m[l - 1]) = (c[0], c[1], …, c[l - 1]), (3.1)
где с[i] = m[i] Salsa20k (υ, [i/64]) [i mod 64].
3.2 Демонстрация работы алгоритма Salsa20 в среде Mathcad
Для начала необходимо сгенерировать уникальное 8-байтовое число υ и сгенерируем 16-байтный ключ k (рис.3.1).
Рисунок 3.1 - Функции генерации уникального 8-байтового числа υ и
16-байтного ключа k
Результаты работы функций представлены на рисунке 3.2:
Р
исунок
3.2 – Полученные
число υ
и ключ
k
Теперь сгенерируем сообщение m длинной l байт (рис. 3.3):
Рисунок 3.3 – Генерация l-байтного сообщения
Из формулы (3.1) видно, что для каждого эллемента сообщения m выполняется сложение по модулю 2 с результатом процедуры расширения ключа Salsa20k (υ).
Результат процедуры Salsa20k (υ) различен для каждого отдельного эллемента сообщения m, потому что помимо самого ключа k процедуре необходимо передать последовательность 16 байт – n, где n = (υ, i). Уже было отмечено в п.3.1, что i и υ это последовательности 8 байт и i в отличии от υ зависит от порядкового номера байта сообщения m. Функция, которая реализует эту зависимость и записывает результат в массив I на рисунке 3.4:
Рисунок 3.4 – Функция зависимости i от порядкового номера байта сообщения m
Каждый элемент массива I содержит 8-байтовую уникальную последовательность i, число элементов массива – 65, что соответствует длине l сообщения m (рис. 3.3).
Далее необходимо объединить 8-байтовые последовательности υ и i в 16-байтовую n.Функция на рисунке 3.5 именно так и формирует 65 последовательностей из 16 байт n и записывает их в массив N. Как и в предыдущем случае количество элементов в массиве N соответствует длине l сообщения m.
Рисунок 3.5 – Формирование массива 16-байтных последовательностей n
Теперь можно перейти к процедуре расширения ключа Salsa20k (n), но для начала нужно занести в Mathcad константы τ0, τ1, τ2, τ3 для 16-байтного ключа k (рис. 3.6), где tau0, tau1, tau2, tau3 соответственно τ0, τ1, τ2, τ3:
Рисунок 3.6 – Ввод констант τ0, τ1, τ2, τ3 для 16-байтного ключа k
На рисунке 3.7 представлена функция S(n), которая выполняет процедуру расширения ключа Salsa20k (n) для каждого n из массива N и записывает результат в массив S. Массив S включает в себя 65 эллементов, которые являются последовательностями 64 байт.
Рисунок 3.7 – Формирование массива результатов процедуры расширения ключа Salsa20k (n)
Теперь для того чтобы получить шифртекст, достаточно сложить по модулю 2 результаты из массива S c байтами сообщения m. Для этого нужно чтобы эллемент сообщения m был равен 64 байтам. Так как сообщение имеет длинну 65 байт, необходимо разбить его на две части по 64 байта (рис.3.8):
Рисунок 3.8 – Разбитие сообщения m на блоки по 64 байта
Как видно из рисунка 3.8, в массиве M записано 2 блока по 64 байта.
Ф
ункция,
crypt(m, s)
выполняющая сложение
по модулю 2 массивов S
и M
представлена на
рисунке 3.9:
Результатом этой функции является последовательность 64 байт CR, которая и есть шифртекст сообщения m. Повторное сложение по модулю 2 массива шифртекста CR и S даёт массив RC, который соответствует исходному m. Результаты шифрования и расшифрования представлены на рисунке 3.10:
Рисунок 3.10 – Результаты шифрования и расшифрования сообщения m при помощи алгоритма шифрования Salsa20
ВЫВОДЫ
В ходе курсовой работы было проведено изучение и моделирование потокового алгоритма шифрования Salsa20. Для этого сначала было проведено изучение алгоритма: основные принципы работы симметричных потоковых шифров, к которым относится Salsa20, его основные преимущества и недостатки, сфера применения. Изучены понятия , которые применяются для описание алгоритма, а также выполнена реализация базовых операций в среде Mathcad.
На втором этапе работы было проведено изучение работы основных функций алгоритма шифрования Salsa20 и их моделирование в среде Mathcad с помощью базовых операций, определённых ранее.
На последнем этапе было проведено изучение и моделирование механизма шифрования сообщений Salsa20 с помощью функций, смоделированных предыдущем этапе. Для этого вначале был выбран ключ, число “nonce” и сообщение длинны l. С помощью ключа и числа “nonce” были получены значения n, которые в дальнейшем были использованы для получение гамма-шифры с помощью процедуры расширения ключа.
В заключении было осуществлено шифрование сообщения с помощью алгоритма шифрования Salsa20 и получение шифр-текста, а затем осуществлено его расшифрование и проверка правильности работы алгоритма.
Поскольку расшифрованное сообщение совпадает с исходным сообщением, то моделирование работы алгоритма шифрования Salsa20 выполнено успешно.
