МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра БІТ
Звіт до лабораторної роботи № 3
«Поведінкове проектування пристрою шифрування»
з навчальної дисципліни: “ Комп`ютерні методи високорівневого проектування пристроїв захисту ”
Львів – 2015
Мета роботи – ознайомитись з принципами створення структурних описів мовою VHDL та розробити функціональну модель пристрою шифрування, виконати його функціональну симуляцію.
Основні теоретичні відомості
Структурний опис мовою VHDL.
Декларування та опис інтерфейсу елемента.
Цифрова схема складається із цифрових схемотехнічних елементів. Елемент цифрової схеми має вхідні і вихідні порти для взаємодії із оточуючим обладнанням. Елементи можуть бути об’єднані в групи та утворювати таким чином компоненти цифрової схеми, що належать їй на деякому рівні ієрархії.
Синтаксис декларації елемента наступний:
ENTITY <ім’я> IS
<заголовок>
BEGIN
<тіло>
END <ім’я>;
В заголовку елемента описують його інтерфейс і декларують характеристики, що використовуються в тілі. В заголовку також можуть бути записані директиви для виконання симуляції та вказуватись інтерфейсні константи типу GENERIC, які передають інформацію до елемента від зовнішнього середовища. Дійсні значення констант передаються до елемента під час його використання. Інтерфейсні порти описують так само, як і константи типу GENERIC, але вони повинні належати до класу SIGNAL. Синтаксис цього класу такий:
SIGNAL <список ідентифікаторів>: [<режим>] <тип> [BUS]
[:= <статистичний вираз>]
Оскільки інтерфейс ний порт за замовчуванням належить до класу SIGNAL, ключове слово SIGNAL можна пропускати. Слово BUS (шина) вказує, що порт буде під’єднано до декількох виходів.
Приклад:
ENTITY processor IS
GENERIC (max_clock_freq: frequency := 130MHz);
PORT (clock: IN bit;
address: OUT integer;
data: INOUT word_32;
control: OUT proc_control;
ready: IN bit);
END processor;
У наведеному прикладі константа max_clock_freq вказує на часові властивості елемента. Константа GENERIC може вживатися для визначення структурних характеристик елемента (наприклад, значення розрядності даних і адрес).
Опис архітектури елемента.
Архітектуру елемента описують в секції ARCHITECTURE, яку розміщують після опису його інтерфейсу. Кожен елемент може мати кілька описів архітектури. У тілі архітектури елемента розміщують його функціональні (поведінкові чи рівня міжрегістрових передач) і конструктивні (структурні) описи.
Декларування сигналів.
Сигнали використовуються для з’єднання компонентів, що описані в архітектурі елемента, між собою. Початкове значення присвоюється сигналу на фазі ініціалізації під час моделювання. Якщо вираз для присвоєння початкового значення не вказано, то буде використовуватись значення за замовчуванням. Зазначимо, що порти елемента слід розуміти як сигнали в межах цього елемента.
Декларування компонентів.
У тілі архітектури елемента дозволяється використовувати вкладені елементи з бібліотек та описувати власні, які є компонентами елемента. Компоненту потрібно задекларувати в тілі архітектури елемента. Синтаксис декларації компонента такий:
COMPONENT <ідентифікатор>
[GENERIC (…)];
[PORT(…)];
END COMPONENT;
Поліалфавітні шифри.
Поліалфавітні шифри – це сімейство симетричних шифрів на основі заміщення, побудованих із використанням кількох алфавітів. Яскравими представниками цього класу шифрів є алгоритми Цезаря, Віженера, Гронсфельда.
Основними характеристиками поліалфавітних шифрів є:
- символ відкритого тексту;
- символ зашифрованого тексту;
- потужність алфавіту (наприклад, англійського);
- значення ключа.
2.1 Шифр Цезаря.
Шифр Цезаря (названий іменем римського імператора Гая Юлія Цезаря, який використовував його для секретної переписки із своїми генералами), також відомий як шифр зсуву – один із найпростіших і найвідоміших поліалфавітних шифрів. У цьому шифрі кожний символ відкритого тексту замінюється символом, який знаходиться в алфавіті на деякій позиції лівіше або правіше. Наприклад, при значенні зсуву рівному 3 символ українського алфавіту ‘A’ буде замінено на ‘Г’, а ‘Б’ – на ‘Д’ і т.д.
Шифр Цезаря легко розкривається і сьогодні не має практичного використання. Разом з тим, з використанням шифру Цезаря будують складніші криптографічні схеми, наприклад, шифр Віженера.
Алгоритм шифру Цезаря базується на модульній арифметиці. Якщо алфавіт представлений у вигляді числових значень починаючи із 0, тоді процесс зашифрування та розшифрування за шифром Цезаря можна описати за допомогою формул:
2.2. Шифр Віженера.
Шифр Віженера (фр. Chiffre de Vigenere) – метод поліалфавітного шифрування буквенного тексту з використанням ключового слова. Цей метод є простою формою полі алфавітної заміни. Вперше цей метод вперше описав Джован Баттіста Беллазо у 1553 році, проте в XIX столітті отримав ім’я Блеза Віженера, французького дипломата. Метод простий для розуміння і реалізації і недоступний для простих методів криптоаналізу.
Для зашифрування може використовуватися таблиця алфавітів, звана квадратом (таблицею) Віженера. Якщо за основу взяти латинський алфавіт, то таблиця Віженера складатиметься з рядків по 26 символів, причому кожен наступний рядок зсувається на 1 позицію. Таким чином, в таблицю входить 26 різних шифрів Цезаря. На кожному етапі шифрування шифр Віженера використовує різні алфавіти із цієї таблиці, вибрані в залежності від символу ключового слова.
Процес зашифрування і розшифрування за шифром Віженера можна представити за допомогою наступних формул:
Приклад:
(17, 20, 18, 7)
2.3. Модифікації поліалфавітних шифрів.
2.3.1. Поняття автоключа.
Шифр, в якому саме повідомлення чи результуюча криптограма використовується як ключ, називається шифром із автоключем. Шифрування починається із використанням «первинного ключа» і продовжується із використанням відкритого тексту (тип А) або зашифрованого тексту (тип Б), зсунутого на довжину первинного ключа.
2.3.2. Автоключ за відкритим текстом (тип А).
Приклад:
Зашифрування
Розшифрування
2.3.3. Автоключ за зашифрованим текстом (тип Б).
Приклад:
Зашифрування
Розшифрування
2.3.4. Доповнення.
Для виконання перестановки полі алфавітні шифри ділять на блоки фіксованого розміру, які за довжиною рівні ключу. При цьому може постати проблема кратності довжини повідомлення і ключа, яка вирішується доповненням останнього блока повідомлення до потрібного розміру. Основною вимогою до операції доповнення є її оборотність.
Один із варіантів оборотного доповнення є додавання до останнього блоку N символів K, де номер символа K в алфавіті відповідає відповідає кількості доданих символів N. При розшифруванні зчитується останній символ K і видаляється N символів із кінця повідомлення.
Приклад:
Повідомлення: ABCDEFGHIJKL
Розмір блоку: 5
Результат: ABCDEFGHIJKLССС
Однією із проблем даного доповнення є необхідність постійного введення надлишковості, що зумовлено особливістю виконання операції розшифрування (для запобігання видалення потрібних символів). Наприклад, якщо повідомлення кратне довжині блоку, його все рівно потрібно доповнити одним символом, що в свою чергу викликає доповнення зайвим блоком.
Приклад:
Повідомлення: ABCDEFGHIJKLMNO
Розмір блоку: 5
Результат: ABCDEFGHIJKLMNOFFFFF
Використання доповнення обмежує розмір блоку кількістю символів в алфавіті.
2.3.5. Перестановка.
Одним із методів підвищення стійкості поліалфавітного шифру є перестановка всередині блоку. Її можна виконати до або після шифрування. Перестановка задається самим ключем, коли символи переставляються на вказану в ключі позицію. Так, якщо ключем є слово ZERO, тоді перший символ у блоці з 4 символів буде поставлено на 3 позицію (нумерація починається з 0) відповідно до розташування символів у алфавіті. Але для такої перестановки потрібно, щоб символи в ключі були різними. Це накладає обмеження на розмір блоку, наприклад, для шифру Віженера – 26, Гронсфельда – 10.
Приклад:
\ (3,0,2,1)
де – доповнене повідомлення; – доповнене та переставлене повідомлення.
Завдання
Ознайомитись з принципами створення структурних описів мовою VHDL та поліалфавітними шифрами.
Відповідно до варіанту завдання виконати архітектурне проектування пристрою, який здійснюватиме зашифрування / розшифрування даних (n – розрядність кожного символу у вхідному повідомленні та ключі, k – довжина ключа).
Розробити і відкомпілювати в середовищі проектування Aldec Active-HDL програмну модель заданої варіантом цифрової схеми на мові VHDL, враховуючи подані рекомендації. При цьому необхідно спершу провести синтез кожного елемента окремо і перевірити коректність його роботи, а після цього провести синтез схеми в цілому.
Виконати функціональну симуляцію програмної моделі цифрової схеми і навести отримані часові діаграми.
Здійснити тестування програмної моделі цифрової схеми з використанням макрокоманд.
Лістинг програми мовою VHDL
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY vigener IS
PORT(
data_in : IN STD_LOGIC_Vector (2 downto 0);
key : IN STD_LOGIC_Vector (2 downto 0);
switch : IN STD_LOGIC;
g_c : IN Std_logic;
g_r : IN Std_logic;
data_out : OUT STD_LOGIC_Vector (2 downto 0)
);
END vigener;
ARCHITECTURE vigen OF vigener IS
Component RIV is
port(
clk_riv : in STD_LOGIC;
reset_riv : in STD_LOGIC;
D_riv : in STD_LOGIC_VECTOR(2 downto 0);
Q_riv : out STD_LOGIC_VECTOR(2 downto 0)
);
end component;
Component RC is
port(
d : in STD_LOGIC;
clk : in STD_LOGIC;
reset : in STD_LOGIC;
q : out STD_LOGIC
);
end component;
Component MS is
port(
D0 : in STD_LOGIC_vector (2 downto 0);
D1 : in STD_LOGIC_vector (2 downto 0);
A : in STD_LOGIC;
Q : out STD_LOGIC_vector (2 downto 0)
);
end component;
Component three_bit_adder IS
port(
x : IN STD_LOGIC_Vector (2 downto 0);
y : IN STD_LOGIC_Vector (2 downto 0);
p_in : IN STD_LOGIC;
sumVector : OUT STD_LOGIC_Vector (2 downto 0);
p_out : OUT STD_LOGIC
);
end component;
Component oneD is
port(
clk : in STD_LOGIC;
reset : in STD_LOGIC;
D : in STD_LOGIC_VECTOR(2 downto 0);
Q : out STD_LOGIC_VECTOR(2 downto 0)
);
end component;
signal rivToMs : std_logic_vector(2 downto 0);
signal rcToMs : std_logic;
signal msToSm : std_logic_vector(2 downto 0);
signal smToRs : std_logic_vector(2 downto 0);
signal bitPer : std_logic;
signal out_data: std_logic_vector (2 downto 0);
BEGIN
v_riv:RIV
port map (
clk_riv => g_c,
reset_riv => g_r,
D_riv => data_in,
Q_riv => rivToMs
);
v_rc:RC
port map (
d => switch,
clk => g_c,
reset => g_r,
q => rcToMs
);
v_ms:MS
port map (
D0 => rivToMs,
D1 => key,
A => rcToMs,
Q => msToSm
);
v_sm:three_bit_adder
port map (
x => data_in,
y => msToSm,
p_in => '0',
sumVector => smToRs,
p_out => bitPer
);
v_rs:oneD
port map (
clk => g_c,
reset => g_r,
D => smToRs,
Q => out_data
);
data_out <= out_data;
END vigen;
Часові діаграми роботи схеми
Висновки
В даній лабораторній роботі ми ознайомилися з принципами створення структурних описів мовою VHDL та розробили функціональну модель пристрою шифрування, виконали його функціональну симуляцію.