Шифрування даних на мікропроцесорах за допомогою мови програмування Java

Існуючі криптографічні системи та можливості об'єктно-орієнтованої мови програмування Java. Переваги мови Java як засобу створення методів шифрування. Розробка нового алгоритму шифрування. Основні методи оцінки ефективності криптографічної системи.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 29.12.2016
Размер файла 496,9 K

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

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

enable ()

забороняє або дозволяє компонент

isEnable ()

повертає true, якщо компонент дозволений

paint ()

update ()

repaint ()

відображення компонента

handleEvent ()

action ()

обробка повідомлень

keyDown ()

keyUp ()

обробка повідомлень клавіатури

Label (Текст):

За допомогою класу Label можна створювати текстові рядки у вікні Java-програм і аплетів. Для створення об'єкту цього типу існують три види конструкторів:

Label (); // створюється пустий рядок

Label (Stringstr); // надпис, вирівняний вліво

Label (Stringstr, intalign); // надпис із заданим вирівнюванням

де змінна align може приймати три значення: Label. LEFT, Label. CENTER, Label. RIGHT.

Таблиця 2.4

Основні методи класу Label

SetText (String str)

змінює текст в рядку

setAlignment (int align)

змінна вирівнювання

String getText ()

повертає текст рядка

int getAlignment ()

повертає значення вирівнювання

Приклад:

Label MyLabel1 = new Label ("Надписпоцентру”, Label. CENTER);

Label MyLabel2 = new Label ("Вирівнянийвліво”);

Клас Button представляє на екрані кнопку. У цього класу є два типи конструктора. Перший з них створює кнопку без надпису, другий - з надписом:

Button (); // кнопка без тексту на ній

Button (Stringstr); // кнопка із текстом на ній

Корисні методи:

setLabel () - створити або замінити надпис на кнопці;

getLabel () - дізнатись про надпис на кнопці.

Обробка кнопок. При натисненні на кнопку викликається метод action ():

publicbooleanaction (Eventevt, ObjectwA);

деevt - подія, яка відбулася (evt. target - до якого об'єкту відноситься

подія, evt. when - час виникнення події,.);

wA - текст надпису на кнопці.

Таблиця 2.5

Основні методи класу Checkbox

boolean getState ()

метод класу Checkbox, що повертає статус прапорця

getCurrent ()

метод класу CheckboxGroup, повертає перемикач, який в даний момента включений

SetCurrent ()

встановлює активну кнопку перемикача (для класу CheckboxGroup)

setLabel ()

getLabel ()

встановлює або повертає текст при прапорці або перемикачі

Обробка перемикачів та прапорців. При натисканні мишею по прапорцю або перемикачу викликається метод action (), другий параметр якого wA є об'єктом класу boolean, який має значення true, якщо прапорець встановлено, і false - в протилежному випадку.

Коли потрібно створити список, що розкривається, можна вдатися до допомоги класу Choice. Створити його можна за допомогою конструктора Choice ();

Таблиця 2.6

Основні методи класу Choice

addItem (String str)

Додати елемент в список

select (int n)

Вибрати рядок з визначеним номером

select (String str)

Вибрати визначений рядок тексту зі списку

int countItems ()

повернути кількість пунктів у списку

int getSelectIndex ()

повертає номер вибраного рядка (нумерація з 0)

Обробка списків, що розкриваються. При виборі елемента списку викликається метод action (), другий параметр wA якого містить в собі назву вибраного елемента.

Клас List (список) за призначенням дуже схожий на клас Choice, але надає користувачу не такий список, що розкривається, а вікно зі смугами прокручування, в середині якого знаходяться пункти вибору. Будь-який з цих пунктів можна вибрати подвійним щигликом або, вказавши на нього мишею, натиснути клавішу <Enter>. Причому можна зробити так, що стане можливим вибір декількох пунктів одночасно.

Таблиця 2.7

Основні методи класу List

addItem (String str)

додати рядок до списку;

addItem (String str, int index)

вставити рядок в список в позицію index (якщо index = - 1, то додається в кінець списку);

replaceItem (String str, int index)

замінити елемент вибору в зазначеній позиції

delItem (int index)

видалити зі списку визначений пункт

delItems (int start, int end)

видалити елементи вибору з номерами, що входять в інтервал від номера start до номера end;

getItem (int n)

текст пункту вибору

clear ()

очистити список (знищити всі елементи списку відразу)

select (int n)

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

deselect (int n)

зняти виділення з визначеного пункту

isSelected (int n)

повернути значення true, якщо пункт із зазначеним номером виділений, інакше повернути false

countItems ()

порахувати кількість пунктів вибору в списку

getRows ()

повернути кількість видимих у списку рядків вибору

getSelectedIndex ()

довідатися порядковий номер виділеного пункту; якщо повертається - 1, те обрано кілька пунктів (метод для списків І типу)

getSelectedItem ()

прочитати текст виділеного пункту вибору (для списків І типу);

int [] getSelectedIndexes ()

повернути масив індексів виділених пунктів (для списків ІІ типу);

String [] getSelectedItems ()

повернути масив рядків тексту виділених пунктів (для списків ІІ типу)

allowsMultipleSelections ()

повернути true, якщо список дозволяє множинний вибір

setMultipleSelections ()

включити або виключити режим дозволу множинного вибору

Створення об'єкта класу List може відбуватися двома способами. Ви можете створити порожній список і додавати в нього пункти, викликаючи метод addItem (). При цьому розмір списку буде рости при додаванні пунктів. Інший спосіб дозволяє відразу обмежити кількість видимих у вікні списку пунктів. Інші пункти вибору можна побачити, прокрутивши список. бробка списків. КласList не використовує метод action (). Замість нього використовується метод handleEvent (Eventevt);

деevt - статична константа, що приймає одне з двох значень: LIST_SELECT - елемент вибраний; LIST_DESELECT - не вибраний;

Таблиця 2.8

Основні методи класів TextField і TextArea

Спільні методи для обох класів

getText ()

зчитати текст

setText (String)

відобразити текст;

select (int, int)

виділити текст між початковою і кінцевою позиціями;

selectAll ()

виділити весь текст

getSelectedText ()

прочитати виділений текст;

SetEditable (Boolean)

заборонити редагування тексту

isEditable ()

перевірити, чи дозволене редагування тексту

getSelectionStart ()

повернути позицію початку виділення

getSelectionEnd ()

повернути позицію закінчення виділення

getColumns ()

повернути кількість видимих символів у рядку редагування (не довжина рядка!)

Обробка повідомлень текстового рядка та текстового поля. Як і клас List, клас TextArea не використовує метод action (). Оскільки події цього класу - це події клавіатури і миші, тому краще створити додаткову кнопку, яку користувач міг би натиснути, вказуючи, що введення завершено. Після цього можна застосувати метод getText () для отримання результату введення і редагування.

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

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

Методи, що приймають і обробляють події, визначені в наборі інтерфейсів, що знаходяться в пакеті java. awt. event. Наприклад, інтерфейс MouseMotionListenerвизначає два методи для приймання повідомлень про події перетягування та пересування миші. Будь-який об'єкт може приймати та обробляти одну або обидві ці події, якщо він забезпечує реалізацію цього інтерфейса. [16, стр.17]

Висновки до ІІ розділу

Технологія Javа є дуже перспективною для застосування в розробках неокомерційного та комерційного спрямування. Легкість програмування на Java, та кросплатформенність цієї мови, робить її найпоширенішою в світі серед програмістів. На Javaможна створити програми будь-якої складності, a модифікатори доступу зможуть захистити код від зовнішнього втручання.

Мову програмування Javaбуло обрано для написання нового алгоритму шифрування через те, що "написане один раз працює скрізь" (кросплатформність), один і той же написаний код буде працювати, наприкладі на Windows, і на Linux, і на MacOs. Тоді як на інших мовах програмування потрібно написати не 1, а відразу 3 різних коди - під Windows, під Linux і під MacOs. В Javaдружній синтаксис: розробники мови Java взяли все найкраще від мови програмування С - і його прямого спадкоємця - мови програмування С ++, викинули все, що вважали зайвим і неособливо вдалим у С і С ++, внесли нововведення в нову мову програмування Java. A також через те, що Java - це об'єктно орієнтована мова програмування, яка пропонує легкість в програмуванні на високому рівні.

Розділ 3. Розробка нового алгоритму шифрування на мові програмування Java

3.1 Методика оцінки ефективності криптографічної системи

Дана методика була розроблена мною півтора роки тому для вибору найкращого алгоритму шифрування з боку замовника.

Ефективність шифрування можна оцінити за наступними параметрами:

1. Простота використання

2. Швидкість шифрування інформації

3. Стійкість алгоритму до зовнішніх атак

4. Ціна

5. Кількість використаних математичних операцій

6. Перспективність алгоритму

Задля оцінки криптографічної системи візьмемо шкалу від нуля до двох і оцінимо кожен з параметрів, які описані вище.

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

1. Простота використання: алгоритм може бути симетричний, або асиметричний (В симетричному шифруванні один і той самий ключ (що зберігається в секреті) використовується як для шифрування, так і для розшифрування. В асиметричному шифруванні є два пов'язаних ключа - пара ключів. Відкритий ключ - публічний, до нього повинні мати доступ всі ті, хто матиме потребу зашифрувати інформацію. Тоді як закритий ключ - приватний ключ повинен бути доступним лише тому хто має право розшифрувати інформацію, за своїм розміром він значно більший від секретного ключа симетричного шифрування. Будь-яку інформацію, зашифровану за допомогою відкритого ключа можна розшифрувати лише застосовуючи той самий алгоритм, але з використанням відповідного приватного ключа. Також всю інформацію, зашифровану за допомогою приватного ключа, можна розшифрувати лише за допомогою відповідного відкритого ключа. Це означає, що немає необхідності хвилюватись за передачу ключа, відкритий ключ повинен бути публічним. Але асиметричне шифрування є значно повільнішим від симетричного. Також потребує значно більше обчислювальної потужності як для шифрування, так і для розшифрування інформації.) [24, стр.112]

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

2. Швидкість кодування інформації: сучасні алгоритми шифрують інформацію за секунди, а отже великої різниці між криптографічними системами не буде. Набагато важливіше питання - чи залежить час шифрування від кількості даних і наскільки? Ставимо 2, якщо залежності немає, 1 \ 0 якщо залежність є, але алгоритм шифрує швидко \ повільно і 0, якщо алгоритм працює з обмеженою кількістю даних.

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

4. Ціна: цей параметр досить відносний. Якщо шифр коштує більше, або стільки ж, скільки і інформація ставимо 0, якщо ціна шифру в півтора рази нижча ціни інформації ставимо 1, якщо ціна шифру менша за ціну інформації в 2 рази і більше, то ставимо 2.

5. Кількість використаних математичних операцій: якщо використана лише одна математична операція - такий алгоритм легко зламати, тому ставимо 0; при багатьох математичних операціях в криптографічній системі ставимо 1; якщо ж відслідкувати кількість операцій в алгоритмі неможливо ставимо 2.

6. Перспективність алгоритму: в цьому параметрі все залежить від давності створення алгоритму (який, звичайно, є загальноприйнятим), чим давніше була створена криптографічна система, тим більше методів винайдено для зламу, а отже система не є перспективною. Якщо алгоритм був створений не більше 5 років тому, ставимо 2; від 5 до 10 років існування алгоритму - ставимо 1; більше 10 років на ринку - ставимо 0. Також цей пункт відповідає поняттю життєвого цикла проекту (життєвий цикл проекту - це період часу від задуму проекту до його закінчення). Чим довше криптографічна система протримається на ринку, тим буде вища поставлена оцінка.

Після вибору замовником найголовнішого параметру, він має викреслити один з шести параметрів, який має найнижчу оцінку і не враховувати його в оцінці ефективності криптографічної системи. Після цього, оцінити алгоритм по п'яти параметрам і додати між собою цифри, які було отримано. В результаті отримаємо цифру від 0 до 10. Все що вище за 6 - рекомендовано для закупівлі. (Цей метод оцінки ефективності криптографічної системи було застосовано на таких алгоритмах, як "шифр Віженера" - 4, "шифр Вернама" - 5, а також "алгоритм Деффі-Хеллмана" - 7 і отримано правильні, на мій погляд, оцінки).

Питання оцінки стійкості криптографічних систем захисту інформації (СЗІ) є досить актуальним у наш час, коли існує багато крипто алгоритмів і постає задача їх вибору для побудови ефективних СЗІ і підвищення загального рівня конфіденційності. Таким чином, метою роботи є якісний аналіз критеріїв стійкості криптографічних СЗІ та інших актуальних проблем сучасної криптографії. Доказ існування абсолютно стійких алгоритмів шифрування (АШ) був виконаний Клодом Шеноном. Їм же визначені вимоги до систем такого роду: ключ генерується для кожного повідомлення (кожен ключ використовується один раз); ключ статистично надійний (тобто ймовірності появи кожного з можливих символів рівні, а символи в ключовій послідовності незалежні та випадкові); довжина ключа дорівнює або більша за довжину повідомлення; вихідний (відкритий) текст (ВТ) володіє деякою надмірністю (є критерієм оцінки правильності розшифрування). Стійкість цих СЗІ не залежить від того, якими обчислювальними можливостями володіє атакуюча сторона. Практичне застосування СЗІ, що задовольняють вимогам абсолютної стійкості, обмежено міркуваннями вартості і зручності користування.

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

Існує також цілий ряд криптопротоколів, призначених для вирішення специфічних за - вдань. Слід мати на увазі, що один і той же криптопротокол може застосовуватися у різних областях. Наприклад, криптопротокол Kerberos в ході своєї роботи дозволяє провести аутентифікацію користувачів і здійснити ключовий обмін між учасниками. Як приклад можна навести досить простий криптопротокол ключового обміну. Його учасники, Аліса та Боб, хочуть виробити загальний секретний ключ для симетричного АШ, використовуючи відкриті канали передачі даних. Для цього вони використовують наступну послідовність дій:

1) Боб вибирає схему асиметричного шифрування, створює пару ключів для даної схеми - відкритий і секретний;

2) Боб посилає свій відкритий ключ Алісі;

3) Аліса створює секретний ключ для симетричного АШ; зашифровує його на відкритому ключі Боба і відсилає йому отрима - ний результат;

4) Боб, отримавши зашифрований секретний ключ від Аліси, розшифровує його своїм секретним ключем для асиметричного АШ. Тепер Аліса та Боб, використовуючи симетричний АШ, можуть обмінюватися зашифрованою інформацією у відкритих каналах зв'язку. Зазначений протокол не є безпечним, але вдало відображає саму ідею побудови подібних СЗІ.

Що стосується розподілу ключів шифрування між законними користувачами в умовах суворої секретності, то це є однією з найважливіших проблем сучасної криптографії, яка може бути вирішена за допомогою: класичної криптографічної схеми з теоретико-інформаційної стійкістю (для її реалізації необхідний канал з перешкодами; ефективність схеми вкрай низька - 1-5%); класичної криптографічної схеми з відкритим ключем (схема Диффі-Хеллмана, схема цифрового конверту; має обчислювальну стійкість); класичної симетричної криптографічної схеми з обчислювальною стійкістю (потребує наявності у абонентів попередньо встановленого ключа, тобто може розглядатися тільки як схема для збільшення довжини ключа, а не для його розподілення); квантового розподілу ключів (забезпечує теоретико-інформаційну стійкість, але потребує наявності у абонентів попередньо встановленого ключа для аутентифікації класичного каналу, тобто теж може розглядатися як схема для збільшення довжини ключа); методу довірених кур'єрів (висока вартість, велика залежність від людського чиннику).

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

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

З практичної точки зору це означає, що супротивник обізнаний про систему засекреченого зв'язку, що використовується. Припустимо, що супротивнику відомі всі криптографічні перетворення, що використовуються в системі засекреченого зв'язку, а також ключовий простір, причому, як було сказано вище, секретність системи залежить від вибору конкретного ключа. У результаті перехоплення деякого обсягу зашифрованих повідомлень та обчислення апостеріорних ймовірностей супротивник зрозуміє, що їм буде відповідати єдине рішення про використання ключа або передачу відкритого повідомлення (точка єдності прийняття рішення), яке задовольняє даним ймовірностям. [45, стр.93]

Зрозуміло, що подібний висновок цілком може привести до розкриття системи супротивником. Розглянемо найпоширеніші на сьогоднішній день причини здійснення успішних атак на АШ:

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

2) наявність ймовірних слів. Мова йде про слова або вирази, появу яких можливо очікувати в перехопленому повідомленні. Таким чином, у діловому листуванні присутні шаблонні слова; в англійській мові, наприклад, найчастіше зустрічаються "and", "the", "are" і т.д.

3.2 Новий метод шифрування

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

Для простоти будемо шифрувати повідомлення, яке складається з букв англійської абетки, a саме, повідомлення "pasha". Для цього присвоюємо кожній букві цифру. На початку програми, в коментарях, показано яким буквам відповідають цифри від 97 до 122. При виконанні програми отримуємо командний рядок, в який по запиту вводимо ключ, по кожним наступним запитам вводимо букви з яких складається повідомлення i отримуємо код шифру. При виконанні програми дешифрування по запиту вводимо ключ, по новому запиту вводимо код шифру y вигляді цифр i отримуємо розшироване повідомлення.

Шифрування:

Шифрування на Java виконується наступним чином. Спочатку кожній букві англійської абетки привласнюють цифри від 97 до 122. Далі пишеться код для виведення повідомлення "Введите ключ" i створюється поле для вводу інформації, a саме для вводу ключа в вигляді цифри. Схожий код написаний i для вводу повідомлення, після чого виконується цикл, який виводить на екран зашифроване повідомлення по формулі: код букви повідомлення + ключ + попередній код букви (якщо така є). В результаті отримуємо зашифроване повідомлення y вигляді цифр.

importjava. util. *;

publicclassShifrovanie { /* Присвоение числа каждой букве алфавита: a=97,b=98,c=99,d=100,e=101,f=102,g=103,h=104, i=105,j=106,k=107,l=108,m=109, n=110,o=111,p=112,q=113,r=114,s=115,t=116,u=117,v=118,w=119,x=120,y=121,z=122*/ publicstaticvoidmain (Stringarg []) { // Вводим ключ System. out. println ("Введите ключ");

Scannerpervoe = newScanner (System. in);

intkluch = pervoe. nextInt ();

// Вводим первую букву System. out. println ("Введите букву 1");

Scannerscan1 = newScanner (System. in);

charbykva1 = scan1. next (). charAt (0);

intperviyvvod = bykva1+kluch;

// Цикл для шифрования первой буквы if (bykva1=='a') {switch (bykva1) { case 'a': bykva1=1; break; }System. out. println (perviyvvod); } elseif (bykva1=='b') {switch (bykva1) { case 'b': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='c') {switch (bykva1) { case 'c': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='d') {switch (bykva1) { case 'd': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='e') {switch (bykva1) { case 'e': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='f') {switch (bykva1) { case 'f': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='g') {switch (bykva1) { case 'g': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='h') {switch (bykva1) { case 'h': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='i') {switch (bykva1) { case 'i': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='j') {switch (bykva1) { case 'j': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='k') {switch (bykva1) { case 'k': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='l') {switch (bykva1) { case 'l': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='m') {switch (bykva1) { case 'm': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='n') {switch (bykva1) { case 'n': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='o') {switch (bykva1) { case 'o': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='p') {switch (bykva1) { case 'p': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='q') {switch (bykva1) { case 'q': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='r') {switch (bykva1) { case 'r': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='s') {switch (bykva1) { case 's': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='t') {switch (bykva1) { case 't': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='u') {switch (bykva1) { case 'u': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='v') {switch (bykva1) { case 'v': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='w') {switch (bykva1) { case 'w': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='x') {switch (bykva1) { case 'x': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='y') {switch (bykva1) { case 'y': bykva1=2; break; }System. out. println (perviyvvod); } elseif (bykva1=='z') {switch (bykva1) { case 'z': bykva1=2; break; }System. out. println (perviyvvod); } // Цикл для шифрования второй буквы System. out. println ("Введите букву 2");

Scannerscan2 = newScanner (System. in);

charbykva2 = scan2. next (). charAt (0);

intvtoroyvvod = perviyvvod + bykva2;

switch (bykva2) { case 'a': System. out. println (vtoroyvvod); break;

case 'b': System. out. println (vtoroyvvod); break;

case 'c': System. out. println (vtoroyvvod); break;

case 'd': System. out. println (vtoroyvvod); break;

case 'e': System. out. println (vtoroyvvod); break;

case 'f': System. out. println (vtoroyvvod); break;

case 'g': System. out. println (vtoroyvvod); break;

case 'h': System. out. println (vtoroyvvod); break;

case 'i': System. out. println (vtoroyvvod); break;

case 'j': System. out. println (vtoroyvvod); break;

case 'k': System. out. println (vtoroyvvod); break;

case 'l': System. out. println (vtoroyvvod); break;

case 'm': System. out. println (vtoroyvvod); break;

case 'n': System. out. println (vtoroyvvod); break;

case 'o': System. out. println (vtoroyvvod); break;

case 'p': System. out. println (vtoroyvvod); break;

case 'q': System. out. println (vtoroyvvod); break;

case 'r': System. out. println (vtoroyvvod); break;

case 's': System. out. println (vtoroyvvod); break;

case 't': System. out. println (vtoroyvvod); break;

case 'u': System. out. println (vtoroyvvod); break;

case 'v': System. out. println (vtoroyvvod); break;

case 'w': System. out. println (vtoroyvvod); break;

case 'x': System. out. println (vtoroyvvod); break;

case 'y': System. out. println (vtoroyvvod); break;

case 'z': System. out. println (vtoroyvvod); break;

} // Цикл для шифрования третьей буквы System. out. println ("Введите букву 3");

Scannerscan3 = newScanner (System. in);

charbykva3 = scan3. next (). charAt (0);

inttretiyvvod = vtoroyvvod + bykva3;

switch (bykva3) { case 'a': System. out. println (tretiyvvod); break;

case 'b': System. out. println (tretiyvvod); break;

case 'c': System. out. println (tretiyvvod); break;

case 'd': System. out. println (tretiyvvod); break;

case 'e': System. out. println (tretiyvvod); break;

case 'f': System. out. println (tretiyvvod); break;

case 'g': System. out. println (tretiyvvod); break;

case 'h': System. out. println (tretiyvvod); break;

case 'i': System. out. println (tretiyvvod); break;

case 'j': System. out. println (tretiyvvod); break;

case 'k': System. out. println (tretiyvvod); break;

case 'l': System. out. println (tretiyvvod); break;

case 'm': System. out. println (tretiyvvod); break;

case 'n': System. out. println (tretiyvvod); break;

case 'o': System. out. println (tretiyvvod); break;

case 'p': System. out. println (tretiyvvod); break;

case 'q': System. out. println (tretiyvvod); break;

case 'r': System. out. println (tretiyvvod); break;

case 's': System. out. println (tretiyvvod); break;

case 't': System. out. println (tretiyvvod); break;

case 'u': System. out. println (tretiyvvod); break;

case 'v': System. out. println (tretiyvvod); break;

case 'w': System. out. println (tretiyvvod); break;

case 'x': System. out. println (tretiyvvod); break;

case 'y': System. out. println (tretiyvvod); break;

case 'z': System. out. println (tretiyvvod); break;

} // Цикл для шифрования четвертой буквы System. out. println ("Введите букву 4");

Scannerscan4 = newScanner (System. in);

charbykva4 = scan4. next (). charAt (0);

intchetvertiyvvod = tretiyvvod + bykva4;

switch (bykva4) { case 'a': System. out. println (chetvertiyvvod); break;

case 'b': System. out. println (chetvertiyvvod); break;

case 'c': System. out. println (chetvertiyvvod); break;

case 'd': System. out. println (chetvertiyvvod); break;

case 'e': System. out. println (chetvertiyvvod); break;

case 'f': System. out. println (chetvertiyvvod); break;

case 'g': System. out. println (chetvertiyvvod); break;

case 'h': System. out. println (chetvertiyvvod); break;

case 'i': System. out. println (chetvertiyvvod); break;

case 'j': System. out. println (chetvertiyvvod); break;

case 'k': System. out. println (chetvertiyvvod); break;

case 'l': System. out. println (chetvertiyvvod); break;

case 'm': System. out. println (chetvertiyvvod); break;

case 'n': System. out. println (chetvertiyvvod); break;

case 'o': System. out. println (chetvertiyvvod); break;

case 'p': System. out. println (chetvertiyvvod); break;

case 'q': System. out. println (chetvertiyvvod); break;

case 'r': System. out. println (chetvertiyvvod); break;

case 's': System. out. println (chetvertiyvvod); break;

case 't': System. out. println (chetvertiyvvod); break;

case 'u': System. out. println (chetvertiyvvod); break;

case 'v': System. out. println (chetvertiyvvod); break;

case 'w': System. out. println (chetvertiyvvod); break;

case 'x': System. out. println (chetvertiyvvod); break;

case 'y': System. out. println (chetvertiyvvod); break;

case 'z': System. out. println (chetvertiyvvod); break;

} // Цикл для шифрования четвертой буквы System. out. println ("Введите букву 5");

Scannerscan5 = newScanner (System. in);

charbykva5 = scan5. next (). charAt (0);

intpjatoyyvvod = chetvertiyvvod + bykva5;

switch (bykva5) { case 'a': System. out. println (pjatoyyvvod); break;

case 'b': System. out. println (pjatoyyvvod); break;

case 'c': System. out. println (pjatoyyvvod); break;

case 'd': System. out. println (pjatoyyvvod); break;

case 'e': System. out. println (pjatoyyvvod); break;

case 'f': System. out. println (pjatoyyvvod); break;

case 'g': System. out. println (pjatoyyvvod); break;

case 'h': System. out. println (pjatoyyvvod); break;

case 'i': System. out. println (pjatoyyvvod); break;

case 'j': System. out. println (pjatoyyvvod); break;

case 'k': System. out. println (pjatoyyvvod); break;

case 'l': System. out. println (pjatoyyvvod); break;

case 'm': System. out. println (pjatoyyvvod); break;

case 'n': System. out. println (pjatoyyvvod); break;

case 'o': System. out. println (pjatoyyvvod); break;

case 'p': System. out. println (pjatoyyvvod); break;

case 'q': System. out. println (pjatoyyvvod); break;

case 'r': System. out. println (pjatoyyvvod); break;

case 's': System. out. println (pjatoyyvvod); break;

case 't': System. out. println (pjatoyyvvod); break;

case 'u': System. out. println (pjatoyyvvod); break;

case 'v': System. out. println (pjatoyyvvod); break;

case 'w': System. out. println (pjatoyyvvod); break;

case 'x': System. out. println (pjatoyyvvod); break;

case 'y': System. out. println (pjatoyyvvod); break;

case 'z': System. out. println (pjatoyyvvod); break;

} System. out. println ("Ваш код: " + perviyvvod + "," + vtoroyvvod + "," + tretiyvvod + "," + chetvertiyvvod + "," + pjatoyyvvod);

}}

Дешифрування:

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

importjava. util. *;

publicclassDeshifrovanieextendsShifrovanie { publicstaticvoidmain (Stringarg []) { // Вводим ключ System. out. println ("Введите ключ");

Scannerpervoe = newScanner (System. in);

intkluch = pervoe. nextInt ();

// Вводим первую цифру и переводим в цифру для дешифрования System. out. println ("Введите цифру 1");

Scannerscan1 = newScanner (System. in);

intzifra1 = scan1. nextInt ();

intperviyvvod1 = zifra1-kluch;

System. out. println (perviyvvod1);

// Вводим вторую цифру и переводим в цифру для дешифрования System. out. println ("Введите цифру 2");

Scannerscan2 = newScanner (System. in);

intzifra2 = scan2. nextInt ();

intvtoroyvvod2 = zifra2 - perviyvvod1;

System. out. println (vtoroyvvod2);

// Вводим вторую цифру и переводим в цифру для дешифрования System. out. println ("Введите цифру 3");

Scannerscan3 = newScanner (System. in);

intzifra3 = scan3. nextInt ();

inttretiyvvod3 = zifra3 - zifra2;

System. out. println (tretiyvvod3);

// Вводим вторую цифру и переводим в цифру для дешифрования System. out. println ("Введите цифру 4");

Scannerscan4 = newScanner (System. in);

intzifra4 = scan4. nextInt ();

intchetvertyiyvvod4 = zifra4 - zifra3;

System. out. println (chetvertyiyvvod4);

// Вводим вторую цифру и переводим в цифру для дешифрования System. out. println ("Введите цифру 5");

Scannerscan5 = newScanner (System. in);

intzifra5 = scan4. nextInt ();

intpjatiyvvod5 = zifra5 - zifra4;

System. out. println (pjatiyvvod5);

// Цикл для дешифрования кода System. out. println ("Зашифрованное сообщение: ");

if (perviyvvod1==98) {System. out. println ("a"); } elseif (perviyvvod1==99) {System. out. println ("b"); } elseif (perviyvvod1==100) {System. out. println ("c"); } elseif (perviyvvod1==101) {System. out. println ("d"); } elseif (perviyvvod1==102) {System. out. println ("e"); } elseif (perviyvvod1==103) {System. out. println ("f"); } elseif (perviyvvod1==104) {System. out. println ("g"); } elseif (perviyvvod1==105) {System. out. println ("h"); } elseif (perviyvvod1==106) {System. out. println ("j"); } elseif (perviyvvod1==107) {System. out. println ("k"); } elseif (perviyvvod1==108) {System. out. println ("l"); } elseif (perviyvvod1==109) {System. out. println ("m"); } elseif (perviyvvod1==110) {System. out. println ("n"); } elseif (perviyvvod1==111) {System. out. println ("o"); } elseif (perviyvvod1==112) {System. out. println ("p"); } elseif (perviyvvod1==113) {System. out. println ("q"); } elseif (perviyvvod1==114) {System. out. println ("r"); } elseif (perviyvvod1==115) {System. out. println ("s"); } elseif (perviyvvod1==116) {System. out. println ("t"); } elseif (perviyvvod1==117) {System. out. println ("u"); } elseif (perviyvvod1==118) {System. out. println ("v"); } elseif (perviyvvod1==119) {System. out. println ("w"); } elseif (perviyvvod1==120) {System. out. println ("x"); } elseif (perviyvvod1==121) {System. out. println ("v"); } elseif (perviyvvod1==122) {System. out. println ("z"); } if (vtoroyvvod2==99) {System. out. println ("a"); } elseif (vtoroyvvod2==100) {System. out. println ("b"); } elseif (vtoroyvvod2==101) {System. out. println ("c"); } elseif (vtoroyvvod2==102) {System. out. println ("d"); } elseif (vtoroyvvod2==103) {System. out. println ("e"); } elseif (vtoroyvvod2==104) {System. out. println ("f"); } elseif (vtoroyvvod2==105) {System. out. println ("g"); } elseif (vtoroyvvod2==106) {System. out. println ("h"); } elseif (vtoroyvvod2==107) {System. out. println ("j"); } elseif (vtoroyvvod2==108) {System. out. println ("k"); } elseif (vtoroyvvod2==109) {System. out. println ("l"); } elseif (vtoroyvvod2==110) {System. out. println ("m"); } elseif (vtoroyvvod2==111) {System. out. println ("n"); } elseif (vtoroyvvod2==112) {System. out. println ("o"); } elseif (vtoroyvvod2==113) {System. out. println ("p"); } elseif (vtoroyvvod2==114) {System. out. println ("q"); } elseif (vtoroyvvod2==115) {System. out. println ("r"); } elseif (vtoroyvvod2==116) {System. out. println ("s"); } elseif (vtoroyvvod2==117) {System. out. println ("t"); } elseif (vtoroyvvod2==118) {System. out. println ("u"); } elseif (vtoroyvvod2==119) {System. out. println ("v"); } elseif (vtoroyvvod2==120) {System. out. println ("w"); } elseif (vtoroyvvod2==121) {System. out. println ("x"); } elseif (vtoroyvvod2==122) {System. out. println ("v"); } elseif (vtoroyvvod2==123) {System. out. println ("z");

if (tretiyvvod3==98) {System. out. println ("a"); } elseif (tretiyvvod3==99) {System. out. println ("b"); } elseif (tretiyvvod3==100) {System. out. println ("c"); } elseif (tretiyvvod3==101) {System. out. println ("d"); } elseif (tretiyvvod3==102) {System. out. println ("e"); } elseif (tretiyvvod3==103) {System. out. println ("f"); } elseif (tretiyvvod3==104) {System. out. println ("g"); } elseif (tretiyvvod3==105) {System. out. println ("h"); } elseif (tretiyvvod3==106) {System. out. println ("j"); } elseif (tretiyvvod3==107) {System. out. println ("k"); } elseif (tretiyvvod3==108) {System. out. println ("l"); } elseif (tretiyvvod3==109) {System. out. println ("m"); } elseif (tretiyvvod3==110) {System. out. println ("n"); } elseif (tretiyvvod3==111) {System. out. println ("o"); } elseif (tretiyvvod3==112) {System. out. println ("p"); } elseif (tretiyvvod3==113) {System. out. println ("q"); } elseif (tretiyvvod3==114) {System. out. println ("r"); } elseif (tretiyvvod3==115) {System. out. println ("s"); } elseif (tretiyvvod3==116) {System. out. println ("t"); } elseif (tretiyvvod3==117) {System. out. println ("u"); } elseif (tretiyvvod3==118) {System. out. println ("v"); } elseif (tretiyvvod3==119) {System. out. println ("w"); } elseif (tretiyvvod3==120) {System. out. println ("x"); } elseif (tretiyvvod3==121) {System. out. println ("v"); } elseif (tretiyvvod3==122) {System. out. println ("z"); } if (chetvertyiyvvod4==97) {System. out. println ("a"); } elseif (chetvertyiyvvod4==98) {System. out. println ("b"); } elseif (chetvertyiyvvod4==99) {System. out. println ("c"); } elseif (chetvertyiyvvod4==100) {System. out. println ("d"); } elseif (chetvertyiyvvod4==101) {System. out. println ("e"); } elseif (chetvertyiyvvod4==102) {System. out. println ("f"); } elseif (chetvertyiyvvod4==103) {System. out. println ("g"); } elseif (chetvertyiyvvod4==104) {System. out. println ("h"); } elseif (chetvertyiyvvod4==105) {System. out. println ("j"); } elseif (chetvertyiyvvod4==106) {System. out. println ("k"); } elseif (chetvertyiyvvod4==107) {System. out. println ("l"); } elseif (chetvertyiyvvod4==108) {System. out. println ("m"); } elseif (chetvertyiyvvod4==109) {System. out. println ("n"); } elseif (chetvertyiyvvod4==110) {System. out. println ("o"); } elseif (chetvertyiyvvod4==111) {System. out. println ("p"); } elseif (chetvertyiyvvod4==112) {System. out. println ("q"); } elseif (chetvertyiyvvod4==113) {System. out. println ("r"); } elseif (chetvertyiyvvod4==114) {System. out. println ("s"); } elseif (chetvertyiyvvod4==115) {System. out. println ("t"); } elseif (chetvertyiyvvod4==116) {System. out. println ("u"); } elseif (chetvertyiyvvod4==117) {System. out. println ("v"); } elseif (chetvertyiyvvod4==118) {System. out. println ("w"); } elseif (chetvertyiyvvod4==119) {System. out. println ("x"); } elseif (chetvertyiyvvod4==120) {System. out. println ("v"); } elseif (chetvertyiyvvod4==121) {System. out. println ("z"); } if (pjatiyvvod5==97) {System. out. println ("a"); } elseif (pjatiyvvod5==98) {System. out. println ("b"); } elseif (pjatiyvvod5==99) {System. out. println ("c"); } elseif (pjatiyvvod5==100) {System. out. println ("d"); } elseif (pjatiyvvod5==101) {System. out. println ("e"); } elseif (pjatiyvvod5==102) {System. out. println ("f"); } elseif (pjatiyvvod5==103) {System. out. println ("g"); } elseif (pjatiyvvod5==104) {System. out. println ("h"); } elseif (pjatiyvvod5==105) {System. out. println ("j"); } elseif (pjatiyvvod5==106) {System. out. println ("k"); } elseif (pjatiyvvod5==107) {System. out. println ("l"); } elseif (pjatiyvvod5==108) {System. out. println ("m"); } elseif (pjatiyvvod5==109) {System. out. println ("n"); } elseif (pjatiyvvod5==110) {System. out. println ("o"); } elseif (pjatiyvvod5==111) {System. out. println ("p"); } elseif (pjatiyvvod5==112) {System. out. println ("q"); } elseif (pjatiyvvod5==113) {System. out. println ("r"); } elseif (pjatiyvvod5==114) {System. out. println ("s"); } elseif (pjatiyvvod5==115) {System. out. println ("t"); } elseif (pjatiyvvod5==116) {System. out. println ("u"); } elseif (pjatiyvvod5==117) {System. out. println ("v"); } elseif (pjatiyvvod5==118) {System. out. println ("w"); } elseif (pjatiyvvod5==119) {System. out. println ("x"); } elseif (pjatiyvvod5==120) {System. out. println ("v"); } elseif (pjatiyvvod5==121) {System. out. println ("z"); } }}

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

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

Рис.3.1 Результат роботи шифрування (класу "Shifrovanie")

Рисунок 3.2 Результат роботи дешифрування (класу "Deshifrovanie")

За методикою оцінки ефективності криптографічної системи даний тип шифрування отримав оцінку 7 i рекомендований для застосування.

1 - простота використання (оцінка - 2):

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

2 - швидкість шифрування інформації (оцінка - 0):

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

3 - Стійкість алгоритму до зовнішніх атак (оцінка - 1):

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

4 - Ціна (оцінка - 2):

Ціна на такий вид шифрування зовсім не висока, тому використовувати його дуже вигідно.

5 - Кількість використаних математичних операцій (оцінка - 1):

В алгоритмі використано лише 2 математичні операції - зсув по алфавіту на кількість букв рівну секретному ключу i шифрування наступної одиниці інформації попередньою.

6 - Перспективність алгоритму (оцінка - 1):

Оскільки алгоритм легко покращити ускладнивши формулу по якій відбувається шифрування елементів даних, такий тип шифрування є дуже перспективним в найближчі 5 років.

Висновки до ІІІ розділу

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

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

Висновки

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

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

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

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

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

За методикою оцінки ефективності криптографічної системи, ефективність шифрування можна оцінити за наступними параметрами:

1. Простота використання

2. Швидкість шифрування інформації

3. Стійкість алгоритму до зовнішніх атак

4. Ціна

5. Кількість використаних математичних операцій

6. Перспективність алгоритму

Задля оцінки криптографічної системи візьмемо шкалу від нуля до двох і оцінимо кожен з параметрів, які описані вище.

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

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

2. Швидкість кодування інформації: сучасні алгоритми шифрують інформацію за секунди, а отже великої різниці між криптографічними системами не буде. Набагато важливіше питання - чи залежить час шифрування від кількості даних і наскільки? Ставимо 2, якщо залежності немає, 1 \ 0 якщо залежність є, але алгоритм шифрує швидко \ повільно і 0, якщо алгоритм працює з обмеженою кількістю даних.

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

4. Ціна: цей параметр досить відносний. Якщо шифр коштує більше, або стільки ж, скільки і інформація ставимо 0, якщо ціна шифру в півтора рази нижча ціни інформації ставимо 1, якщо ціна шифру менша за ціну інформації в 2 рази і більше, то ставимо 2.

5. Кількість використаних математичних операцій: якщо використана лише одна математична операція - такий алгоритм легко зламати, тому ставимо 0; при багатьох математичних операціях в криптографічній системі ставимо 1; якщо ж відслідкувати кількість операцій в алгоритмі неможливо ставимо 2.

6. Перспективність алгоритму: в цьому параметрі все залежить від давності створення алгоритму (який, звичайно, є загальноприйнятим), чим давніше була створена криптографічна система, тим більше методів винайдено для зламу, а отже система не є перспективною. Якщо алгоритм був створений не більше 5 років тому, ставимо 2; від 5 до 10 років існування алгоритму - ставимо 1; більше 10 років на ринку - ставимо 0. Також цей пункт відповідає поняттю життєвого цикла проекту (життєвий цикл проекту - це період часу від задуму проекту до його закінчення). Чим довше криптографічна система протримається на ринку, тим буде вища поставлена оцінка.

...

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

  • Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.

    курсовая работа [335,3 K], добавлен 11.01.2015

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

    дипломная работа [2,8 M], добавлен 22.06.2011

  • Криптографія – математичні методи забезпечення інформаційної безпеки та захисту конфіденційності. Огляд існуючих методів пошуку нових алгоритмів шифрування. Розробка системи оцінки ефективності криптографічних систем. Найпоширеніші методи шифрування.

    дипломная работа [1,2 M], добавлен 13.06.2015

  • Історія виникнення та розвиток методів шифрування. Особливості розробки програми, що виконує шифрування за допомогою доповнювального модуля, який надає доступ до самої програми. Вибір ефективного методу шифрування даних. Розробка відповідного інтерфейсу.

    курсовая работа [1,9 M], добавлен 21.07.2011

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

    отчет по практике [2,6 M], добавлен 18.05.2014

  • Створення баз даних за допомогою стандартних бібліотек Java та клієнт-серверних програм. Основні стандартні класи і методи бібліотек SQL та swing, бібліотек, що дозволяють опрацьовувати дані СУБД та навчитись концепціям програмування мовою Java.

    лабораторная работа [215,3 K], добавлен 04.10.2011

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Історія розвитку мови Java, основні технології та їх застосування для роботи з SQL-серверами. Огляд багатопоточного програмування в Java. Принципи функціонування сервлетів та JSP-сторінок. Зміна розміру графічних об’єктів, робота з кольорами в Java.

    курсовая работа [49,3 K], добавлен 29.03.2010

  • Методи первинної обробки даних - згладжування та характеристика сплайнів. Загальна характеристика об'єктно-орієнтованої мови Java. Принципи побудови графічного інтерфейсу. Розробка алгоритму програми та інтерфейсу користувача програмного продукту.

    дипломная работа [3,3 M], добавлен 10.10.2013

  • Використання мови програмуванння Java при виконанні "задачі лінійного програмування": її лексична структура і типи даних. Методи розв’язання задачі. Особливості логічної структури програми, побудова її зручного інтерфейсу за допомогою симплекс методу.

    курсовая работа [437,9 K], добавлен 24.01.2011

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

    дипломная работа [1,7 M], добавлен 25.10.2012

  • Розробка програми для управління навчальним процесом студентської групи вищого навчального закладу. Об’єктно-орієнтоване проектування об’єктів групи. Створення мови програмування Java. Побудова графічного інтерфейсу. Робота з невеликими базами даних.

    курсовая работа [935,3 K], добавлен 21.12.2013

  • Основи безпеки даних в комп'ютерних системах. Розробка програми для забезпечення захисту інформації від несанкціонованого доступу: шифрування та дешифрування даних за допомогою криптографічних алгоритмів RSA та DES. Проблеми і перспективи криптографії.

    дипломная работа [823,1 K], добавлен 11.01.2011

  • Розробка кросплатформового інструменту електронного тестування учнів молодших та середніх класів по іноземній мові. Вибір середовища розробки та системи контролю версій. Опис мови програмування Java та лістинг програми. Апаратні та програмні вимоги.

    дипломная работа [608,3 K], добавлен 26.10.2010

  • Вивчення особливості програмування додатків на мові C++ Builder. Шифрування повідомлення методом перестановки букв за маршрутами типу гамільтонський. Огляд існуючих аналогів. Розгляд необхідних вимог до конфігурації електронно-обчислювальної машини.

    контрольная работа [1,2 M], добавлен 24.07.2014

  • Широкі можливості по використанню комп'ютерних навчальних систем. Розробка навчальної системи мультимедійного посібника з дисципліни "Інформатика і ОТ" на тему "Особливості мови програмування С++. Вказівники". Вимоги до розробки навчальної програми.

    курсовая работа [2,9 M], добавлен 23.11.2010

  • Розробка логічної гри "Тетріс" у складі набору об’єктно-орієнтованих моделей, програмного коду з використанням об’єктно-орієнтованної мови Java. Проектування архітектури гри, аналіз вимог до неї, опис реалізації, кодування та тестування програми.

    курсовая работа [2,2 M], добавлен 24.10.2010

  • Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.

    курсовая работа [991,4 K], добавлен 06.08.2013

  • Основи технології запису на оптичні диски. Довготривале зберігання інформації на оптичних носіях. Дослідження існуючих програмних і технічних засобів шифрування даних. Можливі рішення проблем і попередження злому. Програмні засоби шифрування даних.

    дипломная работа [4,0 M], добавлен 27.01.2012

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

    курсовая работа [185,6 K], добавлен 09.04.2013

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