Дослідження та порівняльний аналіз алгоритмів кодування даних

Історія створення мови С#. Аналіз алгоритмів кодування даних. Розробка системи в середовищі Visual Studio 2008 Express. Схема шифрування алгоритму DES. Дослідження алгоритму RC2. Приклади хешів RIPEMD-160. Програмна реалізація основних процедур системи.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 25.10.2012
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

Криворізький інститут

Кременчуцького університету економіки, інформаційних технологій і управління

Кафедра технічної кібернетики

ДИПЛОМНА РОБОТА

зі спеціальності

7.091402 “Гнучкі комп'ютеризовані системи та робототехніка“

ПОЯСНЮВАЛЬНА ЗАПИСКА

«Дослідження та порівняльний аналіз алгоритмів кодування даних»

Студентки групи ГКС-05-д Лешакової Ірини Володимирівни

Керівник роботи ст. викл. Батареєв Віктор Володимирович

Консультанти:

зі спеціальної частини доц., к.т.н. Лукашенко Й.М.

з програмної частини доц., к.т.н. Вдовиченко І.Н.

з економічної частини доц., к.е.н. Тимко Є.В.

з охорони праці доц., к.т.н. Климович Г.Б.

нормоконтроль ст. викл. Захарова Г.Б.

Завідувач кафедри ТК доц., к.т.н. Старіков О.М.

Кривий Ріг

2010

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

Криворізький інститут

Кременчуцького університету економіки, інформаційних технологій і управління

Кафедра технічної кібернетики

Спеціальність 7.091402 “Гнучкі комп'ютеризовані системи та робототехніка“

ЗАТВЕРДЖУЮ

Зав. кафедрою доц., к.т.н. Старіков О.М.

_______________________

" 1 " листопада 2009 р.

ЗАВДАННЯ

на дипломну роботу студента

Лешакової Ірини Володимирівни

(прізвище, ім'я, по-батькові)

1. Тема роботи: Дослідження та порівняльний аналіз алгоритмів кодування даних______________

затверджена наказом по інституту від " 29 " жовтня 2009 р. № 73С-01_____

2. Термін здачі студентом закінченої роботи 25.05.10. _

3. Вхідні дані до роботи: Вимоги до кінцевого програмного продукту, матеріали наукових досліджень, опис алгоритмів кодування даних.

4. Зміст розрахунково-пояснювальної записки (перелік питань, що підлягають розробці): Постановка завдання; Дослідження мови програмування С#; Дослідження алгоритмів кодування; Опис функціональних можливостей та програмної реалізації проектованої системи; Економічне обґрунтування доцільності розробки програмного продукту; Охорона праці.

5. Перелік графічного матеріалу (з точними вказівками обов'язкових креслень)

1. Генеалогічне древо С#

2. Схема алгоритму 3DES

3. Схема шифрування алгоритму DES

4. Процедура SubBytes

5. Логіко-функціональна схема роботи системи

6. Загальний вид головної форми системи на етапі проектування

7. Головне вікно системи в одному з робочих режимів____________________________________

6. Консультанти з роботи, з вказівками розділів роботи, що належать до них

Розділ

Консультант

Підпис, дата

Завдання видав

Завдання прийняв

Спеціальна частина

Лукашенко Й.М.

Програмна частина

Вдовиченко І.Н.

Економічна частина

Тимко Є.В.

Охорона праці

Климович Г.Б.

7. Дата видачі завдання 01.11.09 р.

Керівник ____________________

Завдання прийняв до виконання ____________________

КАЛЕНДАРНИЙ ПЛАН

№ п/п

Найменування етапів дипломної роботи

Термін виконання етапів роботи

Примітки

1.

Отримання завдання на дипломну роботу

01.11.09

2.

Огляд існуючих рішень

20.02.10

3.

Теоретичне дослідження інструментальних засобів реалізації проекту

13.03.10

4.

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

28.04.10

5.

Оформлення пояснювальної записки

6.05.10

6.

Оформлення графічної документації

14.05.10

7.

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

20.05.10

8.

Представлення дипломної роботи до захисту

25.05.10

Студент-дипломник _________________

Керівник роботи _________________

Анотація

Метою дипломної роботи є дослідити та зробити порівняльний аналіз алгоритмів кодування даних. В ході досліджень була створена система яка проводить кодування даних різними алгоритмами кодування і виводить результати аналізу.

Розроблена система реалізована в середовищі Visual Studio 2008 Express.

Розділів 6, схем та рисунків 28, таблиць 20, бібліографічних посилань 30, загальний обсяг - 103.

Аннотация

Целью дипломной работы является исследовать и провести сравнительный анализ алгоритмов кодирования данных. В ходе исследований была создана система которая проводит кодирования данных разными алгоритмами кодирования и выводит результат анализа

Разработанная система реализована в среде Visual Studio 2008 Express.

Разделов 6, схем и рисунков 28, таблиц 20, библиографических ссылок 30, общий объем - 103.

The summary

The purpose of the diploma work is to investigate and conduct a comparative analysis of algorithms for data encryption. The studies established system ma which holds data encoding different encryption algorithm and displays the result of analysis

The developed system is implemented in Visual Studio 2008 Express

Sections 6, circuits and figures 28, tables 20, bibliographic references 30, total amount - 103.

ЗМІСТ

ВСТУП

1. ПОСТАНОВКА ЗАВДАННЯ

1.1 Найменування та галузь використання

1.2 Підстава для створення

1.3 Характеристика розробленого програмного забезпечення

1.4 Мета й призначення

1.5 Загальні вимоги до розробки

1.6 Джерела розробки

2. Дослідження мови програмування С#

2.1 Історія створення мови С#

2.2 Зв'язок С# з .NET Framework

2.3 Об'єктивно-орієнтоване програмування

2.4 Два керуючих оператора

3. ДОСЛІДЖЕННЯ АЛГОРИТМІВ КОДУВАННЯ

3.1 Алгоритм Triple DES

3.1.1 Історія створення алгоритму Triple DES

3.1.2 Алгоритм

3.1.2 Криптостійкість

3.2 Алгоритм DES

3.2.1 Історія створення алгоритму DES

3.2.2 Блочний шифр

3.2.3 Перетворення Мережею Фейстеля

3.2.4 Схема шифрування алгоритму DES

3.2.5 Цикли шифрування

3.2.6 Генерування ключів ki

3.2.7 Кінцева перестановка

3.2.8 Схема розшифрування.

3.2.9 Режими використання DES

3.2.10 Криптостійкість алгоритму DES

3.2.11 Застосування

3.3 Дослідження алгоритму RC2

3.3.1 Алгоритм RC2

3.4 Дослідження алгоритму AES

3.4.1 Опис AES

3.4.2 Шифрування

3.5 Дослідження алгоритму RIPEMD-160

3.5.1 Реалізація RIPEMD-160

3.5.2 RIPEMD-160 на псевдокоді

3.5.3 Приклади хешів RIPEMD-160

3.5.4 Продуктивність

3.6. Дослідження алгоритму SHA-2

3.6.1 Історія SHA-2

3.6.2 Алгоритм SHA-2

3.6.3 Приклади SHA-2.

3.6.4 Криптоаналіз SHA-2

3.6.5 Застосування та сертифікація

4. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ ТА ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ПРОЕКТОВАНОЇ СИСТЕМИ

4.1 Функціональне призначення та технологічні особливості розробки

4.2 Логіко-функціональна схема роботи системи

4.3 Програмна реалізація основних процедур системи

4.4 Опис інтерфейсу користувача

5. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ

5.1 Організаційно-економічна частина

5.2 Розрахунок економічного ефекту по впровадженню програмного продукту.

6. ОХОРОНА ПРАЦІ

6.1 Аналіз небезпечних і шкідливих факторів в обчислювальному центрі

6.2 Заходи щодо нормалізації шкідливих і небезпечних факторів

6.3 Пожежна безпека

ВИСНОВКИ

СПИСОК ЛІТЕРАТУРИ

ДОДАТОК А - код програми

ВСТУП

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

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

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

Реалізація даної задачі проводиться у системі програмування Visual Studio 2008 Express, яка володіє великими можливостями по створенню програм, необхідним набором драйверів для доступу до самих відомих форматів баз даних, зручними і розвиненими засобами для доступу до інформації, що розташована як на локальному диску, так і на віддаленому сервері, а також великою колекцією візуальних компонентів для побудування вікон, які відображаються на екрані. Visual Studio 2008 Express має багато бібліотек для спрощення програмування, на відміну від Delphi.

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

Visual Studio 2008 Express використовується перш за все для створення і підтримки систем, призначених як для окремих персональних комп'ютерів, так і для серверів. Visual Studio 2008 Express, як і розроблені з її допомогою програмні продукти, можуть функціонувати під практично будь-якою операційною системою типу Windows 95, 98, 2000 NT,XP, Vista, 7.

Про Visual Studio 2008 Express говорять як про середовище швидкого створення програм. Це технологія візуального програмування, тобто користувач оформляє свою майбутню програму, і бачить результати своєї роботи ще до запуску самої програми.

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

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

1. ПОСТАНОВКА ЗАВДАННЯ

1.1 Найменування та галузь використання

Найменування: дослідження та порівняльний аналіз алгоритмів кодування даних. Розроблена система в ході виконання дипломної роботи може використовуватись будь якою людиною яка хоче вибрати оптимальний алгоритм кодування даних і закодувати дані з допомогою нього.

1.2 Підстава для створення

Підставою для розробки є наказ № 73С-01 від 29 жовтня 2009 р. по Криворізькому інституту КУЕІТУ.

Початок робіт: 01.11.09. Закінчення робіт: 25.05.10.

1.3 Характеристика розробленого програмного забезпечення

В ході досліджень була створена система для аналізу властивостей алгоритмів кодування даних на прикладі конкретного файлу. Розроблена система реалізована в середовищі Visual Studio 2008 Express. Система повинна функціонувати під керуванням операційної системи Windows ХР.

Вхідною інформацією для розробленої системи є файл.

Головним завданням системи є аналіз властивостей алгоритмів кодування даних. Вибір алгоритму кодування залишається за людиною.

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

1.4 Мета й призначення

Метою дипломної роботи є дослідження та проведення порівняльного аналізу алгоритмів кодування даних.

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

1.5 Загальні вимоги до розробки

Вимоги до програмного забезпечення:

· Робота в середовищі операційних систем Windows;

· Простота й зрозумілість інтерфейсу.

Мінімальні вимоги до апаратного забезпечення:

· IBM-сумісний комп'ютер, не нижче Pentium IІ, RAM-128Mb, SVGA-800*600*16bit;

· Вільний простір на жорсткому диску не менш 4 Мб.

1.6 Джерела розробки

Джерелами розробки дипломної роботи є:

· загальний опис алгоритмів кодування даних;

· довідкова література;

· наукова література;

· технічна література;

· програмна документація.

2. Дослідження мови програмування С#

За пару останніх років комп'ютерний світ кілька зійшов з уторованим шляхом, перейди від концепції програмування для окремих систем до створення інтерактивного мережевого оточення. Багато років між комп'ютерними мовами, операційними системами і засобами розробки велася боротьба за ринок збуту, але для більшості з них «мережею як і раніше залишаються один комп'ютер». Тепер же перед сучасною мовою програмування стоять абсолютно нові завдання, для вирішення яких і було розроблено мову С#, що є наступною сходинкою

В еволюції мов програмування. Від своїх попередників взяв вагу найкраще, об'єднав новітні розробки в галузі проектування мов програмування. У першу чергу С# увібрав в себе кращі якості C + + і Java - двох найбільш широко використовуваних мов. Крім того, до нього включені такі інноваційні елементи, як делегати (delegates) і індексатори (indexers). А оскільки С# використовує засоби системи .NET Framework, його код є найвищою мірою стерпним і може бути використаний при розробці програмних комплексів в багатомовному середовищі. Компоненти програмного забезпечення, створені з використанням С#, сумісні з кодом, який написаний на інших мовах, якщо він також призначений для-Net Framework.

С# програмування - це не тільки ключові слова і синтаксис, що визначає мову. Тут мова повинна йти і про використання бібліотеки .NET Framework Class Library яка дуже великою. С# - це нова мова. Подібно до всіх нових комп'ютерних мов, він повинен пройти період удосконалення і становлення. Історія мови С# тільки починається.

2.1 Історія створення мови С#

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

Щоб вирішити ці проблеми, компанія Microsoft в кінці 1990-х голів розробила мова С (головний архітектор мови Лідері Хейльсбсрг), що є складовою частиною загальної стратегії .NET цієї компанії. Альфа-версія мови була випущена в середині 2000 голи.

Мова С# безпосередньо пов'язаний з широко вживаними і найбільш популярними в усьому світі мовами програмування С, C++ і Java. Сьогодні практично вага професійні програмісти знають ці мови, тому перехід до базується на них С# відбувається без особливих труднощів-Хейльсберг, так само як автори мов C++ і Java, не «винаходити колесо», а пішов уторованим шляхом - використовуючи в якості фундаменту раніше створені мови, зосередився на поліпшення та інноваціях.

Генеалогічне древо С# показано на рис. 2.1. Мова С# будується на об'єктної моделі, яка була визначена в C++, а синтаксис, багато ключових слова та оператори він успадкував від мови С, Якщо ви знаєте ці мови програмування. то у вас не виникне проблем при вивченні С#.

Зв'язок між С і Java більш складна. Обидві мови розроблені для створення переносимого коду, базуються на С і C++, використовують їх синтаксис і об'єктну модель. Однак між цими мовами немає прямого зв'язку, вони більше схожі на двоюрідних братів, які мають спільних предків, але відрізняються багатьма ознаками. Якщо ви вмієте працювати на Java, це полегшить вам освоєння С#, і навпаки, при вивченні Java вам стане в нагоді знання багатьох концепций С#.

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

Рис. 2.1 Генеалогічне древо С#

В кінці 1970-х років настав момент, коли багато проектів досягли максимального розміру, доступного для обробки за допомогою мови структурного програмування С. Тепер були потрібні нові підходи, і для вирішення цієї проблеми було створено об'єктивно-орієнтоване програмування (ООП), що дозволяє програмістові працювати з програмами більшого об'єму. А оскільки С, який був у той час найпопулярнішою мовою, не підтримував ООП, виникла необхідність створення його об'єктивно-орієнтованої версії (названої пізніше С++).

Ця версія була розроблена в тій же компанії Bell Laboratories Б'ярне Страустрапом на початку 1979 року. Спочатку мова отримала назву «С з класами», але в 1983 році був перейменований в С++. Він повністю включає в себе мову С (тобто С служить фундаментом для С++) і містить нові можливості, призначені для підтримки об'єктивно-орієнтованого програмування. Фактично С++ є об'єктивно-орієнтованої версією мови С, тому програмістові, що знає С, при переході до програмування на С++ треба вивчити тільки нові концепції ООП, а не нову мову.

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

Важливо розуміти, що розробка С++ не є спробою створення нової мови програмування, а лише удосконалює і доповнює вже досить успішний мову. Такий підхід, який став новим напрямком розвитку комп'ютерних мов, використовується і зараз.

2.2 Зв'язок С# з .NET Framework

Хоча C# як мова програмування може вивчатися ізольовано, краще розглядати його у взаємозв'язку з .NET Framework - середовищем, в якому він працює. Тому, що по-перше, C# початково був розроблений компанією Microsoft для створення коду .NET Framework, по-друге, .NET Framework визначає бібліотеки, що використовуються мовою C#. Оскільки вони так тісно пов'язані, важливо розуміти загальну концепцію .NET Framework та її значущість для C#.

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

Мова С# використовує дві важливі складові .NET Framework. Перша - це не залежних від мови середовище виконання (Common Language Runtime, CRL), система, що управляє виконанням вашої програми, і що є частиною технології .NET Framework, яка дозволяє програмам бути стерпним, підтримує програмування з використанням декількох мов і забезпечує безпеку передачі даних.

Друга складова - бібліотека класів .NET Framework, яка дає програмі доступ до середовища виконання, наприклад, використовується для вводу / виводу даних. Якщо ви початківець, то вам може бути не знайомий термін клас. Класом є об'єктивно-орієнтована конструкція, яка допомагає організувати програму. Поки ваша програма обмежена характеристиками, де підтримується середовище виконання .NET Framework.

Усі переваги керованого коду забезпечуються CLR. Якщо ж ваш код буде використовуватися програмами, написаними на інших мовах, для максимальної сумісності необхідно дотримуватися спільної мовної специфікації (Common Language Specification, CRL). Ця специфікація описує набір характеристик, які є загальними для різних мов. Відповідність коду спільної мовної специфікації особливо важливо при створенні компонентів програмного забезпечення, які будуть використовуватися іншими мовами. Якщо в майбутньому вам доведеться створювати комерційний код, то ви повинні будете дотримуватися специфікації CRL, тому ми провели інформацію про неї в даному розділі.

2.3 Об'єктивно-орієнтоване програмування

Мова С# базується на принципах об'єктивно-орієнтованого програмування (ООП), і всі С# - програми є в якійсь мірі об'єктивно-орієнтованими. Тому для написання навіть найпростішої С# - програми дуже важливо знати принципи ООП.

ООП є потужною технологією виконання завдань, з якими доводиться стикатися програмістам. З часів винаходу комп'ютера методи програмування значно змінилися. Протягом розвитку комп'ютерної науки фахівцям в основному доводилося вирішувати питання, пов'язані зі збільшенням складності програм. Наприклад, на перших комп'ютерах програмування здійснювалося за допомогою зміни довічних машинних інструкцій, при цьому використовувалися елементи управління передній панелі комп'ютера. Такий метод добре працював, поки обсяг програм обмежувався кількома сотнями інструкцій. Коли ж обсяг використовуваного коду виріс, був винайдений мова асемблера, і програміст, використовуючи символічне представлення машинних інструкцій, вже зміг працювати з більш складними і громіздкими програмами. Потім, пристосовуючись до зростання обсягу та складності програм, програмісти розробили високорівневі мови, такі як FORTRAN і COBOL. Коли ж ці ранні мови досягли межі своїх можливостей, було винайдено структурне програмування.

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

ООП увібрав в себе кращі ідеї структурного програмування і об'єднало їх з кількома новими концепціями, в результаті чого з'явився новий спосіб організації програм. Не вдаючись в подробиці, можна сказати, що програма складається одним із двох способів: навколо свого коду або навколо своїх даних. При використанні технологи структурного програмування програми зазвичай організовуються навколо коду. Такий метод можна розглядати як «код, що впливає на дані».

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

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

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

У межах код, дані або і код, і дані можуть бути або закритими для інших об'єктів (private), або відкритими (public).

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

У C# основною структурою, що використовує інкапсуляцію, є клас, специфікують як дані, так і код, який буде працювати з даними. Мова C# застосовує специфікацію класів для конструювання об'єктів, що є екземплярами класів. Отже, клас фактично є набором інструкцій, в яких зазначено, як має бути створений об'єкт.

Код і складові клас дані називаються змінними екземпляра. Фрагменти коду, які працюють з цими даними, називаються методами члена класу або просто методами. У C# термін метод прийнятий для програми, яку в С/С++ програмісти називають функцією (оскільки C# є прямим спадкоємцем С++, то іноді використовується і термін функція).

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

Той же принцип може бути застосований в програмуванні. Наприклад, розглянемо стек - список типу LIFO (last in, first out). Ви можете працювати з програмою, якої потрібно три стека різних типів (один для цілочисельних значень, один для значень з плаваючою комою і один для символів). У цьому випадку для реалізації кожного стека використовується один і той же алгоритм, хоча зберігаються дані різні. У не об'єктивно-орієнтованої мови вам знадобилося б створювати три різних набору стековий процедур з власним ім'ям для кожного набору. А в С# завдяки поліморфізму можна створити загальний набір стековий процедур, які підійдуть для роботи з усіма трьома типами стеків. Таким чином, визначивши методи, що використовують один тип стека, ви зможете застосовувати їх і для інших типів.

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

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

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

2.4 Два керуючих оператора

Усередині методу відбувається послідовне виконання операторів у напрямку зверху вниз (тобто так, як вони були записані в даному блоці коду).

Можливо вибірково виконати частину програми за допомогою умовного оператора if. Цей оператор багато в чому схожий з оператором if іншої мови. Зокрема, він синтаксично ідентичний оператору if в мовах С, C++ і Java. Найпростіша його форма представлена нижче:

if (умова) оператор;

Тут умова - це логічне значення вираз (що має значення true або false). Якщо умова істинна, то оператор виконується, якщо умова помилково, то оператор пропускається. Наведемо приклад використання умовного оператора if:

if (10 <11) Console. WriteLine ("10 менше ніж 11");

У цьому випадку число 10 менше, ніж число 11 (умовний вираз істинно), отже, оператор WriteLine (); буде виконуватися.

Таблиця 2.1

Оператор

Опис

<

Менше ніж

< =

Менше чи рівно

>

Більше ніж

> =

Більше чи рівно

= =

Рівно

!=

Не рівно

Можливо багаторазово виконувати будь-яку послідовність коду (блок), визначивши цикл. У цьому розділі ми розглянемо цикл for. У С# цей цикл працює також, як і в С, С++ і Java. Самий простий синтаксис циклу for:

For (ініціалізація, умова, ітерація) оператор;

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

3. ДОСЛІДЖЕННЯ АЛГОРИТМІВ КОДУВАННЯ

3.1 Алгоритм Triple DES

3.1.1 Історія створення алгоритму Triple DES

Triple DES (3DES) - симетричний блоковий шифр, створений Уітфілд Діффі, Мартіном Хеллманом і Уолтом Тачманном в 1978 році на основі алгоритму DES, з метою усунення головного недоліку останнього - малої довжини ключа (56 біт), який може бути зламаний методом повного перебору ключа. Швидкість роботи 3DES в 3 рази нижча, ніж у DES, але криптостійкість набагато вище - час, необхідний для крипто аналізу 3DES, може бути в мільярд разів більше, ніж час, потрібний для розтину DES. 3DES використовується частіше, ніж DES, який легко ламається за допомогою сьогоднішніх технологій (в 1998 році організація Electronic Frontier Foundation, використовуючи спеціальний комп'ютер DES Cracker, розбила DES за 3 дні). 3DES є простим способом усунення недоліків DES. Алгоритм 3DES побудований на основі DES, тому для його реалізації можливо використовувати програми, створені для DES.

3.1.2 Алгоритм

Схема алгоритму 3DES представлена на рис 3.1. Простий варіант 3DES можна представити так:

DES (k3; DES (k2; DES (k1; M))) (3.1)

де k1, k2, k3 - ключі для кожного DES-кроку, М - вхідні дані, які потрібно шифрувати.

Це варіант відомий як в ЕЕЕ, оскільки три DES операції є шифруванням.

Існує 3 типи алгоритму 3DES:

· DES-EEE3: Шифрується три рази з трьома різними ключами (операції шифрування-шифрування-шифрування).

· DES-EDE3: 3DES операції шифровка-розшифровка-шифровка з трьома різними ключами.

· DES-EEE2 і DES-EDE2: Як і попередні, за винятком того, що на першому і третьому кроці використовується однаковий ключ.

Самий популярна різновид 3DES - це DES-EDE3, для нього алгоритм виглядає так:

Шифровка:

(3.2)

Розшифровка:

(3.3)

При виконанні алгоритму 3DES ключі можуть бути вибрані так:

· k1, k2, k3 незалежні.

· k1, k2 незалежні, а k1 = k3

· k1 = k2 = k3

3DES виконує 3 рази алгоритм DES, довжина ключа DES дорівнює 64 біта, а довжина 3DES в 3 рази більше, тобто дорівнює 192 бітів.

Для DES 64-розрядний ключ ділився на 8 байтів, в кожному байті використовується тільки 7 бітів, тому насправді довжина ключа дорівнює 56 бітів, а не 64, тому довжина ключа 3DES насправді дорівнює 168, а не 192 біта.

Рис 3.1 Схема алгоритму 3DES

3.1.2 Криптостійкість

3DES з різними ключами має довжину ключа рівну 168 біт, але через атаки «зустріч посередині» (англ. meet-in-the-middle) ефективна криптостійкість складає тільки 112 біт. У варіанті DES-EDE, в якому k1 = k3, ефективний ключ має довжину 80 біт. Для успішної атаки на 3DES потрібно близько 232 біт відомого відкритого тексту, 2113 кроків, 290 циклів DES-шифрування і 288 біт пам'яті.

Застосування 3DES

3DES з трьома ключами реалізований у багатьох додатках, орієнтованих на роботу з Інтернет, у тому числі в PGP й S / mime. Потрійний DES є досить популярною альтернативою DES і використовується при управлінні ключами в стандартах ANSI X9.17 та ISO 8732 і у PEM (Privacy Enhanced Mail). Відомих криптографічних атак, застосовних на практиці, на 3DES не існує.

Тим не менше, 3DES (який ще позначають як TDES) потроху виходить з ужитку, що замінюється новим алгоритмом AES Rijndael. Rijndael, реалізований програмно, працює в шість разів швидше. Тому 3DES більше підходить для апаратних реалізацій.

3.2 Алгоритм DES

3.2.1 Історія створення алгоритму DES

У 1972 році, після проведення дослідження потреб уряду США в комп'ютерній безпеці, американське НБС (Національне Бюро Стандартів) - тепер перейменовано НІСТ (Національний Інститут Стандартів і Технологій) - визначив необхідність в общеправітельственном стандарті шифрування некритичною інформації. 15 травня 1973, після консультації з АНБ (Агентством національної безпеки), НБС оголосило конкурс на шифр, який задовольнить суворим критеріям проекту, але жоден конкурсант не забезпечував виконання всіх вимог. Другий конкурс було розпочато 27 серпня 1974. Цього разу, шифр Lucifer, представлений IBM і розвинений протягом періоду 1973-1974 визнали прийнятним, він був заснований на більш ранньому алгоритмі Хорста Фейстеля.

17 березня 1975 запропонований алгоритм DES був виданий у Федеральному реєстрі. У наступному році було проведено 2 відкритих симпозіуму з обговорення цього стандарту, де піддалися жорсткій критиці зміни, внесені АНБ в алгоритм: зменшення первісної довжини ключа і S-блоки (блоки підстановки), критерії проектування яких не розкривалися. АНБ підозрювалися у свідомому ослабленні алгоритму з метою, щоб АНБ могло легко переглядати зашифровані повідомлення. Після чого сенатом США була проведена перевірка дій АНБ, результатом якої стала заява, опубліковане в 1978, в якому йшлося про те, що в процесі розробки DES АНБ переконало IBM, що зменшеної довжини ключа більш ніж достатньо для всіх комерційних додатків, що використовують DES, побічно допомагало в розробці S-перестановок, а також, що остаточний алгоритм DES був кращим, на їх думку, алгоритмом шифрування і був позбавлений статистичної або математичної слабкості. Також було виявлено, що АНБ ніколи не втручався в розробку цього алгоритму.

Частина підозр у прихованій слабкості S-перестановок була знята в 1990, коли були опубліковані результати незалежних досліджень Елі Біхама (Eli Biham) і Аді Шаміра (Adi Shamir) за диференційного криптоаналізу - основного методу злому блочних алгоритмів шифрування з симетричним ключем. S-блоки алгоритму DES виявилися набагато більш стійкими до атак, ніж, якщо б їх обрали випадково. Це означає, що така техніка аналізу була відома АНБ ще в 70-х роках XX століття.

DES є блоковим шифром. Щоб зрозуміти, як працює DES, необхідно розглянути принцип роботи блочного шифру, мережа Фейстеля.

3.2.2 Блочний шифр

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

Базові перетворення:

* Складне перетворення на одній локальної частини блоку.

* Просте перетворення між частинами блоку.

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

3.2.3 Перетворення Мережею Фейстеля

Це перетворення над векторами (блоками) представляють собою ліву і праву половини регістра зсуву. В алгоритмі DES використовуються пряме перетворення мережею Фейстеля в шифруванні (див. рис.3.2) і зворотне перетворення мережею Фейстеля в розшифрування (див. рис.3.3).

Рис.3.2 Пряме перетворення мережею Фейстеля

Рис.3.3 Зворотне перетворення мережею Фейстеля

3.2.4 Схема шифрування алгоритму DES

Рис.3.4 Схема шифрування алгоритму DES

Схема шифрування алгоритму DES вказана на рис.3.4

Оригінальний текст - блок 64 біт.

Процес шифрування полягає в початковій перестановці, 16 циклах шифрування і кінцевої перестановці.

Зашифрований текст - блок 64 біт.

Розглянемо докладну схему алгоритму DES:

Рис.3.5 Детальна схема шифрування алгоритму DES

ліва і права половини 64-бітового блоку LiRi

ki - 48 бітові ключі, f - функція шифрування, IP - початкова перестановка, IP - 1 - кінцева перестановка.

Початкова перестановка

- Оригінальний текст T (блок 64 біт) перетворюється c допомогою початкової перестановки IP (Initial Permutation), яка визначається таблицею 3.1:

Таблиця 3.1 Початкова перестановка IP

58

50

42

34

26

18

10

2

60

52

44

36

28

20

12

4

62

54

46

38

30

22

14

6

64

56

48

40

32

24

16

8

57

49

41

33

25

17

9

1

59

51

43

35

27

19

11

3

61

53

45

37

29

21

13

5

63

55

47

39

31

23

15

7

Таблиця 3.1 Початкова перестановка IPПо таблиці перші 3 біти результуючого блоку IP (T) після початкової перестановки IP є бітами 58, 50, 42 вхідного блоку Т, а його 3 останні біта є бітами 23, 15, 7 вхідного блоку.

3.2.5 Цикли шифрування

Отриманий після початкової перестановки 64-бітовий блок IP (T) бере участь у 16-циклах перетворення Фейстеля.

- 16 циклів перетворення Фейстеля:

Розбити IP (T) на дві частини L0, R0, де L0, R0 - відповідно 32 старших бітів і 32 молодших бітів блоку T0 IP (T) = L0R0

Нехай T i - 1 = L i - 1 R i - 1 результат (i-1) ітерації, тоді результат i-ой ітерації T i = Li R i визначається:

L i = R i - 1

(3.4)

Ліва половина L i дорівнює правій половині попереднього вектора Li - 1 R i - 1. А права половина R i - це бітове складання L i - 1 і f (R i - 1, k i ) за модулем 2.

У 16-циклах перетворення Фейстеля функція f грає роль шифрування. Розглянемо докладно функцію f.

Основна функція шифрування (функція Фейстеля)

Аргументами функції f є 32-бітовий вектор R i - 1 і 48-бітова ключ ki , які є результатом перетворення 56-бітового вихідного ключа шифру k.

Для обчислення функції f використовуються функція розширення Е, перетворення S, що складається з 8 перетворень S-блоків , і перестановка P.

Функція Е розширює 32-бітовий вектор R i - 1 до 48-бітового вектора E(R i - 1) шляхом дублювання деяких бітів з R i - 1; при цьому порядок бітів вектора E (R i - 1) вказаний у таблиці 3.2.

Таблиця 3.2

32

1

2

3

4

5

4

5

6

7

8

9

8

9

10

11

12

13

12

13

14

15

16

17

16

17

18

19

20

21

20

21

22

23

24

25

24

25

26

27

28

29

28

29

30

31

32

1

Перші три біти вектора E (R i - 1) є бітами 32, 1, 2 вектора R i - 1. З таблиці 3.2 видно, що біти 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29, 32 дублюються. Останні 3 біти вектора E (R i - 1 ) - це біти 31, 32, 1 вектора R i - 1. Отриманий після перестановки блок E (R i - 1) складається за модулем 2 з ключами ki і потім представляється у вигляді восьми послідовних блоків B1, B2, ... B8.

E (R i - 1) = B1B2 ... B8 (3.5)

Кожен Bj є 6-двійкового блоком. Далі кожен з блоків B j трансформується в 4-бітовий блок B' j за допомогою перетворень S j. Перетворення S j визначаються таблицею 3.3

Рис.3.6 Схема роботи функції f

Таблиця 3.3

Перетворення S j

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

14

4

13

1

2

15

11

8

3

10

6

12

5

9

0

7

1

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

S1

2

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0

3

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

0

15

1

8

14

6

11

3

4

9

7

2

13

12

0

5

10

1

3

13

4

7

15

2

8

14

12

0

1

10

6

9

11

5

S2

2

0

14

7

11

10

4

13

1

5

8

12

6

9

3

2

15

3

13

8

10

1

3

15

4

2

11

6

7

12

0

5

14

9

0

10

0

9

14

6

3

15

5

1

13

12

7

11

4

2

8

1

13

7

0

9

3

4

6

10

2

8

5

14

12

11

15

1

S3

2

13

6

4

9

8

15

3

0

11

1

2

12

5

10

14

7

3

1

10

13

0

6

9

8

7

4

15

14

3

11

5

2

12

0

7

13

14

3

0

6

9

10

1

2

8

5

11

12

4

15

1

13

8

11

5

6

15

0

3

4

7

2

12

1

10

14

9

S4

2

10

6

9

0

12

11

7

13

15

1

3

14

5

2

8

4

3

3

15

0

6

10

1

13

8

9

4

5

11

12

7

2

14

0

2

12

4

1

7

10

11

6

8

5

3

15

13

0

14

9

1

14

11

2

12

4

7

13

1

5

0

15

10

3

9

8

6

S5

2

4

2

1

11

10

13

7

8

15

9

12

5

6

3

0

14

3

11

8

12

7

1

14

2

13

6

15

0

9

10

4

5

3

0

12

1

10

15

9

2

6

8

0

13

3

4

14

7

5

11

1

10

15

4

2

7

12

9

5

6

1

13

14

0

11

3

8

S6

2

9

14

15

5

2

8

12

3

7

0

4

10

1

13

11

6

3

4

3

2

12

9

5

15

10

11

14

1

7

6

0

8

13

0

4

11

2

14

15

0

8

13

3

12

9

7

5

10

6

1

1

13

0

11

7

4

9

1

10

14

3

5

12

2

15

8

6

S7

2

1

4

11

13

12

3

7

14

10

15

6

8

0

5

9

2

3

6

11

13

8

1

4

10

7

9

5

0

15

14

2

3

12

0

13

2

8

4

6

15

11

1

10

9

3

14

5

0

12

7

1

1

15

13

8

10

3

7

4

12

5

6

11

0

14

9

2

S8

2

7

11

4

1

9

12

14

2

0

6

10

13

15

3

5

8

3

2

1

14

7

4

10

8

13

15

12

9

0

3

5

6

11

Припустимо, що B3 = 101111, і ми хочемо знайти B'3 . Перший і останній розряди B3 є двійковій записом числа а, 0 <= a <= 3, середні 4 розряду представляють число b, 0 <= b <= 15. Рядки таблиці S3 нумеруються від 0 до 3, стовпці таблиці S3 нумеруються від 0 до 15. Пара чисел (а, b) визначає число, що знаходиться в перетині рядка і стовпця а b. Двійкове подання цього числа дає B' 3. У нашому випадку a = 112 = 3, b = 01 112 = 7, а число, яке визначається парою (3,7), дорівнює 7. Його бінарне подання B'3 = 0111.

Значення функції f (R i - 1, k i ) (32 біт) виходить перестановкою Р, що застосовується до 32-бітове блоку B'1 B'2 ... B'8 . Перестановка Р задана таблицею 3. 4.

Таблиця 3. 4

16

7

20

21

29

12

28

17

1

15

23

26

5

18

31

10

2

8

24

14

32

27

3

9

19

13

30

6

22

11

4

25

f (R i - 1, k i ) = P (B'1B'2 ... B'8 ) (3.6)

Згідно таблиці 3. 4, перші чотири біта результуючого вектора після дії функції f - це біти 16, 7, 20, 21 вектора B'1B'2 ... B'8

3.2.6 Генерування ключів ki

Ключі ki виходять з початкового ключа k (64 біт = 8 байтів або 8 символів у ASCII) таким чином. Вісім бітів, що знаходять в позиціях 8, 16, 24, 32, 40, 48, 56, 64 додаються в ключ k таким чином щоб кожен байт містив непарне число одиниць. Це використовується для виявлення помилок при обміні і зберіганні ключів. Потім роблять перестановку для розширеного ключа (крім додаються бітів 8, 16, 24, 32, 40, 48, 56, 64). Така перестановка визначена як у таблиці 3.5.

Таблиця 3. 5

57

49

41

33

25

17

9

1

58

50

42

34

26

18

C0

10

2

59

51

43

35

27

19

11

3

60

52

44

36

63

55

47

39

31

23

15

7

62

54

46

38

30

22

D0

14

6

61

53

45

37

29

21

13

5

28

20

12

4

Ця перестановка визначається двома блоками C0 і D0 по 28 біт кожен. Перші 3 біти C0 є біти 57, 49, 41 розширеного ключа. А перші три біти D0 є біти 63, 55, 47 розширеного ключа. Ci, Di i = 1,2,3 ... виходять з Ci - 1, Di - 1 одним або двома лівими циклічними зсувами згідно з таблицею 3. 6.

Таблиця 3. 6

i

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Число зсуву

1

1

2

2

2

2

2

2

1

2

2

2

2

2

2

1

Ключ k i , i = 1, ... 16 складається з 48 біт, вибраних з бітів вектора C i D i (56 біт) згідно з таблицею 3. 7. Перший і другий біти k i є біти 14, 17 вектора C i D i

Таблиця 3. 7

14

17

11

24

1

5

3

28

15

6

21

10

23

19

12

4

26

8

16

7

27

20

13

2

41

52

31

37

47

55

30

40

51

45

33

48

44

49

39

56

34

53

46

42

50

36

29

32

3.2.7 Кінцева перестановка

Кінцева перестановка IP - 1 діє на T16 і використовується для відновлення позиції. Вона є зворотною до перестановки IP. Кінцева перестановка визначається таблицею 3.8.

Таблиця 3. 8

40

8

48

16

56

24

64

32

39

7

47

15

55

23

63

31

38

6

46

14

54

22

62

30

37

5

45

13

53

21

61

29

36

4

44

12

52

20

60

28

35

3

43

11

51

19

59

27

34

2

42

10

50

18

58

26

33

1

41

9

49

17

57

25

3.2.8 Схема розшифрування

При розшифрування даних всі дії виконуються в зворотному порядку. У 16 циклах розшифрування, на відміну від шифрування c допомогою прямого перетворення мережею Фейстеля, тут використовується зворотне перетворення мережею Фейстеля.

R i - 1 = Li (3.7)

(3.8)

Схема розшифрування вказана на Рис.6. Ключ k i , i = 1, ..., 15, функція f, перестановка IP і IP - 1 такі ж як і в процесі шифрування.

Рис.3.9 Схема розшифрування алгоритму DES

3.2.9 Режими використання DES

Основна стаття: Режим шифрування. DES може використовуватися в чотирьох режимах.

1. Режим електронної кодової книги (ЕCB - Electronic Code Book): звичайне використання DES як блокового шифру. Шіфруемий текст розбивається на блоки, при цьому, кожен блок шифрується окремо, не взаємодіючи з іншими блоками (див. рис 3.10).

Рис.3.10 Режим електронної кодової книги - ECB

2. Режим зчеплення блоків (СВС - Cipher Block Chaining) (див. рис.3.11). Кожен черговий блок C i i > = 1, перед зашіфровиваніем складається за модулем 2 з наступним блоком відкритого тексту M i + 1. Вектор C0 - початковий вектор, він змінюється щодня і зберігається в секреті.

Рис.3.11 Режим зчеплення блоків - СВС

3. Режим зворотного зв'язку по шіфротексту (CFB - Cipher Feed Back) (див. рис.3.12). У режимі СFB виробляється блокова «гамма»

Z0, Z1, ... Zi = DES k (C i - 1) .(3.9)

Початковий вектор C0 зберігається в секреті.

Рис.3.12 Режим зворотного зв'язку по шіфротексту - CFB

4. Режим зворотного зв'язку по виходу (OFB - Output Feed Back) (див. рис.3.13). У режимі OFB виробляється блокова «гамма» Z0, Z1, ... , (3.10)

Рис.3.13 Режим зворотного зв'язку по виходу - OFB

Переваги і недоліки режимів:

* Режим ECB простий в реалізації, але можливе проведення криптоаналізу за словником.

* В режимах ECB і OFB спотворення при передачі одного 64-бітового блоку шіфротекста Ci призводить до спотворення після розшифрування тільки відповідного відкритого блоку M i, тому такі режими використовується для передачі по каналах зв'язку з великим числом спотворень.

* В режимах CBC та CFB спотворення при передачі одного блоку шифрованого тексту Сі призводить до спотворення на приймачі не більше двох блоків відкритого тексту M i , M i + 1 .Зміна M i призводить до зміни всіх інших блоків M i + 1, M i + 2 ... Ця властивість використовується для вироблення коду аутентифікації повідомлення.

3.2.10 Криптостійкість алгоритму DES

Нелінійність перетворень в DES засобами лише S-блоків, у випадку, якщо вони мають слабину, дозволяє здійснювати контроль за шифрованого листуванням. Вибір S-блоків вимагає дотримання кількох умов:

* Кожен рядок кожного блоку має бути перестановкою множини {0,1,2, ... ..., 15}

* S-блоки не повинні бути лінійною або Афіною функцією своїх аргументів.

* Зміна одного біта на вході S-блоку повинно приводити до зміни принаймні двох бітів на виході.

* Для кожного S-блоку і будь-якого аргументу х значення S (x) і повинні відрізнятися принаймні двома бітами.

З-за невеликого числа можливих ключів (усього 256), з'являється можливість їх повного перебору на швидкодіючої обчислювальної техніки за реальний час. У 1998 році The Electronic Foundation використовуючи спеціальний комп'ютер DES-Cracker, вдалося зламати DES за 3 дні. В алгоритмі DES існують слабкі і частково-слабкі ключі. Слабкими ключами називається ключі k такі що DES k (DES k (x)) = x, x - блок 64 біт. Частково-слабкі ключі - пари ключів (k1, k2) такі що DES k1 (DES k2 (x)) = x Відомі чотири слабких ключа, вони наведені в таблиці 3. 9. Для кожного слабкого ключа існує 232 «постійні точки», тобто таких 64-бітових блоків х, в яких

DES k (x) = x (3.11)

Таблиця 3.9

Слабкі ключі (hexadecimal)

C0

D0

0101-0101-0101-0101

[0]28

[0]28

FEFE-FEFE-FEFE-FEFE

[1]28

[1]28

1F1F-1F1F-0E0E-0E0E

[0]28

[1]28

E0E0-E0E0-F1F1-F1F1

[1]28

[0]28

[0] 28 позначає вектор, що складається з 28 нульових бітів.

Існують 6 частково-слабких пар ключів, вони наведені в таблиці 3.10. Для кожного з 12 частково-слабких ключів існують 232 «анти-постійні точки», тобто такі блоки х, що

Таблиця 3.10 Шість частково-слабких пар ключів

C0

D0

Пари частково-слабких ключів

C0

D0

[01]14

[01]14

01FE-01FE-01FE-01FE,----FE01-FE01-FE01-FE01

[10]14

[10]14

[01]14

[01]14

1FE0-1FE0-1FE0-1FE0,----E0F1-E0F1-E0F1-E0F1

[10]14

[10]14

[01]14

[0]28

01E0-01E0-01F1-01F1,----E001-E001-F101-F101

[10]14

[0]28

[01]14

[1]28

1FFE-1FFE-0EFE-0EFE,----FE1F-FE1F-FE0E-FE0E

[0]28

[1]28

[0]28

[01]14

O11F-011F-010E-010E,----1F01-1F01-0E01-0E01

[0]28

[10]14

[1]28

[01]14

E0FE-E0FE-F1FE-F1FE,----FEE0-FEE0-FEF1-FEF1

[1]28

[10]14

Таблиця 3.11 Методи атаки

Методи атаки

Відомі відкр. тексти

Вибрані відкр. тексти

Об'єм пам'яті

Кількість операцій

Повний пошук

1

-

Незначний

255

Лінійний

Криптоаналіз

243(85%)

-

Для тексту

243

Лінійний

Криптоанализ

238(10%)

-

Для тексту

250

Диффер.

Криптоанализ

-

247

Для тексту

247

Диффер.

Криптоанализ

255

-

Для тексту

255

* Метод повного пошуку вимагає одну відому пару шифрованого і розшифрованого тексту, незначний обсяг пам'яті, і для його виконання потрібні 255 кроків.

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

* Лінійний криптоаналіз розроблений Matsui. Цей метод дозволяє відновити ключ DES з допомогою аналізу 243 відомих відкритих текстів, при цьому потрібно 243 кроків для виконання. Перший експериментальний криптоаналіз DES, заснований на відкритті Matsui, був успішно виконаний протягом 50 днів на автоматизованих робочих місцях 12 HP 9735.

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

3.2.11 Застосування

DES був національним стандартом США в 1977-1980 рр.., але в даний час DES використовується (з ключем довжиною 56 біт) тільки для застарілих систем , найчастіше використовують його більш кріптостійкий вигляд (3DES, 2DES). 3DES є простою ефективною заміною DES , і зараз він розглянутий як стандарт. Найближчим часом DES і Triple DES будуть замінені алгоритмом AES (Advanced Encryption Standard - розширений стандарт шифрування). Алгоритм DES широко застосовується для захисту фінансової інформації: так, модуль THALES (Racal) HSM RG7000 повністю підтримує операції TripleDES для емісії і обробки кредитних карт VISA, EuroPay та ін. Канальні шифратори THALES (Racal) DataDryptor 2000 використовують TripleDES для прозорого шифрування потоків інформації. Також алгогритм DES використовується в багатьох інших пристроях і рішеннях THALES-eSECURITY.

3.3 Дослідження алгоритму RC2

RC2 це блочний шифр з ключем змінної довжини створений Роном Рівестом для RSA. "RC" розшифровується як "Ron's Code" або "Rivest Cipher". RC2 швидше ніж DES і був спецально розроблений для заміни DES. Він може бути реалізований більш-менш захищеним ніж DES, залежно від довжини ключа. RC2 алгоритм конфіденціален і є власністю RSA. RC2 може використовуватися там, де використовується DES. У США довжина ключа для використання всередині країни рекомендується рівний 128 бітів, але угода, укладена між Software Publishers Association (SPA) і урядом США дає RC2 спеціальний статус, який означає, що дозволено експортувати шифри довгої ключа до 40 біт. 56-бітові ключі дозволено використовувати закордонним відділенням американських компаній. RC2 з ключами 128 біт забезпечує такий же рівень безпеки як і IDEA або потрійний DES. RC2 використовується широко розробниками, чиї продукти експортуються за межі США, оскільки експортувати DES заборонено.

3.3.1 Алгоритм RC2


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.