Забезпечення інформаційної безпеки за допомогою криптогрфії

PAGE 3

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

Факультет міжнародної економіки і менеджменту

Кафедра інформаційних технологій

Реєстрац. №___________________

На правах рукопису

УДК______________

«Допущено до захисту»

Д.т.н., проф.

___________/Краскевич В.Є./

(дата і підпис)

Дипломна робота

на тему:

“Забезпечення інформаційної безпеки за допомогою криптогрфії”

за спеціальністю 7.04030302 «Системи і методи прийняття рішень»

Виконавець роботи:

Студент Москаленко Павло Сергійович

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

К.ф.-м.н., с.н.с.

Черевко Михайло Олексійович

Київ – 2015

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

Факультет міжнародної економіки і менеджменту

Кафедра інформаційних технологій

Спеціальність 7.04030302 «Системи та методи прийняття
рішень»

ЗАТВЕРДЖУЮ
завідувач кафедри
______/В.Є.Краскевич/
(підпис)
«___» _________201_г.

ЗАВДАННЯ
По дипломній роботі освітньо-кваліфікаційного рівня «спеціаліст»

Студент: Москаленко Павло Сергійович

1. Тема роботи: «Забезпечення інформаційної безпеки за допомогою криптографії»

Затверджена наказом по університету від «__» ______ 201_р. № _____
2. Терміни здачі студентом закінченої роботи «__» ______ 201_р.

3. Перелік питань, які мають бути розроблені,
а) Нова методика оцінки методів шифрування.
б) Новий метод шифрування.
4. Дата отримання завдання «___» _________ 201__ р.

Керівник дипломної роботи

_______________ к.ф.-м.н., с.н.с. Черевко М.О.
(підпис)

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

_______________ Москаленко П.С.
(підпис)

ЗАТВЕРДЖУЮ
Завідувач кафедри
Краскевич В.Є.
_________________
(підпис)

"___"_____________ 201_р.

КАЛЕНДАРНИЙ ПЛАН-ГРАФІК
виконання дипломного проекту (роботи)
Москаленко Павла Сергійовича

№ з/п

Назва етапів роботи та питань, які повинні бути розроблені відповідно до завдання

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

Відмітки керівника про виконання

1.

Розробка актуальності обраної теми

09.02.15 - 19.02.15

2.

Огляд існуючих методів вирішення проблем

20.02.15 - 14.03.15

3.

Вибір засобу вирішення проблем

15.03.15 - 25.03.15

4.

Розробка практичної частини

26.03.15 – 18.05.15

5.

Аналіз роботи. Робота над помилками

18.05.15 - 06.06.15

6.

Підготовка до захисту.

07.06.15 - 17.06.15



Керівник роботи: к.ф.-м.н., с.н.с. Черевко М.О. ________________
(підпис)

РЕФЕРАТ

дипломної роботи

студента Українського державного університету фінансів та міжнародної торгівлі

Москаленко Павла Сергійовича

освітньо-кваліфікаційного рівня «Спеціаліст»

на тему: «Забезпечення інформаційної безпеки за допомогою криптографії»

Обсяг дипломної роботи - 64 сторінк, на яких розміщено 13 рисунків. При написанні дипломної роботи використовувалося 13 джерел.

Ключові слова: криптографія, шифрування, дешифрування, алгоритм, мова програмування.

Мета роботи – винайти новий метод шифрування та систему, яка буде здатна оцінити методи шифрування.

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

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

У новому типі шифрування розкривається суть нової криптографічної системи.

В експериментальній частині: новий алгоритм шифрування описується створена програма під криптографічну систему на мові С++.

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

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

ABSTRACT

Diploma work
Student Ukrainian State University of Finance and International Trade

Pavel Moskalenko
educational qualification of "Specialist"

On theme "Security of the information using cryptography"

   The volume of the diploma is 64 pages which contains 13 figures. There are 13 sources used while writing a diploma.
Keywords: Cryptography, encryption, decryption, algorithm, programming language.
   Purpose - to invent a new encryption method and system that will be able to say how good are encryption methods.

   Diploma consists of the following sections: the relevance, problem statement, a review of existing methods of solution, the choice of the solution, methods of evaluating the effectiveness of cryptographic systems, a new type of encryption, experimental part: The new encryption algorithm, new encryption method analysis, conclusions and list of references .

   In relevance revealed the need to study the chosen direction.

   In the problem statement revealed a problem concerning the chosen topic and the objectives which should be achieved in the experimental part.

   The review of existing methods of solution was written about various encryption algorithms information.

   In choice of the solution there are some considered tools that have been selected to create a new data encryption algorithm.

   The method of evaluating the effectiveness of cryptographic systems describes invented a new evaluating method of the effectiveness of the cryptographic algorithms.

   The new type of encryption reveals the essence of the new cryptographic system.

   In the experimental part: The new encryption algorithm describes a program that was created with the help of C ++.

   In the analysis of the new method of encoding information considered the advantages and disadvantages of the new encryption algorithm, also the viability and future development.

   The findings are summarizing the results.

ЗМІСТ

1. РЕФЕРАТ…………………………………………………………………………
2. Актуальність……………………………………………………………………... 9
3. Постановка задачі…………………………………………………………..…… 11
4. Огляд існуючих методів рішення проблеми…………………………………... 12
3.1. Найпоширеніші методи шифрування…………………………………….. 17
5. Вибір засобу вирішення проблеми…………………………………………….. 29
6. Методика оцінки ефективності криптографічної системи…………………… 46
7. Новий тип шифрування…………………………………………………………. 49
8. Експериментальна частина: новий алгоритм шифрування...…………………. 51
9. Аналіз нового методу шифрування…………………………………………….. 61
10. Висновки………………………………………………………………………... 63
11. Список використаних джерел…………..……………………………………... 64

Актуальність

На сьогоднішній день криптографія займає важливе місце в ІТ індустрії. Криптографія – це секція ІТ сфери, яка вивчає методи захисту конфіденційності і автентичності інформації. Наука дуже популярна за кордоном, що наприклад, показує така відома компанія як Bloombase Inc., яка розробляє інформаційну безпеку у вигляді алгоритму щоб запобігти втручанням хакерів, що можуть своїми діями призвести до авіакатастроф. В Україні ж ця галузь зовсім не розвинена. Більше того, в Україні немає жодної компанії, яка б займалася подібними речами. Єдиний сервіс інформаційної безпеки який ми маємо, це «Державний сервіс комунікації і інформаційної безпеки», але він знаходиться на дуже низькому рівні розвитку.
Криптографія є важливим інструментом боротьби з кібертероризмом, створення і впровадження високоякісних трендових шифрувальних систем є важливим кроком на шляху захисту підприємств і, навіть, держави.
В наш час існують дві найбільші проблеми, що пов’язані з захистом інформації. По-перше, немає дійсно якісного алгоритму шифрування з гарним співвідношенням ціни-якості: звичайно, що люди хочуть захистити інформацію якомога краще, але не завжди вистачає грошей для такого виду шифрування, тому прийнято рішення, що алгоритм захисту інформації має коштувати менше ніж сама інформація. З іншого боку, якщо взяти дуже дешевий тип шифрування (алгоритм Цезаря), а інформація буде надважливою для підприємства, чи держави, хакерам вистачить кілька днів, щоб зламати код і увійти в систему, використовуючи потрібну їм інформацію у своїх цілях.
По-друге, до сих пір не розроблені методики оцінки ефективності криптографічних систем, враховуючи ціну-якість. А отже, для користувача, або замовника постає складне питання, яку саме шифрувальну систему йому обрати; в рамках держави, якщо придбати послугу створення дешевого алгоритму захисту інформації, то немає ніякої гарантії, що на наступний день всі данні не будуть відомі іншій країні. Якщо ж вибрати найдорожчий варіант, то може не вистачити на більш важливі потреби народу, більш того, трохи дешевша система кодування може виявитися настільки ж ефективною, як і найдорожча.

Постановка задачі

У цій дипломній роботі буде виведений новий тип шифрування, який, на мій погляд, буде дешевим і одразу ж надійним. Також, буде розроблена методика оцінки ефективності криптографічної системи для полегшення вибору замовника.
Нова методика оцінки ефективності криптографічних систем допоможе підприємству обрати потрібну систему шифрування не переплачуючи за неї. Це полегшить вибір і дасть змогу отримати найкращий варіант саме для даного замовника, враховуючи його побажання.
Виведену нову систему шифрування, в даній дипломній роботі, буде вигідно використовувати для підприємств, які мають на меті захистити внутрішню інформацію. А різні секретні ключі для даного типу шифрування дадуть змогу захистити інформацію одним методом для різних відділів підприємства, що дуже вигідно. Даний тип шифрування дуже легкий у використанні, написаний на мові програмування С++, а отже підходить для використання на всіх персональних комп’ютерах, на яких встановлено ОС Windows.
Ідея алгоритму полягає в шифруванні даних з виведенням надлишкової інформації, що підвищить надійність алгоритму. Чим більше число ми виберемо під ключ, тим більше надлишкової інформації отримаємо і тим складніше буде розшифрувати текст.

Огляд існуючих методів рішення проблеми

Для того, щоб створити новий метод шифрування, необхідно зробити огляд вже існуючих шифрів, взяти з них найкращі ідеї, додати свої і скомпонувати. Але перед цим потрібно зрозуміти що таке криптографія, її загальні визначення та класифікація, а також технологія захисту інформації.
Криптографія – наука про математичні методи забезпечення конфіденційності (неможливість отримати доступ до інформації стороннім особам) і автентичності (цілісності і справжності авторства) інформації. Розвинулась з практичної потреби передавати важливі відомості найнадійнішим чином.
Криптографія займалася виключно забезпеченням конфіденційності повідомлень (тобто шифруванням) — перетворенням повідомлень із зрозумілої форми в незрозумілу і зворотнє відновлення на стороні одержувача, роблячи його неможливим для прочитання для того, хто перехопив або підслухав без секретного знання (а саме ключа, необхідного для дешифровки повідомлення). В останні десятиліття сфера застосування криптографії розширилася і включає не лише таємну передачу повідомлень, але і методи перевірки цілісності повідомлень, ідентифікування відправника/одержувача (аутентифікація), цифрові підписи, інтерактивні підтвердження, та технології безпечного спілкування, тощо.
Для сучасної криптографії характерне використання відкритих алгоритмів шифрування, що припускають використання обчислювальних засобів. Відомо більш десятка перевірених алгоритмів шифрування, які, при використанні ключа достатньої довжини і коректної реалізації алгоритму, роблять шифрований текст недоступним для крипто аналізу.
Криптографія є найпотужнішим на сьогоднішній день засобом захисту інформації. Вона зародилася майже одночасно із самим мистецтвом письма і на сьогоднішній день перетворилася на могутню прикладну науку, засновану на глибоких математичних знаннях. Проти самого криптографічного захисту не допомагають ні різні хитрощі, ні використання самих потужних електронно-обчислювальних машин (ЕОМ) світу – тут на сторожі таємниць стоїть математика. Єдиною можливістю для зловмисника є обхідні шляхи, такі як крадіжка діючих і використаних ключів, передбачення майбутніх значень генераторів псевдовипадкових чисел.
Криптографічні ключі розрізняються згідно алгоритмам, в яких вони використовуються.
Секретні (Симетричні) ключі – ключі, що використовуються в симетричних алгоритмах (шифрування, вироблення кодів автентичності). Головна властивість симетричних ключів: для виконання як прямого, так і зворотного криптографічного перетворення (шифрування / розшифрування,) необхідно використовувати один і той же ключ (або ж ключ для зворотного перетворення легко обчислюється із ключа для прямого перетворення, і навпаки ). З одного боку, це забезпечує більш високу конфіденційність повідомлень, з іншого боку, створює проблеми розповсюдження ключів в системах з великою кількістю користувачів.
Асиметричні ключі – ключі, що використовуються в асиметричних алгоритмах (шифрування);  складаються з двох ключів (ключова пара):
Закритий ключ (Private key) – ключ, відомий тільки своєму власнику. Тільки збереження користувачем у таємниці свого закритого ключа гарантує неможливість підробки зловмисником документа і цифрового підпису від імені котрий запевняє.
Відкритий ключ (Public key) – ключ, який може бути опублікований і використовується для перевірки дійсності підписаного документа, а також для попередження шахрайства з боку посвідчує особи у вигляді відмови його від підпису документа. Відкритий ключ підпису обчислюється, як значення деякої функції від закритого ключа, але знання відкритого ключа не дає можливості визначити закритий ключ.
Симетричні криптосистеми володіють одним серйозним недоліком. Пов’язано це із ситуацією, коли спілкування між собою провадять не три-чотири особи, а сотні й тисячі людей. У цьому випадку для кожної пари, що листується між собою, необхідно створювати свій секретний симетричний ключ. Це в підсумку приводить до існування в системі з N користувачів N2/2 ключів. А це вже дуже «пристойне» число. Крім того, при порушенні конфіденційності якої-небудь робочої станції зловмисник одержує доступ до всіх ключів цього користувача й може відправляти, ніби від його імені, повідомлення всім абонентам, з якими «жертва» вела переписку.

Своєрідним рішенням цієї проблеми стала поява асиметричної криптографії. Ця область криптографії дуже молода в порівнянні з іншими представниками. Перша схема, що мала прикладну значимість, була запропонована всього близько 30 років тому. Але за цей час асиметрична криптографія перетворилася в один з основних напрямків криптології, і використовується в сучасному світі також часто, як і симетричні схеми.
Асиметрична криптографія задумана як засіб передачі повідомлень від одного об’єкта до іншого (а не для конфіденційного зберігання інформації, що забезпечують тільки симетричні алгоритми). Тому приймаємо терміни «відправник» – особа, що шифрує, а потім відправляє інформацію з незахищеного каналу й «одержувач» – особа, що приймає й відновлює інформацію в її вихідному вигляді. Основна ідея асиметричних криптоалгоритмів полягає в тому, що для шифрування повідомлення використається один ключ, а при дешифруванні – інший.
Крім того, процедура шифрування обрана так, що вона необоротна навіть за відомим ключем шифрування – це друга необхідна умова асиметричної криптографії. Тобто, знаючи ключ шифрування й зашифрований текст, неможливо відновити вихідне повідомлення – прочитати його можна тільки за допомогою другого ключа – ключа дешифрування. А якщо так, то ключ шифрування для відправлення листів якій-небудь особі можна взагалі не приховувати – знаючи його однаково неможливо прочитати зашифроване повідомлення. Тому, ключ шифрування називають в асиметричних системах «відкритим ключем», а от ключ дешифрування одержувачеві повідомлень необхідно тримати в секреті – він називається «закритим ключем». Напрошується питання : «Чому, знаючи відкритий ключ, не можна обчислити закритий ключ ?» – це третя необхідна умова асиметричної криптографії – алгоритми шифрування й дешифрування створюються так, щоб знаючи відкритий ключ, неможливо обчислити закритий ключ.
В цілому система переписки при використанні асиметричного шифрування виглядає в такий спосіб. Для кожного з N абонентів, що ведуть переписку, обрана своя пара ключів : «відкритий» Ej й «закритий» Dj, де j – номер абонента. Всі відкриті ключі відомі всім користувачам мережі, кожен закритий ключ, навпаки, зберігається тільки в того абонента, якому він належить. Якщо абонент, скажемо під номером 7, збирається передати інформацію абонентові під номером 9, він шифрує дані ключем шифрування E9 і відправляє її абонентові 9. Незважаючи на те, що всі користувачі мережі знають ключ E9 й, можливо, мають доступ до каналу, яким йде зашифроване послання, вони не можуть прочитати вихідний текст, тому що процедура шифрування необоротна за відкритим ключем. І тільки абонент 9, одержавши послання, робить над ним перетворення за допомогою відомого тільки йому ключа D9 і відновлює текст послання. Помітьте, що якщо повідомлення потрібно відправити в протилежному напрямку (від абонента 9 до абонента 7), то потрібно буде використати вже іншу пару ключів (для шифрування ключ E7, а для дешифрування – ключ D7).
Симетричні криптоалгоритми поділяються на:

1. Потокові шифри – побітна обробка інформації. Шифрування і дешифрування в таких схемах може обриватися в довільний момент часу, як тільки з’ясовується, що потік що передається перервався, і також відновлюється при виявленні факту продовження передачі.
1.1 Скремблер – це набір біт, які міняються на кожному кроці по визначеному алгоритму. Після виконання кожного наступного кроку на його виході з’являється шифруючий біт (0 або 1), який накладається на поточний біт.
2. Блочні шифри – перетворення блоку вхідної інформації фіксованої довжини. Схема застосовується при пакетній передачі інформації та кодування файлів.
2.1 Мережа Фейштеля – метод оборотних перетворень тексту, при якому значення, обчислені від однієї з частин тексту, накладається на інші частини. Часто структура мережі виконується таким чином, що для шифрування і дешифрування використовується один і той же алгоритм – різниця полягає лише в порядку використання матеріалу ключа.
В основному, симетричні алгоритми шифрування вимагають менше обчислень, ніж асиметричні. На практиці, це означає, що якісні асиметричні алгоритми в сотні або в тисячі разів повільніші за якісні симетричні алгоритми. Недоліком симетричних алгоритмів є необхідність мати секретний ключ з обох боків передачі інформації. Так як ключі є предметом можливого перехоплення, їх необхідно часто змінювати та передавати по безпечних каналах передачі інформації під час розповсюдження.
Переваги:
—  Швидкість
—  Простота реалізації (за рахунок більш простих операцій)
—  Необхідна менша довжина ключа для порівнянної стійкості
—  Вивченість (за рахунок більшого віку)
Недоліки:
—  Складність управління ключами у великій мережі. Це означає квадратичне зростання числа пар ключів, які треба генерувати, передавати, зберігати і знищувати в мережі. Для мережі в 10 абонентів потрібно 45 ключів, для 100 вже 4950, для 1000 – 499500.
—  Складність обміну ключами. Для застосування необхідно вирішити проблему надійної передачі ключів кожному абоненту, тому що потрібен секретний канал для передачі кожного ключа обом сторонам.
Для компенсації недоліків симетричного шифрування в даний час широко застосовується комбінована (гібридна) криптографічний схема, де за допомогою асиметричного шифрування передається сеансовий ключ, що використовується сторонами для обміну даними за допомогою симетричного шифрування.
Важливою властивістю симетричних шифрів є неможливість їх використання для підтвердження авторства, так як ключ відомий кожній стороні. [4]

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

Шифр Цезаря :
симетричний алгоритм шифрування підстановками. Використовувався римським імператором Юлієм Цезарем для приватного листування.
Принцип дії полягає в тому, щоб циклічно зсунути алфавіт, а ключ — це кількість літер, на які робиться зсув.
Якщо зіставити кожному символу алфавіту його порядковий номер (нумеруючи з 0), то шифрування і дешифрування можна виразити формулами:


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

Шифр Цезаря має замало ключів — на одиницю менше, ніж літер в абетці. Тому перебрати усі ключі не складає особливої роботи. Дешифрування з одним з ключів дасть нам вірний відкритий текст.
Також зламати шифр Цезаря також можна, як і звичайний підстановочний шифр, у зв’язку з тим, що частота появи кожної літери в шифртексті збігається з частотою появи у відкритому тексті. Якщо припустити, що частота появи літер у відкритому тексті приблизно відповідає середньостатистичній відносній частоті появи літер в текстах мови, на якій написано повідомлення, тоді ключ знаходиться зіставленням перших декількох літер, що трапляються найчастіше у відкритому та зашифрованому текстах. Тобто за допомогою методу частотного криптоаналізу. [5]
Шифр Віженера:  
поліалфавітний шифр, який у якості ключа використовує слово. Ключове слово повторюється, поки не отримано гаму, рівну довжині повідомлення.
Отримав назву на честь Блеза де Виженера. Ci = (Pi + Kj) mod 33 (Pі, Kj, Ci – місце в алфавіті виражене через цифри). Сі – буква, яку потрібно зашифрувати, Рі – буква по верхньому ряду, Кі – буква по нижньому ряду таблиці.

_

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

б

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

в

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

г

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

ґ

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

д

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

е

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

є

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

ж

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

з

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

и

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

і

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

ї

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

й

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

к

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

л

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

м

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

н

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

о

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

п

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

р

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

с

с

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

т

т

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

у

у

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

ф

ф

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

х

х

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

ц

ц

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ч

ч

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ш

ш

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

щ

щ

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

ь

ь

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ю

ю

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

я

я

а

б

в

г

ґ

д

е

є

ж

з

и

і

ї

й

к

л

м

н

о

п

р

с

т

у

ф

х

ц

ч

ш

щ

ь

ю


По вертикалі вибираємо літери відкритого тексту, а по горизонталі — ключа, на перетині цих значень отримуємо знаки шифротексту. Наприклад:
Відкритий текст: «полі/алфа/вітн/ий ши/фр»
Ключ: «ключ/ключ/ключ/кл юч/кл»
Шифротекст: «аайд/кьтч/мцрі/фш цґ/дв». [6]

Шифр Вермана:
у криптографії ця система шифрування винайдена в 1917 році співробітниками AT&T Джозефом Моборном і Гільбертом Вернамом.
Для відтворення шифртексту відкритий текст об'єднується операцією «виключне АБО» з ключем (названим одноразовим блокнотом або шифроблокнотом). При цьому ключ повинен володіти трьома критично важливими властивостями: 
     1. Бути справді випадковим; 
     2. Збігатися з розміром з заданим відкритим текстом;
     3. Застосовуватися тільки один раз.
Шифр названий на честь телеграфіста AT&T Гільберта Вернама, що в 1917 році побудував телеграфний апарат, який виконував цю операцію автоматично - треба було тільки подати на нього стрічку з ключем. Не будучи шифрувальником, тим не менше, Вернам вірно помітив важливу властивість свого шифру - кожна стрічка повинна використовуватися тільки один раз і після цього знищуватися.
В 1949 році Клод Шеннон опублікував роботу, в якій довів абсолютну стійкість шифру Вернама. Інших шифрів з цією властивістю не існує. Це по суті означає, що шифр Вернама є найбезпечнішою криптосистемою з усіх можливих. При цьому умови, яким повинен задовольняти ключ, настільки сильні, що практичне використання шифру Вернама є важко здійсненним. Тому він використовується тільки для передачі повідомлень найвищої секретності.
На початку 20 ст. для передачі повідомлень все ширше і ширше використовувалися телетайпи. Тому потрібні були методи, що дозволяють шифрувати текст не до того, як він потрапляє до телеграфіста, а безпосередньо в момент передачі, і, відповідно, розшифровувати в момент прийому.      
Подальше вдосконалення методу, запропонованого Вернамом, належить майбутньому начальнику зв'язку військ США Джозеф Моборну, що об'єднав хаотичність «гами», на яку спирався Вернам у своїй системі «автоматичного шифрування», з використовуваним у той час у військах правилом «одноразового шифрблокнота». Ідея Моборна полягала в тому, що кожна випадкова «гама» повинна використовуватися один, і тільки один раз. При цьому для шифрування кожного знака всіх текстів, які вже передані або будуть передані в найближчому майбутньому, повинен застосовуватися абсолютно новий і такий, що не піддається передбаченню знак «гами».
На практиці можна один раз фізично передати носій інформації з довгим дійсно випадковим ключем, а потім по мірі необхідності пересилати повідомлення. На цьому заснована ідея шифроблокнотів: шифрувальник при особистій зустрічі забезпечується блокнотом, кожна сторінка якого містить ключ. Такий же блокнот є і у приймаючої сторони. Використані сторінки знищуються. Крім того, якщо є два незалежних канали, в кожному з яких ймовірність перехоплення низька, але відрізняється від нуля, шифр Вернама також можна застосувати: по одному каналу можна передати зашифроване повідомлення, по другому - ключ. Для того, щоб розшифрувати повідомлення, перехоплювач повинен прослуховувати обидва канали. 
Шифр Вернама може застосовуватися, якщо є односторонній захищений канал: ключ передається в одну сторону під захистом каналу, повідомлення в іншу сторону захищаються ключем.
У період між двома світовими війнами в більшості країн з'являються електромеханічні шифратори. Вони були двох типів. Перший - пристрій, що складається з комутаційних дисків та механізму зміни їх кутових положень. За обома сторонами комутаційного диска розміщені контакти, відповідні алфавіту відкритого та шифрованого тексту. Контакти ці з'єднуються між собою відповідно до деякого правила підстановки, що зветься комутацією диска. Ця комутація визначає заміну літер в початковому кутовому положенні. При зміні кутового положення диска змінюється і правило підстановки. Таким чином, ключ шифрування містить кілька невідомих: схему з'єднання контактів і початкове кутове положення. Якщо після шифрування кожної літери міняти кутове положення диска - отримаємо багато алфавітне шифрування. Ще більш складний пристрій отримаємо, з'єднавши послідовно кілька дисків, кутові положення яких змінюються з різною швидкістю. 
Широко відома шифрмашина «Енігма», якою були оснащені німецькі війська часів Другої світової війни, є типовим прикладом пристрою на комутаційних дисках. Конструктивно «Енігма» походила на звичайну друкарську машинку, тільки натискання клавіші призводило не до удару молоточка по паперу, а створювало електричний імпульс, що надходив у схему криптоперетворення. Американська шифрмашина М-209 - типовий приклад другого типу шифратора. 
Таким чином, перед Другою світовою війною всі провідні країни мали на озброєнні електромеханічні шифрсистеми, що володіють високою швидкістю обробки інформації і високою стійкістю. Вважалося, що застосовувані системи неможливо розшифрувати і криптоаналізу більше робити абсолютно нічого. Як часто буває, ця думка була згодом спростована, і дешифровщики були безпосередніми учасниками бойових дій.
Завдяки накладеним обмеженням на ключ, в 1949 році Клод Шенон довів, що шифр Вернама є абсолютно криптостійким. Але:
1. Для роботи шифру Вернама необхідна дійсно випадкова послідовність нулів та одиниць (ключ). За визначенням, послідовність, отримана з використанням будь-якого алгоритму, є не зовсім випадковою, а псевдовипадковою. Тобто, потрібно отримати випадкову послідовність неалгорітмічно (наприклад, використовуючи радіоактивний розпад ядер, створений електронним генератором білий шум або інші досить випадкові події). 
2. Проблемою є таємна передача послідовності та збереження її в таємниці. Якщо існує надійно захищений від перехоплення канал передачі повідомлень, шифри взагалі не потрібні: секретні повідомлення можна передавати з цього каналу. При цьому, оскільки довжина ключа така ж, як і довжина повідомлення, передати його не простіше, ніж повідомлення. Шифроблокнот на фізичному носії можна вкрасти або скопіювати. 
3. Можливі проблеми з надійним знищенням використаної сторінки. Цьому схильні як паперові сторінки блокнота, так і сучасні електронні реалізації з використанням компакт-дисків або флеш-пам'яті. 
4. Якщо третя сторона якимось чином дізнається повідомлення, вона легко відновить ключ і зможе підмінити повідомлення на інше такої ж довжини. 
5. Шифр Вернама чутливий до будь-якого порушення процедури шифрування. Наприклад, контррозвідка США часто розшифровувала радянські та німецькі послання через неточності генератора випадкових чисел. Бували випадки, коли одна і та ж сторінка блокнота застосовувалася двічі - США також розшифровували такі послання. [7]

Наприклад:
Слово "Москаленко" ключ 57065
1 листок: 38902 ...
2 листок: 57065 23252 82110 22152 42125
3 листок: 23056...
Текст "привет мир" ключ 57065
1 листок: 28763...
2 листок: 73521...
3 листок: 57065 26271 91215 29432 31927
Кодування алфавіту виконуватиметься в такій послідовності: 0 – 00…, 9 – 09…, а – 10…, я – 43.

RSA— криптографічна система з відкритим ключем.
RSA став першим алгоритмом такого типу, придатним і для шифрування і для цифрового підпису. Алгоритм використовується у великій кількості криптографічних застосунків.
Опис алгоритму:
Безпека алгоритму RSA побудована на принципі складності факторизації цілих чисел. Алгоритм використовує два ключі — відкритий (public) і секретний (private), разом відкритий і відповідний йому секретний ключі утворюють пари ключів (keypair). Відкритий ключ не потрібно зберігати в таємниці, він використовується для шифрування даних. Якщо повідомлення було зашифровано відкритим ключем, то розшифрувати його можна тільки відповідним секретним ключем.
Для того, щоб згенерувати пари ключів виконуються такі дії:
вибираються два великі прості числа  і  приблизно 512 біт завдовжки кожне;
обчислюється їх добуток ;
обчислюється функція Ейлера ;

вибирається ціле  таке, що  та  взаємно просте з ;

за допомогою розширеного алгоритму Евкліда знаходиться число  таке, що ;

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

З умови
випливає, що
 для деякого цілого , отже

Згідно з теоремою Ейлера:
, тому


RSA працює значно повільніше симетричних алгоритмів. Для підвищення швидкості шифрування відкритий показник  вибирається невеликим, звичайно 3, 17 або 65537 (2 обрати не можна, бо  повинно бути взаємно простим із ). Ці числа у двійковому вигляді містять тільки по дві одиниці, що зменшує число необхідних операцій множення при піднесенні до степеня. Наприклад, для піднесення числа  до степеня 17 потрібно виконати тільки 5 операцій множення:





Вибір малого значення відкритого показника може призвести до розкриття повідомлення, якщо воно відправляється відразу декільком одержувачам, але ця проблема вирішується за рахунок доповнення повідомлень.
Значення секретного показника  повинне бути досить великим. У 1990 році Міхаель Вінер  показав, що якщо  і , то є ефективний спосіб обчислити  по  і . Однак, якщо значення  вибирається невеликим, то  виявляється досить великим і проблеми не виникає.
Система RSA використовується для захисту програмного забезпечення й у схемах цифрового підпису. Також вона використовується у відкритій системі шифрування PGP.
Через низьку швидкість шифрування (близько 30 кбіт/сек при 512 бітному ключі на процесорі 2 ГГц), повідомлення звичайно шифрують за допомогою продуктивніших симетричних алгоритмів з випадковим ключем (сеансовий ключ), а за допомогою RSA шифрують лише цей ключ.
Алгоритм електронного цифрового підпису Ель Гамаля (EGSA):
Надійний та зручний для реалізації на персональних комп’ютерах алгоритм цифрового підпису був розроблений у 1984 році американцем арабського походження Тахером Ель Гамалем. У 1991 році Національний інститут стандартів (НІСТ) США обґрунтував перед комісією Конгресу США вибір цього алгоритму як бази для відповідного національного стандарту. Найменування EGSA має походження від слів El Gamal Signature Algorithm (алгоритм цифрового підпису Ель Гамаля). Ідея EGSA базується на тому, що для практичної неможливості фальсифікації ЕЦП може бути використана практично нерозв’язувана задача дискретного логарифмування.
Алгоритм: 
1. Перший користувач вибирає випадкове секретне число k, взаємно просте з Р-1, і обчислює число A^k mod P
2. Потім застосовуємо алгоритм Евкліда для значення b  рівнянні:
m = (X1 * а +k * b) mod (P-1)
Пара чисел (а, b) буде цифровим підписом повідомлення m.
3. Повідомлення m разом з підписом (а, b) відправляється користувачеві 2.
4. Користувач 2 отримує повідомлення m і з використанням відкритого
ключа першого абонента Y1 обчислює два числа за наступними формулами
с1=Y1^a * a^b mod P, c2= A^m mod P
Якщо с1 = с2, то цифровий підпис першого користувача вірний.
Приклад обчислення і перевірки цифрового підпису:
Маємо наступні загальні параметри: Р = 43, А = 23.
Один з користувачівпідписує своє повідомлення  m=15 цифровим підписом, сформованим по алгоритму Ель Гамаля. Спочатку він обирає собі закритий ключ  Х1=7 і формує  відкритий ключ: Y1 = 23^27 mod 41 = 4. Відкритий ключ передаємо іншим партнерам. Потім обираємо випадкове секретне число до, взаємно просте з Р-1. Нехай k=12. Далі обчислюємо число a = A^k mod P = 23^13 mod 41 = 31.
Потім за допомоою алгоритму Евкліда знаходиться  b в рівнянні:
m = (X1 * а +k * b) mod (P-1) = 15=7 * 31+13 * 6 mod 40
Рішенням  буде значення b=6.
Таким чином, пара чисел (31, 6) буде цифровим підписом повідомлення  m=15.
Потім інший партнер перевіряє цифровий підпис в повідомленні(за бажанням): він отримує отримує  відкритий ключ першого  користувача та обчислює  с1 і с2 і порівнює їх.
с1=Y1^a * a^b mod P=23^7 * 31^6 mod 41=40,

c2= A^m mod P= 23^15 mod 41= 40
Якщо с1 = с2, то цифровий підпис в повідомленні m=15 вірний. [8]
Алгоритм Диффі-Хеллмана:
Припустимо, що обом абонентам відомі деякі два числа g і p (наприклад, вони можуть бути «зашиті» в програмне забезпечення), які не є секретними і можуть бути відомі також іншим зацікавленим особам. Для того, щоб створити невідомий більш нікому секретний ключ, обидва абонента генерують великі випадкові числа: перший абонент — число a, другий абонент — число b. Потім перший абонент обчислює значення A = gamod p і пересилає його друга, а другий обчислює B = gbmod p і передає першому.
Передбачається, що зловмисник може отримати обидва цих значення, але не модифікувати їх (тобто у нього немає можливості втрутитися в процес передачі). На другому етапі першого абонент на основі наявної в нього a і отриманого по мережі B обчислює значення Bamod p = gabmod p, а другий абонент на основі наявної в нього b і отриманого по мережі A обчислює значення Abmod p = gabmod p. Як неважко бачити, у обох абонентів вийшло одне і те ж число: K = gabmod p. Його вони і можуть використовувати в якості секретного ключа, оскільки тут зловмисник зустрінеться з практично нерозв’язною (за розумний час) проблемою обчислення gabmod p по перехоплених gamod p і gbmod p, якщо числа p, a, b обрані досить великими.



Під час роботи алгоритму, кожна сторона:
генерує випадкове натуральне число a — закритий ключ;
спільно з віддаленої стороною встановлює відкриті   параметри p і g (зазвичай значення p і g генеруються на  одній стороні і передаються іншій), де
p є випадковим простим числом;
g є первісним коренем за модулем p;
обчислює відкритий ключ A, використовуючи  перетворення над закритим ключем A = ga mod p;
обмінюється відкритими ключами з віддаленої стороною;
обчислює загальний секретний ключ K, використовуючи  відкритий ключ віддаленої сторони B і свій закритий ключ a;
K = Ba mod p
Ключ виходить рівним з обох сторін, тому що:
Ba mod p = (gb mod p) a mod p = gab mod p = (ga mod p) b  mod p = Ab mod p. [9]

Вибір засобу вирішення проблеми

Для винаходу нового методу шифрування можуть підійти декілька програмних продуктів, як, наприклад, Delphi, C, C++, Excel, Pascal та інші.
Спочатку було обрано Excel:
Табличний процесор Excel фірми Microsoft призначений для введення, зберігання, обчислення і виведення великих обсягів даних у вигляді, зручному для аналізу і сприйняття інформації. Усі дані зберігаються й обробляються у вигляді окремих або зв'язаних таблиць. Одна або кілька таблиць складають «робочу книгу», У цьому випадку таблиці називаються робочими аркушами цієї книги, аркуші можна видаляти, доповнювати або переміщати з однієї робочої книги в іншу. Фізично на диску зберігається вся книга у вигляді окремого файла з розширенням «xls».
Можливості Excel дуже високі (обробка тексту, управління базами даних). Програма настільки потужна, що в багатьох випадках перевершує спеціалізовані програми-редактори або програми баз даних. Таке різноманіття функцій може спочатку навіть відлякувати, але в міру набуття досвіду користувач зможе оцінити майже безмежні можливості Excel.
За майже двадцятилітню історію табличних розрахунків із застосуванням персональних комп'ютерів вимоги користувачів до подібних програм істотно змінилися. Спочатку основний акцент у такій програмі, як, наприклад, VisiCalc, робився на обчислювальні функції. Сьогодні положення змінилося. Поряд з інженерними й бухгалтерськими розрахунками організація і графічне зображення даних набуває все більшого значення.
Крім того, різноманіття функцій, пропоноване такою обчислювальною й графічною програмою, не повинне ускладнювати роботу користувача. Програми для Windows створюють для цього ідеальні передумови.

Вікно Excel містить безліч різних елементів. Деякі з них властиві всім

програмам у середовищі Windows, інші є тільки у вікні Excel. Уся робоча

область вікна Excel зайнята чистим робочим аркушем (або таблицею),

розділеним на окремі комірки. Стовпці озаглавлені буквами,

рядками-цифрами.
Як і в багатьох інших програмах у середовищі Windows, ви можете

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

заголовком — це вікно називається вікном робочої книги, тому що в такому

вікні можна обробляти кілька робочих аркушів.

На одній робочій сторінці у вашому розпорядженні буде 256 стовпців і 16

384 рядки. Рядки пронумеровані від 1 до 16 384, стовпці названі буквами

і комбінаціями букв. Після 26 букв алфавіту у стовпчиках ідуть

комбінації букв від АА, АВ і далі.

У вікні Excel, як і в інших програмах під Windows, під заголовком вікна

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

Стандартна і Форматування. Кнопки на панелі інструментів дозволяють

швидко й легко викликати багато функцій Excel.

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

відповідні комірки і відкривши меню Формат/Комірки. Після цього на

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

вибрати будь-який шрифт зі списку запропонованих. При виборі шрифту

можна переглядати його написання У вікні Приклад. Для вибору типу

шрифту, його розміру і стилю можна використовувати поля й кнопки,

розташовані на панелі інструментів.

Типи шрифтів Сьогодні для оформлення таблиць і документів

використовується велии кількість шрифтів. Один із найголовніших

факторів, який необхідно брати де уваги, — це чіткість тексту,

оформлення тим чи іншим шрифтом.

Поряд із вибором типу шрифту і його розміру можна вибрати стиль шрифте

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

для виділення важливої інформації у тексті документів і таблиць.

В Excel можна виділити в таблиці деякі поля за допомогою кольору й

візерунка фону, щоб привернути до них увагу. Це виділення треба

використовувати обережно, щоб не перевантажити таблицю. Виберіть вкладку Вигляд у Формат/Комірки. Тут для виділених комірок можна вибрати колір забарвлення за допомогою палітри.

Якщо необхідно, щоб записи перетворилися на зручний документ, треба

здійснити форматування чисел у комірках. Найпростіше форматуються

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

форматуваня комірки, потім вибрати команду меню Формат/Комірки, а в

діалозі, що з'явився — вкладку Число. Вибирають в групі зліва рядок

Грошовий. Праворуч з'явиться кілька можливих варіантів форматів чисел.

Формат числа визначається цифровим шаблоном, що може бути кількох типів.

У пакеті Excel є програма перевірки орфографії текстів, що знаходяться

в, І комірках робочого аркуша, діаграмах або текстових полях. Щоб

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

перевірити орфографію. Якщо потрібно перевірити весь текст, включаючи

розташовані в ньому об'єкти, виберіть комірку, починаючи з якої Excel

повинен шукати помилки. Далі потрібно вибрати команду Сервіс/Орфографія. Потім Excel почне перевіряти орфографію в тексті.

Можна почати перевірку за допомогою клавіші F7. Якщо програма знайде

помилку або не знайде певного слова у словнику, на екрані з'явиться

діалог Перевірка орфографії.

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

символів, названих операторами. Існують різні типи операторів.

Математичні оператори служать для виконання арифметичних дій над

числами. Текстовий оператор з'єднання призначений для того, щоб при

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

програма сама звертатиметься до комірки, у якій проставили дату.

За умовчанням при введенні, редагуванні формул або при заповненні

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

автоматично. Однак при складних інтеграційних розрахунках на це

витрачається багато часу, тому можна скасувати автоматичне обчислення.

Для цього потрібно вибрати команду меню Сервіс/Параметри, далі у вкладці

Обчислення вибрати опцію Вручну й установити перемикач Переобчислювати

перед збереженням. Після цього всі обчислення в робочому аркуші

здійснюватимуться тільки після натискання клавіші Обчислити.

Функції покликані полегшити роботу при створенні й взаємодії з

електронними таблицями. Найпростішим прикладом виконання розрахунків є операція додавання. Скористаємося цією операцією для демонстрації

переваг функцій. Не використовуючи систему функцій, потрібно буде

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

=B1+B2+B3+C4+C5+D2

Помітно, що на написання такої формули затрачено багато часу, тому

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

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

суми, натиснувши кнопку з зображенням знака суми, або з Майстра функцій

можна й вручну вдрукувати ім'я функції після знака рівності. Після імені

функцій треба відкрити дужку, ввести адреси областей і закрити дужку. У

результаті формула виглядатиме так: =СУМ (B1:B3;C4:C5;D2).

Використання блоків комірок, або областей, як аргументів для функцій є

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

записі програмі простіше враховувати зміни на робочому аркуші.

Наприклад, треба підрахувати суму чисел у комірках з А1 по А4. Це можна

записати так:

=СУМ (А1;А2;АЗ;А4) Або те саме іншим способом: =СУМ (А1:А4)

Працювати з електронними таблицями — це велике задоволення, але якби ще

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

можливість дає Excel. В Excel є два різні способи збереження в пам'яті

діаграмі складених за вашими числовими даними: це, по-перше, «вбудовані»

діаграми по-друге, «діаграмні сторінки». Вбудовані діаграми являють

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

файлі; у діаграмним сторінках створюються нові графічні файли. Створити

вбудовану діаграму найпростіше за допомогою Майстра діаграм, що складає

частину пакета Excel. Панель інструментів діаграм Діаграми можна

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

Для оформлення документів Excel пропонує, крім графіків і діаграм,

можливість створювати інші графічні об'єкти, наприклад, викреслювати на

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

лінії, дуги й т. ін. Можна також виконати малюнки за допомогою окремих

графічних об'єктів, і ніхто не здогадається, що вони виконані за

допомогою Excel, а не спеціально графічного редактора.

Для створення малюнків призначені кнопки, розташовані на панелі

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

за допомогою кнопки, що знаходиться на панелі інструментів Стандартна.

В усіх програмах, написаних для операційної системи Windows, користувач

може користуватися її буфером обміну (Clipboard). Він являє собою

особливу область пам'яті, що надається операційним середовищем у

розпорядження різних програм. Використовуючи буфер, можна, працюючи,

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

програму, яку Windows тримає для вас напоготові. Причому незалежно від

поточної програми перехід здійснюється за допомогою однієї і тієї ж

команди. Для цього й треба виділити відповідні комірки. Занести дані в

буфер, використовуючи для цього команду меню Правка/Копіювати або

комбінацію клавіш Ctrl +C. Тепер або сам Excel, або інша програма може

вийняти дані з буфера за допомогою команди меню Правка/Вставити або

однієї з двох комбінацій клавіш: Shift+Insert або Clrl+V.

З буфера обміну дані надходять у Word у вигляді таблиці. Ця програма

розуміє усі формати Excel. Гарнітура й розміри шрифту також зберігаються

в незмінному вигляді. Використовуючи меню обробки таблиць текстового

редактора, можна обробляти в ньому дані.

Excel може зберігати робочі аркуші в пам'яті в різних форматах. Щоб

задати свій формат, треба вибрати команду меню Файл/Зберегти як, де є

поле Тип файла. Там є список форматів, у які Excel може перетворити свої

файли. [10]

Excel було протестовано на алгоритмі Цезаря, ось що вийшло:

Як видно з малюнків, шифр abcdef було зашифровано ключем «2» і після розшифрування ми отримали cdefgh. Шкода, але Excel виявився дуже складним і незручним у використанні для кодування більш складних шифрів, тому на цьому робота з Excel завершилася.
Новий шифр був написаний на мові програмування С++:
С++ - це мова програмування високого рівня. С++ дозволяє писати програми під Windows. Програмування під Windows зараз дуже поширене в світі.
Мова Сі має свій синтаксис написання:
1) Підключається директива препроцесора. Рядки, що починаються з#, обробляються препроцессором перед компіляцією програми. Даний рядок дає вказівку препроцессору включити в нашу програму вміст файлу заголовків потоку вводу/виводу <iostream>, а також<conio.h> включає функцію _getch(), яка робить затримку екрану і за натискання будь-якої клавіші закриває консольне вікно.
2) int main() є частиною будь-якої програми на C++. Круглі дужки показують, що main - це програмний блок, який називається функцією (а по сучасному називається методом).
3) Рядок std::cout << "..."; виводить текст в консоль. Цей синтаксис потрібно просто запам'ятати. А в лапках можна писати що завгодно.
4) Коментарі в програмі дуже необхідні. Коментарі у програмі С++ пишуться після подвійного слеша . Приклад:
//коментар
4) С++ є велика різниця між великою літерою і маленькою. Якщо у Паскалі цієї різниці немає, то в С++ це різні слова, наприклад:
std::cout << "Привіт!"; //помилки не буде
std::Cout << "Привіт!"; //буде помилка
Программа
#include<iostream> //директива препроцесора
#include<conio.h> //директива препроцессора
int main() //точка входу

{
std::cout << "Welcome in the C++!"; //вивід у консоль
  _getch(); //затримка екрану до натискання клавіші
  return 0; //показує, що програма успішно завершено
}
Результат роботи програми:

Cin - це об'єкт вхідного потоку простору імен std:
std::cin >> x;
У цьому коді програми використовується оператор cin, операція взяття з потоку ">> щоб отримати від користувача введене їм значення. Об'єкт std::cin забирає інформацію, що вводиться користувачем з стандартного потоку вводу, який зазвичай є клавіатура. Функція Cin достатньо интелектуальна, щоб зрозуміти, яка інформація введена з клавіатури. Адже ми можемо ввести ціле число, а також можемо ввести дробове, сивмольное або текст.

Cout - це об'єкт вихідного потоку простору імен std::. Це неоголошений ідентифікатор. Його не потрібно оголошувати. Його потрібно тільки підключати до програми за допомогою слова include: #include <iostream>

std::cout <<"Вихідний потік";
У цьому коді програми використовується оператор cout, операція <<, щоб вивести на екран користувачеві певну інформацію. В даному випадку на екран відображається вихідний потік. Сout досить розумний, щоб визначити, що потрібно вивести на екран, тобто це буде мінлива дрібного числа або цілого або сивмольного.

Напишемо програму, яка оголошує два числа.
#include <iostream>
#include <conio.h>
void main () {

int x,y; //оголошуємо змінну

std::cout<<"X = "; //На екран виводиться "X = "
std::cin>>x; //вводимо з клавіатури число, наприклад: 5
std::cout<<"Y = "; //На екран виводиться "Y = "
std::cin>>y; //вводимо з клавіатури число, наприклад: 8

std::cout<<"x+y = "<<(x+y)<<std::endl; 
//На екран монітора виводиться повідомлення "x + y = 13"

_getch(); //Екран не закривається, поки не натиснута будь-яка клавіша
}

Отже, ми бачимо, що в std::cout<<"x+y = "<<(x+y)<<std::endl; виводиться "x + y =". Після цього обчислюється результат суми і відразу ж виводиться результат.
Для дрібних чисел:
#include <iostream>
#include <conio.h>
void main () {
float x,y; //оголошуємо змінну дробового типу
float sum; //Змінна дробового типу для обчислення суми
std::cout<<"X = "; //На екран виводиться "X = "
std::cin>>x; //вводимо з клавіатури число, наприклад: 2.25
std::cout<<"Y = "; //На екран виводиться "Y = "
std::cin>>y; //вводимо з клавіатури число, наприклад: 4.89
sum = x + y; //Обчислення суми
std::cout<<"x+y = "<<sum<<std::endl; 
//На екран монітора виводиться повідомлення "x + y = 7.14"
_getch(); //Екран не закривається, поки не натиснута будь-яка клавіша
}

Результат роботи програми:

Структури в мові С++ - це складові типи даних ,створених з використанням інших типів. Розглянемо наступне визначення структури:
struct Time {
int hour; // годинник
int minute; // хвилини 
int second; // секунди
};
Особливість структур в тому, що ми можемо створювати свої власні типи даних і оголошувати змінні цих типів даних.
У даному прикладі ми створили свою структуру Time, що складається з полів години, хвилини, секунди.
Приклад: Напишемо програму, яка вводить дані в змінну структури і виводить результат, який ми ввели з клавіатури:

#include<iostream>
#include<conio.h>
using std::cout;
using std::endl;
using std::cin;

struct Time {
int hour; // годинник
int minute; // хвилини 
int second; // секунди
};
void main()
{
Time time;
cout<<"Vvedite time:\n";
cin>>time.hour>>time.minute>>time.second;
cout<<"Struct:\n";
cout<<time.hour<<":"<<time.minute<<":"<<time.second<<endl;
_getch();

}
Резульат роботи програми:

Цикли у мові С++ дозволяють програмісту визначити дії, які будуть повторюватися поки умова залишається дійсною.
Цикл for
Оператор циклу for має наступний синтаксис:
for (int i=0; i<20; i++) {дію}
Причому значення, змінні та умови можуть бути різними. Ми могли б написати так:
for (int i=-5; i != 20; i++) {дію}

Цикл while
Оператор циклу while має наступний синтаксис:
while(i){дії}
Поки умова вірна, цикл буде працювати. Цей вид циклу найбільше піддається входу в безкінечний цикл. Ми могли б цей вид циклу записати так як і for:
int i = 0;
while(i<20){
дії
i++ }
Цикл do while
Оператор циклу do while має наступний синтаксис:
do{
дія
}while(i)
Цей цикл відрізняється від попередніх тим, що виконується хоча б один раз.
Приклад: Напишемо програму, яка використовує всі три види операторів циклу.
#include<iostream>
#include<conio.h>
using std::cout;
using std::endl;
using std::cin;
const int n = 5;
void main()
{
int mas[n];
cout<<"Vvedite masiv: \n";
for (int i = 0; i<n; i++)
{
cin>>mas[i];
}
i = 0;
cout<<"mi vveli takoy masiv: \n";
while(i<5){
cout<<mas[i]<<"\t";
i++;
}
i=0;
do{ 
mas[i] = mas[i]+5;
i++;
}while(i<5);
cout<<"\nMasiv posle dobavleniya + 5:\n";
for (i = 0; i<n; i++)
{
cout<<mas[i]<<"\t";
}
_getch();
}
Функція - це модуль в с++. Опції в мові С++ дозволяють створювати модульні програми, тобто програми складаються з модулів. Для написання програм, краще використовувати готові стандартні функції бібліотеки С++. Якщо ж ви хочете в програмі використовувати свою функцію, то необхідно оголосити прототип функції, після цього, в кінці програми написати реалізацію функції.
Функція може приймати значення або не приймати взагалі. Якщо функція не приймає параметри, то пишеться ім'я функції і порожні дужки, якщо функція приймає параметри, то в дужках через кому пишуться параметри.
Приклад: Написати функцію get(), set(). Set - функція встановлення значення в массив. Get - функція отримання значень, або друк.
#include<iostream>
#include<conio.h>
using std::cout;
using std::endl;
using std::cin;
const int n = 5;
void set(int []); //прототип функції встановлення значення
void get(int []); //прототип функції печатки значення
void main()
{
int mas[n];
set(mas); //виклик функції встановлення значення в програмі
get(mas); //виклик функції друку в програмі
_getch();
}
void set(int s[n]) //реалізація функції встановлення
{
cout<<"SET massiva:\n";
cout<<"Vvedite "<<n<<"elementov massiva: ";
for (int i = 0; i<n; i++)
cin>>s[i];
}
void get(int s[n]) //реалізація функції друку
{
cout<<"GET massiv:\n";
for (int i = 0; i<n; i++)
cout<<s[i]<<"\t";
cout<<endl;
} [11]
Переваги мови C++:
Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.
Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.
Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)
Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.
Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, метапрограмування (шаблони, макроси).
Недоліки мови C++:
Наявність безлічі можливостей, приводить до того, що в С++ програми може легко закрастися важковловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї використовувати автоматичне управління пам'яттю (наприклад, збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера».
Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляції заголовних файлів.
Недостача інформації про типи даних під час компіляції.
Мова C++ є складною для вивчення і для компіляції.
Деякі перетворення типів неінтуїтивні. Зокрема, операція над беззнаковим і знаковим числами видає беззнаковий результат.
Препроцесор С++ (успадкований від C) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або важко) здійснювати деякі завдання метапрограмування, а з іншою, в наслідку своєї примітивності, він часто приводить до помилок і вимагає багато дій з обходу потенційних проблем. Деякі мови програмування (наприклад, Scheme і Nemerle) мають набагато могутніші і безпечніші системи метапрограмування (також звані макросами, але макроси С/С++ вони мало нагадують).
З кінця 1990-х в співтоваристві С++ набуло поширення так зване метапрограмування на базі шаблонів. По суті, воно використовує особливості шаблонів C++ в цілях реалізації на їхній базі інтерпретатора примітивної функціональної мови програмування, що виконується під час компіляції. Сама по собі ця можливість вельми приваблива, але, внаслідкок вище згаданого, такий код вельми важко сприймати і зневаджувати. Мови Lisp/Scheme, Nemerle і деякі інші мають могутніші і водночас простіші для сприйняття підсистеми метапрограмування. Крім того, в мові D реалізована порівнянна за потужністю, але значно простіша в застосуванні підсистема шаблонного метапрограмування.
Майбутній розвиток:
С++ продовжує розвиватися, щоб відповідати сучасним вимогам. Одна з груп, що займаються мовою С++ в її сучасному вигляді і що направляють комітету зі стандартизації С++ поради з її поліпшення, — це Boost. Наприклад, один з напрямів діяльності цієї групи — вдосконалення можливостей мови шляхом додавання в неї особливостей метапрограмування.
Стандарт С++ не описує способи іменування об'єктів, деякі деталі обробки винятків і інші можливості, пов'язані з деталями реалізації, що робить несумісним об'єктний код, створений різними компіляторами. Проте для цього третіми особами створено безліч стандартів для конкретної архітектури і операційних систем.
Проте (за станом на час написання цієї статті) серед компіляторів С++ все ще продовжується битва за повну реалізацію стандарту С++, особливо в області шаблонів — частини мови, зовсім недавно повністю розробленій комітетом стандартизації.
Одним із каменів спотикання у цьому питанні є ключове слово export, що використовується також і для розділення оголошення і визначення шаблонів.
Першим компілятором, що підтримав export в шаблонах, став Comeau C++ на початку 2003 року (п'ять років після виходу стандарту). У 2004 році бета-версія компілятора Borland C++ Builder X також почала його підтримку.
Обидва цих компілятора засновані на зовнішньому інтерфейсі EDG. Інші компілятори, такі як Microsoft Visual C++ або GCC, взагалі цього не підтримують. Ерб Саттер (Herb Sutter), секретар комітету із стандартизації С++, рекомендував прибрати export з майбутніх версій стандарту унаслідок серйозних складнощів в повноцінній реалізації, проте згодом остаточним рішенням було вирішено його залишити. [12]

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

(Дана методика розроблена для вибору найкращого алгоритму шифрування з боку замовника і ніяк не стосується розробника криптографічної системи)
Ефективність шифрування можна оцінити за наступними параметрами:
1. Простота використання
2. Швидкість шифрування інформації
3. Стійкість алгоритму до зовнішніх атак
4. Ціна
5. Кількість використаних математичних операцій
6. Перспективність алгоритму
Задля оцінки криптографічної системи візьмемо шкалу від нуля до двох і оцінимо кожен з параметрів, які описані вище.
Перше, що потрібно зробити замовнику – зрозуміти для чого саме потрібен шифр. Відповідь на це питання дасть змогу вибрати один найголовніший параметр. Так, якщо головна ідея купівлі алгоритму – надійність, параметр 3 має бути оцінений не нижче двійки. Ця дія необхідна для того, щоб можна було нехтувати деякими з параметрів, бо ніколи надійність і ціна не будуть привабливими для замовника одночасно, а отже відповідну оцінку алгоритму отримати буде складніше.
1. Простота використання: алгоритм може бути симетричний, або асиметричний (В симетричному шифруванні один і той самий ключ (що зберігається в секреті) використовується як для шифрування, так і для розшифрування. в асиметричному шифруванні є два пов'язаних ключа — пара ключів. Відкритий ключ — публічний, до нього повинні мати доступ всі ті, хто матиме потребу зашифрувати інформацію. Тоді як закритий ключ — приватний ключ повинен бути доступним лише тому хто має право розшифрувати інформацію, за своїм розміром він значно більший від секретного ключа симетричного шифрування. Будь-яку інформацію, зашифровану за допомогою відкритого ключа можна розшифрувати лише застосовуючи той самий алгоритм, але з використанням відповідного приватного ключа. Також всю інформацію, зашифровану за допомогою приватного ключа, можна розшифрувати лише за допомогою відповідного відкритого ключа. Це означає, що немає необхідності хвилюватись за передачу ключа, відкритий ключ повинен бути публічним. Але асиметричне шифрування є значно повільнішим від симетричного. Також потребує значно більше обчислювальної потужності як для шифрування, так і для розшифрування інформації.) [13]
При симетричному шифруванні оцінюємо шифр від 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 і отримано правильні, на мій погляд, оцінки).

Новий тип шифрування

У винайденні нового типу шифрування, на мій погляд, потрібно керуватися такими параметрами як простота у використанні, надійність і ціна. Оскільки надійність і ціна – параметри взаємовиключні, потрібно винайти криптографічну систему, яка буде відповідати помірній ціні і помірній надійності.
Алгоритм буде складатися з двох частин: 1 – пошук зашифрованих символів, 2 – розшифрування інформації за допомогою секретного ключа.
Для цього закодуємо алфавіт таким чином:
0 00, 1 01, 2 02, 3 03, 4 04, 5 05, 6 06, 7 07, 8 08, 9 09, а 10, б 11, в 12, г 13, г 14, д 15, е 16, є 17, ж 18, з 19, и 20, і 21, ї 22, й 23, к 24, л 25, м 26, н 27, о 28, п 29, р 30, с 31, т 32, у 33, ф 34, х 35, ц 36, ч 37, ш 38, щ 39, ь 40, ю 41, я 42.
Задамо текст, який потрібно зашифрувати, наприклад «д о б р и й д е н ь». Потрібно звернути увагу, що зап’ятих, точок, пробілів в тексті немає і вони ніяк не відображаються у шифрі, а кожна буква записана окремо. Виберемо секретний ключ, який будемо знати лише ми і людина, яка отримає повідомлення, наприклад 3.
В такому випадку, кожний третій символ буде зашифрований за нашим кодуванням алфавіту, всі інші символи матимуть випадкове значення. В результаті ми отримаємо приблизно наступне: 6 17 (15) 11 9 (28) 79 34 (11) 165 42 (30) 87 73 (20) 27 9 (23) 16 11 (15) 52 24 (16) 13 95 (27) 26 23 (40); цифри, які знаходяться в дужках і є зашифроване повідомлення «д о б р и й д е н ь».
За методикою оцінки ефективності криптографічної системи, яка описана вище, даний алгоритм отримує 6, а отже рекомендований для використання.

Алгоритм дуже простий у використанні, виконує симетричне шифрування, а тому за першим параметром отримує оцінку 2.
Швидкість кодування залежить від кількості інформації, але цей алгоритм буде працювати з будь-якими об’ємами даних, оцінка - 1.
Надійність такого шифрування надвисока, поки алгоритм не оприлюднено.
Через те, що таку систему шифрування треба тримати в таємниці ставимо оцінку 1 за шкалою від одного до двох.
Ціна такого кодування буде завжди нижчою за інформацію, а отже ставимо оцінку 2.
В алгоритмі використано лише 2 математичні операції (заміна букви цифрою і підстановка секретного ключа), тому ставимо оцінку 0 по п’ятому параметру.
Хоча цей метод шифрування новий, через те, що він достатньо простий і має залишатися в секреті для надійного кодування, оцінка перспективності цього алгоритму 0.
Життєвий цикл цього алгоритму є надзвичайно довгим, адже такий тип шифрування можна вдосконалити кількома ідеями, наприклад: ключем буде не цифра, а функція (припустимо х*3-2, де х – будь-яке число) – що зробить алгоритм більш захищеним від хакерів; також, щоб захиститися від зламу шифру «грубою силою» (підбір ключа) можна зробити випадкові числа не випадковими, а розрахованими по формулі, за якою числа будуть відповідати буквам і з’являтися в шифрі з однаковою частотою, а отже неможливо визначити частотність виклику програмою тієї, чи іншої букви.

Експериментальна частина: новий алгоритм шифрування

Алгоритм шифрування було виконано на мові програмування С++. Задля простоти було взято маленький ключ (3) і повідомлення, що складажться з одної букви (к). Використано англійський алфавіт і кодування в такому вигляді: a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10,k=11,l=12,m=13,n=14,o=15, p=16,q=17,r=18,s=19,t=20,u=21,v=22,w=23,x=24,y=25,z=26. При виконанні програми отримуємо командний рядок, в який по запиту вводимо ключ (3), по новому запиту вводимо повідомлення, яке потрібно зашифрувати і отримуємо зашифроване повідомлення у вигляді цифр (8, 17, 11).
При виконанні програми дешифровки по запиту вводимо ключ (3), по новому запиту вводимо шифр у вигляді цифр (8, 17, 11) і отримуємо розшифроване повідомлення «к».
Далі будуть представлені Screenshot-и виконаної роботи, а також текст програми:
Алгоритм шифрування:
“ #include <iostream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <stdlib.h>
#include<time.h>
using namespace std;
int main () {
int chislo;
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z; // Ввод переменных
srand(time(NULL));
int ran=rand()%26;
srand(time(NULL));
int rano=rand()%27; //Подстановка случайных чисел
a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10,k=11,l=12,m=13,n=14,o=15,
p=16,q=17,r=18,s=19,t=20,u=21,v=22,w=23,x=24,y=25,z=26; // Кодировка каждой буквы алфавита
char text;
cout << "Vvedite kluch" << endl; // Вывод на экран сообщения в скобках
cin >> chislo; // Ввод ключа (цифра)
cout << "(kluch = 3), Vvedite text" << endl; // Вывод на экран сообщения
cin >> text; // Ввод текста, который нужно зашифровать
// Шифровка сообщения ключом "3":
if (text=='a')
cout << ran <<","<< rano << ","<< a << endl;
else if (text=='b')
cout << ran <<","<< rano << ","<< b << endl;
else if (text=='c')
cout << ran <<","<< rano << ","<< c << endl;
else if (text=='d')
cout << ran <<","<< rano << ","<< d << endl;
else if (text=='e')
cout << ran <<","<< rano << ","<< e << endl;
else if (text=='f')
cout << ran <<","<< rano << ","<< f << endl;
else if (text=='g')
cout << ran <<","<< rano << ","<< g << endl;


else if (text=='h')
cout << ran <<","<< rano << ","<< h << endl;
else if (text=='i')
cout << ran <<","<< rano << ","<< i << endl;
else if (text=='j')
cout << ran <<","<< rano << ","<< j << endl;
else if (text=='k')
cout << ran <<","<< rano << ","<< k << endl;
else if (text=='l')
cout << ran <<","<< rano << ","<< l << endl;
else if (text=='m')
cout << ran <<","<< rano << ","<< m << endl;
else if (text=='n')
cout << ran <<","<< rano << ","<< n << endl;
else if (text=='o')

cout << ran <<","<< rano << ","<< o << endl;
else if (text=='p')
cout << ran <<","<< rano << ","<< p << endl;
else if (text=='q')
cout << ran <<","<< rano << ","<< q << endl;
else if (text=='r')
cout << ran <<","<< rano << ","<< r << endl;
else if (text=='s')
cout << ran <<","<< rano << ","<< s << endl;
else if (text=='t')
cout << ran <<","<< rano << ","<< t << endl;
else if (text=='u')
cout << ran <<","<< rano << ","<< u << endl;
else if (text=='v')
cout << ran <<","<< rano << ","<< v << endl;
else if (text=='w')
cout << ran <<","<< rano << ","<< w << endl;
else if (text=='x')
cout << ran <<","<< rano << ","<< x << endl;
else if (text=='y')
cout << ran <<","<< rano << ","<< y << endl;
else if (text=='z')
cout << ran <<","<< rano << ","<< z << endl;
else
cout << "Vvedite bykvy" << endl;
system ("pause") ;
return 0; } ”

При виконанні програми отримуємо командний рядок, куди вводимо дані, які від нас вимагає програма:

Алгоритм дешифрування:
“ #include <iostream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <stdlib.h>
#include<time.h>
using namespace std; // подключение библиотек и стандартов программы С++
int main () {
int random1;
int random2;
int kluch;
int chislo; //Ввод переменных
cout << "Vvedite kluch" << endl; // Вывод на экран сообщения в скобках
cin >> kluch; // Ввод ключа (цифра)
cout << "Vaw kluch=3, Vvedite tri zifri, kotorymi bylo zashyfrovano vashe soobshenie" << endl; // Вывод на экран сообщения
cin >> random1;
cin >> random2;
cin >> chislo; // Ввод шифра(цифры), который нужно расшифровать

// Расшифровка закодированного сообщения ключом "3":
if (chislo==1)
cout << "Rasshifrovanyi text: a" << endl;
if (chislo==2)
cout << "Rasshifrovanyi text: b" << endl;
if (chislo==3)
cout << "Rasshifrovanyi text: c" << endl;
if (chislo==4)
cout << "Rasshifrovanyi text: d" << endl;
if (chislo==5)
cout << "Rasshifrovanyi text: e" << endl;
if (chislo==6)
cout << "Rasshifrovanyi text: f" << endl;
if (chislo==7)
cout << "Rasshifrovanyi text: g" << endl;
if (chislo==8)
cout << "Rasshifrovanyi text: h" << endl;
if (chislo==9)
cout << "Rasshifrovanyi text: i" << endl;


if (chislo==10)

cout << "Rasshifrovanyi text: j" << endl;
if (chislo==11)
cout << "Rasshifrovanyi text: k" << endl;\
if (chislo==12)
cout << "Rasshifrovanyi text: l" << endl;
if (chislo==13)
cout << "Rasshifrovanyi text: m" << endl;
if (chislo==14)
cout << "Rasshifrovanyi text: n" << endl;
if (chislo==15)
cout << "Rasshifrovanyi text: o" << endl;
if (chislo==16)
cout << "Rasshifrovanyi text: p" << endl;
if (chislo==17)
cout << "Rasshifrovanyi text: q" << endl;
if (chislo==18)
cout << "Rasshifrovanyi text: r" << endl;
if (chislo==19)
cout << "Rasshifrovanyi text: s" << endl
if (chislo==20)
cout << "Rasshifrovanyi text: t" << endl;
if (chislo==21)
cout << "Rasshifrovanyi text: u" << endl;
if (chislo==22)
cout << "Rasshifrovanyi text: v" << endl;
if (chislo==23)
cout << "Rasshifrovanyi text: w" << endl;
if (chislo==24)
cout << "Rasshifrovanyi text: x" << endl;
if (chislo==25)
cout << "Rasshifrovanyi text: y" << endl;

if (chislo==26)

cout << "Rasshifrovanyi text: z" << endl;

if (chislo>26)
cout << "Vy vveli nevozmognyi kod, perezapystite programmy i vvedite novyi kod"<< endl;

else
cout << "Text rasshifrovano!" << endl;
system ("pause") ;
return 0;
} “

При виконанні програми отримуємо командний рядок, куди вводимо дані, які від нас вимагає програма:

Аналіз нового методу шифрування

Алгоритм шифрування, який представлено вище, є абсолютно новим і ніким раніше не дослідженим. Він поєднує в собі простоту і надійність, що так складно вдається новим криптографічним системам. Не зайвим буде згадати, що такий тип шифрування легко покращити такими доповненнями, як наприклад, зміна ключа на функцію (припустимо sinх*3-2, де х – будь-яке число) – що зробить алгоритм більш захищеним від хакерів; також, щоб захиститися від зламу шифру «грубою силою» (підбір ключа) можна зробити випадкові числа не випадковими, а розрахованими по формулі, за якою числа будуть відповідати буквам алфавіту і з’являтися в шифрі з однаковою частотою, а отже неможливо визначити частотність виклику програмою тієї, чи іншої букви.
Ідея шифру полягає в надлишковій інформації, яка ускладнить процес дешифрування, а отже підвищить надійність алгоритму. Чим більше число ми виберемо під ключ, тим більше надлишкової інформації отримаємо. Але, на жаль, час роботи прямо пропорційно залежить від кількості інформації, а тому, велику кількість даних складним ключем шифрувати не вигідно і довго.
Вдосконалити цей шифр можна також взявши головний принцип алгоритму Віженера, а саме, замість ключа – цифри вибрати ключ – слово. Кожна буква тексту буде зашифрована і відповідатиме цифрі, яка рівна кількості букв в ключі. Наприклад, виберемо ключ «Відмінно», в цьому слові 8 букв, отже кожна восьма цифра буде відповідати нашому тексту, інші 7 будуть випадковими.
Новий метод шифрування випереджає інші алгоритми симетричного шифрування по своїй надійності і швидкодії. Шифр Цезаря з легкістю можна зламати «грубою силою» за кілька хвилин, звичайним підбором ключа. Шифр Віженера можна розшифрувати знайшовши певні повтори у шифрі. З шифром Вернама вже буде складніше, але він не підійде для кодування великої кількості даних. Його дешифрування буде схожим на дешифрування Віженера, але через великий надлишок інформації хакерам знадобиться більше часу для зламу шифру. Всі ці методи дешифрування не спрацюють на новому алгоритмі. Однак мінус, який стосується всіх симетричних систем шифрування і його неможливо ліквідувати, полягає в тому, що як тільки хакерам стане відомий секретний ключ, алгоритм буде зламано.
За виведеною, в даній роботі, новою методикою оцінки ефективності криптографічної системи, даний тип шифрування отримав оцінку 6 і є рекомендованим продуктом для використання. Однак, не треба забувати, що через безмежні можливості покращення даного алгоритму, життєвий цикл, щонайменше, складе 10 років, а отже оцінка з легкістю може змінитися на кращю.

Висновки

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

Список використаних джерел

1. Алфьоров А.П., Зубов А.Ю., Кузьмін А.С., Черьомушкін А.В. Основи криптографії: Навчальний посібник. 3-тє вид., випр. і доп. - М.: 2005. - 480с. 
2. Введення в криптографію / За заг. ред. В.В. Ященко. - 3-е вид., Доп. - М.: 2000.-288с. 
3. Нечаєв В.І. Елементи криптографії (Основи теорії захисту інформації): Посібник для університетів і педагогічних вузів. / За ред. В.А. Садовнича - М.: Вищ. шк., 1999 - 109с. 
4. Криптографія [Стаття] [Електронний ресурс] / Вікіпедія: вільна енциклопедія – режим доступу: http://uk.wikipedia.org/wiki/Криптографія
5. Шифр Цезаря [Стаття] [Електронний ресурс] / Вікіпедія: вільна енциклопедія – режим доступу: http://uk.wikipedia.org/wiki/Шифр_Цезаря
6. Шифр Віженера [Стаття] [Електронний ресурс] / Вікіпедія: вільна енциклопедія – режим доступу: http://uk.wikipedia.org/wiki/Шифр_Віженера
7. Шифр Вернама [Стаття] [Електронний ресурс] / Вікіпедія: вільна енциклопедія – режим доступу: http://uk.wikipedia.org/wiki/Шифр_Вернама
8. RSA [Блог] [Електронний ресурс] / Wordpress: система кеування контентом – режим доступу: https://dehtyarov09.wordpress.com/2014/03/31/алгоритм-rsa-lab5/
9. Алгоритм Диффі-Хеллмана [Блог] [Електронний ресурс] / Wordpress: система кеування контентом – режим доступу: http://tyschenkoia12.wordpress.com/2014/12/18/30
10. Excel [Реферат] [Електронний ресурс] / Найбільша колекція україномовних рефератів – режим доступу: http://www.ukrreferat.com/index.php?referat=39151
11. С++ [Сайт] [Електронний ресурс] / Сайт: мови програмування – режим доступу: http://life-prog.ru/ukr
12. С++ [Стаття] [Електронний ресурс] / Вікіпедія: вільна енциклопедія – режим доступу: http://uk.wikipedia.org/wiki/C++
13. Шифрування [Стаття] [Електронний ресурс] / Вікіпедія: вільна енциклопедія – режим доступу: http://uk.wikipedia.org/wiki/Шифрування

Забезпечення інформаційної безпеки за допомогою криптогрфії