МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра безпеки інформаційних технологій
/
КУРСОВА РОБОТА
з дисципліни:
«Комп’ютерні методи високорівневого проектування пристроїв захисту»
на тему:
«РОЗРОБЛЕННЯ ТА СИНТЕЗ VHDL – МОДЕЛЕЙ ЕЛЕМЕНТІВ ПРИСТРОЇВ ЗАХИСТУ ІНФОРМАЦІЇ»
ЗМІСТ
ЗМІСТ 2
Завдання 3
Розділ 1. Аналіз основних принципів побудови та реалізації пристрою в ПЛІС 3
Розділ 2. Опис алгоритму шифрування AES-256 та режимів обробки даних: CTR, СFB, ECB 7
Розділ 3. Розробка архітектури пристрою та його структурної схеми на рівні міжрегістрових передач 13
Розділ 4. Опис розробки VHDL-моделей компонент пристрою та VHDL-моделі пристрою в цілому 14
Розділ 5. Опис розробки системи шифрування для виконання тестування пристрою 23
Висновок 26
Перелік наукових першоджерел 27
Завдання
Відповідно до НЗК (номера залікової книжки) визначити варіант завдання наступним чином: (ab mod 25 + 1),ab - дві останні цифри НЗК. Варіанти завдань подано в таблиці нижче.
Виконати архітектурне проектування та розробити VHDL-модель пристрою реалізації заданих завданням режимів обробки даних. Як модуль шифрування використати імітаційну модель пристрою, що виконує заданий завданням алгоритм симетричного блокового шифрування.
Розробити систему тестування та з її допомогою виконати функціональну симуляцію розробленої VHDL-моделі пристрою.
Для магістрів – виконати синтез розробленої VHDL-моделі пристрою в ПЛІС за власним вибором, а також виконати часову симуляцію розробленої VHDL-моделі пристрою з допомогою розробленої системи тестування.
Номер залікової книжки: 459388
ab mod 25 + 1 = 88 mod 25 + 1= 13 + 1 = 14
Варіант
Алгоритм СБШ
Режими обробки даних
14
AES-256
CTR, СFB, ECB
Розділ 1. Аналіз основних принципів побудови та реалізації пристрою в ПЛІС
1.1. Етапи проектування програмних моделей процесорів на рівні міжрегістрових передач та їх реалізація у ПЛІС
Етапи проектування програмних моделей процесорів на рівні міжрегістрових передач та їх реалізації у програмованих логічних інтегральних схемах (ПЛІС) зображено на рис. 1.
Рис. 1. Етапи проектування програмних моделей процесорів на рівні міжрегістрових передач та їх реалізації у програмованих логічних інтегральних схемах
Структура процесора визначається під час його функціональної декомпозиції: кожен з модулів процесора повинен бути функціонально незалежним. В загальному критеріями якості розбиття схеми на модулі є функціональна незалежність модулів та кількість міжмодульних з’єднань (чим менше - тим краще).
Розробник, володіючи методикою проектування програмних моделей процесорів мовами опису апаратних засобів, створює якісну програмну модель. Під час розробки програмної моделі та після її закінчення проводиться функціональна симуляція, яка дає змогу виявити помилки, відлагодити роботу процесора та підтвердити його відповідність технічному завданню.
Для ефективного тестування окремих компонент та всієї програмної моделі процесора розробляють системи тестування. Система тестування - це спеціальне середовище (модель), у яке поміщається пристрій для тестування і яке імітує роботу реальної системи, у якій буде працювати надвелика інтегральна схема. Архітектура системи тестування розробляється відповідно до вимог конкретного пристрою для тестування. Помилки, що виявляються на етапі функціональної симуляції, усуваються шляхом модифікації програмної моделі процесора на етапі його опису мовою опису апаратних засобів. Такі помилки усуваються найлегше, проте інколи це вимагає змін в архітектурі процесора.
Після функціональної симуляції проводиться логічний синтез програмної моделі процесора у ПЛІС. На цьому етапі код з мови опису апаратних засобів транслюється у код, який використовується як вхідний при програмуванні кристалу. На етапі логічного синтезу процесора у ПЛІС отримуються його характеристики - частота роботи та розмір на кристалі (затрати обладнання). Таким чином розробник може визначити, чи задовольняє розробка вимоги технічного завдання, чи ні. Дуже важливим є те, що засоби логічного синтезу ПЛІС генерують результуючий файл мовою опису апаратних засобів, який відображає фізичну модель синтезованого процесора. Ця модель є описом процесора на рівні логічних комірок (примітивів) ПЛІС, яку використовують, і відображає всі часові затримки при проходженні інформації у кристалі. Розробник, використовуючи розроблену систему тестування, може перевірити, чи є працездатною фізична модель процесора. Цей процес називається часовою симуляцією синтезованого процесора. Помилки, що виникають на етапі часової симуляції, виявляються та усуваються значно важче ніж ті, що виникають на етапі функціональної симуляції. Такі помилки свідчать або про неякісно розроблену програмну модель процесора, або про невдале використання особливостей примітивів ПЛІС (наприклад, наявність так званих хибних шляхів, завищення частоти синхроімпульсів тощо). Якщо синтезована модель успішно витримала часову симуляцію, то наступним кроком є програмування ПЛІС. Результат перевірки пристрою, реалізованого у ПЛІС, дає змогу зробити висновок про відповідність розробленого процесора технічному завданню. Якщо процесор відповідає технічному завданню, то його передають на етап системного тестування. Якщо системний тест не виявив помилок, то процесор готовий до використання. Помилки, які можуть виникнути на цьому етапі, виявити та усунути найважче. Вони можуть бути спричинені відсутністю сигналу скиду у певних елементах ПМП чи порушенням синхронізації. Інколи це трапляється через порушення температурного режиму роботи кристалу, завищення частоти синхроімпульсів чи від відхилення взірця кристалу від його стандартних технічних параметрів.
Типовий склад конструкторської документації проекту програмної моделі процесора є наступним:
функціональна модель процесора, написана мовою опису апаратних засобів, VHDL або Verilog (VHDL-модель, Verilog-модель);
фізичні моделі процесора, орієнтовані на його реалізацію в конкретних кристалах ПЛІС;
модель системи тестування для перевірки функцій та параметрів процесора;
текстова документація з детальним описом інтерфейсу та принципів функціонування процесора, яка складається з його функціонального опису, інструкції користувача та рекламного листа.
1.2. Засоби проектування програмних моделей процесорів
Програмні моделі процесорів розробляють з використанням мов опису апаратних засобів. Існує декілька мов опису апаратних засобів, серед яких найпоширенішими є VHDL та Verilog. Застосовуються й інші підходи, наприклад, опис процесора з використанням схемотехнічних редакторів, однак ці підходи мають низку обмежень, які стримують їх широке використання при проектуванні надвеликих інтегральних схем об’ємом кілька сотень тисяч вентилів і більше.
Для розробки та відлагодження ПМП використовуються спеціальні інтегровані середовища із вбудованими засобами компіляції та симуляції. Серед них - ModelSIM від Mentor Graphics, Active-HDL від Aldec, ін.
На етапі логічного синтезу процесора використовують програмні засоби, які розробляються фірмами-виробниками ПЛІС як спеціальні інтегровані середовища. Лідерами на світовому ринку виробників ПЛІС є фірми Altera, Xilinx, Actel, Lattice, Atmel, Lucent Technologies та ін. Кожна з цих компаній надає користувачу засоби логічного синтезу своїх ПЛІС. Деякі компанії (Mentor Graphics, Synplicity) надають засоби логічного синтезу ПЛІС різних виробників. При цьому ці засоби транслюють програми із мов опису апаратних засобів у певний проміжний формат (наприклад, Electronic Design Interchange Format - EDIF), не генеруючи коду для прошиття кристалу. Як правило, результуючий код цих засобів є вхідним для засобів логічного синтезу ПЛІС фірм-виробників цих схем.
Для програмування ПЛІС використовують спеціальні програмно-апаратні засоби, виготовлені, знову ж таки, фірмами-виробниками ПЛІС, і складаються вони із друкованої плати, на яку поміщено кристал ПЛІС, та засобів її програмування. Необхідне програмне забезпечення інколи постачають окремо чи у комплекті з апаратними засобами, а інколи його вбудовують у засоби логічного синтезу ПЛІС.
Розділ 2. Опис алгоритму шифрування AES-256 та режимів обробки даних: CTR, СFB, ECB
Переможець конкурсу AES, оголошений наприкінці 2000 року, алгоритм Rijndael, був розроблений двома бельгійськими криптографами: Дімен (Daemen) і Рійменом (Rijmen). Для забезпечення криптостійкості алгоритм Rijndael включає в себе повторювані раунди, кожен з яких складається з замін, перестановок і додавання ключа. Крім того, Rijndael використовує сильну математичну структуру: більшість його операцій засновані на арифметиці поля . Елементи поля зберігаються в пам'яті комп’ютера у вигляді 8-бітових векторів (або байтів), що представляють виконавчі многочлени. Шифрування і розшифрування в алгоритмі Rijndael - процедури різні.
Rijndael - блоковий алгоритм, що настроюється який може працювати з блоками з 128, 192 або 256 бітів. Для кожної комбінації блоку і розміру ключа визначено свою кількість раундів. Розглянемо варіант алгоритму, яким шифрується інформація в розроблюваному USB-ключі, при якому блоки, як і ключ, складаються з 256 бітів. В цьому випадку в алгоритмі виконується 14 раундів.
Rijndael оперує з внутрішньої байтовою матрицею розміру 4 х 4, званої матрицею станів:
(1)
яку зазвичай записують як вектор 32-бітових слів. Кожне слово в векторі представляє стовпець матриці. Підключі також зберігаються у вигляді матриці 4 х 4:
(2)
2.1. Операції алгоритму Rijndael
Раундова функція в Rijndael діє з використанням чотирьох операцій.
1. SubBytes. В алгоритмі є два типи S-блоків. Один тип застосовується при шифруванні, а інший - при розшифруванні. Кожен з них обернений до іншого. S-блоки почергово обробляють рядки матриці станів сприймаючи їх як елементи поля . Їх робота складається з двох кроків.
1) Обчислюється мультиплікативний зворотній до елемента і записується як новий байт . За угодою, елемент , що не має зворотного, залишається незмінним.
2) Бітовий вектор х з допомогою лінійного перетворення над полем переводиться в вектор у:
(3)
що служить виходом S-блоку. Дії S-блоку на стадії розшифрування складаються у зворотному лінійному перетворенні і обчисленні мультиплікативного зворотного. Ці перетворення байтів можна здійснити, використовуючи табличний пошук або мікросхему, що реалізує обчислення зворотних елементів в і лінійні перетворення.
2. ShiftRows. Операція ShiftRows в Rijndael здійснює раундовий зсув матриці станів. Кожна з її рядків зсувається на своє число позицій. У розглянутій версії шифру це перетворення має вигляд:
(4)
Зворотній операція - теж простий циклічний зсув, але в протилежному напрямку. Операція ShiftRows гарантує, що стовпці матриці станів будуть «взаємодіяти» один з одним протягом кількох раундів.
3. MixColumns. Операція MixColumns задумана для того, щоб рядки матриці станів «взаємодіяли» один з одним протягом усіх раундів. У комбінації з попередньою операцією вона наділяє кожен байт вихідних даних залежністю від кожного байта на вході.
Ми представляємо кожен стовпець матриці станів як многочлен ступеня 3 з коефіцієнтами з :
(5)
Новий стовпець виходить множенням многочлена на фіксований многочлен:
(6)
по модулю многочлена . Так як множення на многочлен - лінійна операція, її можна представити у вигляді дії матриці:
(7)
Матриця коефіцієнтів невироджена над , тому операція MixColumns є зворотною, а зворотна до неї дія реалізується матрицею, оберненою до виписаної.
4. AddRoundKey. Додавання з підключем здійснюється просто. Потрібно додати по модулю 2 (застосувати операцію виключного АБО) всі байти матриці станів з відповідними елементами матриці підключа. Зворотна операція збігається з вихідною.
Блок схема алгоритму Rijndael зображено на рис. 2.
Рис. 2. Блок схема алгоритму AES: А – шифрування, Б – розшифрування
2.2. Режими шифрування
Режим шифрування - метод застосування блочного шифру, що дозволяє перетворити послідовність блоків відкритих даних в послідовність блоків зашифрованих даних. При цьому для шифрування одного блоку можуть використовуватися дані іншого блоку. Зазвичай режими шифрування використовуються для модифікації процесу шифрування так, щоб результат шифрування кожного блоку був унікальним незалежно від даних, що шифруються, і не дозволяв зробити якісь висновки про їх структуру. Це обумовлено, перш за все, тим, що блокові шифри шифрують дані блоками фіксованого розміру, і тому існує потенційна можливість витоку інформації про повторюваних частинах даних, що шифруються на одному і тому ж ключі. Існує кілька стандартних режимів шифрування: ECB, CBC, OFB, CFB, CTR. Розглянемо режими ECB, СFB та CTR.
Електронна кодова книга (ECB)
ECB - один з варіантів використання симетричного блокового шифру, при якому кожен блок відкритого тексту замінюється блоком шифротексту (рис. 1).
/
/
Рис.1 Шифрування і розшифрування у режимі ECB.
Шифрування може бути описано наступним чином:
(9)
де і - номера блоків, та - блоки зашифрованого та відкритого текстів відповідно, - функція блочного шифрування.
Переваги:
Немає необхідності в послідовному застосуванні функції шифрування до потоку відкритого тексту. Припустимо спочатку зашифрувати, наприклад, початок файлу, потім кінець, потім середину. Як наслідок, шифрування може бути паралельним.
Недоліки:
При використанні одного ключа ідентичні блоки відкритого тексту шифруються в ідентичні блоки зашифрованого тексту, таким чином, цей метод погано приховує структуру даних, що також робить його нестійким до статистичного аналізу.
Блоки можуть пропадати або з'являтися. Зловмисник може перехопити блок і продублювати його, і з боку приймача він буде сприйнятий як «правильний».
Режим стійкий до помилок, пов'язаних зі зміною бітів блоку (помилка не поширюється на інші блоки), але нестійкий - до помилок, пов'язаних з втратою або вставкою бітів, якщо не використовується додатковий механізм вирівнювання блоків.
Режим зворотного зв’язку за зашифрованим текстом (CFB)
Режим зворотного зв'язку по шифротексту , має схожі риси з CBC, перетворює блочний шифр на потоковий, що самосинхронізується. Зокрема, розшифрування CFB майже тотожне до шифрування CBC виконаного навпаки:
/
/
/
/
Рисунок 2.1. Шифрування в режимі CFB
/
Рисунок 2.2 Розшифрування в режимі CFB
Описаний вище найпростіший спосіб використання CFB ані трохи не більш самосинхронізовний ніж інші режими на кшталт CBC. Якщо губиться цілий блок шифротекту, то обидва CBC і CFB синхронізуються, тоді як втрата одного байту або біту остаточно відкине розшифрування. Для уможливлення синхронізації після втрати одного байту або біту, за раз треба шифрувати один байт або біт. CFB можна так використовувати разом з регістром зсуву на вході до блочного шифру. Для використання CFB як самосинхронізовного потокового шифру, який синхронізуватиметься для будь-якої втрати кратної x бітам, починають з встановлення зсувного регістру розміром в один блок ініціалізаційним вектором. Це шифрується блочним шифром, і старші x біт висліду XOR-рять з x бітами відкритого тексту для отримання x біт шифротексту. Ці x біт на виході заштовхуються в зсувний регістр, і процес повторюється з наступними x бітами відкритого тексту. Розшифрування схоже, починається з ініціалізаційним вектором, шифрується і XOR-иться x старших бітів висліду з x бітами шифротексту для отримання x бітів відкритого тексту. Заводимо x біт шифротексту в зсувний регістр. Цей спосіб обробки відомий як CFB-8 або CFB-1 (відповідно до розміру зсуву).
Лічильник (CTR)
CTR - режим лічильника, передбачає повернення на вхід відповідного алгоритму блочного шифрування значення лічильника, накопиченого з моменту старту. Збільшуючи значення лічильника, алгоритм блочного шифрування утворює рядок бітів, яка використовується в якості бігучого ключа шифру Вернама, тобто до бігучого ключу і блоків вихідного повідомлення застосовуються операції XOR. Щоб забезпечувати випадковість, величина приросту може залежати від номера блоку. Оригінальний текст і блок зашифрованого тексту мають один і той же розмір блоку, як і основний шифр (наприклад, DES або AES). Режим CTR передбачає наступні операції.
Шифрування в режимі CTR:
(11)
Розшифрування в режимі CTR:
(12)
/
Рисунок 3.1. Режим шифрування CTR
/
Рисунок 3.2. Режим розшифрування CTR
- алгоритм шифрування за допомогою відповідного блокового шифру;
- m послідовних сегментів вихідного повідомлення, яке зазнає обробці;
якщо m-й сегмент коротше інших сегментів, він доповнюється до стандартної довжини;
в деяких режимах шифрування розмір сегмента повідомлення дорівнює розміру блоку, а в інших режимах він може бути менше;
- m послідовних сегментів зашифрованого повідомлення, що є результатом застосування певного режиму шифрування.
При відсутності зворотного зв’язку алгоритми шифрування і розшифрування в режимі CTR можуть виконуватися паралельно. Це забезпечує режиму CTR перевагу перед режимами Cipher Feedback (CFB) і Output Feedback (OFB).
Розділ 3. Розробка архітектури пристрою та його структурної схеми
на рівні міжрегістрових передач
В даному розділі було розроблено архітектурну схему пристрою шифрування, що реалізує такі режими блокового шифрування: ECB, CFB, CTR. Було використано такі елементи: регістри для зберігання даних, мультиплексори, елемент додавання по модулю 2 (XOR).
Структурна схема пристрою зображена на рис. 4:
/
Інтерфейс розробленого пристрою:
entity switching_net is
port(
data_in : in std_logic_vector(63 downto 0);
cmd : in std_logic_vector(1 downto 0);
IV : in std_logic_vector(63 downto 0);
key : in std_logic_vector(63 downto 0);
counter : in std_logic_vector(63 downto 0);
clk : in std_logic;
rst : in std_logic;
data_out : out std_logic_vector(63 downto 0)
);
end switching_net;
Розділ 4. Опис розробки VHDL-моделей компонент пристрою та VHDL-моделі пристрою в цілому
В даному розділі було описано елементи пристрою за допомогою мови опису апаратних засобів VHDL відповідно до структурної схеми. Детальний опис подано у файлі switching_net.vhd. Також описано 6 підсхем кожного з елементів. Кожний екземпляр має карту портів(port map). Карта портів відображає зв'язок між входами та виходами компонентів і екземплярами компонент.
network.vhd – комутаційна мережа пристрою
library IEEE;
use IEEE.std_logic_1164.all;
entity network is
port(
data_in : in std_logic_vector(63 downto 0);
cmd : in std_logic_vector(1 downto 0);
IV : in std_logic_vector(63 downto 0);
key : in std_logic_vector(63 downto 0);
counter : in std_logic_vector(63 downto 0);
clk : in std_logic;
rst : in std_logic;
data_out : out std_logic_vector(63 downto 0)
);
end network;
architecture network of network is
signal mux1_out : std_logic_vector(63 downto 0);
signal mux2_out : std_logic_vector(63 downto 0);
signal aes_out : std_logic_vector(63 downto 0);
signal xor1_out : std_logic_vector(63 downto 0);
signal reg1_out : std_logic_vector(63 downto 0);
signal state : std_logic_vector(2 downto 0);
signal temp: std_logic_vector(63 downto 0);
component mux_2
port(
mux_input_1 : in std_logic_vector(63 downto 0);
mux_input_2 : in std_logic_vector(63 downto 0);
state : in std_logic;
mux_out : out std_logic_vector(63 downto 0)
);
end component;
component mux_4
port(
mux_input_1 : in std_logic_vector(63 downto 0);
mux_input_2 : in std_logic_vector(63 downto 0);
mux_input_3 : in std_logic_vector(63 downto 0);
mux_input_4 : in std_logic_vector(63 downto 0);
state : in std_logic_vector(1 downto 0);
mux_out : out std_logic_vector(63 downto 0)
);
end component;
component RS
port(
RS_in : in std_logic_vector(63 downto 0);
clk : in std_logic;
rst : in std_logic;
RS_out : out std_logic_vector(63 downto 0)
);
end component;
component xor_2
port(
xor_in_1 : in std_logic_vector(63 downto 0);
xor_in_2 : in std_logic_vector(63 downto 0);
xor_out : out std_logic_vector(63 downto 0)
);
end component;
component AES
port(
data_in : in std_logic_vector(63 downto 0);
key_in : in std_logic_vector(63 downto 0);
Ek_Dk: out std_logic_vector(63 downto 0)
);
end component;
component control_device
port(
clk : in std_logic;
rst : in std_logic;
input : in std_logic_vector(1 downto 0);
output: out std_logic_vector(2 downto 0)
);
end component;
begin
mux1: mux_4
port map(
mux_input_1 => IV,
mux_input_2 => counter,
mux_input_3 => data_in,
mux_input_4 => reg1_out,
state => state(1 downto 0),
mux_out => mux1_out
);
mux2: mux_2
port map(
mux_input_1 => data_in,
mux_input_2 => X"0000_0000_0000_0000",
state => state(2),
mux_out => mux2_out
);
xor1: xor_2
port map(
xor_in_1 => AES_out,
xor_in_2 => mux2_out,
xor_out => xor1_out
);
AES_1: AES
port map(
data_in => mux1_out,
key_in => key,
Ek_Dk => AES_out
);
Reg_1: RS
port map(
RS_in => xor1_out,
clk => clk,
rst => rst,
RS_out => reg1_out
);
Reg_2: RS
port map(
RS_in => xor1_out,
clk => clk,
rst => rst,
RS_out => data_out
);
Control: control_device
port map(
clk => clk,
rst => rst,
input => cmd,
output => state
);
end network;
mux_4.vhd –мультиплексор з 4ма входами
library IEEE;
use IEEE.std_logic_1164.all;
entity mux_4 is
port(
mux_input_1 : in std_logic_vector(63 downto 0);
mux_input_2 : in std_logic_vector(63 downto 0);
mux_input_3 : in std_logic_vector(63 downto 0);
mux_input_4 : in std_logic_vector(63 downto 0);
state : in std_logic_vector(1 downto 0);
mux_out : out std_logic_vector(63 downto 0)
);
end mux_4;
architecture mux_4 of mux_4 is
begin
mux:process(mux_input_1, mux_input_2, mux_input_3, mux_input_4, state)
begin
if (state = "00") then
mux_out <= mux_input_1;
elsif (state = "01") then
mux_out <= mux_input_2;
elsif (state = "10") then
mux_out <= mux_input_3;
elsif (state = "11") then
mux_out <= mux_input_4;
else
mux_out <= (others =>'X');
end if;
end process mux;
end mux_4;
mux_2.vhd – мультиплексор з 2ма входами
library IEEE;
use IEEE.std_logic_1164.all;
entity mux_2 is
port(
mux_input_1 : in std_logic_vector(63 downto 0);
mux_input_2 : in std_logic_vector(63 downto 0);
state : in std_logic;
mux_out : out std_logic_vector(63 downto 0)
);
end mux_2;
architecture mux_2 of mux_2 is
begin
mux:process(mux_input_1, mux_input_2, state)
begin
if (state = '0') then
mux_out <= mux_input_1;
elsif (state = '1') then
mux_out <= mux_input_2;
else
mux_out <= (others =>'X');
end if;
end process mux;
end mux_2;
RS.vhd – елемент для збереження даних
library IEEE;
use IEEE.std_logic_1164.all;
entity RS is
port(
RS_in : in std_logic_vector(63 downto 0);
RS_out : out std_logic_vector(63 downto 0);
clk : in std_logic;
rst : in std_logic
);
end RS;
architecture RS of RS is
signal temp: std_logic_vector(63 downto 0);
begin
process(clk, rst, RS_in) begin
if(rst = '1') then
temp <= (others => '0');
elsif(falling_edge(clk)) then
temp <= RS_in;
end if;
end process;
RS_out <= temp;
end RS;
xor_2.vhd – елемент додавання за модулем 2 з 2ма входами
library IEEE;
use IEEE.std_logic_1164.all;
entity xor_2 is
port(
xor_in_1 : in std_logic_vector(63 downto 0);
xor_in_2 : in std_logic_vector(63 downto 0);
xor_out : out std_logic_vector(63 downto 0)
);
end xor_2;
architecture xor_2 of xor_2 is
begin
xor_out <= xor_in_1 xor xor_in_2;
end xor_2;
aes.vhd – елемент шифрування та дешифрування
library IEEE;
use IEEE.std_logic_1164.all;
entity AES is
port(
data_in : in std_logic_vector(63 downto 0);
key_in : in std_logic_vector(63 downto 0);
Ek_Dk: out std_logic_vector(63 downto 0)
);
end AES;
architecture AES of AES is
begin
engine : process(data_in, key_in)
begin
Ek_Dk <= (data_in xor key_in);
end process engine;
end AES;
PK.vhd – елемент для керування станами приладу
library IEEE;
use IEEE.std_logic_1164.all;
entity PK is
port(
clk : in std_logic;
rst : in std_logic;
input : in std_logic_vector(1 downto 0);
output : out std_logic_vector(2 downto 0)
);
end PK;
architecture PK of PK is
type state_values is (
init,
CTR,
ECB,
CFB,
CFB_state_2
);
signal this_state, next_state: state_values;
begin
dcs:process(clk, rst)
begin
if (rst = '1') then
this_state <= init;
elsif (rising_edge(clk)) then
this_state <= next_state;
end if;
end process dcs;
fsm: process (this_state, input)
begin
case this_state is
when init =>
case input is
when "00" =>
next_state <= CFB;
when "01" =>
next_state <= CTR;