Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
100-64. Основи захисту та кодування інформацїї.....doc
Скачиваний:
10
Добавлен:
20.12.2018
Размер:
2.49 Mб
Скачать

Міністерство освіти і науки України

Український державний університет водного господарства

та природокористування

Кафедра прикладної математики

100-64

0

МЕТОДИЧНІ ВКАЗІВКИ

для виконання лабораторних та самостійних робіт

з дисципліни

"Основи захисту та кодування інформацїї"

студентами спеціальностей 7.080200, 8.080200 "Прикладна математика"

Ч астина І

Рекомендовано до друку

методичною комісією

факультету комп’ютерних

інтегрованих систем

та прикладної математики

Протокол № 9

від 26 квітня 2004 р.

Рівне 2004

Методичні вказівки для виконання лабораторних та самостійних робіт з дисципліни "Основи захисту та кодування інформацїї" студентами спеціальностей 7.080200, 8.080200 "Прикладна математика". Частина І./ П. В. Ольшанський, - Рівне: УДУВГП, 2004, -52 с.

Упорядник П. В. Ольшанський, старший викладач кафедри

обчислювальної математики.

Відповідальний за випуск

А.П. Власюк, доктор технічних наук,професор,

завідувач кафедри прикладної математики.

Зміст

Вступ ………………………………………………………………………...

3

Основні поняття і терміни ………………………………………………

3

Лабораторна робота №1

Реалізація симетричного XOR-алгоритму шифрування файлів в Delphi…………………………………………………………….

10

Лабораторна робота №2

Реалізація перестановочного алгоритму шифрування файлів в Delphi. Комбінування підстановочних та перестановочних алгоритмів…………………………………………………………………..

20

Лабораторна робота №3.

Реалізація алгоритму шифрування файлів методом одноразового блокнота в Delphi……………………………………...

29

Лабораторна робота №4.

Реалізація симетричного алгоритму гамування шифрування файлів в Delphi…………………………………………………………….

34

Зміст дисципліни "Основи захисту і кодування інформації"….

42

Завдання для самостійної роботи……….………………………….

44

Вступ

У 1949 році була опублікована стаття Клода Шеннона "Теорія зв'язку в секретних системах", яка підвела наукову базу під криптографію і криптоаналіз. З цього часу стали говорити про нову науку криптологію (гр. kryptos - таємний і logos - повідомлення) - науку про перетворення інформації для забезпечення її таємності.

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

Основні поняття і терміни

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

Криптографія (cryptography) (гр. ktyptos - таємний і grapho - пишу) - наука про способи перетворення (шифрування) інформації з метою захисту її від незаконного чи небажаного використання. Крім того, шифрування повинне також забезпечувати можливість легкого одержання вихідної інформації із зашифрованої легітимними користувачами, яким відомий чи доступний ключ алгоритму розшифровування або інша ключова інформація. Найчастіше передбачається, що зашифрована інформація передається по загальнодоступному каналі зв'язку, наприклад, радіо чи Інтернет, так, що всі користувачі (законні і незаконні) мають до неї вільний доступ. У математичній чи теоретичній криптографії прагнуть показати, що задача зламування шифру є задачею із строго доказовими властивостями, зокрема, її розв’язування має визначену "складність" у рамках тієї чи іншої математичної моделі.

Шифрування (encryption) - процес зашифровування інформації, тобто застосування криптографічного перетворення до вхідних даних (відкритого тексту).

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

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

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

Криптографічна стійкість, криптостійкість (cryptographic strength) - стійкість шифросистеми проти всіх відомих видів криптоаналізу.

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

Раунд чи цикл шифрування (round) - один комплексний крок алгоритму, в процесі якого перетворюються дані.

Підключ шифрування (round key, subkey) - криптографічний ключ, що обчислюється і використовуваний тільки на етапі шифрування з основного ключа шифрування.

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

Гама-послідовність чи просто гама (gamma sequence, gamma) - послідовність псевдовипадкових елементів, що генеруються за певним законом чи алгоритмом.

Гамування (gamma xoring) - процес "накладання" гама-послідовності на відкриті дані, найчастіше з допомогою логічної операції XOR (виключне АБО).

Автентичність даних і систем (authenticity of information) - для даних автентичність можна визначити як факт підтвердження дійсності інформації, що міститься в цих даних, а для систем - здатність забезпечувати процедуру відповідної перевірки - аутентифікації даних.

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

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

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

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

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

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

Криптоаналіз (cryptanalysis) - набір методик і алгоритмів дешифрування криптографічно захищених повідомлень, аналізу шифросистем.

Основні методи кpиптоаналізу:

  • Brute force ("грубою силою") - перебір всіх можливих варіантів (ключів).

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

  • Known plaintext (з відомим відкритим текстом)- ключ обчислюється за відомим фрагментом відкритого тексту та відповідного йому зашифрованого.

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

  • Chosen plaintext (з вибраним відкритим текстом)- криптоаналітик сам має можливість формувати відкритий текст та пропускати його через шифрувальну машину (алгоритм) і використовує отриманий зашифрований текст для аналізу.

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

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

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

Схема симетричної криптосистеми показана на рис.1.

Асиметрична криптосистема чи система з відкритим (публічним) ключем - система із двома ключами. Генеруються два ключі - секретний і відкритий. Відкритий ключ передається відкритими каналами зв’язку одному або декільком партнерам, з допомогою нього шифруються повідомлення і передаються володарю секретного ключа. Розшифрувати повідомлення можна тільки секретним ключем. Знайти секретний ключ за відомим публічним - обчислювально складна задача, яку неможливо розв’язати (поки що) за допомогою комп’ютерних систем. Для генерації ключів і шифрування використовуються обчислювально - складні алгоритми, наприклад, розклад астрономічно великих чисел на прості множники, цілочисельне логарифмування, еліптичні функції. Алгоритми, які грунтувались на задачі вкладання ранця, виявились ненадійними і спростовані математично. Недоліком асиметричних криптосистем є їх нестроге теоретичне обгрунтування. Однак є практичні області, де без них обійтись неможливо - це системи електронного підпису, електронного голосування, "електронні" гроші.

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

Рис.1 Схема симетричної криптосистеми із секретним ключем

Лабораторна робота №1 Тема: Реалізація симетричного xor-алгоритму шифрування файлів в Delphi

Мета роботи. Створити програму для шифрування файлів довільного типу одним з найпоширеніших алгоритмів, відлагодити проект Delphi з декількома модальними формами, спроектувати базовий шаблон для подальшого вивчення різних методів шифрування.

Теоретичні відомості

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

  • підстановочні, в яких кожен символ чи група символів заміняється за певним правилом;

  • перестановочні, в яких відбувається перестановки символів.

Підстановочні шифри поділяють на

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

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

  • поліграмні - групи символів різної довжини заміняються іншими групами з допомогою шифрувальних таблиць або книжок.

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

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

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

Таблиця 1. Логічна операція XOR

A

B

A XOR B

0 (False)

0 (False)

0 (False)

0 (False)

1 (True)

1 (True)

1 (True)

0 (False)

1 (True)

1 (True)

1 (True)

0 (False)

Операція XOR - eXclusive OR, виключне АБО чи додавання за модулем 2 - результат логічної операції з двома двійковими розрядами дорівнює 1, якщо розряди різні, і дорівнює 0, якщо розряди співпадають.

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

Рис.2 Головна форма проекту

Хід роботи

1. Відкрийте новий проект в Delphi, створіть головну форму і заповніть підписами і кнопками згідно рис.2.

2. Розмістіть на формі компонент OpenDialog1 (закладка Dialogs). У властивості Filter задайте типи файлів згідно рис.3.

Рис.3 Задання властивостей Filter для OpenDialog1

3. Створіть нову форму Form2 для задавання ключа згідно рис.4. Задайте для фоми властивості: BorderStyle=None; Visible=False; Position=poScreenCenter; Розмістіть на формі компонент Edit. Створіть для форми обробники подій

Рис.4 Модальна форма для введення ключа

Рис.5 Форма Form3 для демонстрації процесу шифрування

procedure TForm2.Edit1KeyDown(Sender: TObject;

var Key: Word; Shift: TShiftState);

begin

if (key=VK_RETURN) then

begin

psw1:=Edit1.Text;

ModalResult:=6;

end;

end;

procedure TForm2.FormShow(Sender: TObject);

begin

Edit1.Text:='';

end;

4. Створіть нову форму Form3 для наочної демонстрації процесу шифрування (рис.5). Задайте властивості BorderStyle=bsDialog; Visible=False; Position=poScreenCenter. Розмістіть на формі п’ять підписів, два поля Memo1 та Memo2, індикатор Gauge1 (закладка Samples).

5. Створіть основну процедуру для шифрування файлів за зразком

procedure XOR_alg;

var f,f1:file of byte;

b,b1:byte;

s,s1:string;

k,k100:integer;

time0,time1:TDateTime;

FileLen :integer;

millisec :comp;

procedure Code(b:byte;var bc:byte);

var r, a : byte;

begin

r:=k mod length(psw1);

a:=ord(psw1[r+1]);

bc:=a XOR b

end;

begin

Form3.Caption:=' XOR алгоритм';

Form3.Label1.Caption:='Вхідний файл:'+name1;

AssignFile(f,name1);

Reset(f); FileLen:= FileSize(f);

k100:= FileLen div 100;

Form3.Label3.Caption:='Довжина файла '+

IntToStr(FileLen)+'байтів';

Form3.Label5.Caption:=' ';

Form3.Label2.Caption:='Зашифрований файл:'+

name1+'.cip';

AssignFile(f1,name1+'.cip' );

Rewrite(f1);

k:=0;// лічильник кількості символів

Form3.Gauge1.Progress:=0; // покажчик індикатора

time0:=Time;

//початок формування рядків для виведення на екран

s:='';s1:='';

while not eof(f) do

begin

// очищення полів Мемо для запобігання переповнення

if k mod 20000=0 then

begin Form3.Memo1.Clear; Form3.Memo2.Clear end;

// відлік відсотків на індикаторі

if k mod k100=0 then

begin

Form3.Gauge1.Progress:=Form3.Gauge1.Progress+1;

// виведення системного часу

Form3.Label4.Caption:='Час '+TimeToStr(Now);

Form3.Refresh; // оновлення форми

end;

read(f,b); // читання байта з файла

// формування рядка для виведення на екран

s:=s+chr(b); code(b,b1); // кодування байта

write(f1,b1); // запис байта в результуючий файл

// формування рядка для виведення на екран

s1:=s1+chr(b1);

//виведення на екран рядків по 80 символів

if (b=13) or (length(s)>79) then

begin

Form3.Memo1.Lines.Add(s);

Form3.Memo2.Lines.Add(s1);

s:='';s1:='' // очищення рядкових буферів

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]