Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Розробка власного програмного засобу, рішення

РефератДопомога в написанніДізнатися вартістьмоєї роботи

AES є стандартом, заснованим на алгоритмі Rijndael. Для AES довжина input (блоку вхідних даних) і State (стану) постійна і дорівнює 128 біт, а довжина шифроключа K складає 128, 192, або 256 біт. При цьому, вихідний алгоритм Rijndael допускає довжину ключа і розмір блоку від 128 до 256 біт з кроком в 32 біта. Для позначення вибраних довжин input, State і Cipher Key в байтах використовується… Читати ще >

Розробка власного програмного засобу, рішення (реферат, курсова, диплом, контрольна)

Опис власного методу розв’язання задач

Визначення і допоміжні процедури.

Block послідовність біт, з яких складається input, output, State і Round Key. Також під Block можна розуміти послідовність байт.

CipherKey секретний, криптографічний ключ, який використовується Key Expansion процедурою, щоб провести набір ключів для раундів (Round Keys); може бути представлений як прямокутний масив байтів, що має чотири рядки і Nk колонок.

Ciphertext — вихідні дані алгоритму шифрування.

Key Expansion процедура використовується для генерації Round Keys з Cipher Key.

Round Key виходять з Cipher Key використовуючи процедуру Key Expansion. Вони застосовуються до State при шифруванні і розшифруванні.

State проміжний результат шифрування, який може бути представлений як прямокутний масив байтів має 4 рядки і Nb колонок.

S-box нелінійна таблиця замін, що використовується в декількох трансформаціях заміни байт і в процедурі Key Expansion для взаємно однозначної заміни значення байта. Попередньо розрахований S-box можна побачити в таблиці 3.1.

Nb число стовпців (32-ух бітних слів), що становлять State. Nb = 4.

Nk число 32-ух бітних слів, складових шифроключа. Nk = 4,6, або 8.

Nr число раундів, яке є функцією Nk і Nb. Для AES, Nr = 10, 12, 14.

Rcon [] масив, який складається з бітів 32-х розрядного слова і є постійним для даного раунду. Попередньо розрахований Rcon [] можна побачити в таблиці 3.2.

Таблиця 3.1 — Нелінійна таблиця замін

S-box.

Sbox = array (0×63,0x7c, 0×77,0x7b, 0xf2,0x6b, 0x6f, 0xc5,0×30,0×01,0×67,0x2b, 0xfe, 0xd7,0xab, 0×76, 0xca, 0×82,0xc9,0x7d, 0xfa, 0×59,0×47,0xf0,0xad, 0xd4,0xa2,0xaf, 0x9c, 0xa4,0×72,0xc0, 0xb7,0xfd, 0×93,0×26,0×36,0x3f, 0xf7,0xcc, 0×34,0xa5,0xe5,0xf1,0×71,0xd8,0×31,0×15, 0×04,0xc7,0×23,0xc3,0×18,0×96,0×05,0x9a, 0×07,0×12,0×80,0xe2,0xeb, 0×27,0xb2,0×75, 0×09,0×83,0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,0×52,0x3b, 0xd6,0xb3,0×29,0xe3,0x2f, 0×84, 0×53,0xd1,0×00,0xed, 0×20,0xfc, 0xb1,0x5b, 0x6a, 0xcb, 0xbe, 0×39,0x4a, 0x4c, 0×58,0xcf, 0xd0,0xef, 0xaa, 0xfb, 0×43,0x4d, 0×33,0×85,0×45,0xf9,0×02,0x7f, 0×50,0x3c, 0x9f, 0xa8, 0×51,0xa3,0×40,0x8f, 0×92,0x9d, 0×38,0xf5,0xbc, 0xb6,0xda, 0×21,0×10,0xff, 0xf3,0xd2, 0xcd, 0x0c, 0×13,0xec, 0x5f, 0×97,0×44,0×17,0xc4,0xa7,0x7e, 0x3d, 0×64,0x5d, 0×19,0×73, 0×60,0×81,0x4f, 0xdc, 0×22,0x2a, 0×90,0×88,0×46,0xee, 0xb8,0×14,0xde, 0x5e, 0x0b, 0xdb, 0xe0,0×32,0x3a, 0x0a, 0×49,0×06,0×24,0x5c, 0xc2,0xd3,0xac, 0×62,0×91,0×95,0xe4,0×79, 0xe7,0xc8,0×37,0x6d, 0x8d, 0xd5,0x4e, 0xa9,0x6c, 0×56,0xf4,0xea, 0×65,0x7a, 0xae, 0×08, 0xba, 0×78,0×25,0x2e, 0x1c, 0xa6,0xb4,0xc6,0xe8,0xdd, 0×74,0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0×70,0x3e, 0xb5,0×66,0×48,0×03,0xf6,0x0e, 0×61,0×35,0×57,0xb9,0×86,0xc1,0x1d, 0x9e, 0xe1,0xf8,0×98,0×11,0×69,0xd9,0x8e, 0×94,0x9b, 0x1e, 0×87,0xe9,0xce, 0×55,0×28,0xdf, 0x8c, 0xa1,0×89,0x0d, 0xbf, 0xe6,0×42,0×68,0×41,0×99,0x2d, 0x0f, 0xb0,0×54,0xbb, 0×16,);

Таблиця 3.2 — Масив Rcon [].

Rcon [].

Rcon = array (.

array (0×00, 0×00, 0×00, 0×00),.

array (0×01, 0×00, 0×00, 0×00),.

array (0×02, 0×00, 0×00, 0×00),.

array (0×04, 0×00, 0×00, 0×00),.

array (0×08, 0×00, 0×00, 0×00),.

array (0×10, 0×00, 0×00, 0×00),.

array (0×20, 0×00, 0×00, 0×00),.

array (0×40, 0×00, 0×00, 0×00),.

array (0×80, 0×00, 0×00, 0×00),.

array (0x1b, 0×00, 0×00, 0×00),.

array (0×36, 0×00, 0×00, 0×00),.

);

Допоміжні процедури.

AddRoundKey () трансформація при шифруванні і зворотному шифруванні, при якій RoundKey XOR’иться з State. Довжина RoundKey дорівнює розміру State (ті, якщо Nb = 4, то довжина RoundKey дорівнює 128 біт або 16 байт).

InvMixColumns () трансформація при розшифруванні, яка є зворотною по відношенню до MixColumns ().

InvShiftRows () трансформація при розшифруванні, яка є зворотною по відношенню до ShiftRows ().

InvSubBytes () трансформація при розшифруванні, яка є зворотною по відношенню до SubBytes ().

MixColumns () трансформація при шифруванні, яка бере всі стовпці State і змішує їх дані (незалежно один від одного), щоб отримати нові стовпці.

RotWord () функція, що використовується в процедурі Key Expansion, яка бере 4-х байтне слово і проводить над ним циклічну перестановку.

ShiftRows () трансформації при шифруванні, які обробляють State, циклічно зміщуючи останні три рядки State на різні величини.

SubBytes () трансформації при шифруванні, які обробляють State, використовуючи нелінійну таблицю заміщення байтів (S-box), застосовуючи її незалежно до кожного байту State.

SubWord () функція, яка використовується в процедурі Key Expansion, яка бере на вході чотирибайтне слово і застосовуючи S-box до кожного з чотирьох байтів видає вихідне слово.

Шифрування.

AES є стандартом, заснованим на алгоритмі Rijndael. Для AES довжина input (блоку вхідних даних) і State (стану) постійна і дорівнює 128 біт, а довжина шифроключа K складає 128, 192, або 256 біт. При цьому, вихідний алгоритм Rijndael допускає довжину ключа і розмір блоку від 128 до 256 біт з кроком в 32 біта. Для позначення вибраних довжин input, State і Cipher Key в байтах використовується нотація Nb = 4 для input і State, Nk = 4, 6, 8 для Cipher Key відповідно для різних довжин ключів.

На початку шифрування input копіюється в масив State за правилом s [r, c] = in [r + 4c], для і. Після цього до State застосовується процедура AddRoundKey () і потім State проходить через процедуру трансформації (раунд) 10, 12, або 14 разів (в залежності від довжини ключа), при цьому треба врахувати, що останній раунд дещо відрізняється від попередніх. У підсумку, після завершення останнього раунду трансформації, State копіюється в output за правилом out [r + 4c] = s [r, c], для і .

Окремі трансформації SubBytes (), ShiftRows (), MixColumns (), і AddRoundKey () — обробляють State. Масив w [] - містить key schedule.

Псевдокод для Cipher.

Рисунок 3.1 — Псевдокод для Cipher.

SubBytes ().

У процедурі SubBytes, кожен байт в State замінюється відповідним елементом у фіксованій 8-бітній таблиці пошуку S; bij = S (aij).

Схема SubBytes ().

Рисунок 3.2 — Схема SubBytes ().

Процедура SubBytes () обробляє кожен байт стану, незалежно виробляючи нелінійну заміну байтів використовуючи таблицю замін (S-box). Така операція забезпечує нелінійність алгоритму шифрування. Побудова S-box складається з двох кроків. По-перше, проводиться взяття зворотного числа в полі Галуа. По-друге, до кожного байту b, з яких складається S-box, застосовується наступна операція:

де, і де bi є i-ий біт b, а ci — i-ий біт константи c = 6316 = 9910 = 11 000 112. Таким чином, забезпечується захист від атак, заснованих на простих алгебраїчних властивостях.

бітна таблиця пошуку S.

Рисунок 3.3 — 8-бітна таблиця пошуку S.

ShiftRows ().

У процедурі ShiftRows, байти в кожному рядку State циклічно зсуваються вліво. Розмір зміщення байтів кожного рядка залежить від його номера.

Рисунок 3.4 — Схема ShiftRows ()

Розробка власного програмного засобу, рішення.

ShiftRows працює з рядками State. При цій трансформації рядки стану циклічно зсуваються на r байт по горизонталі, залежно від номера рядка. Для нульового рядка r = 0, для першого рядка r = 1 і т.д. Таким чином кожна колонка вихідного стану після застосування процедури ShiftRows складається з байтів з кожної колонки початкового стану. Для алгоритму Rijndael патерн зсуву рядків для 128 — і 192-бітних рядків однаковий. Однак для блоку розміром 256 біт відрізняється від попередніх тим, що 2, 3, і 4-і рядки зміщуються на 1, 3, і 4 байта, відповідно.

MixColumns ().

У процедурі MixColumns, кожна колонка стану перемножується з фіксованим многочленом c (x).

Рисунок 3.5 — Схема MixColumns ()

Розробка власного програмного засобу, рішення.

У процедурі MixColumns, чотири байти кожної колонки State змішуються, використовуючи для цього оборотну лінійну трансформацію. MixColumns обробляє стани по колонках, трактуючи кожну з них як поліном четвертого степеня. Над цими поліномами проводиться множення в GF (28) по модулю x4 + 1 на фіксований многочлен c (x) = 3×3 + x2 + x + 2. Разом з ShiftRows, MixColumns вносить дифузію в шифр.

AddRoundKey ().

В процедурі AddRoundKey, кожен байт стану з'єднується з RoundKey використовуючи XOR operation.

Рисунок 3.6 — Схема AddRoundKey ()

Розробка власного програмного засобу, рішення.

В процедурі AddRoundKey, RoundKey кожного раунду об'єднується з State. Для кожного раунду RoundKey виходить з CipherKey використовуючи процедуру KeyExpansion, кожен RoundKey такого ж розміру, що і State. Процедура виробляє побітовий XOR кожного байта State з кожним байтом RoundKey.

Алгоритм обробки ключа Алгоритм обробки ключа складається з двох процедур:

  • — Алгоритм розширення ключа.
  • — Алгоритм вибору раундового ключа (ключа ітерації).

Алгоритм розширення ключа.

AES алгоритм, використовуючи процедуру KeyExpansion () і подаючи в неї Cipher Key, K, отримує ключі для всіх раундів. Всього вона отримує Nb * (Nr + 1) слів: спочатку для алгоритму потрібно набір з Nb слів, і кожному з Nr раундів потрібно Nb ключових набору даних. Отриманий масив ключів для раундів позначається як, .

Алгоритм KeyExpansion () показаний в псевдокоді на Рис. 3.7 Функція SubWord () бере чотирьохбайтове вхідне слово і застосовує S-box до кожного з чотирьох байтів те, що вийшло подається на вихід. На вхід RotWord () подається слово [a0, a1, a2, a3] яке вона циклічно переставляє і повертає [a1, a2, a3, a0]. Масив слів, постійний для даного раунду,, містить значення [xi — 1,00,00,00], де x = {02}, а xi — 1 є степенем x в (i починається з 1). З малюнка можна побачити, що перші Nk слів розширеного ключа заповнені CipherKey. У кожне наступне слово, w [i], кладеться значення отримане при операції XOR w [i — 1] і, ті XOR’а попереднього і на Nk позицій раніше слів. Для слів, позиція яких кратна Nk, перед XOR’ом до w [i-1] застосовується трасформація, за якою слідує XOR з константою раунду Rcon [i]. Зазначена вище трансформація складається з циклічного зсуву байтів в слові (RotWord ()), за якою йде процедура SubWord () — те ж саме, що і SubBytes (), тільки вхідні і вихідні дані будуть розміром в слово. Важливо зауважити, що процедура KeyExpansion () для 256 бітного CipherKey трохи відрізняється від тих, які застосовуються для 128 і 192 бітових шифроключей. Якщо Nk = 8 і i — 4 кратне Nk, то SubWord () застосовується до w [i — 1] до XOR’а.

Псевдокод для KeyExpansion.

Рисунок 3.7 — Псевдокод для KeyExpansion.

Розшифрування.

Псевдокод для InverseCipher.

Рисунок 3.8 — Псевдокод для InverseCipher.

Алгоритм вибору раундового ключа На кожній ітерації і раундовий ключ для операції AddRoundKey вибирається із масива, починаючи із елемента до .

Показати весь текст
Заповнити форму поточною роботою