rijndael (Курсовая - Построение и исследование криптосистемы на основе Rijndael), страница 7
Описание файла
Файл "rijndael" внутри архива находится в следующих папках: Курсовая - Построение и исследование криптосистемы на основе Rijndael, Rijndael. PDF-файл из архива "Курсовая - Построение и исследование криптосистемы на основе Rijndael", который расположен в категории "". Всё это находится в предмете "информационная безопасность" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информационная безопасность" в общих файлах.
Просмотр PDF-файла онлайн
Текст 7 страницы из PDF
Например, тест Aperiodic-Template был пройден 148 раз длякаждого отличного шаблона длины m = 9.Существует два варианта оценки прохождения s последовательностямиi-го теста.1. Анализ числа появлений значений P-value.Множество значений P-value [0; 1] разбивается на 10 категорий с вероятностями, равными 1/10 в каждой категории, после чего подсчитывается νi , i = 1, k, — число последовательностей, значения P-valueкоторых принадлежат i-ой категории (столбцы с 1 по 10).Вычисляется статистика:2χ =10P(νi − s/10)2i=1s/10,по которой вычисляется значение P-valueT (11 столбец)1P-valueT = 1 − P (x, a), где P (x, a) =Γ(a)Zxe−t ta−1 dt.0Если для теста верно неравенство P-valueT > 0.0001, то тест можносчитать пройденным.2. Анализ значений P-value.Подсчитывается доля последовательностей, прошедших данный тест (тоесть доля последовательностей, для которых P-value> α) (12 столбец).Значение этой доли должно лежать в интервале"#rrα(1 − α)α(1 − α)1−α−3.;1 − α + 3ssВ нашем случае интервал равен для всех тестов(кроме Random-Excursion(-V))[0.980561; 0.999439],а для теста Random-Excursion(-V) равен[0.978070; 1].Откуда видим, что по двум вариантам оценки генератор не прошел толькоодин тест Lempel-Ziv.
Все остальные тесты можно считать пройденными.335Вывод.В данной работе была построена криптосистема на основе Rijndael. Она быладовольно сильно ослаблена, что не могло не сказаться на ее криптографической стойкости.Были освоены и применены два универсальных метода криптоанализа:дифференциальный и линейный.
Они выявили слабость нашей криптосистемы. Полученный результат не позволяет использовать ее в качестве реальнойсистемы для шифрования данных. Но, собственно, она и была спроектирована для учебных целей, о чем говорит длина ключа в 32 бит.Так же был рассмотрен альтернативный режим работы криптосистемы,а именно как генератор псевдослучайных последовательностей. Для оценки качества его работы был изучен и применен один из известных пакетовоценочных тестов — Руководство НИСТ.
Данный набор тестов не выявилкаких-либо статистических закономерностей. Поэтому можно использоватьнашу криптосистему в качестве генератора псевдослучайных последовательностей.34Приложение 1const int Nk = 2;const int Nb = 2;const int Nr = 3;const unsigned char0x99, 0x9b, 0x98,0x9d, 0x9f, 0x91,0xb9, 0xbb, 0xb8,0xbd, 0xbf, 0xb1,0x89, 0x8b, 0x88,0x8d, 0x8f, 0x81,0xe9, 0xeb, 0xe8,0xed, 0xef, 0xe1,0xa9, 0xab, 0xa8,0xad, 0xaf, 0xa1,0xc9, 0xcb, 0xc8,0xcd, 0xcf, 0xc1,0x69, 0x6b, 0x68,0x6d, 0x6f, 0x61,0x49, 0x4b, 0x48,0x4d, 0x4f, 0x41,0xd9, 0xdb, 0xd8,0xdd, 0xdf, 0xd1,0xf9, 0xfb, 0xf8,0xfd, 0xff, 0xf1,0x19, 0x1b, 0x18,0x1d, 0x1f, 0x11,0x39, 0x3b, 0x38,0x3d, 0x3f, 0x31,0x59, 0x5b, 0x58,0x5d, 0x5f, 0x51,0x79, 0x7b, 0x78,0x7d, 0x7f, 0x71,0x29, 0x2b, 0x28,0x2d, 0x2f, 0x21,0x09, 0x0b, 0x08,0x0d, 0x0f, 0x01,};SB[256] = {0x9e, 0x9a,0x93, 0x95,0xbe, 0xba,0xb3, 0xb5,0x8e, 0x8a,0x83, 0x85,0xee, 0xea,0xe3, 0xe5,0xae, 0xaa,0xa3, 0xa5,0xce, 0xca,0xc3, 0xc5,0x6e, 0x6a,0x63, 0x65,0x4e, 0x4a,0x43, 0x45,0xde, 0xda,0xd3, 0xd5,0xfe, 0xfa,0xf3, 0xf5,0x1e, 0x1a,0x13, 0x15,0x3e, 0x3a,0x33, 0x35,0x5e, 0x5a,0x53, 0x55,0x7e, 0x7a,0x73, 0x75,0x2e, 0x2a,0x23, 0x25,0x0e, 0x0a,0x03, 0x05,0x9c,0x97,0xbc,0xb7,0x8c,0x87,0xec,0xe7,0xac,0xa7,0xcc,0xc7,0x6c,0x67,0x4c,0x47,0xdc,0xd7,0xfc,0xf7,0x1c,0x17,0x3c,0x37,0x5c,0x57,0x7c,0x77,0x2c,0x27,0x0c,0x07,0x96,0x92,0xb6,0xb2,0x86,0x82,0xe6,0xe2,0xa6,0xa2,0xc6,0xc2,0x66,0x62,0x46,0x42,0xd6,0xd2,0xf6,0xf2,0x16,0x12,0x36,0x32,0x56,0x52,0x76,0x72,0x26,0x22,0x06,0x02,0x94,0x90,0xb4,0xb0,0x84,0x80,0xe4,0xe0,0xa4,0xa0,0xc4,0xc0,0x64,0x60,0x44,0x40,0xd4,0xd0,0xf4,0xf0,0x14,0x10,0x34,0x30,0x54,0x50,0x74,0x70,0x24,0x20,0x04,0x00const unsigned char0xff, 0xfa, 0xfe,0xf2, 0xf0, 0xf4,0xaf, 0xaa, 0xae,0xa2, 0xa0, 0xa4,0xef, 0xea, 0xee,0xe2, 0xe0, 0xe4,0xbf, 0xba, 0xbe,0xb2, 0xb0, 0xb4,0x7f, 0x7a, 0x7e,0x72, 0x70, 0x74,0xcf, 0xca, 0xce,0xc2, 0xc0, 0xc4,ISB[256] = {0xfb, 0xf7, 0xfc,0xf1, 0xf5, 0xf8,0xab, 0xa7, 0xac,0xa1, 0xa5, 0xa8,0xeb, 0xe7, 0xec,0xe1, 0xe5, 0xe8,0xbb, 0xb7, 0xbc,0xb1, 0xb5, 0xb8,0x7b, 0x77, 0x7c,0x71, 0x75, 0x78,0xcb, 0xc7, 0xcc,0xc1, 0xc5, 0xc8,0xf6,0xf3,0xa6,0xa3,0xe6,0xe3,0xb6,0xb3,0x76,0x73,0xc6,0xc3,0xfd,0xf9,0xad,0xa9,0xed,0xe9,0xbd,0xb9,0x7d,0x79,0xcd,0xc9,350x6f,0x62,0xdf,0xd2,0x2f,0x22,0x0f,0x02,0x4f,0x42,0x1f,0x12,0x5f,0x52,0x8f,0x82,0x3f,0x32,0x9f,0x92,};0x6a,0x60,0xda,0xd0,0x2a,0x20,0x0a,0x00,0x4a,0x40,0x1a,0x10,0x5a,0x50,0x8a,0x80,0x3a,0x30,0x9a,0x90,0x6e,0x64,0xde,0xd4,0x2e,0x24,0x0e,0x04,0x4e,0x44,0x1e,0x14,0x5e,0x54,0x8e,0x84,0x3e,0x34,0x9e,0x94,0x6b,0x61,0xdb,0xd1,0x2b,0x21,0x0b,0x01,0x4b,0x41,0x1b,0x11,0x5b,0x51,0x8b,0x81,0x3b,0x31,0x9b,0x91,0x67,0x65,0xd7,0xd5,0x27,0x25,0x07,0x05,0x47,0x45,0x17,0x15,0x57,0x55,0x87,0x85,0x37,0x35,0x97,0x95,0x6c,0x68,0xdc,0xd8,0x2c,0x28,0x0c,0x08,0x4c,0x48,0x1c,0x18,0x5c,0x58,0x8c,0x88,0x3c,0x38,0x9c,0x98,0x66,0x63,0xd6,0xd3,0x26,0x23,0x06,0x03,0x46,0x43,0x16,0x13,0x56,0x53,0x86,0x83,0x36,0x33,0x96,0x93,0x6d,0x69,0xdd,0xd9,0x2d,0x29,0x0d,0x09,0x4d,0x49,0x1d,0x19,0x5d,0x59,0x8d,0x89,0x3d,0x39,0x9d,0x99const unsigned short Rcon[11] = {0x0000,0x0001, 0x0002, 0x0004, 0x0008,0x0010, 0x0020, 0x0040, 0x0080,0x001b, 0x0036};unsigned char xtime(unsigned char x) {int t = x << 1;if (t & 0x00000100) t ^= 0x0000011b;return ((unsigned char)t);}void ShiftRow(unsigned char s[2 * Nb], int r, int n) {while (n--) {unsigned char t = s[r];for (int i = 0; i < Nb; i++)s[2 * i + r] = s[2 * ((i + 1) % Nb) + r];s[2 * (Nb - 1) + r] = t;}}unsigned short RotWord(unsigned short w) {return ((w << 8) | (w >> 8));}unsigned short SubWord(unsigned short w) {unsigned char *t = (unsigned char *)&w;return ((SB[t[1]] << 8) | SB[t[0]]);}36void KeyExpansion(unsigned char Key[2 * Nk],unsigned short W[Nb * (Nr + 1)]) {for (int i = 0; i < Nk; i++)W[i] = ((Key[2*i+1] << 8) | Key[2*i]);for (int i = Nk; i < Nb * (Nr + 1); i++) {unsigned short temp = W[i - 1];if ((i % Nk) == 0)temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk];W[i] = W[i - Nk] ^ temp;}}void SubBytes(unsigned char s[2 * Nb]) {for (int i = 0; i < 2 * Nb; i++)s[i] = SB[s[i]];}void ShiftRows(unsigned char s[2 * Nb]) {ShiftRow(s, 1, 1);}void MixColumns(unsigned char s[2 * Nb]) {for (int i = 0; i < Nb; i++) {unsigned char *cs = &s[2 * i];unsigned char t[2];t[0] = xtime(cs[0]) ^ xtime(cs[1]) ^ cs[1];t[1] = xtime(cs[0]) ^ cs[0] ^ xtime(cs[1]);for (int j = 0; j < 2; j++) cs[j] = t[j];}}void InvSubBytes(unsigned char s[2 * Nb]) {for (int i = 0; i < 2 * Nb; i++)s[i] = ISB[s[i]];}void AddRoundKey(unsigned char s[2 * Nb],unsigned short W[Nb]) {for (int i = 0; i < Nb; i++)for (int j = 0; j < 2; j++)s[(i << 1) + j] ^= (W[i] >> (j * 8)) & 0x00FF;}void Cipher(unsigned char in[2 * Nb],unsigned char out[2 * Nb],unsigned char Key[2 * Nk]) {unsigned short W[Nb * (1 + Nr)];KeyExpansion(Key, W);for (int i = 0; i < 2 * Nb; i++)out[i] = in[i];unsigned char *state = out;AddRoundKey(state, &W[0]);for (int round = 1; round < Nr; round++) {SubBytes(state);37ShiftRows(state);MixColumns(state);AddRoundKey(state, &W[round * Nb]);}SubBytes(state);ShiftRows(state);AddRoundKey(state, &W[Nr * Nb]);}void InvCipher(unsigned char in[2 * Nb],unsigned char out[2 * Nb],unsigned char Key[2 * Nk]) {unsigned short W[Nb * (1 + Nr)];KeyExpansion(Key, W);for (int i = 0; i < 2 * Nb; i++)out[i] = in[i];unsigned char *state = out;AddRoundKey(state, &W[Nr * Nb]);for (int round = Nr - 1; round > 0; round--) {ShiftRows(state);InvSubBytes(state);AddRoundKey(state, &W[round * Nb]);MixColumns(state);}ShiftRows(state);InvSubBytes(state);AddRoundKey(state, &W[0]);}38Приложение 2void DifferentialCryptanalysis() {unsigned char Key[4] = {0x2b, 0x7e, 0x15, 0x16},x1[4], x2[4], y1[4], y2[4], yl1[4], yl2[4];srand((unsigned)time(NULL));int cn[256];for (int k = 0; k < 256; k++) {cn[k] = 0;KeyT[0] = 0x00;KeyT[1] = (k / 16) << 4;KeyT[2] = (k % 16) << 4;KeyT[3] = 0x00;for (int n = 0; n < (1 << 14); n++) {x1[0] = rand() % 256; x2[0] = x1[0] ^ 0x40;x1[1] = rand() % 256; x2[1] = x1[1] ^ 0x40;x1[2] = rand() % 256; x2[2] = x1[2] ^ 0x10;x1[3] = rand() % 256; x2[3] = x1[3] ^ 0x10;Cipher(x1, y1, Key);Cipher(x2, y2, Key);InvCipherLast(y1, yl1, KeyT);InvCipherLast(y2, yl2, KeyT);if ((((int *)yl1)[0] ^ ((int *)yl2)[0]) == 0x20200000)cn[k]++;}}for (int i = 0; i < 256; i++)printf("%02X\t%.5f\n", i, double(abs(cn[i])) / (1 << 14));}39Приложение 3unsigned int Parity(unsigned int x, unsigned int mask) {unsigned int res = 0, tr;if ((tr = (x & mask)) != 0) {res++;while ((tr &= (tr - 1)) != 0) res++;}return (res % 2);}void LinearCryptanalysis() {unsigned char Key[4] = {0x2b, 0x7e, 0x15, 0x16},x[4], y[4], yl[4], yf[4];unsigned int xm = 0x09090909, ym = 0x09090909;srand((unsigned)time(NULL));int cn[256*256];for (int k = 0; k < 256*256; k++) {cn[k] = -(1 << 12);KeyT[0] = (k >> 12) & 0x000F;KeyT[1] = (k >> 8) & 0x000F;KeyT[2] = (k >> 4) & 0x000F;KeyT[3] = (k >> 0) & 0x000F;for (int n = 0; n < (1 << 13); n++) {x[0] = rand() % 256;x[1] = rand() % 256;x[2] = rand() % 256;x[3] = rand() % 256;Cipher(x, y, Key);InvCipherLast(y, yl, KeyT);if ((Parity(((unsigned int *)x)[0], xm) ^Parity(((unsigned int *)yl)[0], ym)) == 0) cn[k]++;}printf("%04X\t%.5f\n", k, double(abs(cn[k])) / (1 << 13));}}40Список литературы[1] Зензин О.С., Иванов М.А.
AES — стандарт криптографической защиты.Конечные поля. Книга 1 серии “СКБ — специалисту по компьютернойбезопасности”. — М.: КУДИЦ-ОБРАЗ, 2002. — 176 с.[2] Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основыкриптографии: Учебное пособие. — М.: Гелиос АРВ, 2001. — 480 с., ил.[3] Бабаш А.В., Шанкин Г.П. Криптография. — М.: СОЛОН-Р, 2002. —512 с.
— (Серия книг “Аспекты защиты”).[4] Харин Ю.С., Берник В.И., Матвеев Г.В., Агиевич С.В. Математическиеи компьютерные основы криптологии: Учебное пособие. — Мн.: Новоезнание, 2003. — 382 с.[5] Чмора А.Л. Современная прикладная криптография. — М.: Гелиос АРВ,2001. — 244 с.[6] Иванов М.А., Чугунков И.В. Теория, применение и оценка качествагенераторов псевдослучайных последовательностей. — М.: КУДИЦОБРАЗ, 2003. — 240 с.[7] Шнайер Б. Прикладная криптография.