Лабораторная работа №5. Программирование и анализ современных алгоритмов шифрования. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №5. Программирование и анализ современных алгоритмов шифрования.



Цель работы:

Рассмотреть современные системы шифрования. Познакомится с интерфейсом. Реализовать алгоритм шифрования. Шифровать/дешифровать сообщение.

Теоретическая часть

Алгоритм MD5

На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и не отрицательное. Кратность каким-либо числам не обязательна. После поступления данных идет процесс подготовки потока к вычислениям.

Рис. 7. Процесс подготовки потока к вычислениям

 

Ниже приведены 5 шагов алгоритма:

Шаг 1. Выравнивание потока

Входные данные выравниваются так, чтобы их размер был сравним с 448 по модулю 512 (L’ = 512? N + 448). Сначала дописывают единичный бит в конец потока, затем необходимое число нулевых бит (выравнивание происходит, даже если длина уже конгруэнтна — сравнима с 448).

Шаг 2. Добавление длины сообщения.

В оставшиеся 64 бита дописывают 64-битное представление длины данных до выравнивания. Если длина превосходит 2 64? 1, то дописывают только младшие биты. После этого длина потока станет кратной степеням двойки — 16, 32. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.

Шаг 3. Инициализация MD-буфера.

Для вычислений инициализируются 4 переменных размером по 32 бита и задаются начальные значения шестнадцатеричными числами:

 

А = 01 23 45 67;

В = 89 AB CD EF;

С = FE DC BA 98;

D = 76 54 32 10.


В этих переменных будут храниться результаты промежуточных вычислений. Начальное состояние ABCD называется инициализирующим вектором.
Определим еще функции и константы, которые нам понадобятся для вычислений.

 Потребуются 4 функции для четырех раундов. Введем функции от трех параметров — слов, результатом также будет слово.

 Определим таблицу констант T[1..64] — 64-элементная таблица данных, построенная следующим образом: T[i] = int(4294967296 * | sin(i) |) и s — циклический сдвиг влево на s бит полученого 32-битного аргумента.
Выравненные данные разбиваются на блоки (слова) по 32 бита, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: [abcd k s i], определяемый как a = b + ((a + Fun(b,c,d) + X[k] + T[i]) < < < s), где X — блок данных. X[k] = M [n * 16 + k], где k — номер 32-битного слова из n-го 512-битного блока сообщения.

Шаг 4. Вычисление в цикле

Заносим в блок данных элемент n из массива. Сохраняются значения A, B, C и D, оставшиеся после операций над предыдущими блоками (или их начальные значения, если блок первый).

AA = A

BB = B

CC = C

DD = D

Раунд 1

/*[abcd k s i] a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 0 7 1][DABC 1 12 2][CDAB 2 17 3][BCDA 3 22 4]

[ABCD 4 7 5][DABC 5 12 6][CDAB 6 17 7][BCDA 7 22 8]

[ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12]

[ABCD 12 7 13][DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]

Раунд 2

/*[abcd k s i] a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 1 5 17][DABC 6 9 18][CDAB 11 14 19][BCDA 0 20 20]

[ABCD 5 5 21][DABC 10 9 22][CDAB 15 14 23][BCDA 4 20 24]

[ABCD 9 5 25][DABC 14 9 26][CDAB 3 14 27][BCDA 8 20 28]

[ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32]

Раунд 3

/*[abcd k s i] a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 5 4 33][DABC 8 11 34][CDAB 11 16 35][BCDA 14 23 36]

[ABCD 1 4 37][DABC 4 11 38][CDAB 7 16 39][BCDA 10 23 40]

[ABCD 13 4 41][DABC 0 11 42][CDAB 3 16 43][BCDA 6 23 44]

[ABCD 9 4 45][DABC 12 11 46][CDAB 15 16 47][BCDA 2 23 48]

Раунд 4

/*[abcd k s i] a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */

[ABCD 0 6 49][DABC 7 10 50][CDAB 14 15 51][BCDA 5 21 52]

[ABCD 12 6 53][DABC 3 10 54][CDAB 10 15 55][BCDA 1 21 56]

[ABCD 8 6 57][DABC 15 10 58][CDAB 6 15 59][BCDA 13 21 60]

[ABCD 4 6 61][DABC 11 10 62][CDAB 2 15 63][BCDA 9 21 64]

Суммируем с результатом предыдущего цикла:

A = AA + A

B = BB + B

C = CC + C

D = DD + D

После окончания цикла необходимо проверить, есть ли еще блоки для вычислений. Если да, то изменяем номер элемента массива (n++) и переходим в начало цикла.

Шаг 5. Результат вычислений

Результат вычислений находится в буфере ABCD, это и есть хеш. Если вывести слова в обратном порядке DCBA, то мы получим наш MD5 хеш.

Алгоритм ГОСТ 28147-89

Шифрование Процесс зашифрования или расшифрования.

Алгоритм ГОСТ 28147-89 - Структурная схема

Структурная схема алгоритма криптографического преобразования (криптосхема) содержит элементы, согласно схеме
Криптосхема содержит следующие элементы:

 ключевое запоминающее устройство (КЗУ) на 256 бит, состоящее из 8 -ми 32 -разрядных накопителей (Х0, Х1, Х2, Х3, Х4, Х5, Х6, Х7);

 четыре 32 -разрядные накопителя (N1, N2, N3, N4);

 два 32 -разрядных накопителя (N5, N6) с записанными в них постоянными заполнениями C 2, C1;

 два 32 -разрядных сумматора по модулю 232 (СМ1, СМ3);

 32 -разрядный сумматор поразрядного суммирования по модулю 2 (СМ2);

 сумматор по модулю 2 без ограничений на разрядность (СМ5);

 блок подстановки (К);

 регистр циклического сдвига на одиннадцать шагов в сторону старшего разряда (R).

Блок подстановки К состоит из восьми узлов замены К1-К8 с памятью по 64 бита каждый.
Ключи, определяющие заполнение КЗУ и таблиц блока подстановки К являются секретными элементами и поставляются в установленном порядке. Заполнение таблиц блока подстановки К является долговременным ключевым элементом, общим для сети ЭВМ.
Организация различных видов связи достигается построением соответствующей ключевой системы. При этом может быть использована возможность выработки ключей (заполнений КЗУ) в режиме простой замены и зашифрования их в режиме простой замены с обеспечением имитозащиты для передачи по каналам связи или хранения в памяти ЭВМ.
В криптосхеме предусмотрены четыре вида работы:

 зашифрование (расшифрование) данных в режиме простой замены;

 зашифрование (расшифрование) данных в режиме гаммирования;

 зашифрование (расшифрование) данных в режиме гаммирования с обратной связью;

 режим выработки имитовставки.

 

 

Рис 8. Общая структурная схема зашифрования.

Алгоритм ГОСТ 28147-89 - Режим простой замены

Зашифрование данных

Криптосхема, реализующая алгоритм зашифрования в режиме простой замены, должна иметь вид, показанный на следующей фиг.:

Рис. 9. Структурная схема зашифрования в режиме простой замены

Открытые данные, подлежащие зашифрованию, разбивают на блоки по 64 бита каждый. Ввод любого блока Tо = (a1(0), a2(0),..., a31(0), a32(0), b1(0), b2(0),.., b32(0) двоичной информации в накопители N1 и N2 производятся так, что значение a1(0) вводится в 1-й разряд N1, значение a2(0) вводится во 2-й разряд накопителя и т.д., значение a32(0) вводится в 32-й разряд N1: значение b1(0) вводится в 1-й разряд N2, значение b2(0) вводится во 2-й разряд накопителя и т.д., значение b32(0) вводится в 32-й разряд N2. В результате получаем состояние (a32(0), a31(0),..., a2(0), a1(0)) накопителя N1 и состояние (b32(0), b31(0),..., b2(0), b1(0)) накопителя N2.
В КЗУ вводится 256 бит ключа. Содержимое восьми 32-разрядных накопителей X0, X1,...., X7 имеет вид:

X0 = (W32, W31,..., W2, W1)
X1 = (W64, W63,..., W34, W33)
...
X7 = (W256, W255,..., W226, W225)

Алгоритм зашифрования 64-разрядного блока открытых данных в режиме простой замены состоит из 32-х циклов.
В первом цикле начальное заполнение накопителя N1 суммируется по модулю 232 в сумматоре СМ1 с заполнением накопителя X0, при этом заполнение накопителя N1 сохраняется.
Результат суммирования преобразуется в блоке подстановке K и полученный вектор поступает на вход регистра R, где циклически сдвигается на одиннадцать шагов в сторону старших разрядов. Результат сдвига суммируется поразрядно по модулю 2 в сумматоре СМ2 с 32-разрядным заполнением накопителя N2. Полученный в СМ2 результат записывается в N1, при этом старое заполнение N1 переписывается в N2. Первый цикл заканчивается.
Последующие циклы осуществляются аналогично, при этом во 2-м цикле из КЗУ считывается заполнение X1, в 3-ем цикле из КЗУ считывается заполнение X2 и т.д., в 8-ом цикле из КЗУ считывается заполнение X7. В циклах с 9-го по 16-ый, а также в циклах с 17-го по 24-ый заполнения из КЗУ считываются в том же порядке.
В последних восьми циклах с 25-ый по 32-ой порядок считывания заполнений КЗУ обратный.
В 32-ом цикле результат из сумматора СМ2 вводится в накопитель N2, а в накопителе N1 сохраняется старое заполнение.
Полученные после 32-го цикла зашифрования заполнения накопителей N1 и N2 являются блоком зашифрованных данных, соответствующим блоку открытых данных.
64-разрядный блок зашифрованных данных Тш выводится из накопителей N1 и N2 в следующем порядке: из 1-го, 2-го,..., 32-го разряда накопителя N1, затем из 1-го, 2-го,..., 32-го разрядов накопителя N2.
Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично.

Расшифрование данных

Криптосхема, реализующая алгоритм расшифрования в режиме простой замены имеет тот же вид, что и при зашифровании. В КЗУ вводятся 256 бит того же ключа, на котором осуществлялось зашифрование открытых данных.
Зашифрованные данные разбиваются на блоки по 64 бита каждый. Ввод любого блока Tш = (a1(32), a2(32),..., a31(32), a32(32), b1(32), b2(32),.., b32(32) двоичной информации в накопители N1 и N2 производятся так, что значение a1(32) вводится в 1-й разряд N1, значение a2(32) вводится во 2-й разряд накопителя и т.д., значение a32(32) вводится в 32-й разряд N1: значение b1(32) вводится в 1-й разряд N2, значение b2(32) вводится во 2-й разряд накопителя и т.д., значение b32(32) вводится в 32-й разряд N2.
Расшифрование осуществляется по тому же алгоритму, что и зашифрование открытых данных, с тем изменением, что заполнения накопителей X0, X1,...,X7 считываются из КЗУ в циклах расшифрования в следующем порядке:

X0, X1, X2, X3, X4, X5, X6, X7, X7, X6, X5, X4, X3, X2,. X1, X0
X7, X6, X5, X4, X3, X2,. X1, X0, X7, X6, X5, X4, X3, X2,. X1, X0

Полученные после 32-х циклов работы заполнения накопителей N1 и N2 составляют блок открытых данных.
Аналогично расшифровываются остальные блоки зашифрованных данных.
Алгоритм зашифрования в режиме простой замены 64-битового блока То обозначается через A, т.е.:

A (Tо) = A (a(0), b(0))) = (a(32), b(32)))= Tш

Алгоритм ГОСТ 28147-89 - Режим гаммирования

Зашифрование данных

Криптосхема, реализующая алгоритм зашифрования данных в режиме гаммирования показана на схеме.
Открытые данные, разбитые на 64 -разрядные блоки (1), Tо(2),..., Tо(M-1), Tо(M), зашифровываются в режиме гаммирования путем поразрядного суммирования по модулю 2 в сумматоре СМ5 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита:

Гш = (Гш(1), Гш(2),...,Гш(M-1), Гш(M))

где M - определяется объемом шифруемых данных.
В КЗУ вводятся 256 бит ключа. В накопителе N1, N2 вводится 64 -разрядная двоичная последовательность (синхропосылка) S=(S1, S2,..., S64), являющаяся исходным заполнением этих накопителей для последующей выработки M блоков гаммы шифра.

10. Структурная схема зашифрования в режиме гаммирования

Исходное заполнение накопителей N1 и N2 (синхропосылка S ) зашифровывается в режиме простой замены. Результат зашифрования A(S) = (Y0, Z0) переписывается в 32 -разрядные накопители N3 и N4.
Заполнение накопителя N4 суммируется по модулю (232-1) в сумматоре СМ4 с 32 -разрядной константой С1 из накопителя N6, результат записывается в N4. Заполнение накопителя N3 суммируется по модулю 232 в сумматоре СМ3 с 32 -разрядной константой С2 из накопителя N5, результат записывается в N3.
Заполнение N3 переписывается в N1, а заполнение N4 переписывается в N2, при этом заполнение N3, N4 сохраняется.
Заполнение N1 и N2 зашифровывается в режиме простой замены. Полученное в результате зашифрования заполнение N1, N2 образует первый 64 -разрядный блок гаммы шифра Гш(1), который суммируется поразрядно по модулю 2 в сумматоре СМ5 с первым 64 -разрядным блоком открытых данных.
В результате суммирования получается 64 -разрядный блок зашифрованных данных. Аналогичным образом зашифровываются остальные блоки открытых данных.
В канал связи или память ЭВМ передаются синхропосылка S и блоки зашифрованных данных.

Расшифрование данных

При расшифровании криптосхема имеет тот же вид, что и при зашифровании открытых данных в режиме гаммирования. В КЗУ вводятся 256 бит ключа, с помощью которого осуществлялось зашифрование данных. В накопители N1 и N2 вводится синхропосылка S. Процесс выработки M блоков гаммы шифра осуществляется совершенно аналогично описанному выше. Блоки зашифрованных данных суммируются поразрядно по модулю 2 в сумматоре СМ5 с блоками гаммы шифра, в результате получаются блоки открытых данных.

 

Алгоритм ГОСТ 28147-89 - Режим гаммирования с обратной связью

Зашифрование данных

Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования с обратной связью, имеет вид, указанный на схеме.
Открытые данные, разбитые на 64 -разрядные блоки зашифровываются в режиме гаммирования с обратной связью путем поразрядного суммирования по модулю 2 в сумматоре СМ5 с гаммой шифра, которая вырабатывается блоками по 64 бита каждый.
В КЗУ вводится 256 бит ключа. Синхропосылка S из 64 бит вводится в N1 и N2.
Исходное заполнение N1 и N2 зашифровывается в режиме простой замены. Полученное в результате заполнение N1 и N2 образует первый 64 -разрядный блок гаммы шифра, который суммируется поразрядно по модулю 2 в сумматоре СМ5 с первым 64 -разрядным блоком открытых данных.
В результате получается 64 -разрядный блок зашифрованных данных.

 

11. Структурная схема зашифрования в режиме гаммирования с обратной связью

Блок зашифрованных данных одновременно является также исходным состоянием N1, N2 для выработки второго блока гаммы шифра и по обратной связи записывается в указанные накопители.
Заполнение N1, N2 зашифровывается в режиме простой замены. Полученное в результате зашифрования заполнение N1, N2 образует второй 64 -разрядный блок гаммы шифра, который суммируется поразрядно по модулю 2 в сумматоре СМ5 со вторым блоком открытых данных.
Выработка последующих блоков гаммы шифра и зашифрование соответствующих блоков открытых данных производится аналогично.
В канал связи или память ЭВМ передаются синхропосылка S и блоки зашифрованных данных.

Расшифрование данных

При расшифровании криптосхема имеет тот же вид, что и при зашифровании.
В КЗУ вводятся 256 бит того же ключа, с помощью которого производилось зашифрование данных. Синхропосылка S вводится в N1, N2.
Исходное заполнение N1, N2 (синхропосылка) зашифровывается в режиме простой замены. Полученное в результате заполнение N1, N2 образует первый блок гаммы шифра, который суммируется с по модулю 2 в сумматоре СМ5 с блоком зашифрованных данных. В результате получается первый блок открытых данных.
Блок зашифрованных данных является исходным заполнением N1, N2 для выработки второго блока гаммы шифра. Полученное заполнение N1, N2 зашифровывается в режиме простой замены. Полученный в результате блок суммируется поразрядно по модулю 2 в сумматоре СМ5 со вторым блоком зашифрованных данных. В результате получается второй блок открытых данных.
Аналогичным образом производится расшифрование последующих блоков зашифрованных данных.

Алгоритм ГОСТ 28147-89 - Режим выработки имитовставки

Для обеспечения имтозащиты открытых данных, состоящих из M 64 -разрядных блоков (1), Tо(2),..., Tо(M ) где M>2, вырабатывается дополнительный блок из l бит (имитовставка Иl). Процесс выработки имитовставки единообразен для всех режимов шифрования.
Первый блок открытых данных записывается в накопители N1, N2.
Заполнение N1, N2 подвергается преобразованию, соответствующему первым 16 циклам алгоритма зашифрования в режиме простой замены. В КЗУ при этом находится тот же ключ, которым зашифровываются блоки открытых данных.
Полученное после 16 циклов преобразование заполнение N1, N2 суммируется в сумматоре СМ5 по модулю 2 со вторым блоком открытых данных.
Результат суммирования заносится в N1, N2 и подвергается преобразованию, соответствующему первым 16 циклам алгоритма зашифрования в режиме простой замены.
Полученное заполнение N1, N2 суммируется в СМ5 по модулю 2 с третьим блоком открытых данных и т. д.
Итоговый результат суммирования заносится в N1, N2 и зашифровывается в режиме простой замены по первым 16 циклам работы алгоритма. Из полученного значения накопителей N1 и N2 выбирается отрезок Иl (имитовставка) длиной l бит.
Имитовставка передается по каналу связи или в память ЭВМ в конце зашифрованных данных.
Поступившие зашифрованные данные расшифровываются, из полученных блоков открытых данных аналогично описанному выше вырабатывается имитовставка Иl, которая затем сравнивается с имитовставкой Иl полученной вместе с зашифрованными данными.
В случае несовпадения имитовставок полученные данные считаются ложными.
Выработка имитовставки может производится или перед зашифрованием (после расшифрования) всего сообщения, или параллельно с зашифрованием (расшифрованием) по блокам. Первые блоки открытых данных, которые участвуют в выработке имитовставки, могут содержать служебную информацию (адресную часть, отметку времени, синхропосылку и т.д.) и не зашифровываются.
Значение параметра l (длина двоичных разрядов в имитовставке) определяется требованием к криптографической защите, при этом учитывается, что вероятность навязывания ложных данных равна 2-l.

Общая постановка задачи

Ход работы:

· Рассмотреть ПО ведущих разработчиков в отрасли шифрования.

· Познакомится с интерфейсом

· Реализовать алгоритм шифрования/дешифрования

· Зашифровать сообщение – сохранить результат в файл

· Закрыть программное обеспечение

· Открыть программное обеспечение – дешифровать файл.

· Сравнить полученный файл с исходным

· Сделать выводы

 



Поделиться:


Последнее изменение этой страницы: 2019-12-14; просмотров: 264; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.147.215 (0.043 с.)