Розробка проекту програмного дешифратора алгоритмічною мовою високого рівня

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    63,95 Кб
  • Опубликовано:
    2014-08-25
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка проекту програмного дешифратора алгоритмічною мовою високого рівня











КУРСОВИЙ ПРОЕКТ

з навчальної дисципліни: "Алгоритмізація та програмування"

Тема: "Розробка проекту програмного дешифратора алгоритмічною мовою високого рівня"

Напрям підготовки: "Комп’ютерні науки"

Зміст

Вступ

.        Основи криптосистем та їх використання

.1      Види крипто-аналітичних атак

.2      Вимоги для сучасних криптографічних систем захисту інформації

.3      Симетричні системи шифрування

.4      Асиметричні системи або системи з відкритим ключем

.        Шифрування методом гамування

.        Вимоги до програмного продукту

.        Текст програми

.        Опис програми

Висновки

Список джерел

Вступ

На сьогоднішній день інформаційний захист інформації постійно еволюціонує. Доказом цього стала поява більш нових та удосконалених стандартів криптосистем, таких як AES, ГОСТ 28147-89 та RSA. Тому питанню захисту інформації приділяється велика увага у світі та в нашій країні зокрема. Актуальність даної курсової роботи, а саме розробки проекту програмного дешифратора алгоритмічною мовою високого рівня полягає у підготовленні особового складу курсу до майбутньої роботи в галузях інформаційних технологій та безпеки інформації. Цей проект дозволяє оволодіти початковими криптографічними навиками та вдосконалити навики програмування на алгоритмічній мові високого рівня, познайомитись з криптографічними системами та їх різновидами. Курсова робота дає можливість познайомитися з криптографічною системою, в основу якої покладено застосування лінійно рекурентного регістру(ЛРР).

Ціллю даного проекту є розробка проекту програмного дешифратора, що забезпечує перетворення криптограми Е у розшифроване повідомлення М за допомогою ключових даних К. Ключова послідовність формується за допомогою (ЛРР). Курсова робота включає 21 елемент пам’яті регістру та зворотні зв’язки на 2, 5, 7 та 13 елементах. По закінченні роботи програми на екрані повинен вибитися текст, який відправник вбивав у програму. Дана програма використовує симетричну систему шифрування.

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

Завдання на курсову роботу за темою: "Розробка проекту програмного шифратора(дешифратора) алгоритмічною мовою високого рівня "

1. Розробити проект програмного шифратора (дешифратора), що забезпечує конфіденційність повідомлення М шляхом його криптоперетворення у криптограму Е за допомогою ключових даних К. Процедура шифрування (дешифрування) відображена на функціональної структурі (мал. 1).

2. Ключова послідовність формується за допомогою лінійного рекурентного регістру (ЛРР). Кількість елементів пам’яті регістру n, a0,ai, … an-1 - ідентифікатори елементів, і - поточний індекс елементу пам’яті. Значення індексів в завданні на курсову роботу вказують на зворотний зв'язок регістру (наприклад, і= 2, 4 - зворотній зв'язок с виходу елементів a2 і a4).


n

і

1

21

2, 5, 7, 13

2

11

1, 4, 9

3

9

3, 5, 8

4

13

2, 4, 9, 11

5

12

1, 7, 9, 11

6

14

5, 7, 8, 12

7

15

1, 5, 14

8

17

5, 8, 12, 16

9

18

2,5, 7, 8, 11,

10

19

3, 5, 16

1. Основи криптосистем та їх використання

Мал. 1 Схема криптосистеми захисту інформації

Ш - шифратор; ДШ - дешифратор; ГК - генератор ключів; М - повідомлення на вході, М’ - повідомлення на виході; Е - зашифроване повідомлення до подачі на канал зв’язку; Е’ - зашифроване повідомлення після проходу каналу зв’язку; КЗ - канал зв’язку;Кдш - ключ дешифрування; Кш - ключ шифрування;

На малюнку 1 представлена схема криптосистеми захисту інформації. Вона реалізується таким чином: спочатку відправником вводиться повідомлення. Це повідомлення переводиться у біти (кожній букві відповідає відповідна комбінація із семи біт). Послідовність бітів підсумовується за модулем два з генератором ключів, який утворюється за допомогою ЛРР в комірки якого входять ключі. В результаті цієї операції на виході шифратора буде зашифроване повідомлення Е. Це повідомлення передається через канал зв’язку. На жаль, передати повідомлення без завад практично не вдається, адже в каналі зв’язку діють різноманітні завади та перехвати. Зашифроване повідомлення знову ж таки підсумовуються за модулем два з генератором ключів. Ключ шифрування повинен дорівнювати ключу дешифрування. В результаті цих операцій на виході будемо мати теж повідомлення, яке було відправлено відправником.

Схема реалізації дешифратора


Криптографічне перетворення - це таке перетворення інформації, котре використовує таємні дані (таємний ключ), відомий тільки обмеженому колу осіб. Ключ - це інформація, необхідна для безперешкодного шифрування і дешифрування текстів. Шифруванням даних - це процес перетворення відкритих даних на зашифровані з допомогою шифру, а дешифруванням, навпаки - процес перетворення закритих даних на відкриті.

Математична модель криптосистеми:

Е=f(M,Kш)

M’=g(E’,Kдш)

Системи шифрування поділяються на :

1. Симетричні системи;

2. Асиметричні системи або системи з відкритим ключем.

Крипто-аналіз - це наука, котра дозволяє із перехопленої криптограми Е добувати інформацію М, без знання ключа.

1.1    Види крипто-аналітичних атак

 

 

До аналітичних атак відносять атаки, в яких алгоритм побудови атаки заснований на аналітичних принципах розтину крипто-схеми.

Клас аналітичних атак можна розбити на два підкласи:

•        методи крипто-аналізу гамми;

•        методи крипто-аналізу процедури ключової ініціалізації і реініцiалiзацiї.

Через специфіку принципів побудови потокових шифрів основним видом атак на дані схеми в першому підкласі є кореляційні атаки, основна ідея яких полягає в знаходженні кореляції між гаммою тієї, що шифрує і різними лінійними комбінаціями ключа (регістра зрушення). Як об'єкт дослідження кореляційні атаки розглядають нелінійну функцію, що вносить не лінійність до вихідної послідовності регістра зрушення. Особливістю даних атак є те, що успішний крипто-аналіз може бути проведений і без наявності знань про вид нелінійної функції.

Аналітичні атаки - це атаки, що набули найбільш широкого поширення. Всі аналітичні атаки відбуваються при допущенні, що крипто аналітику відомий опис генератора (створюючи поліноми, вид нелінійного перетворення), він володіє відкритим і відповідним йому закритим текстом. Атаки даного класу еквівалентні атакам по відомому відкритому тексту. Завданням крипто аналітика є визначення вживаного ключа (початкового заповнення).

Для забезпечення безпеки від атак використовують деяку комбінацію з чотирьох різних криптографічних послуг. Ці послуги:

*Перевірка користувача - введенням шляху в оперативну транзакцію, користувач підтверджує, що це саме він.

*Ідентифікація Початку координат Даних - забезпечення джерела повідомлення.

*Цілісність Даних - забезпечення збереження даних неправомочними сторонами.

*Чи не відмова - одержувач транзакції здатна демонструвати нейтральному третій особі, що потрібний передавач дійсно посилав транзакцію.

1.2    Вимоги для сучасних криптографічних систем захисту інформації

*Зашифроване повідомлення повинно піддаватися читанню тільки при наявності ключа;

* Кількість операцій, необхідних для визначення використаного ключа шифрування за фрагментом шифрованого повідомлення і відповідного йому відкритого тексту, має бути не менше загального числа можливих ключів;

* Кількість операцій, необхідних для розшифрування інформації шляхом перебору всіляких ключів повинно мати строгу нижню оцінку і виходити за межі можливостей сучасних комп'ютерів (з урахуванням можливості використання мережевих обчислень);

* Знання алгоритму шифрування не повинно впливати на надійність захисту;

* Незначна зміна ключа повинно приводити до істотної зміни виду зашифрованого повідомлення навіть при використанні одного і того ж ключа;

* Структурні елементи алгоритму шифрування повинні бути незмінними;

* Додаткові біти, що вводяться в повідомлення в процесі шифрування, повинен бути повністю та надійно сховані в зашифрованому тексті;

* Довжина шифрованого тексту повинна бути рівною довжині вихідного тексту;

* Не повинно бути простих і легко встановлюваних залежністю між ключами, послідовно що використовуються в процесі шифрування;

* Будь-який ключ з безлічі можливих повинен забезпечувати надійний захист інформації;

* Алгоритм повинен допускати як програмну, так і апаратну реалізацію, при цьому зміна довжини ключа не повинно вести до якісного погіршення алгоритму шифрування.

 

1.3    Симетричні системи шифрування

Симетричні системи - це системи шифрування, в яких ключ шифрування дорівнює ключу дешифрування (Кш=Кдш). Ключ - це інформація, необхідна для безперешкодного шифрування і дешифрування текстів. Симетричні системи найбільш стійкі до крипто аналізу, тому-що у цих системах використовуються один ключ, яким шифрується і дешифрується повідомлення. Не знаючи ключа не можливо прочитати зашифроване повідомлення. Кожен користувач повинен довіряти іншому, щоб не оприлюднювати загальний ключ третій особі. Ці системи ефективно зашифровують велику кількість даних, однак, вони висловлюють істотні ключові проблеми управління в мережах більше ніж у маленькому числі користувачів, і зазвичай використовуються разом з шифрування з відкритим ключем.

1.4    Асиметричні системи або системи з відкритим ключем

Асиметричні системи або системи з відкритим ключем - це системи шифрування, в яких ключ шифрування не дорівнює ключу дешифрування (Кш ≠Кдш). Загалом використовуються в комерційних структурах. Для асиметричних систем ставляться дві вимоги:

1. Перетворення вихідного тексту повинно бути незворотним і виключати його відновлення на основі відкритого ключа;

2. Визначення закритого ключа на основі відкритого також повинно бути неможливим на сучасному технологічному рівні. При цьому бажана точна нижня оцінка складності (кількості операцій) розкриття шифру.

Алгоритми шифрування з відкритим ключем одержали широке поширення в сучасних інформаційних системах. Так, алгоритм RSA став світовим стандартом де-факто для відкритих систем і рекомендований МККТТ. Взагалі ж всі пропоновані сьогодні криптосистеми з відкритим ключем спираються на один з наступних типів незворотних перетворень:

. Розкладання великих чисел на прості множники.

. Обчислення логарифма в кінцевому полі.

. Обчислення коренів алгебраїчних рівнянь.

Тут же слід зазначити, що алгоритми криптосистеми з відкритим ключем (СОК) можна використовувати в двух призначеннях:

. Як самостійні засоби захисту переданих і збережених даних;

. Як кошти для розподілу ключів.

Алгоритми СОК більш трудомісткі, ніж традиційні криптосистеми. Тому часто на практиці раціонально за допомогою СОК розподіляти ключі, обсяг яких як інформації незначний. А потім за допомогою звичайних алгоритмів здійснювати обмін великими інформаційними потоками. Схеми шифрування з відкритим ключем вимагають, щоб кожна сторона мала ключову пару: секретний ключ, який не повинен бути розкритий іншому користувачеві, і загальний ключ, який може бути доступним у загальному каталозі. Ці два ключі пов'язані жорсткої односторонньою функцією, так що в обчислювальному відношенні нездійсненно визначити секретний ключ від загального ключа. Секретний ключ часто зберігається в програмному забезпеченні з використанням пароля, а проте, секретний ключ повинен ідеально бути збережений в безпечній апаратної лексеми, що запобігає прямий доступ або втручання.

 

2. Шифрування методом гамування

Гамування (рис. 2) - це процес накладання за певним законом гами шифру на відкриті дані. Під гамою шифру розуміється псевдовипадкова двійкова послідовність, що виробляється за заданим алгоритмом для зашифровування відкритих даних і розшифрування зашифрованих даних.

Гамування є також широко застосовуваних криптографічним перетворенням. Принцип шифрування гамуванням полягає в генерації гами шифру за допомогою датчика псевдовипадкових чисел і накладення отриманої гами на відкриті дані оборотним чином (наприклад, використовуючи додавання по модулю 2). Процес дешифрування даних зводиться до повторної генерації гами шифру при відомому ключі і накладення такої гами на зашифровані дані.

Отриманий зашифрований текст є досить важким для розкриття в тому випадку, якщо гамма шифру не містить повторюваних бітових послідовностей. По суті гамма шифру повинна змінюватися випадковим чином для кожного шифруючого слова. Фактично ж, якщо період гами перевищує довжину всього зашифрованого тексту і невідома ніяка частина вихідного тексту, то шифр можна розкрити тільки прямим перебором (пробою на ключ). Крипостійкість в цьому випадку визначається розміром ключа.

Метод гамування стає безсилим, якщо зловмисникові стає відомий фрагмент початкового тексту і відповідна йому шифрограма. Простим вирахуванням за модулем виходить відрізок ПСП і по ньому відновлюється вся послідовність. Зловмисники може зробити це на основі припущень про зміст вихідного тексту. Так, якщо більшість надісланих повідомлень починається зі слів" СОВ.СЕКРЕТНО ", то крипто-аналіз всього тексту значно полегшується. Це слід враховувати при створенні реальних систем інформаційної безпеки.

Мал. 2 Лінійно рекурентний регістр (ЛРР)

Будується на основі лінійних рекурентних співвідношень. Лінійний рекурентний регістр (ЛРР) є найбільш простим і поширеним генератором Псевдо Випадковій Двійковій Послідовності (ПСДП). Це малогабаритне, легеня, недорогий пристрій, здатний надати багатий вибір породжуваних послідовностей і забезпечити такі вимоги як:

*великий розмір ансамблю послідовностей, що формуються на одній алгоритмічній основі;

*оптимальність кореляційних функцій в ансамблі;

*збалансованість структури;

*максимальність періоду для даної довжини регістра зрушення.

ЛРР є зсувним регістром з лінійними зворотними зв'язками (схема роботи представлена на рис.3, в якому вхідний сигнал утворюється в результаті складання по модулю 2 декількох фіксованих розрядів. В результаті утворюється вихідний сигнал у вигляді ПСП "0" і "1". Цей "шум" володіє цікавою властивістю: після події деякого часу, визначуваного довжиною регістра, він в точності повторюється (регістр максимальної довжини n перед повторенням проходить через 2n-1 стан). Тобто утворюються циклічні або кільцеві ПСДП.

 

 

Мал. 3

Кожному лінійному рекурентному регістру довжиною n розрядів можна зіставити поліном зворотних зв'язків h(x) з двійковими коефіцієнтами.

Якщо поліном h(x) - примітивний, то довжина послідовності, ЛРР, що генерується, максимальна. Така послідовність називається послідовністю максимальної довжини для зсувного регістра (Maximal Length Shift Register Sequence - MLSRS). Пітерсон і Уелдон показали, що при будь-якому цілому існує n-бітування послідовність MLSRS з періодом. Зокрема, послідовність матиме період і не повториться декілька років при передачі її по лінії зв'язку із швидкістю 1Мбит/с.

Слід зазначити, що для MLSRS, по-перше, розподіл "1" і "0" близько до рівномірного, наскільки це можливо при проходженні повного циклу (кількість "0" відрізняється від "1" на 1) . По-друге, якщо розглянути в одному циклі серії послідовних бітів, то половина серій з "1" довжину 1 ј серій - довжину 2,1/8 - довжину 3 і так далі Ця властивість розповсюджується на серії з "0",с обліком пропущеного. Це говорить про те, що вірогідність появи "1" і "0" не залежить від результату попереднього досвіду. І, по-третє, якщо послідовність повного циклу порівняти з цією ж послідовністю, але циклічно зрушеною на будь-яке число бітів (не рівне нулю або довжині До), то число не спів падань буде на одиницю більше, ніж число збігів. Всі ці властивості послідовності максимальної довжини свідчать про рівномірність розподілу випадкових чисел в цих послідовностях.

3.      Вимоги до програмного продукту

Вимоги розроблені відповідно до п. 20 статті 8 Закону України "Про державне регулювання ринку цінних паперів в Україні", з урахуванням існуючих міжнародних стандартів ISO 9000, ISO 9001, ISO 15022 та державних стандартів України класу 35.80 "Розроблення програмного забезпечення і системна документація".

Ці вимоги поширюються на програмні продукти, які створюються або використовуються професійними учасниками ринку цінних паперів та інститутами спільного інвестування при здійсненні професійної діяльності та визначають вимоги до таких програмних продуктів (далі - програмні продукти). Вимоги розповсюджуються на всі програмні продукти, які використовуються для формування електронних форм подання до Державної комісії з цінних паперів та фондового ринку (далі - Комісія) адміністративних даних різних видів та іншої інформації.

Вимоги:

. Розробка програмного продукту, який призначено для використання на фондовому ринку України, створюється на підставі технічного завдання. Технічне завдання на розробку програмного продукту створюється відповідно до нормативного документа Комісії, яким урегульовані питання, програмна реалізація яких потрібна.

. Програмний продукт повинен бути створений на ліцензійному програмному забезпеченні (з використанням ліцензійних засобів розробника), якщо це передбачено чинним законодавством.

. Механізми захисту інформації, які містить програмний продукт, повинні реалізуватися відповідно до національних нормативно-правових актів захисту інформації або міжнародних стандартів.

Для правильного та якісного виконання курсової роботи потрібно перш за все скласти алгоритм. В нашому випадку це блок-схема програми дешифратора. Блок-схема складається також для пояснення структури програми. Кожен блок в схемі відповідає окремій дії у програмі. Для зручності в схемі використані слова з самого тексту програми. Блок-схема дешифратора у нашому випадку складається з 48 блоків.

Для використання програми необхідно виконати ряд вимог:

1. У папці, в якій міститься програма необхідна наявність файлу з зашифрованою інформацією;

. Ключ вводиться з клавіатури;

. Довжина ключа - 21 символ;      

. Після вводу ключа, потрібно вказати адресу файлу, звідки треба зчитати зашифровану інформацію, наприклад: 1.txt;

. Довжина імені файлу не більше 8 символів.

4.      Текст програми

#include<stdio.h> /*об’явлення бібліотек */i,k,n=0,p=7,bitu,bukva; /* об’явлення змінних */a,b,z,x,v,u,y; /* об’явлення змінних */char m[30],r,c[210],l[210],s[30],j; /* об’явлення масивів та j змінної */char ms,reg[21],key[21]; /* об’явлення масивів та ms змінної */() /* заголовок функції */

{FILE *fp1; /* об’явлення структури файлу */f1[8]; /* об’явлення масиву файлу */(); /* очищення екрану */("=================================");("\n Programma DEKODIROVANIA");("\n=================================\n\n");("\n Vedite key \n"); /* Введення ключа */("%s",key);("\n Vedite kolichectvo bukv \n"); /* Введення кількості букв */("%d",&bukva);("\n Vedite name zakodirovanogo file= "); /* Ввести ім’я закодованого файлу */("%s",f1); /* запис імені файлу */=bukva*7; /* множення кількості букв на сім */(i=0;i<21;i++) /* параметр циклу */

{reg[i]=key[i]; /* кожному елементу масиву reg відповідає кожний елемент масиву key */

}((fp1=fopen("f1.txt","r"))==NULL) /* умова правильності введеного ім’я файлу*/

{printf("\n Nevozmozhno open file \n");fin;} /* безумовний оператор */(i=0;i<bitu;i++) /* параметр циклу для всіх бітів повідомлення */

{fscanf(fp1,"%c",&c[i]); /* запис у пам’ять файлу */

}(k=0;k<bukva;k++) /* параметр циклу для кількості символів переданого повідомлення */

{m[k]=n; /* кожному елементу масиву m[k] дорівнює значенню n */[k]=p; /* кожному елементу масиву s[k] дорівнює значенню p */=n+7;=p+7;=(reg[2]+reg[5]+reg[7]+reg[13]+reg[20])%2; /* сумування по модулю два */(i=m[k];i<s[k];i++)

{l[i]=c[i]^reg[20]; /* кожному елементу масиву l[i] відповідає сумування по модулю два reg[20] з кожним елементом масиву c[i] */

}(l[m[k]]==1) a=64; else a=0; /* умова, якщо елемент масиву l[i] буде дорівнювати одиниці, то програма вибирає перше значення, а якщо не дорівнює одиниці, то друге */(l[m[k]+1]==1) b=32; else b=0;(l[m[k]+2]==1) z=16; else z=0;(l[m[k]+3]==1) x=8; else x=0;(l[m[k]+4]==1) v=4; else v=0;(l[m[k]+5]==1) u=2; else u=0;(l[m[k]+6]==1) y=1; else y=0;=a+b+z+x+v+u+y; /* сумування всіх вибраних програмою букв при заданих умовах */("%c",j); /* виведення на екран розшифрованого повідомлення /*(i=21;i>0;i--)

{reg[i]=reg[i-1]; /* зсув регістрів масиву на один вправо */=reg[0]; /* присвоєння змінній ms нульового регістру */

}

}:;(); /* закрити всі файли */(stdout); /*очистити буфер екрану*/(); /*затримка екрану*/

}

5.      Опис програми

атака шифрування криптографічний гамування

Дана програма призначена для криптографічного дешифрування повідомлення методом гамування за допомогою лінійного рекурентного регістру. Ця програма починається з директиви препроцесора #include, яка в свою чергу підключає заголовковий файл стандартної бібліотеки stdio.h . Далі ми об’явили чотири цілочисленні змінні i,k, bitu,bukva, які належать до типу int. Також ми визначили дві змінних n,p та присвоїли цим змінним початкові значення, а саме n=0 та p=7. У третьому рядку програми ми об’явили сім цілочисленних змінних a,b,z,x,v,u,y. У четвертому рядку ми об’явили дві беззнакові змінні r та j. Ці змінні належать до беззнакового символьного типу, займають лише 1 байт пам’яті. Також ми об’явили чотири масиви беззнакового типу. Два з них, а саме m[30] та s[30] складаються з тридцяти елементів. Інші c[210] та l[210] складаються з двісті десяти елементів. У п’ятому рядку програми ми об’явили три змінних беззнакового символьного типу, а саме ms, reg[21], key[21]. Останні двоє з них є масивами, які складаються з двадцяти одного елемента.

Далі починається робота самої програми. Головна функція програми має назву main(), слово main - заголовок функції. Сьомий рядок програми об’являє, що fp1 є показником на структуру FILE. Програма на мові С управляє кожним файлом з допомогою окремої структури FILE. У восьмому рядку програми ми об’явили масив символьного типу f1[8], який складається з восьми елементів. Далі ми використали функцію clrscr(). Ця функція дає змогу очистити екран після кожної компіляції програми. В 10, 11 та 12 рядку ми використали функцію printf з допомогою якої ми можемо вивести на кран те, що ми хочемо. В 13 рядку програми ми ввели словосполучення Vedite key. А в наступному рядку з допомогою функції scanf значення, введено користувачем, поміщується в комірку пам’яті, якій присвоєне ім’я f1. В 15, 16 рядку програми ми ввели kolichectvo bukv та записали їх у пам’ять змінної bukva. У 17, 18 рядку ми зробили ту ж саму операцію, що і в попередніх двох рядках тільки зі словосполученням Vedite name zakodirovanogo file. В 19 рядку програми ми змінній bitu присвоїли вираз bukva*7. В 20 рядку програми ми ввели оператор for, який включає в свої параметри три частини. Перша частина для встановлення початкового значення змінній. У нашому випадку i=0. Друга частина визначає умову при якій буде виконуватися тіло циклу. В нашій програмі i<21. Третя частина - це модифікатор, який визначає зміну значень змінних, що управляють циклом після кожного виконання тіла циклу. В нашій програмі i++. В 21 рядку проводиться почергове привласнення значень від масиву key[i] до масиву reg[i]. Ця операція буде виконуватися рівно 21 раз. 23 рядок відкриває файл "f1.txt" для читання ("r") і перевіряє успішність виконання даної операції. Якщо даний файл не вдалося відкрити, то програма припиняє свою роботу переходячи через безумовний оператор goto до мітки fin. В 26 рядку ми використали оператор for (початкове значення i=0, умова i<bitu та модифікатор i++). У наступному рядку використали функцію fscanf з допомогою якої можна зчитати записану інформацію з файлу. Функція fscanf - це аналог функції scanf, за виключенням того, що fscanf в якості аргументу передається показник файла, з якого зчитуються дані.

В 29 рядку програми ми знову використали оператор for (початкове значення k=0, умова k<bukva та модифікатор k++). В наступних двох рядках програми ми привласнили масивам m[k] та s[k] відповідні значення n та p.( n=0; p=7). В 32, 33 рядках ми використали такі операції (n=n+7; p=p+7). Значення n та p після виконання кожного циклу програми збільшується на сім (наприклад: коли k=29 n буде дорівнювати 203, а p - 210). Відповідно до значень n та p масиви m[k] та s[k] теж змінюють свої значення після виконання кожного циклу програми. В 34 рядку ми використали операцію додавання за модулем 2, а саме %2. Змінній ms ми привласнили суму відповідних регістрів (у нашому випадку це сума таких регістрів: reg[2]+reg[5]+reg[7]+reg[13]+reg[20]). В наступному рядку програми ми вставили ще один оператор for (початкове значення i=m[k], умова i<s[k] та модифікатор i++). Цей оператор for є вставленим у зовнішній оператор for, тобто ці оператори взаємодіють один з одним. Значення масивів m[k] та s[k] залежать від значень змінних n та p, які після кожного виконання циклу програми змінюють свої значення (масиви m[k] та s[k] змінять свої значення рівно 30 раз). В 36 рядку програми ми масиву l[i] присвоїли значення виразу c[i]^reg[20] (цей вираз означає додавання побітно, тобто іншими словами додавання за модулем два). З 38 по 44 рядок включно ми використали оператори умовної передачі управління (комбінацію вкладених конструкцій if - else - if). В наступному рядку програми ми присвоїли змінній j суму вибраних програмою змінних a+b+z+x+v+u+y (в залежності від умови програма вибирає ці змінні).

В 43 рядку програми ми виводимо вже розшифрований програмою текст надрукований відправником (після виконання кожного циклу програми виводиться на екран одна буква чи символ). Далі ми використали ще один оператор for - цей оператор є другим вставленим оператором for в загальний оператор for. Цей оператор вставлений в програму з метою щоб зсунути регістри на один розряд вправо після кожного виконання циклу програми (reg[i]=reg[i-1]). В 49 рядку програми змінній ms присвоюється значення нульового регістру (нульовий регістр змінюється після виконання кожного циклу програми). 52 рядок є завершенням виконання першого оператора for.

Функція fcloseall() символізує закриття всіх файлів. Функція fflush(stdout) дозволяє очистити буфер екрану, а з допомогою функції bioskey() відбувається затримка екрану.

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

Висновки

При виконанні даного курсового проекту мною було закріплено та поглиблено знання з навчальної дисципліни "Алгоритмізація та програмування". Цей проект дозволяє оволодіти початковими криптографічними навиками та вдосконалити навики програмування на алгоритмічній мові високого рівня, познайомитись з криптографічними системами та їх різновидами. Під час підготовки даного проекту було відпрацьоване правильне оформлення технічної документації на програмні продукти.

Виконання цієї курсової роботи дає можливість познайомитися з криптографічною системою, в основу якої покладено застосування лінійно рекурентного регістру(ЛРР). В процесі написання курсової роботи було вивчено такі криптографічні системи, як синхронні та асинхронні. В даному проекті використовується синхронна криптографічна система в якій ключ шифрування дорівнює ключу дешифрування (Кш=Кдш). Цей аспект є надзвичайно важливим, адже неправильне введення ключа веде за собою неправильне розшифрування тексту. Симетричні системи найбільш стійкі до крипто аналізу, тому-що у цих системах використовуються один ключ, яким шифрується і дешифрується повідомлення. Ці системи ефективно зашифровують велику кількість даних, однак, вони висловлюють істотні ключові проблеми управління в мережах більше ніж у маленькому числі користувачів, і зазвичай використовуються разом з шифрування з відкритим ключем.

В процесі виконання даної курсової роботи ми познайомилися з таким методом шифрування як гамування. Гамування - це процес накладання за певним законом гами шифру на відкриті дані. Під гамою шифру розуміється псевдовипадкова двійкова послідовність, що виробляється за заданим алгоритмом для зашифровування відкритих даних і розшифрування зашифрованих даних. Гамування здійснюється на основі лінійно рекурентного регістру (ЛРР). Він будується на основі лінійних рекурентних співвідношень. Лінійний рекурентний регістр (ЛРР) є найбільш простим і поширеним генератором Псевдо Випадковій Двійковій Послідовності (ПСДП).

Вважаю, навички, здобуті під час роботи над даним проектом, знадобляться у подальшому навчанні та службі.

Список джерел

1. Ставровский А. Б. - "Первые шаги в програмировании" 2008.

. Рябко Б.Я., Фионов А.Н. Криптографические методы защиты информации. - Москва. - Изд-во Горяч. Линия-Телеком, 2010.

. Сыпченко Р. П. - "Основы алгоритмизации задач и управления" 2002.

. Фридман "Основы Си" 2007.

. Проценко В.С., Чаленко П.Й., Ставровський А.Б. "Технiка програмування мовою Сi: Навч.посiбник" 2009.

6. Вікіпедія.

Похожие работы на - Розробка проекту програмного дешифратора алгоритмічною мовою високого рівня

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!