МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ Курсова робота З КУРСУ: “Комп’ютерні методи аналізу та проектування електронних засобів” НА ТЕМУ: “РОЗРОБЛЕННЯ VHDL – ОПИСУ ТА СИНТЕЗ ЕЛЕМЕНТІВПРИСТРОЇВ ДЛЯ ЗАШИФРУВАННЯ ІНФОРМАЦІЇ ” Львів 2023 Зміст 1. Опис алгоритму шифрування .................................................................................................... 4 1.1 Шифри простої заміни ........................................................................................................ 4 1.2 Кільце лишків....................................................................................................................... 4 1.3 Шифр зсуву .......................................................................................................................... 4 1.4 Лінійний шифр. .................................................................................................................... 5 1.5 Афінний шифр. .................................................................................................................... 5 1.6 Афінні шифри вищих порядків .......................................................................................... 5 1.7 Шифр зсуву k-го порядку (шифр Віженера з періодом k). .............................................. 6 1.8 Лінійний шифр k-го порядку .............................................................................................. 6 1.9 Афінний шифр k-го порядку .............................................................................................. 7 2. Розроблення поведінкового опису пристрою........................................................................... 8 3. Розроблення структурного опису присторю .......................................................................... 10 4. Розроблення VHDL-програми в цілому.................................................................................. 12 5. Аналіз результатів синтезу пристрою ..................................................................................... 14 2 Завдання Відповідно до НЗК (номера залікової книжки) розробити VHDL- програму опису заданого пристрою (шифратора або його частини). В програмі передбачити поведінковий та структурний опис пристрою. За розробленою програмою синтезувати заданий пристрій. Таблиця 1 - Тип шифру і Парне Непарне Тип шифру Афінний DES Таблиця 2 - Варіанти афінного шифру а mod 10 Лінійний афінний шифр і – го порядку Узагальнений афінний шифр і – го порядку 0 X 1 2 X X 3 4 X X 5 6 X X 7 8 X X 9 X Таблиця 3 - Варіанти елементів шифру DES а mod 10 Генератор підключів раундів Блок підстановки в S-блоках Примітки: 0 X 1 X 2 X 3 4 X X 5 X 6 X 7 X 8 X 9 X а – число, що визначається двома останніми цифрами НЗК; і – остання цифра НЗК при і>1; і = 10 – якщо остання цифра НЗК нуль; і = 11 – якщо остання цифра НЗК одиниця. Варіант завдання a = 6; 6mod 10 = 6. Потрібно розробити програму опису шифратора, що реалізує лінійний афінний шифр 6-го порядку. 3 1. ОПИС АЛГОРИТМУ ШИФРУВАННЯ 1.1 Шифри простої заміни . В рамках формалізації, моно-алфавітні k-грамні шифри заміни можна означити як блокові шифри з періодом k. Відповідно, шифри простої заміни можна трактувати як блокові шифри з періодом . Подивимось, як можна описати шифр зсуву із застосуванням арифметичного апарату. Користь такого підходу зрозуміла – обчислювальну техніку майже завжди простіше навчити оперувати із числовою інформацією, аніж із символьною. Основна домовленість, якої ми будемо дотримуватись до кінця цього параграфу, така: n-символьний алфавіт ототожнюємо з кільцем Z n . А саме, кожна буква замінюється своїм номером у алфавіті, причому нумерація починається з нуля. Наприклад, латинська абетка ототожнюється із Z26 , а українська із Z33 . Літера «А» з алфавіту трактується як 0, літера б як 1, в як 2 і т.д.. Надалі n буде служити позначенням для кількості букв у алфавіті відкритого тексту. 1.2 Кільце лишків. Для натурального n через Zn позначаємо множину {0, 1,..., n-1}, наділену операціями додавання та множення за модулем п. Сумою х і у ізZn є (x+у)modn, а їх добутком є (х ∙ у) modn. Відносно цих операційZn є комутативним кільцем з одиницею, яке називається кільцем зведених лишків за модулем п. Через Zn* позначаємо мультиплікативну групу елементів, для яких в Zn є обернені відносно множення. Твердження 2. Zn* складається з елементів х, взаємно простих з п, і лише з них. 1.3 Шифр зсуву. Ключ:s таке, що 0 ≤ s<n. Шифрування. У повідомленні кожна буква x заміщується буквою E(x) = (x + s) modn. Дешифрування. У криптотексті кожна буква xˈ заміщується буквою D(xˈ) =(xˈ + sˈ) mod n, де sˈ = n - s. Величину зворотнього зсуву sˈ будемо називати дешифруючим ключем. 4 1.4 Лінійний шифр. Ключ: a таке, що 0 <a < n і НСД(a, n) = 1. Шифрування. У повідомленні кожна буква x заміщується буквою E(x) = (ax) modn. Дешифрування. У криптотексті кожна буква xˈ заміщується буквою D(xˈ) = (aˈ xˈ) modn, де aˈ = a 1 modn – дешифруючий ключ. Співвідношення D(E(x)) = x для будь-якого х ϵ Zn доводиться просто aˈ (ax) = (aˈa)x = 1x = x (операції виконуються в Zn ). Існування aˈ для a гарантоване умовою НСД(a, n) = 1. Більше того aˈ для заданого a ефективно обчислюється за допомогою розширеного алгоритму Евкліда. Нарешті покажемо, що ті a, які не задовольняють накладену нами умову, непридатні для використання в якості ключа. Твердження 3.Відображення E : Zn Zn , задане формулою E(x) = (ax) mod n, має обернене тоді і тільки тоді, коли НСД (a, n) = 1. 1.5 Афінний шифр. Ключ: a, s такі, що 0 ≤ s<n, 0 <a<n і НСД(a,n) = 1. Шифрування. У повідомленні кожна буква x заміщується буквою E(x) = (ax + s) modn. Дешифрування. У криптотексті кожна буква xˈ заміщується буквою D(xˈ) = (aˈxˈ + sˈ) modn, де пара aˈ = a 1 mod n і sˈ = (-aˈs) modn є дешифруючим ключем. Як і кожен шифр простої заміни, афінний шифр піддається частотному аналізові. При цьому частотний метод використовується навіть не на повну потужність. 1.6 Афінні шифри вищих порядків. Подумаємо, як можна розширити монограмні шифри попереднього пункту так, щоб вони оперували з k-грамами для довільного k > 1. Спочатку введемо операцію додавання в Z k . Сумою векторів X (x1,..., xk ) і S (s1,..., sk ) з Z nk є n вектор X + S = (( x s ) mod n, . . . ,( x s ) mod n)). Z k з операцією додавання є 1 1 k k n групою. Вектор –S = (n - s1 , . . . , n - sk ) є оберненим до вектора S = ( s1 , . . . , sk ). 5 1.7 Шифр зсуву k-го порядку (шифр Віженера з періодом k). Ключ: S Z nk . Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою E(X) = X + S. Дешифрування. Кожна k-грама Xˈ криптотексту заміщується k-грамою D(Xˈ) = Xˈ + Sˈ, де Sˈ = -S є дешифруючим ключем. Перед тим як перейти до лінійного шифру введемо такі позначення: через M k (Zn ) ми позначаємо множину матриць розміру k × k з коефіцієнтами з кільця Zn , а через GLk (Zn ) – підмножину оборотних матриць. Для A GLk (Zn ) обернену до неї матрицю позначаємо через A1 . Добутком AX матриці A (aij ) з M k (Zn ) на вектор-стовпчик X (x1,..., xk ) з Zk є вектор-стовпчик n a11 a12 … a21 a22 … ⁝ ⁝ ⋱ a1k x1 a11x1 a12x2 … a1k xk a2k x2 a21x1 a22 x2 … a2k xk ⁝ ⁝ ⁝ ak1 akk xk ak1 x1 a k 2 x2 … a kkx ak 2 … . k 1.8 Лінійний шифр k-го порядку. Ключ: A GLk (Zn ) . Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою E(X) = AX. Дешифрування. Кожна k-грама Xˈ криптотексту заміщується k-грамою D(Xˈ) = AˈXˈ, де A’ = A1 – дешифруючий ключ. Повернемось до загального аналізу лінійного шифру. Співвідношення D(E(X)) = X для будь-якого X Z kn випливає з рівностей Aˈ (AX) = (Aˈ A)X = Ik X = X, де Ik – одинична матриця порядку k. Дешифруючий ключ Aˈ для вибраної оборотною матриці A обчислюється ефективно за формулою для оберненої матриці. Твердження 4.Відображення E : Z k Z k , задане формулою E(X) = AX, має n обернене тоді і тільки тоді, коли n A GLk (Zn ) . 6 1.9 Афінний шифр k-го порядку. Ключ: A GLk (Zn ) і S Z k . n Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою E(X) = AX + S. Дешифрування. Кожна k-грама Xˈ криптотексту заміщується k-грамою D(Xˈ) = AˈXˈ + Sˈ, де Aˈ = A 1 і Sˈ = - AˈS – дешифруючий ключ. Розглянувши принцип функціонування афінних шифрів приступаємо до реалізації завдання по розробленню лінійного афінного шифратора 6-ого порядку . 7 2. РОЗРОБЛЕННЯ ПОВЕДІНКОВОГО ОПИСУ ПРИСТРОЮ --підключення бібліотек та пакетів library IEEE,STD; use ieee.std_logic_1164.all; use ieee.numer ic_std.all,std.all; --створення пакету в якому визначені необхідні нам типи package Types is type typeData is array (0 to 5) of integer; type type Akey is array (0 to 5,0 to 5) of integer; end Types; library ieee,afin; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use afin.Types.all; -- вхідні та вихідні символи aksii які складають k-граму entity afin is port ( enc_st06_0,enc_st06_1,enc_st06_2,enc_st06_3,enc_st06_4,enc_st06_5: in integer range 0 to 255; dec_st06_0,dec_st06_1,dec_st06_2,dec_st06_3,dec_st06_4,dec_st06_5: out integer range 0 to 255); end afin; architecture afin of afin is --зворотня матриця яка використовується в якості ключа афінного шифру constant aKey: typeAkey:=((3,5,4,2,1,6),( 6,4,3,1,2,5), (5,3,4,2,3,1),(1,6,3,5,4,2),(5,4,6,1,2,2),(4,3,5,2,3,1)); -- вхідна к-грамма сформована з к-символів аскіі signal inData:typeData:=(enc_st06_0,enc_st06_1,enc_st06_2,enc_st06_3,enc_st06_4,enc_st06_5); --вихідна к-грамма signal outData:typeData; begin A1: process (inData) --- буффер variable buff:integer:=0; begin B1: for j in 0 to 5 loop C2: for i in 0 to 5 loop buff:=(buff+aKey(j,i)* inData(i))mod 255; endloop C2; outData(j)<=buff; buff:=0; endloop B1; dec_st06_0<=outData(0); dec_st06_1<=outData(1); dec_st06_2<=outData(2); dec_st06_3<=outData(3); dec_st06_4<=outData(4); dec_st06_5<=outData(5); end process A1; end architecture afin; 8 Список ідентифікаторів Назва ідентифікатора typeData typeAkey enc_st06_0,enc_st06_1,enc_st06_2, enc_st06_3,enc_st06_4,enc_st06_5 inData,outData aKey dec_st06_0,dec_st06_1,dec_st06_2, dec_st06_3,dec_st06_4,dec_st06_5 Значення Тип одновимірного масиву з 6-ох елементів, які є цілими числами. Тип двовимірного масиву з 6*6 ,цілих чисел які є ключем афінного шифру. Вхідні вектори довжиною 8 біт. Вхідна та вихідна к-грамма Константа ключа афінного шифру Вихідні вектори довжиною 8 біт. 9 3. РОЗРОБЛЕННЯ СТРУКТУРНОГО ОПИСУ ПРИСТОРЮ afin.vhd --підключення бібліотек та пакетів library IEEE,STD; use ieee.std_logic_1164.all; use ieee.numeric_std.all,std.all; --створення пакету в якому визначені необхідні нам типи package Types is type typeData is array (0 to 5) of integer; type typeAkey is array (0 to 5,0 to 5) of integer; end Types; library ieee,afin; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use afin.Types.all; -- вхідні та вихідні символи аскіі які складають к-граму entity afin is port ( enc_st06_0,enc_st06_1,enc_st06_2,enc_st06_3,enc_st06_4,enc_st06_5: in integer range 0 to 255; dec_st06_0,dec_st06_1,dec_st06_2,dec_st06_3,dec_st06_4,dec_st06_5: out integer range 0 to 255); end afin; architecture afino in is -- вхідна к-грамма сформована з к-символів аскіі signal inData:typeData:=(enc_st06_0,enc_st06_1,enc_st06_2,enc_st06_3,enc_st06_4,enc_st06_5); signal outData:typeData; component AfinShif port( dataIn: intypeData; dataOut: outtypeData ); end component; begin S1: AfinShif port map(inData,outData); dec_st06_0<=outData(0); dec_st06_1<=outData(1); dec_st06_2<=outData(2); dec_st06_3<=outData(3); dec_st06_4<=outData(4); dec_st06_5<=outData(5); end architecture afin; 10 AfinShif.vhd library ieee,afin; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use afin.Types.all; entity AfinShif is port ( dataIn: in typeData; dataOut: out typeData ); End AfinShif; architecture AfinShif of AfinShif is begin A1: process (dataIn) variable buff:integer:=0; constant aKey: typeAkey:= ((4,3,6,1,2,2),(6,5,1,4,3,1), (1,3,4,6,5,1),(5,3,4,1,6,2),(2,4,1,1,3,6), (3,1,5,2,4,4)); begin B1: for j in 0 to 5 loop C2: for i in 0 to 5 loop buff:=(buff+aKey(j,i)* dataIn(i))mod 255; end loop C2; dataOut(j)<=buff; buff:=0; end loop B1; end process A1; end AfinShif; Список ідентифікаторів Назва ідентифікатора Значення Тип одновимірного масиву з 10-ох елементів, які є typeData цілими числами. Тип двовимірного масиву з 10*10 ,цілих чисел які є typeAkey ключем афінного шифру. enc_st06_0,enc_st06_1,enc_st06_2, Вхідні вектори довжиною 8 біт. enc_st06_3,enc_st06_4,enc_st06_5 inData,outData Вхідна та вихідна к-грамма Константа ключа афінного шифру aKey dec_st06_0,dec_st06_1,dec_st06_2, Вихідні вектори довжиною 8 біт. dec_st06_3,dec_st06_4,dec_st06_5 11 4. РОЗРОБЛЕННЯ VHDL-ПРОГРАМИ В ЦІЛОМУ У зв’язку з тим, що алгоритму лінійного афінного шифру за своєю структурою складається з операцій множення, додавання та модуля по числу, використання структурної схеми є не доцільне. Використання структурної схеми було б виправдане, якби ці операції повторювалися кілька разів за кілька циклів. Тому в якості основної програми використаємо поведінкову форму представлення алгоритму. --підключення бібліотек та пакетів library IEEE,STD; use ieee.std_logic_1164.all; use ieee.numeric_std.all,std.all; --створення пакету в якому визначені необхідні нам типи package Typesis type typeData is array (0 to 5) of integer; type typeAkey is array (0 to 5,0 to 5) of integer; end Types; library ieee,afin; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use afin.Types.all; -- вхідні та вихідні символи аскіі які складають к-граму entity afin is port ( enc_st06_0,enc_st06_1,enc_st06_2,enc_st06_3,enc_st06_4,enc_st06_5: in integer range 0 to 255; dec_st06_0,dec_st06_1,dec_st06_2,dec_st06_3,dec_st06_4,dec_st06_5: out integer range 0 to 255); end afin; architecture afin of afin is --оборотна матриця яка використовується в якості ключа афінного шифру constant aKey: typeAkey:=((5,3,4,1,2,2),(6,5,2,2,3,4), (1,1,3,5,2,6),(3,3,4,1,5,2),(2,3,4,5,6,1), (1,3,5,6,4,4)); -- вхідна к-грамма сформована з к-символів аскіі signal inData:typeData:=(enc_st06_0,enc_st06_1,enc_st06_2,enc_st06_3,enc_st06_4,enc_st06_5); --вихідна к-грамма signal outData:typeData; begin A1: process (inData) -- буффер variable buff:integer:=0; begin B1: for j in 0 to 5 loop C2: for i in 0 to 5 loop buff:=(buff+aKey(j,i)* inData(i))mod 255; end loop C2; 12 outData(j)<=buff; buff:=0; end loop B1; dec_st06_0<=outData(0); dec_st06_1<=outData(1); dec_st06_2<=outData(2); dec_st06_3<=outData(3); dec_st06_4<=outData(4); dec_st06_5<=outData(5); end process A1; end architecture afin; 13 5. АНАЛІЗ РЕЗУЛЬТАТІВ СИНТЕЗУ ПРИСТРОЮ Шифратор синтезовано в середовищі Altera QuartusII. Для перевірки правильності роботи на вхід пристрою подано сигнал ‘OksAka (рис. 1). Рисунок 1 - Шифратор Рисунок 2 –Результат симуляції 14 Висновок В результаті виконання даної курсової роботи була написана програма для реалізації шифратора лінійного афінного шифру мовою VHDL та проведено симуляцію його роботи в середовищі AlteraQuartusII. Алгоритм програми наведений як в поведінковій так і структурній формі. Основна програма реалізована за допомогою поведінкового опису, через його простоту в реалізації. 15 Список використаної літератури 1. ГОСТ Р 50754-95 “Язык описания аппаратуры цифровых систем VНDL. Описаниеязыка” від 01.07.95 2. Суворова Е.А., Шейнин Ю.Е., “Проектирование цифровых систем на VHDL”: БХВ – Петербугр, 2003. – 567 с. 3. Дьяков И.А. Моделированиецифровых и микропроцессорных систем. Язык VHDL: Учеб. пособие. Тамбов:Изд-воТамб.гос. техн.ун-та, 2001 4. П.Н.Бибило. Синтез логических схем с использованиемязыка VHDL - М.: Солон-Р, 2002 - 384 с. ISBN: 5-93455-152-3. 5. Ивченко В.Г. Применение языка VHDL при проектировании специализированных СБИС: Учебное пособие. Таганрог: Изд-во ТРТУ, 1999. 80 с. 6. www.vhdl.org 16