Аналіз та реалізація шифрування даних за допомогою алгоритму Гост 28147-89
Криптографія як найважливіша частина всіх інформаційних систем: від електронної пошти до стільникового зв'язку, від доступу до мережі Internet до електронної готівки. Її мета та передумови. Алгоритм шифрування ГОСТ 28147-89 та створення програми за ним.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 17.12.2010 |
Размер файла | 265,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
36
Размещено на http://www.allbest.ru/
Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра САПР
«Аналіз та реалізація шифрування даних за допомогою алгоритму Гост 28147-89»
Курсова робота
з курсу: “Методи та засоби комп'ютерних інформаційних технологій”
ЛЬВІВ - 2009
Анотація
Студент:
“ Програма реалізації кодування та розкодування даних за допомогою алгоритму Гост 28147-89.
”. Курсова робота. - НУ „Львівська політехніка”, каф.: САПР, дисципліна: “Методи та засоби комп'ютерних інформаційних технологій”, 2009.
Дана курсова робота складається з 29 сторінок та 1-ї блоксхеми . В даній курсовій роботі проаналізовано роботу алгоритму Гост 28147-89 . В результаті виконання завдання була створена программа для шифрування і дешифрування даних.
Зміст
Вступ
1. Передумови виникнення криптографії та її мета
2. Класифікація криптографічних алгоритмів
2.1 Асиметричні криптографічні алгоритми
2.2 Симетричні криптографічні алгоритми
2.2.1 Блокові алгоритми
3. Кодування даних
4. Алгоритм ГОСТ 28147-89
5. Запуск програми
5.1 Програма шифрування за алгоритмом Гост
Висновок
Список використаної літератури
Вступ
Будь-яка цінна інформація, що розповсюджується на різноманітних носіях, або каналами зв'язку в локальних та глобальних мережах, може бути модифікована за деякими правилами, з метою збереження її конфіденційності та цілісності.
Для того, щоб попередити втрату цілісності інформації застосовують перешкодостійке кодування, яке має на меті фіксацію порушення цілісності даних та можливість їх повного або часткового відновлення.
Для зменшення обсягів інформації, яка має бути передана адресату застосовують стиск або архівацію даних. Частина архівованої інформації може також бути призначеною для можливості відновлення вмісту деякої частини або всього архіву після помилок при транспортуванні електронними каналами зв'язку, або в результаті ушкодження носіїв із вхідними даними. Важливою перевагою використання стиску інформації є те, що зі зменшенням обсягів даних, які необхідно передати адресату, також зменшується вірогідність виникнення помилок, наслідком яких може стати втрата змістовної або фізичної цілісності цих даних.
Та незважаючи на описані переваги існують проблеми, які не можна розв'язати за допомогою кодування та архівації. Кодування інформації має на меті лише запобігти її ушкодженню, і, як правило, не може змінити її статистичних характеристик, адже код для відновлення відкидається одразу після перевірки цілісності і в подальшому не впливає на отримані дані. Архівація інформації передусім зменшує її надмірність, але для того, щоб зробити це якомога ефективніше, використовують спеціальні алгоритми, які не призначені для приховування статистичних залежностей між частинами вхідного повідомлення, і у більшості випадків дозволяють досить просто реалізувати зворотнє перетворення.
З метою забезпечення конфіденційності інформації використовують особливий вид перетворень, який має назву «шифрування». Шифрування має на меті приховати змістовну та статистичну залежність між частинами вхідного повідомлення. Шифрувати можна будь-які повідомлення, що мають цінність для відправника або одержувача і можуть бути перехоплені третьою стороною з метою подальшого використання у своїх інтересах. Саме тому з розвитком електронних обчислювальних машин та засобів їх взаємодії також розвивалися методи та засоби збереження конфіденційності інформації, які мають вигляд криптографічних програм, що виконують шифрування даних на верхніх рівнях моделі OSI, та різноманітних шифрувальних пристроїв, які шифрують пакети або потоки даних, що використовуються для обміну інформацією між станціями локальних чи глобальних мереж та периферійними пристроями, на нижніх рівнях моделі OSI.
1. Передумови виникнення криптографії та її мета
Проблема захисту інформації шляхом її перетворення, що виключає її прочитання сторонньою особою хвилювала людський розум з давніх часів. Історія криптографії - ровесниця історії людської мови. Більш того, спочатку писемність сама по собі була криптографічною системою, оскільки в стародавніх суспільствах нею володіли тільки обрані. Священні книги Давнього Єгипту, Стародавньої Індії тому приклади.
З широким розповсюдженням писемності криптографія стала формуватися як самостійна наука. Перші криптосистеми зустрічаються вже на початку нашої ери. Так, Цезар в своєму листуванні використовував вже більш менш систематичний шифр, що отримав його ім'я.
Бурхливий розвиток криптографічні системи отримали в роки першою і другою світових війн. Починаючи з післявоєнного часу і по нинішній день поява обчислювальних засобів прискорила розробку і вдосконалення криптографічних методів.
Проблема використання криптографічних методів в інформаційних системах (ІС) стала зараз особливо актуальною, через збільшення важливості інформації в сучасному світі, про що найбільш показово свідчать наступні факти: по-перше, володіння певним цифровим кодом може відкрити доступ його власникові до значних матеріальних цінностей і послуг - такий стан речей має місце завдяки тому, що інформатизація суспільства не обійшла стороною банківсько-фінансову сферу; по-друге, склалася і надзвичайно окріпнула індустрія інформаційних послуг - інформація стала звичайним товаром, тобто об'єктом купівлі-продажу. Багато фірм досягають успіху тільки завдяки тому, що можуть отримати важливі для їх діяльності відомості всього на декілька годин або діб раніше своїх конкурентів; по третє, за оцінками зарубіжних економістів значна частка західних фірм розорилася б протягом декількох днів після розголошення критично важливої інформації, що лежить в основі їхньої діяльності. Особливий, нематеріальний характер інформації робить виключно легким її копіювання і модифікування, через що вона стає спокусливим об'єктом різного роду зловживань.
Також існують ще декілька чинників, завдяки яким актуальність проблеми захисту інформації стає дедалі очевиднішою.
З одного боку, поява нових могутніх комп'ютерів, технологій мережевих і нейронних обчислень зробила можливою дискредитацію криптографічних систем що до недавнього часу вважалися такими, які практично не можливо розкрити.
З іншого боку, розширилося використання комп'ютерних мереж, зокрема глобальної мережі Інтернет, якими передаються великі об'єми інформації державного, військового, комерційного і приватного характеру, що не допускає можливості доступу до неї сторонніх осіб.
Підключення до відкритих (глобальним) мереж, таким як Інтернет, істотно збільшує ефективність роботи і відкриває безліч нових можливостей. В той же час необхідно поклопотатися про створення системи захисту інформаційних ресурсів від охочих їх використовувати, модифікувати або просто знищити. Захист інформації має на меті підтримку цілісності, доступності і, якщо необхідно, конфіденційності інформації і ресурсів, використовуваних для введення, зберігання, обробки і передачі даних.
Припустимо, що відправник хоче послати повідомлення одержувачу. Більш того, цей відправник хоче послати своє повідомлення безпечно: він хоче бути впевнений, що той, хто може перехопити це повідомлення, не зможе його прочитати.
Саме повідомлення називається відкритим текстом. Зміна виду повідомлення таким чином, щоб приховати його суть називається шифруванням. Шифроване повідомлення називається шифртекстом. Процес перетворення шифртексту у відкритий текст називається дешифруванням. Цю послідовність показано на рис. 1.1.
Мистецтво і наука захисту повідомлень називається криптографією, а спеціалісти, які займаються нею - криптографами. Криптоаналітиками називають людей, що постійно використовують криптоаналіз - мистецтво і науку зламувати шифртекст, тобто розкривати, що знаходиться під маскою. Галузь математики, що охоплює криптографію і криптоаналіз, називається криптологією, а люди, які нею займаються, - криптологами.
Рис.1.1. Зашифрування та розшифрування
Позначимо відкритий текст як М (від англійського «message» - повідомлення), а просто відкритий текст - буквою Р (від «plaintext» - відкритий текст). Це може бути послідовність (потік) бітів, текстовий файл, бітове зображення, оцифрований звук, цифрове відео зображення, тощо. Для комп'ютера М - це просто двійкові дані. Відкритий текст може бути створений для зберігання або передачі. У будь-якому випадку, М - це повідомлення, яке повинне бути зашифроване.
Позначимо шифртекст буквою С (від англійського «ciphertext»). Це теж двійкові дані, іноді того ж розміру, що і М, а іноді більше. (Якщо шифрування супроводжується стисненням, розмір С може бути меншим ніж М. Проте, саме шифрування не забезпечує стиснення інформації.) Функція шифрування Е, оперуючи з М, створює С. Або, в ма-
тематичній формі:
Е(М) = С.
У зворотному процесі функція дешифрування D, оперуючи з С, відновлює М:
D(C) = М.
Оскільки сенсом зашифрування і подальшого розшифрування повідомлення є відновлення вхідного відкритого тексту, справедливою є наступна рівність :
D(E(M)) = М.
2. Класифікація криптографічних алгоритмів
Сучасна криптографія включає чотири крупні розділи:
- симетричні криптосистеми;
- асиметричні криптосистеми (криптосистеми з відкритим ключем);
- системи електронного підпису;
- управління ключами.
Симетричні та асиметричні криптосистеми використовуються безпосередньо для шифрування деякої інформації, що має цінність для окремої людини, організації, установи тощо.
Системи електронного підпису використовуються для того, щоб одержувач повідомлення мав змогу переконатися, що повідомлення дійшло до нього у первинному вигляді і його відправник саме той, за кого себе видає, а жоден зловмисник не задтний замаскуватися під будь-кого іншого.
Системи управління ключами створені для того, щоб можна було здійснювати безпечний обмін ключами, які використані для зашифрування тієї чи іншої інформації, і унеможливити їхню компрометацію.
Далі будуть розглянуті основні особливості симетричних та асиметричних криптографічних алгоритмів та їхня порівняльна характеристика з огляду на можливість застосування для апаратного шифрування каналів зв'язку. Але перед тим, як розглядати різні види криптографічних алгоритмів слід розглянути поняття «алгоритму» та «ключа».
Криптографічний алгоритм, також званий шифром, є математичною функцією, використовуваною для зашифрування відкритого тексту і розшифрування шифртексту. (Зазвичай це дві зв'язані функції: одна для зашифрування, а інша для розшифрування.)
Вхідними даними для будь-якого криптографічного алгоритму окрім тексту для шифрування є також ключ К. Такий ключ може бути будь-яким значенням, що обране з великої множини. Безліч можливих ключів називають простором ключів. Ключ використовується в обох операціях - як зашифрування, так і розшифрування (тобто вони залежать від ключа, і ця обставина позначається індексом К). Таким чином тепер функція зашифрування деякого вхідного вікритого тексту М за допомогою ключа К приймає вигляд:
Ек(М) = С,
а функція розшифрування деякого шифртексту С за допомогою ключа К виглядає так:
Dк(С) = М
2.1 Асиметричні криптографічні алгоритми
Алгоритми з відкритим ключем (звані також асиметричними алгоритмами) розроблені таким чином, що ключ, використовуваний для зашифрування, відрізняється від ключа розшифрування . Більш того, ключ розшифрування не може бути (принаймні протягом розумного інтервалу часу) розрахований по ключу зашифрування. Такі алгоритми називають алгоритмами з відкритим ключем, тому що ключ зашифрування може бути відкритим: хто завгодно може використовувати цей ключ для зашифрування повідомлення, але розшифрувати повідомлення може тільки конкретна людина, яка знає ключем розшифрування. У таких системах ключ зашифрування часто називають відкритим ключем, а ключ розшифрування - закритим ключем. Закритий ключ іноді називають секретним ключем, але щоб не було плутанини з симетричними алгоритмами, цей термін використовується в даній роботі. Припустимо, що К1 - деякий відкритий ключ (для зашифрування), а К2 - відповідний закритий ключ (для роз шифрування), тоді зашифрування з відкритим ключем К1 позначається як:
Ек1(М) =С,
а розшифрування з відповідним закритим ключем К2 позначаєтся як:
Dк2(C) =M.
Схематично зашифрування та розшифрування при використанні асиметричних криптографічних алгоритмів зображені на рис. 2.1.
Рис. 2.1. Операції зашифрування та розшифрування в асиметричних алгоритмах
Слід зауважити, що ключі К1 та К2 не обов'язково мають бути різними, але в тому випадку, коли вони співпадають, втрачається багато переваг алгоритму з відкритим ключем.
Іноді повідомлення зашифровуються закритим ключем, а розшифровуються - відкритим ключем. Такий метод використовують для цифрового підпису. Ці операції, відповідно, позначають як:
Ек2(М) = С,
Dк1(C) = M.
Від часу винайдення криптографії з відкритим ключем було запропоновано безліч криптографічних алгоритмів з відкритими ключами . Багато з них не є стійкими. А з тих, які є стійкими, багато непридатних для практичної реалізації . Або вони використовують дуже великий ключ, або розмір отриманого шифртексту набагато перевищує розмір відкритого тексту. Небагато алгоритмів є і безпечними, і практичними. Зазвичай ці алгоритми засновані на одній з важких проблем. Деякі з цих безпечних і практичних алгоритмів підходять тільки для розподілу ключів. Інші підходять для шифрування (і для розподілу ключів). Треті корисні тільки для цифрових підписів. Тільки три алгоритми добре працюють як при шифруванні, так і для цифрового підпису: RSA, EIGamal (Ель-Гамаля) та Rabin (Рабіна). Усі ці алгоритми повільні. Вони зашифровують і розшифровують дані набагато повільніше, ніж симетричні алгоритми. Зазвичай їх швидкість недостатня для шифрування великих обсягів даних.
Гібридні криптосистеми дозволяють прискорити події: для шифрування повідомлення використовується симетричний алгоритм з випадковим ключем, а алгоритм з відкритим ключем застосовується для шифрування випадкового сеансового ключа.
2.2 Симетричні криптографічні алгоритми
Симетричні алгоритми, які іноді називають умовними алгоритмами, це ті, в яких ключ зашифрування може бути розрахований з ключа розшифрування, і навпаки . У більшості симетричних алгоритмів ключі зашифрування і розшифрування ті самі . Ці алгоритми, також звані алгоритмами з секретним ключем або алгоритмами з єдиним ключем, вимагають, щоб відправник і одержувач погодили використовуваний ключ перед початком передачі секретних повідомлень. Захист, що забезпечується симетричним алгоритмом визначається ключем; розкриття ключа означає, що хто завгодно зможе зашифрувати і розшифрувати повідомлення. Поки повідомлення, що передаються, повинні залишатися таємними, ключ повинен зберігатися в секреті.
Якщо припустити, що К - ключ, що використовується у деякому симетричному криптографічному алгоритмі, тоді зашифрування і розшифрування з використанням симетричного алгоритму позначається як :
Ек(М) = С,
Dк(C) = M.
Схематично зашифрування та розшифрування при використанні симетричних криптографічних алгоритмів зображені на рис. 2.2.
Рис. 2.2. Операції зашифрування та розшифрування в симетричних алгоритмах
Симетричні алгоритми поділяються на дві категорії. Одні алгоритми обробляють відкритий текст побітово (іноді побайтово), вони називаються потоковими алгоритмами або потоковими шифрами. Інші працюють з групами бітів відкритого тексту. Групи бітів називаються блоками, а алгоритми - блоковими алгоритмами або блоковими шифрами.
Далі будуть більш докладно розглянуті особливості будови потокових та блокових алгоритмів.
2.2.1 Блокові алгоритми
У відкритих комп'ютерних системах більшого поширення набули блокові шифри, тоді як класичні потокові шифри зазвичай орієнтовані на апаратну реалізацію, є секретними і використовуються переважно в спеціалізованих системах зв'язку. З метою усунення недоліків, властивих шифрам підстановки, для блокових шифрів було розроблено кілька режимів, призначених для обробки великих об'ємів інформації. Ці режими фактично визначають потокові схеми шифрування, побудовані на базі блокового шифру.
Розглянемо всі режими, визначені стандартами:
- Electronic Codebook (ECB) - режим електронної кодової книги (ГОСТ: режим простої заміни);
- Output Feedback (OFB) - режим зворотнього зв'язку по виходу;
- Cipher Feedback (CFB) - режим зворотного зв'язку по шифртексту (ГОСТ: режим гамування зі зворотним зв'язком);
- Cipher Block Chaining (CBC) - режим зв'язки шифрблоків (ГОСТ: режим вироблення імітовставки);
- «Counter mode» - режим «лічильника» (ГОСТ: режим гамування).
Більшість перерахованих режимів визначають потокові шифратори. Вони поділяються на два класи: синхронні і такі, що самосинхронізуються. У синхронних шифрах гама, що шифрує, формується незалежно від оброблюваного тексту і визначається тільки ключем шифрування і внутрішнім станом шифратора. У шифрах, що самосинхронізуються, гама формується як функція від ключа шифрування і деякої фіксованої кількості раніше сформованих символів криптограми. Для даних схем окремому символу відповідатиме блок тексту, що обробляється за одну ітерацію шифрування.
Блокові алгоритми працюють з блоками відкритого тексту і шифротексту - зазвичай завдовжки 64 біта, але іноді довше. Блоковий шифр, що використовує той самий ключ, при шифруванні завжди перетворює той самий блок відкритого тексту на той самий блок шифртексту.
3. Кодування даних
Дані - діалектична складова інформації. Вони являють собою зареєстровані сигнали. При цьому фізичний метод реєстрації може бути довільним: механічним, електричним, магнітним, оптичним, тощо. Відповідно до методу реєстрації дані можуть зберігатись і транспортуватись на носіях різних видів. Самим розповсюдженим видом носія, хоча і не самим економічним та надійним, є папір. В обчислювальній техніці в ролі носіїв інформації виступають різноманітні магнітні диски, стрічки, оптичні диски, тощо.
В ході виконання інформаційного процесу дані перетворюються з одного виду в інший за допомогою методів. Опрацювання даних містить в собі багато операцій, серед яких можна виділити наступні:
· збір даних - накопичення даних з метою забезпечення їх повноти для прийняття рішень;
· формалізація даних - зведення даних, одержаних з різних джерел, до однакової форми;
· фільтрація даних - відкидання “зайвих” даних, які не потрібні для прийняття рішення;
· сортування даних - впорядкування даних за певною ознакою;
· групування даних - об'єднання даних за певною ознакою з метою їх більш зручного використання;
· архівація даних - організація збереження даних в зручній та легкодоступній формі, як правило, в більш економному форматі;
· захист даних - комплекс заходів, направлених на запобігання втрати, модифікації або відтворення даних;
· транспортування даних - прийом та передача даних між віддаленими учасниками інформаційного процесу;
· перетворення даних - перевід даних з однієї форми або однієї структури до іншої.
Повний перелік операцій з даними набагато більший. Тому можна зробити висновок : опрацювання інформації має високу трудомісткість і тому її потрібно автоматизувати.
Для автоматизації опрацювання даних різних типів їх потрібно подати в єдиній формі. Для цього використовують кодування даних. Звичайна людська мова є прикладом кодування даних. Азбука Морзе, нотна грамота, малюнки є також прикладами систем кодування. Своя система існує і в обчислювальній техніці. Вона основана на використанні двійкової системи числення. Для подання інформації використовується дві цифри : 0 та 1. Ці цифри називаються війковими цифрами, або бітами. Таке подання є досить зручним. По-перше, одним бітом може бути виражене одно з двох понять : так (1) або ні (0).Один біт легко подати у вигляді сигналів різної фізичної природи : намагнічено (1) - не намагнічено (0); є струм (1) - немає струму (0); високий рівень напруги (1) - низький рівень напруги (0).
Двома бітами можна подати вже чотири стани, трьома - 8. Всього n бітами можливо подати 2n різних станів. Збільшуючи кількість розрядів на один, ми збільшуємо кількість можливих станів удвічі.
Біт є досить дрібною, а отже, і незручною одиницею виміру даних. Тому біти об'єднується у групи по 8 біт - байти. Два байти називаються машинним словом. Байти об'єднуються в кілобайти (1Кб = 1024 » 1000 байт), мегабайти
(1 Мб = 1024 » 1000 Кб » 1000 000 байт), гігабайти , терабайти і т. д. Враховуючи сучасні можливості виготовлення носіїв інформації і об'єми даних, які потрібно зберігати, найбільш вживаними одиницями виміру даних є мегабайти та гігабайти.
Для кодування числової інформації групи з декількох байт. При цьому як правило, старший біт відповідає за знак числа: 0- сило додатне, 1 - число від'ємне. Так, для цілих чисел використовується два байти, для дійсних чисел - 10 байт. В такому випадку деяка кількість біт відводиться під мантису (тобто, значущі цифри числа), а інші - під порядок (разом за знаком).
Для кодування текстової інформації кожному символу ставиться у відповідність деяке ціле додатне число - його код. Так, одним байтом можна подати 256 різних символів. Цього достатньо для запису всіх символів англійського, російського (українського) алфавітів, цифр та спеціальних символів типу знаків арифметичних операцій, дужок, розділових знаків, тощо. Кодування символів визначається стандартом, яких на даний час існує досить багато. Це призвело до певних суперечностей - текст, поданий в одній кодовій таблиці, неправильно відтворювався в іншій. Для позбавлення цього недоліку в даний час використовується універсальна таблиця кодування UNICODE, яка основана на 16-бітному поданні символів. Цього достатньо для розміщення в одній кодовій таблиці символів більшості мов нашої планети.
Графічне зображення на екрані складається з дрібних точок, які називаються пікселами. Вони утворюють характерний візерунок, який називається растром. Для кодування графічної інформації використовується принцип декомпозиції. Його сутність полягає у тому, що будь-який колір подається у вигляді комбінації трьох основних кольорів: червоного, зеленого та блакитного. Якщо для кодування інтенсивностей кожної складової використовувати 8 біт (256 різних значень), то на кодування однієї точки екрану потрібно 24 розряди. При цьому така система забезпечує кодування близько 16,5 млн. кольорів. Такий режим подання графічного зображення називається повнокольоровим (True Color).
Всі дані зберігаються на зовнішньому носієві. Для одержання швидкого доступу до даних потрібно, щоб вони мали впорядковану структуру. В ролі такої структури використовується об'єкт змінної довжини, який називається файлом. Отже, файл - це послідовність довільної кількості байт, записаних на зовнішньому носієві даних, яка має ім'я. Тип даних визначає тип файлу.
Збереження файлів організовується в ієрархічній структурі, яка називається файловою системою. Для зручності роботи файли групуються в каталоги, які , в свою чергу, можуть містити інші каталоги. Вони являють собою іменовані сукупності файлів. На найвищому рівні ієрархії розташований кореневий каталог. Унікальність імені файлу полягає у тому, що повне ім'я файлу містить як власне його ім'я разом з маршрутом доступу до файлу. Маршрут завжди починається з логічного імені носія.
4. Алгоритм ГОСТ 28147-89
ГОСТ 28147-89 - радянський і російський стандарт симетричного шифрування, введений в 1990 році. Повна назва - «ГОСТ 28147-89 Систем обробки інформації. Захист криптографічний. Алгоритм криптографічного перетворення».Блоковий шифроалгоритм. При використанні методу шифрування з гаммуванням, може виконувати функції потокового шифроалгоритму.
ГОСТ 28147-89 - блоковий шифр з 256-бітовим ключем і 32 циклами перетворення, що оперує 64-бітовими блоками. Основа алгоритму шифра - Мережа Фейстеля. Базовим режимом шифрування по ГОСТ 28147-89 є режим простим заміни (визначені також складніші режими гаммування, гаммування із зворотним зв'язком і режим імітовставки) .Для зашифрування в цьому режимі відкритий текст спочатку розбивається на ліву і праву половини L і R. На i-му циклі використовується ключ ki:
:R_{i+1}= L_i:L_{i+1}= R_i oplus f(L_i, K_i) ( oplus = xor)
Для генерації ключей початковий 256-бітовий ключ розбивається на вісім 32-бітових блоків: K1.K8.
Розшифрування виконується так само, як і зашифрування, але інвертується порядок ключей Ki.
Функція f(L_i, K_i) обчислюється таким чином:
Li і Ki складаються по модулю 232.
Результат розбивається на вісім 4-бітових підпослідовностей, кожна з яких поступає на вхід свого "S-блока ". Загальна кількість S-блоків Госту - вісім, тобто стільки ж, скільки і підпослідовностей. Кожен "S-блок " є перестановкою чисел від 0 до 15. Перша 4-бітова підпослідовність потрапляє на вхід першого S-блока, друга - на вхід другого і так далі
Якщо "S-блок " виглядає так: 1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12 і на вході S-блока 0, то на виході буде 1, якщо 5, то на виході буде 7 і так далі
Виходи всіх восьми S-блоків об'єднуються в 32-бітове слово, потім все слово циклічно зрушується вліво на 11 біт.
Всі вісім S-блоків можуть бути різними. Фактично, вони можуть являтся додатковим ключовим матеріалом, але частіше є параметром схеми, спільним для певної групи користувачів. У ГОСТ Р 34.11-94 для цілей тестування приведені наступні S-блоки:
У ГОСТ 28147-89 вказується, що постачання заповнення вузлів заміни (S-блоків) проводиться в установленому порядку, тобто розробником алгоритму.
Переваги Госту
* безперспективність силової атаки (XSL-атаки в облік не беруться, оскільки їх ефективність на даний момент повністю не доведена);
* ефективність реалізації і відповідно висока швидкодія на сучасних комп'ютерах.
Криптоаналіз
Існують атаки на ГОСТ 28147-89 без яких-небудь модифікацій. Одна з перших відкритих робіт, в яких був проведений аналіз алгоритму, що використовує слабкості процедури розширення ключа ряду відомих алгоритмів шифрування. Зокрема, алгоритм ГОСТ 28147-89 може бути розкритий за допомогою диференціального криптоаналізу на зв'язаних ключах, але лише в разі використання слабких таблиць замін. 24-раундовий варіант алгоритму (у якому відсутні перші 8 раундів) розкривається аналогічним чином при будь-яких таблицях замін, проте, сильні таблиці замін роблять таку атаку абсолютно непрактичною.
Вітчизняні учені А.Г. Ростовцев і Е.Б. Маховенко в 2001 р. запропонували принципово новий метод криптоаналізу (на думку авторів, істотно ефективніший, ніж лінійний і диференціальний криптоаналіз) шляхом формування цільової функції від відомого відкритого тексту, відповідного йому шифртексту і шуканого значення ключа і знаходження її екстремуму, відповідного дійсному значенню ключа. Вони ж знайшли великий клас слабких ключів алгоритму ГОСТ 28147-89, які дозволяють розкрити алгоритм за допомогою всього 4-х вибраних відкритих текстів і відповідних їм шифртекстів з досить низькою складністю.
У 2004 р. група фахівців з Кореї запропонувала атаку, за допомогою якої, використовуючи диференціальний криптоаналіз на зв'язаних ключах, можна отримати з вірогідністю 91,7% 12 біт секретного ключа . Для атаки потрібно 235 вибраних відкритих текстів і 236 операцій шифрування. Як видно, дана атака, практично, даремна для реального розтину алгоритму.
Критика Госту
Основні проблеми Госту пов'язані з неповнотою стандарту в частині генерації ключів і S-блоків. Тривіально доводиться, що в Госту існують "слабкі" ключі і S-блоки, але в стандарті не описуються критерії вибору і відсіву "слабких".Также стандарт не специфікує алгоритм генерації S-блоків (таблиці замін). З одного боку, це може бути додатковою секретною інформацією (окрім ключа), а з іншою, піднімає ряд проблем:
* не можна визначити криптостійкість алгоритму, не знаючи заздалегідь таблиці замін;
* реалізації алгоритму від різних виробників можуть використовувати різні таблиці замін і можуть бути несумісні між собою;
* можливість надання слабких таблиць замін тих, що містять "чорний хід";
* потенційна можливість (відсутність заборони в стандарті) використання таблиць заміни, в яких S-блоки не є перестановками, що може привести до надзвичайного зниження стійкості шифру.
Логіка побудови шифру і структура ключової інформації Госту.
Якщо уважно вивчити оригінал ГОСТ 28147-89, можна відмітити, що в ньому міститься опис алгоритмів декількох рівнів. На самому верхньому знаходяться практичні алгоритми, призначені для шифрування масивів даних і вироблення для них імітовставки. Всі вони спираються на три алгоритми нижчого рівня, звані в тексті Госту циклами . Ці фундаментальні алгоритми згадуються , як базові цикли, щоб відрізняти їх від всіх інших циклів. Вони мають наступні назви і позначення, останні приведені в дужках і сенс їх буде пояснений пізніше:
-цикл зашифрування (32-З);
-цикл розшифрування (32-Р);
-цикл вироблення імітовставки (16-З).
У свою чергу, кожен з базових циклів є багатократним повторенням однієї єдиної процедури, званої для визначеності далі в справжній роботі основним кроком криптопретворення .
Так, щоб знатися и Гості, треба зрозуміти три наступні речі:
що таке основний крок криптоперетворення;
як з основних кроків складаються базові цикли;
як з трьох базових циклів складаються всі практичні алгоритми Госту.
Перш ніж перейти до вивчення цих питань, слід поговорити про ключову інформацію, використовувану алгоритмами Госту. Відповідно до принципу Кірхгофа, якому задовольняють всі сучасні відомі широкій громадськості шифри, саме її секретність забезпечує секретність зашифрованого повідомлення. У Гості ключова інформація складається з двох структур даних. Окрім власне ключа, необхідного для всіх шифрів, вона містить ще і таблицю замін . Нижче приведені основні характеристики ключових структур Госту. Ключ є масивом з восьми 32-бітових елементів коду, далі в справжній роботі він позначається символом K: У Гості елементи ключа використовуються як 32-розрядні цілі числа без знаку: . Таким чином, розмір ключа складає 32·8=256 біт або 32 байти.
Таблиця замін є вектором, що містить вісім вузлів заміни . Кожен вузол заміни, у свою чергу, є вектором, що містить шістнадцять 4-бітових елементів заміни, які можна представити у вигляді цілих чисел від 0 до 15, всі елементи одного вузла заміни зобов'язані бути різними. Таким чином, таблиця замін може бути представлена у вигляді матриці розміру 8x16 або 16x8, що містить 4-бітові замінюючі значення. Для мов програмування, в яких двовимірні масиви розташовані в оперативній пам'яті по рядках, природних є перший варіант (8x16), його-то ми і візьмемо за основу. Тоді вузли заміни будуть рядками таблиці замін. У справжній статті таблиця замін позначається символом H: . Таким чином, спільний об'єм таблиці замін рівний: 8 вузлів x 16 елементів/вузол x 4 біта/елемент = 512 біт = 64 байти.
Основний крок криптоперетворення.
Основний крок криптоперетворення за своєю суттю є оператором, що визначає перетворення 64-бітового блоку даних. Додатковим параметром цього оператора є 32-бітовий блок, як який використовується який-небудь елемент ключа. Схема алгоритму основного кроку приведена на малюнку 1.
криптографія алгоритм гост інформаційний програма
Малюнок 1. Схема основного кроку криптоперетворення алгоритму ГОСТ 28147-89.
Нижче подані пояснення до алгоритму основного кроку:
Крок 0.
Визначає вихідні дані для основного кроку криптоперетворення:
N - перетворюваний 64-бітовий блок даних, в ході виконання кроку його молодша (N 1) і старша (N 2) частини обробляються як окремі 32-бітові цілі числа без знаку. Таким чином, можна записати N=(N 1,N 2).
X - 32-бітовий елемент ключа;
Крок 1.
Складання з ключем. Молодша половина перетворюваного блоку складається по модулю 232 з використовуваним на кроці елементом ключа, результат передається на наступний крок;
Крок 2
Поблочна заміна. 32-бітове значення, отримане на попередньому кроці, інтерпретується як масив з восьми 4-бітових блоків коди: S=(S 0, S 1, S 2, S 3, S 4, S 5, S 6, S 7), причому S 0 містить 4 самих молодших, а S 7 - 4 самих старших біта S.
Далі значення кожного з восьми блоків замінюється новим, яке вибирається по таблиці замін таким чином: значення блоку Si міняється на Si -тий по порядку елемент (нумерація з нуля) i-того вузла заміни (тобто i-тий рядки таблиці замін, нумерація також з нуля). Іншими словами, як заміна для значення блоку вибирається елемент з таблиці замін з номером рядка, рівним номеру замінюваного блоку, і номером стовпця, рівним значенню замінюваного блоку як 4-бітового цілого ненегативного числа. Звідси стає зрозумілим розмір таблиці замін: число рядків в ній дорівнює числу 4-бітових елементів в 32-бітовому блоці даних, тобто восьми, а число стовпців дорівнює числу різних значень 4-бітового блоку даних, рівному як відомо 24, шістнадцяти.
Крок 3
Циклічне зрушення на 11 біт вліво. Результат попереднього кроку зрушується циклічно на 11 біт у бік старших розрядів і передається на наступний крок. На схемі алгоритму символом позначена функція циклічного зрушення свого аргументу на 11 біт вліво, тобто у бік старших розрядів.
Крок 4
Побітове складання: значення, отримане на кроці 3, побитно складається по модулю 2 із старшою половиною перетворюваного блоку.
Крок 5
Зрушення по ланцюжку: молодша частина перетворюваного блоку зрушується на місце старшою, а на її місце стає результат виконання попереднього кроку.
Крок 6
Набутого значення перетворюваного блоку повертається як результат виконання алгоритму основного кроку криптоперетворення.
5. Запуск програми
Процес компіляції.
При компіляції використовується Delphi 7 або FreePascal. У тексті програми зроблені посилання на файл ключа key.inc і на файл розгорненої таблиці замін table.inc. Для використання програми користувач повинен підготувати файли зі своєю ключовою інформацією, послатися на них в тексті програми і відкомпілювати вихідний текст заново. Виконавчий файл, що вийшов, є самодостатнім - він містить ключ усередині себе, тому при запуску програми ключ задавати не потрібно.
Використання програми.
Запуск програми здійснюється з командного рядка наступною командою:
gost_pa e|d <infile> <outfile>
де:
e|d - e (encrypt) - зашифрувати;
d (decrypt) - розшифрувати;
<infile> - ім'я вхідного файлу;
<outfile> - ім'я вихідного файлу.
Якщо третій параметр опустити, то ім'я вихідного файлу формуватиметься з імені вхідного файлу. При зашифровании це буде додавання розширення gst, при расшифровании видалення розширення gst.
5.1 Програма шифрування за аргоритмом Гост
type
TGOST_Block = array [0..1] of LongWord;
TGOST_Key = array [0..7] of LongWord;
TGOST_TZam256 = array [0..3, 0..255] of Byte;
var
GOST_Key: TGOST_Key =
{Посилання на key.inc }
GOST_TZam256: TGOST_TZam256 =
{ Посилання на table.inc }
var
GSeed: TGOST_Block = (0, 0);
ABlock: array [0..127] of TGOST_Block;
b1, b2: TGOST_Block;
procedure GOST_SetSeed(const GS: TGOST_Block);
begin
GSeed := GS
end;
procedure GOST_EncryptBlock(var GBlock: TGOST_Block); assembler;
var
blk: Pointer;
i: LongInt;
label
L, L1, L2;
asm
push ebx
push esi
push edi
mov ebx, GBlock
mov blk, ebx
mov eax, [ebx]
mov edx, [ebx+4]
mov i, 3
L:
mov ecx, 8
lea esi, GOST_Key
L1:
mov edi, eax
add eax, [esi]
lea ebx, GOST_TZam256
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
rol eax, 3
xor eax, edx
mov edx, edi
add esi, 4
loop L1
sub i, 1
jnz L
mov ecx, 8
lea esi, GOST_Key
add esi, 28
L2:
mov edi, eax
add eax, [esi]
lea ebx, GOST_TZam256
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
rol eax, 3
xor eax, edx
mov edx, edi
sub esi, 4
loop L2
mov ebx, blk
mov [ebx], edx
mov [ebx+4], eax
pop edi
pop esi
pop ebx
end;
procedure GOST_GammaBEn
(FileIn, FileOut: String);
var
i, nb: SmallInt;
lb: Integer;
fin, fout: File;
begin
AssignFile(fin, FileIn);
AssignFile(fout, FileOut);
Rewrite(fout, 1);
FileMode := 0;
Reset(fin, 1);
BlockWrite(fout, GSeed, 8);
b1 := GSeed;
repeat
BlockRead(fin, ABlock, 1024, lb);
nb := (lb - 1) div 8;
for i := 0 to nb do begin
GOST_EncryptBlock(b1);
ABlock[i][0] := ABlock[i][0] XOR b1[0];
ABlock[i][1] := ABlock[i][1] XOR b1[1];
b1 := ABlock[i]
end;
BlockWrite(fout, ABlock, lb)
until lb<>1024;
CloseFile(fout);
CloseFile(fin)
end;
procedure GOST_GammaBDe
(FileIn, FileOut: String);
var
i, nb: SmallInt;
lb: Integer;
fin, fout: File;
begin
AssignFile(fin, FileIn);
AssignFile(fout, FileOut);
Rewrite(fout, 1);
FileMode := 0;
Reset(fin, 1);
BlockRead(fin, GSeed, 8);
b1 := GSeed;
repeat
BlockRead(fin, ABlock, 1024, lb);
nb := (lb - 1) div 8;
for i := 0 to nb do begin
GOST_EncryptBlock(b1);
b2 := ABlock[i];
ABlock[i][0] := ABlock[i][0] XOR b1[0];
ABlock[i][1] := ABlock[i][1] XOR b1[1];
b1 := b2
end;
BlockWrite(fout, ABlock, lb)
until lb<>1024;
CloseFile(fout);
CloseFile(fin)
end;
procedure Burn;
var
i, j: SmallInt;
begin
GSeed[0] := 0;
GSeed[1] := 0;
b1 := GSeed;
b2 := GSeed;
for i := 0 to 127 do ABlock[i] := GSeed;
for i := 0 to 7 do GOST_Key[i] := 0;
for i := 0 to 3 do for j := 0 to 255 do GOST_TZam256[i][j] := 0;
end;
label err;
var
s1, s2: String[255];
s0: String[1];
ext: String[4];
n: Integer;
GS: TGOST_Block;
encr: Boolean;
i: Integer;
begin
n := ParamCount;
if n = 3 then begin
s0 := ParamStr(1);
s1 := ParamStr(2);
s2 := ParamStr(3);
if UpCase(s0[1]) = 'E' then begin
encr := True
end else if UpCase(s0[1]) = 'D' then begin
encr := False
end else begin
goto err
end
end else if n = 2 then begin
s0 := ParamStr(1);
s1 := ParamStr(2);
if UpCase(s0[1]) = 'E' then begin
encr := True;
s2 := s1 + '.gst';
end else if UpCase(s0[1]) = 'D' then begin
ext:=copy(s1, Length(s1) - 3, 4);
for i := 1 to Length(ext) do ext[i]:=UpCase(ext[i]);
if ext = '.GST' then begin
encr := False;
s2 := copy(s1, 1, length(s1) - 4)
end else begin
goto err
end
end else begin
goto err
end
end else if n = 1 then begin
s1 := ParamStr(1);
ext := copy(s1, Length(s1) - 3, 4);
for i := 1 to Length(ext) do ext[i] := UpCase(ext[i]);
if ext = '.GST' then begin
encr := False;
s2 := copy(s1, 1, length(s1) - 4)
end else begin
encr := True;
s2 := s1 + '.gst'
end
end else begin
goto err
end;
if encr then begin
Randomize;
GS[0] := (Random($10000) SHL 16) + Random($10000);
GS[1] := (Random($10000) SHL 16) + Random($10000);
GOST_EncryptBlock(GS);
GOST_SetSeed(GS);
GOST_GammaBEn(s1, s2)
end else begin
GOST_GammaBDe(s1, s2)
end;
Burn;
exit;
err:
Burn;
WriteLn('gost_pa e|d <infile> <outfile>');
end.
Висновок
Криптографія сьогодні - це найважливіша частина всіх інформаційних систем: від електронної пошти до стільникового зв'язку, від доступу до мережі Internet до електронної готівки. Криптографія забезпечує підзвітність, прозорість, точність і конфіденційність передаваної інформації. Вона запобігає спробам шахрайства в електронній комерції і забезпечує юридичну силу фінансових транзакцій.
У даній роботі вивчений алгоритм шифрування ГОСТ 28147-89. Так само на підставі цього алгоритму була створена програма. У тексті роботи приведено керівництво до даної програми.
Список використаної літератури
1. Фомичев В. М. Дискретная математика и криптология. Курс лекцій / Под общ. ред. д-ра физ.-мат. н. Н. Д. Подуфалова. - М.: Диалог - МИФИ, 2003 - 400 с.
2. Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. - М: Издательство Триумф, 2003 - 816 с.
3. Математические и компьютерные основы криптологии: Учеб. пособие / Ю. С. Харин, В. И. Берник, Г. В. Матвеев, С. В. Агиевич. - Мн.: Новое знание, 2003 - 382 с.
4. Столлингс В. Криптографія и защита сетей: принципы и практика, 2-е издание.: Пер. С англ. - М.: Издательский дом «Вильямс», 2001 - 672 с.
5. Петров А. А. Компьютерная безопасность. Криптографические методы защиты. - М.: ДМК, 2000 - 448 с.
Размещено на Allbest.ru
Подобные документы
Алгоритм ГОСТ 28147-89 симметричного шифрования на основе сети Фейстеля, основные режимы его работы. Атаки на системы защиты информации. Метод грубой силы. Атаки класса "встреча посередине". Характеристики ГОСТ 28147-89 и американского шифра Rijndael.
курсовая работа [510,7 K], добавлен 17.01.2012Історія виникнення та розвиток методів шифрування. Особливості розробки програми, що виконує шифрування за допомогою доповнювального модуля, який надає доступ до самої програми. Вибір ефективного методу шифрування даних. Розробка відповідного інтерфейсу.
курсовая работа [1,9 M], добавлен 21.07.2011Основи безпеки даних в комп'ютерних системах. Розробка програми для забезпечення захисту інформації від несанкціонованого доступу: шифрування та дешифрування даних за допомогою криптографічних алгоритмів RSA та DES. Проблеми і перспективи криптографії.
дипломная работа [823,1 K], добавлен 11.01.2011Задачі інформаційних систем криптографічного захисту інформації. Принципи шифрування даних на основі використання хеш-функцій. Розробка програмних компонентів інформаційних систем криптографічного захисту інформації. Види криптографічних алгоритмів.
курсовая работа [2,7 M], добавлен 23.01.2012Функциональное и эксплуатационное назначение данного изделия. Требования к составу и параметрам технических средств. Описание алгоритма ГОСТ 28147-89 в режиме гаммирования. Технико-экономические показатели разработки. Интерфейс программного продукта.
курсовая работа [1,7 M], добавлен 27.02.2015Електронна пошта як засіб відправки і одержання повідомлень за допомогою комп’ютерної мережі. Робота електронної пошти за допомогою поштової програми-сервера. Режими доступу до електронної поштової скриньки. Протокол (програма) відправлення повідомлення.
презентация [2,4 M], добавлен 05.04.2011Відомі підходи до реалізації потокового шифрування даних. Регістр зсуву з оберненими зв’язками. Комбінуючий та фільтруючий генератор. Потоковий шифр Alpha1. Розробка структурної схеми алгоритму шифрування Alpha1. Розробка блоку керування пристрою.
курсовая работа [185,6 K], добавлен 09.04.2013Сутність і напрямки вивчення методики шифрування алгоритмами збивання. Поняття та структура алгоритму DES, оцінка його переваг та недоліків. Підключ як деяка ключова інформація, яка отримується з основного ключа шифрування, його аналіз і значення.
лабораторная работа [99,5 K], добавлен 18.11.2015Види секретної інформації та методи захисту. Тип і об’єм вхідних даних. Програмна реалізація системи алгоритму шифрування зі стисненням. Призначення та опис програмного продукту Export. Алгоритми захисту зберігання та обміну секретною інформацією.
дипломная работа [1,1 M], добавлен 19.09.2012Переваги електронної комерції. Історія створення та мова WEB-сценаріїв PHP. Розробка системи доступу до бази даних магазину за допомогою WEB-каталогу, який надає інформацію про товари в зручній для клієнта формі, використовуючи нові Internet-технології.
курсовая работа [78,2 K], добавлен 28.12.2013