Файл: Ббк 32. 81я7 И74 Составители ст преп. С. И. Жданова ст преп. С. Н. Рога и 74 информационная безопасность методические указания к выполнению лабораторных работ и ргз для студентов очной формы обучения направлений бакалавриата.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.11.2023
Просмотров: 149
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
29
Преобразование ExpandKey
Expanded Key является линейным массивом четырехбайтных слов и обозначается как W [Nb ⋅ (Nr + 1)]. Первые Nk слов состоят из ключа
шифрования.
Остальные слова определяются рекурсивно.
Функция расширения ключа зависит от значения Nk: существует версия функции для Nk, равным или меньшим 6, и версия для Nk больше 6.
Для Nk ≤ 6 мы имеем:
KeyExpansion (byte Key [4*Nk] word W[Nb * (Nr + 1)])
{ for (i = 0; i < Nk; i++)
W[i] =(Key [4*i], Key [4*i+1],
Key [4*i+2], Key [4*i+3]); for (i = Nk; i < Nb * (Nr + 1); i++) { temp = W [i - 1]; if (i % Nk == 0) temp = SubByte (RotByte (temp)) ^ Rcon [i / Nk];
W [i] = W [i- Nk] ^ temp;
}
}
В данном случае SubByte (W) является функцией, которая возвращает четырехбайтное слово, в котором каждый байт является результатом применения таблицы подстановок к байту в соответствующей позиции во входном слове. Функция RotByte
(W) возвращает слово, в котором байты циклически переставлены
30 таким образом, что для входного слова (a, b, c, d) создается выходное слово (b, c, d, a).
Можно заметить, что первые Nk слов заполняются ключом
шифрования. Каждое следующее слово W[i] равно XOR предыдущего слова W[i-1] и позиций слова Nk до W[i - Nk]. Для слов в позициях, которые кратны Nk, сначала применяется преобразование XOR к
W[i-1] и константой раунда. Данное преобразование состоит из циклического сдвига байтов в слове RotByte, за которым следует применение табличной подстановки для всех четырех байтов в слове (SubByte).
Для Nk > 6 мы имеем:
KeyExpansion (byte Key [4*Nk] word W [Nb* (Nr+1)])
{ for (i=0; i < Nk; i++)
W[i]= (key [4*i], key [4*i+1], key [4*i+2], key [4*i+3]); for (i = Nk; i < Nb * (Nr + 1); i++) { temp = W [i-1]; if (i % Nk == 0) temp = SubByte (RotByte (temp)) ^
Rcon [i / Nk]; else if (i % Nk == 4) temp = SubByte (temp);
W[i] = W[i - Nk] ^ temp;
}
}
31
Отличие в схеме для Nk <= 6 состоит в том, что для i-4 кратных Nk, SubByte применяется для W[i-1] перед XOR.
Цикловая константа Rcon независит от Nk и определяется следующим образом:
Раунд
Значение Rcon
Раунд
Значение Rcon
1
(01 00 00 00)
16 6
(20 00 00 00)
16 2
(02 00 00 00)
16 7
(40 00 00 00)
16 3
(04 00 00 00)
16 8
(80 00 00 00)
16 4
(08 00 00 00)
16 9
(1B 00 00 00)
16 5
(10 00 00 00)
16 10
(36 00 00 00)
16
При дешифровании процедура остается неизменной. Ключи раунда используются в обратном порядке.
Содержание работы
1.
Изучить теоретический материал.
2.
Разработать на языка С/С++ приложение, выполняющее шифрование и дешифрование файла произвольного размера на основе алгоритма AES-128.
Подробно рассмотреть действие всех цикловых преобразований, как при шифровании, так и дешифровании.
Предусмотреть ввод данных с клавиатуры как в текстовом варианте, так и в шестнадцатеричном представлении.
Ключ шифрования должен иметь переменную длину. Длина ключа задается пользователем.
3.
Сохранить в отчете экранные формы, демонстрирующие процесс шифрования и дешифрования информации, проанализировать полученные результаты.
32
Контрольные вопросы
1.
Представление байта, как элемента конечного поля Галуа
GF(2 8
).
2.
Что такое порождающий полином. Приведите примеры порождающего полинома в поле GF(2 8
).
3.
Перечислите версии алгоритма AES и их основные отличия.
4.
Опишите процесс получение ключевого расширения.
5.
Докажите, что таблица подстановок и обратная таблица подстановок - инверсны: а) Покажите таблицу подстановок для ShiftRows. Таблица должна иметь 128 входов, но так как содержание байта не изменяется, таблица может иметь только 16 выходов; каждый выход представляет байт. b) Повторите часть a для обратной таблицы подстановок. с) Используя результаты частей a и b, докажите, что таблицы инверсны друг другу.
6.
Объясните, в чем заключается дифференциальные криптоанализ алгоритма AES.
7.
Объясните, в чем заключается линейный криптоанализ алгоритма AES.
33
Таблица подстановок
SboxE = {
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67,
0x2B, 0xFE, 0xD7, 0xAB,0x76,
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4,
0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5,
0xF1, 0x71, 0xD8, 0x31, 0x15,
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80,
0xE2, 0xEB, 0x27, 0xB2,0x75,
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6,
0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC,
0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 0xD0,
0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F,
0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38,
0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C,
0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64,
0x5D, 0x19, 0x73, 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A,
0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95,
0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C,
0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74,
0x1F, 0x4B, 0xBD, 0x8B,0x8A,
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57,
0xB9, 0x86, 0xC1, 0x1D, 0x9E,
34 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87,
0xE9, 0xCE, 0x55, 0x28, 0xDF,
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D,
0x0F, 0xB0, 0x54, 0xBB, 0x16
};
1 2 3 4
Обратная таблица подстановок
SboxD = {
0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3,
0x9E, 0x81, 0xF3, 0xD7, 0xFB,
0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43,
0x44, 0xC4, 0xDE, 0xE9, 0xCB,
0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95,
0x0B, 0x42, 0xFA, 0xC3, 0x4E,
0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2,
0x49, 0x6D, 0x8B, 0xD1,0x25,
0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C,
0xCC, 0x5D, 0x65, 0xB6,0x92,
0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46,
0x57, 0xA7, 0x8D, 0x9D, 0x84,
0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58,
0x05, 0xB8, 0xB3, 0x45,0x06,
0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD,
0x03, 0x01, 0x13, 0x8A, 0x6B,
0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF,
0xCE, 0xF0, 0xB4, 0xE6, 0x73,
0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37,
0xE8, 0x1C, 0x75, 0xDF, 0x6E,
35 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62,
0x0E, 0xAA, 0x18, 0xBE, 0x1B,
0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0,
0xFE, 0x78, 0xCD, 0x5A, 0xF4,
0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10,
0x59, 0x27, 0x80, 0xEC, 0x5F,
0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A,
0x9F, 0x93, 0xC9, 0x9C, 0xEF,
0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB,
0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14,
0x63, 0x55, 0x21, 0x0C, 0x7D
};
36
Лабораторная работа №4
ГЕНЕРАЦИЯ БОЛЬШИХ ПРОСТЫХ ЧИСЕЛ И
АЛГОРИТМЫ ТЕСТИРОВАНИЯ НА ПРОСТОТУ
Цель работы: освоить методы генерации больших простых чисел, изучить и реализовать вероятностные и детерминированные алгоритмы проверки чисел на простоту.
Краткие теоретические сведения
Генерация случайных чисел
Генерация случайных чисел является неотъемлемой частью многих криптографических алгоритмов. Введение случайной величины в процессе шифрования позволяет обеспечить надежное управление ключевой информацией.
Обычно при создании последовательности случайных чисел предполагается, что данная последовательность чисел должна быть случайной в некотором определенном статистическом смысле.
Следующие два критерия используются для доказательства того, что последовательность чисел является случайной:
1.
Однородное
распределение: распределение чисел в последовательности должно быть однородным; это означает, что частота появления каждого числа должна быть приблизительно одинаковой.
2.
Независимость: ни одно значение в последовательности не должно зависеть от других.
В приложениях, таких как взаимная аутентификация и генерация ключа сессии члены последовательности должны быть
37 непредсказуемы. При "правильной" случайной последовательности каждое число статистически не зависит от остальных чисел и, следовательно, непредсказуемо. Однако правильные случайные числа на практике используются достаточно редко, чаще последовательность чисел, которая должна быть случайной, создается некоторым алгоритмом. В данном случае необходимо, чтобы противник не мог предугадать следующие элементы последовательности, основываясь на знании предыдущих элементов и используемого алгоритма.
Генерация больших простых чисел
Простое число – это такое число, которое не имеет других делителей кроме себя самого и единицы.
Любое целое число может быть разложено на множители и единственным способом представлено в виде:
n
n
p
p
p
a
2 1
2 1
где p
i
- простые числа.
Наибольший общий делитель b)
|
k и
a
|
k
:
max(
)
,
(
k
b
a
НОД
где
k|a обозначает, что k делит а без остатка.
Существует приблизительно 10 151 простых чисел длиною от 1 бита до 512 включительно. Для чисел, близких к n, вероятность того, что выбранное число окажется простым, равна 1/ln(n). Поэтому полное число простых чисел, меньших n, равно n/ln(n). Считается, что вероятность выбора двумя людьми одного и того же большого простого числа очень мала.
Тестирование на простоту
Выделяют два типа критериев простоты: детерминированные и вероятностные. Детерминированные тесты позволяют доказать, что
38 введенное число - простое. Вероятностные тесты используются для тестирования отдельных чисел на простоту, однако их результат, с некоторой вероятностью, может быть неверен. Для снижения верности ошибки увеличивают количество повторений теста с модифицированными исходными данными. Для проверки чисел на простоту, как правило, используют либо комбинацию вероятностного и детерминированного теста либо же только детерминированный тест.
Вероятностные тесты на простоту
Для того, чтобы проверить, является ли число n простым, выбирают случайное число a, такое что 1.
Если число n не проходит тест по основанию a, то говорят "число
n составное".
Если число n проходит тест по основанию a , то однозначно сказать о его простоте нельзя. Число n тестируется m раз по разным
a и если во всех случаях тест дает ответ " число n, вероятно, простое", то можно утверждать, что n является простым с вероятностью близкой к 1.
Примерное количество итераций цикла определяется формулой m = log p
(1-p
0
) где p - вероятность того, что число пройдет тест,
p
0
- необходимая вероятность того, что число является простым.
Арифметика вычетов
Будем рассматривать целые числа в связи с остатками от деления на натуральное число m , называемое модулем. Если 2 целых числа a и
b имеют одинаковые остатки от деления на m, то они называются
сравнимыми по модулю m:
),
mod
(
m
b
a
где a = k⋅m+b для некоторого целого k.
39
Иногда b называют вычетом a по модулю m , a – конгруэнтным
b по модулю m. Операция c mod t означает остаток от деления c на t и называется приведением по модулю.
Числа, сравнимые по модулю, образуют класс вычетов по модулю
m. Все числа из одного и того же класса имеют один и тот же остаток r от деления на m. Любое число a из класса вычетов называется вычетом по модулю m.
Полная система вычетов – это совокупность вычетов, взятых по одному из каждого класса вычетов.
Приведённая система вычетов по модулю m – это совокупность всех вычетов из полной системы, взаимно простых с модулем m.
Теоремы Ферма и Эйлера
Функция Эйлера
φ(m)– это количество положительных целых чисел, которые меньше m и взаимно простые с m.
Например, φ(10)=4, т.к. числа 2, 4, 6 и 8 имеют общий с 10 делитель 2, число 5 имеет общий с 10 делитель 5, а числа 1, 3, 7 и 9 – не имеют общих делителей с 10 (кроме 1) и, следовательно, являются взаимно простыми с числом 10.
Если p – простое, то φ (p)=p-1
Если p ,q – простые, то
φ (n)= φ (p⋅q)= φ (p) ⋅ φ (q)=(p-1) ⋅ (q-1)
φ (n)= φ (p
α
⋅q
β
)=
φ (p
α
)
⋅ φ (qβ)=(p-1) ⋅p
α-1
⋅ (q-1) ⋅q
β-1
Теорема Эйлера: Для любых взаимно простых чисел a и m справедливо a
φ
(n)
≡ 1 (mod m).
Следствие из теоремы Эйлера: a
φ(m)+1
≡ a (mod m)
Теорема Ферма: Если p– простое число, a– положительное целое число, которое не делится на p, то a p-1
≡ 1 (mod p ).
40
Тест Ферма
Из малой теоремы Ферма следует, что, если для нечетного n существует такое целое a , что 1<=a<=n, НОД (a,n)=1и
)
(mod
1 1
p
a
n
, то число n вероятно простое.
Входные данные: нечетное число n≥5;
Выходные данные: "число n составное", " число n вероятно простое".
1.
Выбирается случайное целое число a, 2<=a<=n-2.
2.
Вычисляется
)
mod
(
1
n
a
r
n
3.
При r=1 тест дает ответ, что "число n вероятно простое".
Иначе " число n составное ".
Существенным недостатком данного теста является наличие чисел
Кармайкла. Это нечетные составные числа, для которых сравнение из формулы выполняются при любом a.
Тест Рабина-Миллера
Тест Рабина-Миллера чаще всего используется для проверки числа на простоту.
Входные данные: нечетное число n>=5;
Выходные данные: "число n составное", "число n вероятно простое ".
1.
Представить n-1 в виде n-1=2
s
, число r - нечетное.
2.
Выбирается случайное целое число a, 2<=a<=n-2.
3.
Вычислить
)
(mod n
a
y
r
4.
При
1
y
и
1
n
y
выполнить следующие действия:
4.1 Пусть j=1 4.2 Если j<=s-1 и y≠n-1