Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Функция littleendian(b)




Функции columnround(y) и doubleround(y)

Функция rowround(y)

Функция quarterround(y)

ОСНОВНЫЕ ФУНКЦИИ АЛГОРИТМА SALSA20

Основные понятия и базовые операции

 

Алгоритм шифрования 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.

 

Основным блоком системы является преобразование 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. Каждое из таких преобразований обратимо, как и функция в целом.

 

Для этого преобразования требуется 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)

 

 

Преобразование 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)

 

 


 

 

Хеш-функция 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 байт.

 




Поделиться с друзьями:


Дата добавления: 2017-01-13; Просмотров: 954; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.