- •Курсовая работа
- •Задание на курсовую работу студентам
- •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
- •Перечень источников
1.2 Основные понятия и базовые операции
Алгоритм шифрования Salsa20 выполняет операции над словами. Словом называется элемент множества {0,1,…,232−1}. В пакете Mathcad слово представлено в виде одномерного массива «0» и «1».
Для удобства ввода, реализованы функции dec2bin и bin2dec (рис.1.1).
dec2bin преобразует десятичное число D в массив, являющийся представлением двоичного числа, то-есть 32-битное слово. bin2dec выполняет обратное преобразование из массива в десятичное число:
Рисунок 1.1 – Функции dec2bin и bin2dec
Таким образом, десятичное число «1000» преобразуется в 32-битное слово, представленного в виде массива на рисунке 1.2:
Рисунок 1.2 – Преобразование десятичного числа в 32-битное слово
Для работы со словами в пакете Mathcad реализованы базовые операции summod2, mod и shift, которые представлены на рисунке 1.3.
summod2 осуществляет поразрядное сложение двух 32-битных двоичных слов B1и B2 по модулю 2, то есть операцию «исключающее или».
Функция mod выполняет
сложение двух слов B1и
B2 по модулю
.
Функция shift осуществляет с-битовый циклический левый сдвиг слова, то есть каждый бит слова смещается относительно своей старой позиции на с разрядов влево (от младшего разряда к старшему).
Рисунок 1.3 – Функции summod2, shift и sum.
2 Основные функции алгоритма salsa20
2.1 Функция quarterround(y)
Основным блоком системы является преобразование quarterround(y) над четырьмя словами. Суть в том, что для каждого слова складывается два предыдущих, затем сумма сдвигается (циклично) на определенное количество бит и побитово суммируется результат с выбранным словом. Последующие операции производятся с новыми значениями слов.
Пусть y – последовательность 4 слов: y = (y1, y2, y3, y4). Тогда функция quarterround(y) = (z1, z2, z3, z4), где:
. (2.1)
где
– операция побитового сложения (XOR),
+
– операция сложения по модулю
,
<<<
– операция циклического сдвига на с
разрядов влево.
Реализация функции quarterround(y) при помощи пакета Mathcad представлена на рис. 2.1:
Рисунок 2.1 – Реализация в Mathcad функции quarterround(y)
Можно рассматривать эту функцию как преобразования слов y1, y2, y3 и y4. Каждое из таких преобразований обратимо, как и функция в целом.
2.2 Функция rowround(y)
Для этого преобразования требуется 16 слов. Их можно представить в виде матрицы 4х4 (2.2). Каждый ряд этой матрицы преобразуется функцией quarterround(y). Слова из строки берутся по порядку, начиная с i-го для i-й строки, где i={0,1,2,3}.
. (2.2)
Пусть y = (y0, y1,.., y15) – последовательность 16 слов, тогда rowround(y) = (z0, z1,.., z15) также последовательность 16 слов, где:
(2.3)
Реализация функции rowround(y) при помощи пакета Mathcad представлена на рис. 2.2:
Р
исунок
2.2 - Реализация в Mathcad
функции rowround(y)
2.3 Функции columnround(y) и doubleround(y)
Преобразование columnround(y) выполняется над столбцами матрицы (2.2) по аналогии с rowround(y). Если y = (y0, y1,.., y15), то columnround(y) = (z0, z1,.., z15) также последовательность 16 слов, где:
(2.4)
Реализация функции columnround(y) при помощи пакета Mathcad представлена на рис. 2.3:
Рисунок 2.3 - Реализация в Mathcad функции columnround (y)
Функция doubleround(y) является последовательным применением функций columnround, а затем rowround:
doubleround(y) = rowround(columnround(y)) (2.5)
Реализация функции doubleround(y) при помощи пакета Mathcad идентична (2.5)
