Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсова робота.doc
Скачиваний:
183
Добавлен:
23.02.2016
Размер:
1.68 Mб
Скачать

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

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

Алгоритм вибору раундового ключа

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

3.2 Опис алгоритмів захисту

Шифрування здійснюється за алгоритмом, наведеним на риcунку 3.9.

Рисунок 3.9 – Алгоритм шифрування

Алгоритм дешифрування представлений на Риc. 3.10.

Рисунок 3.10 – Алгоритм дешифрування

3.3 Програмна реалізація

3.3.1 Обгрунтування програмної платформи

Гіпертекстова інформаційна система складається з безлічі інформаційних вузлів, безлічі гіпертекстових зв'язків, визначених на цих вузлах і інструментах маніпулювання вузлами і зв'язками. Технологія World Wide Web - це технологія ведення гіпертекстових розподілених систем в Internet, і, отже, вона повинна відповідати загальним визначенням таких систем. Це означає, що всі перераховані вище компоненти гіпертекстової системи повинні бути і в Web. Web, як гіпертекстову систему, можна розглядати з двох точок зору. По-перше, як сукупність відображуваних сторінок, пов'язаних гіпертекстовими переходами. По-друге, як безліч елементарних інформаційних об'єктів, що становлять відображені сторінки. В останньому випадку безліч гіпертекстових переходів сторінки - це такий же інформаційний фрагмент, як і вбудована в текст картинка. При другому підході гіпертекстова мережа визначається на безлічі елементарних інформаційних об'єктів самими HTML-сторінками, які і відіграють роль гіпертекстових зв'язків. Цей підхід більш продуктивний з точки зору побудови відображуваних сторінок "на льоту" з готових компонентів. При генерації сторінок в Web виникає дилема, пов'язана з архітектурою "клієнт-сервер".

У 1995 році фахівці компанії Netscape створили механізм управління сторінками на клієнтській стороні, розробивши мову програмування JavaScript. Таким чином, JavaScript - це мова керування сценаріями перегляду гіпертекстових сторінок Web на стороні клієнта. Якщо бути більш точним, то JavaScript - це не лише мова програмування на стороні клієнта. Liveware, прародитель JavaScript, є засобом підстановки на стороні сервера Netscape. Однак найбільшу популярність JavaScript забезпечило програмування на стороні клієнта. Основна ідея JavaScript складається в можливості зміни значень атрибутів HTML-контейнерів і властивостей середовища відображення в процесі перегляду HTML-сторінки користувачем. При цьому перезавантаження сторінки не відбувається. На практиці це виражається в тому, що можна, наприклад, змінити колір фону сторінки або інтегровану в документ картинку, відкрити нове вікно або видати попередження. В рамках даної роботи буде використовуватись назва JavaScript.

3.3.2 Структура програмних модулів

Загальна структура модулів програми представлена на рисунку 3.11.

Рисунок 3.11 – Загальна структура модулів

Розширена структура модулів програми відображена на рисунку 3.12.

Рисунок 3.12 – Розширена структура модулів

3.3.3 Опис програмних кодів

aes.html– головна сторінка, на якій представлений зовнішній вигляд програми.

text– вхідний текст в програмі.

pass– введений ключ.

ciph– зашифрований текст.

aes.js– сторінка JavaScript в якій реалізована основна логіка роботи програми

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

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

aes.nr– число раундів, яке є функцією Nk і Nb. Nr = 10.

aes.encrypt– кодує довільний рядок байтів з довільним паролем. Повертає рядок з закодованими даними. Цей алгоритм використовує AES 128 оскільки MD5 повертає 128 - бітові хеші.

data– масив байт даних.

password – масив байт ключа.

aes.keyexpasion– перетворює ключ в "ключ-специфікацію". Цей "ключ-специфікація" пройдений на aes.cipher і aes.invcipher.

w– array [4, aes.nb * (aes.nr + 1)] of byte. Це масив ключів для раундів.

key – array [aes.nk * 4] of byte.

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

aes.cipher– aes.cipher перетворює 16-байтовий вхід у 16-байтовий вихід. Тобто це процедура шифрування вхідного тексту досліджуваним і розробленим алгоритмом.

input– array[16] of byte. Масив копіюється в масив state.

output– array[16] of byte. Масив копіюється з масиву state.

aes.input2state– процедура, яка копіює масив input в масив state.

state– проміжний результат шифрування, який може бути

представлений як прямокутний масив байтів має 4 рядки і Nb колонок.

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

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

aes.sbox– повертає елементи з таблиці S-Box. Аргумент повинен бути в діапазоні 0..255. нелінійна таблиця замін, що використовується в декількох трансформаціях заміни байт і в процедурі Key Expansion для взаємно однозначної заміни значення байта.

b– кожний байт b, з яких складається S-box.

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

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

toprow–вектор toprow допомагає aes.mixcolumns змішувати колонки AES використовує дві величини toprow: [02, 03, 01, 01] – для шифрування; [0e, 0b, 0d, 09] – для дешифрування.

aes.scalarmul– перемноження масиву стану з фіксованим многочленом

aes.state2output– процедура, яка копіює масив state в масив output.

aes.decrypt– розкодовує довільний рядок байтів з довільним паролем. Повертає рядок з розкодованими даними.

aes.invcipher– процедура обернена aes.cipher. Вона займається розшифруванням зашифрованого тексту досліджуваним і розробленим алгоритмом.

aes.invshiftrows– трансформація при розшифруванні, яка є зворотною по відношенню до aes.shiftrows.

aes.invsbox – процедура, яка є зворотною до aes.sbox.