Міністерство Освіти і Науки Республіки Білорусь p>
Мінський Державний Вищий Радіотехнічний Коледж p>
Захист даних від несанкціонованого доступу p>
Пояснювальна записка до курсового проекту з предмету p >
"Мови програмування" p>
КП 46.41010.301 p>
Керівник проекту Потапенко Н.
І p>
Учень Еганов Максим p> < p> 1996 p>
Зміст. p>
Введення. . . . . . . . . . .
3 p>
1. Постановка завдання. . . . . . . . .
4 p>
1. 1. Організаційно-економічна сутність задачі. . . .
4 p>
1. 2. Вхідні дані. . . . . . . . .
6 p>
1. 3. Постійна інформація. . . . . . . .
6 p>
1. 4. Вихідна дані. . . . . . . . .
6 p>
2. Обчислювальна система. . . . . . . .
7 p>
2. 1. Операційна система. . . . . . . .
7 p>
2. 2. Технічні засоби реалізації завдання. . . . .
. 8 p>
2. 3. Програмні засоби. . . . . . . .
8 p>
3. Алгоритм задачі. . . . . . . . .
10 p>
4. Опис програми. . . . . . . . .
14 p>
5. Опис застосування програми. . . . . . 16 p>
6. Висновок. . . . . . . . . .
17 p>
Додаток 1. Лістинг програми. . . . . . .
18 p>
Додаток 2. Лістинг бібліотек. . . . . . .
39 p>
Додаток 3. Приклад роботи програми. . . . . .
45 p>
Список літератури. . . . . . . . .
47 p>
КП 46.41010.301 ПЗ p>
1. Введення. P>
, що з'явилися на початку 80-их персональні ЕОМ (ПЕОМ або ПК) міцно увійшли в усі сфери людської діяльності. Разом з ними у експлуатують
ПЕОМ організацій і відомств виникли й численні проблеми. Одна з них - захист інформації. Згідно зі статистичними даними понад 80% компаній і агентств несуть фінансові збитки через порушення безпеки даних. P>
Проблема захисту інформації являє собою сукупність тісно пов'язаних проблем у галузях права, організації управління, розробки технічних засобів, програмування та математики. Одна з центральних завдань проектування систем захисту полягає в раціональному розподілі наявних ресурсів. P>
Характерна особливість використання ПЕОМ в нашій країні полягати в тому, що доступ до них мають багато користувачів. У зв'язку з таким
"багатокористувацьким" режимом роботи виникає цілий набір взаємопов'язаних питань щодо захисту інформації, що зберігається в ПЕОМ. P>
При створенні та використанні ПЕОМ виникає цілий ряд взаємопов'язаних теоретичних і практичних проблем. У комерційних і військових областях однією з основних є проблема захисту інформації. Так можна виділити наступні об'єктивні причини, що визначають важливість проблеми захисту інформації:
. високі темпи зростання парку ПЕОМ, що знаходяться в експлуатації;
. широке застосування ПЕОМ в самих різних сферах людської діяльності;
. висока ступінь концентрації інформації в ПЕОМ;
. вдосконалення способів доступу користувачів до ресурсів ПЕОМ;
. ускладнення обчислювального процесу в ПЕОМ. p>
Ускладнення методів і засобів організації машинної обробки інформації призводять до того, що інформація стає все більш вразливою. Цьому сприяють такі чинники, як постійно зростаючі обсяги оброблюваних даних, накопичення і зберігання даних в обмежених місцях, постійне розширення кола користувачів, які мають доступ як до ресурсів
ПЕОМ, так і до програм і даних, що зберігаються в них, ускладнення режимів експлуатації обчислювальних систем і т. п. [6] p>
КП 46.41010.301 ПЗ p>
1. Постановка завдання p>
1. 1. Організаційно-економічна сутність задачі p>
Захист інформації в процесі її збору, зберігання і обробки приймає виключно важливе значення. Під захистом інформації прийнято приймати сукупність заходів, методів і засобів, що забезпечують рішення наступних завдань: p>
- перевірка цілісності інформації; p>
- виключення несанкціонованого доступу до захищається програм і даних; p>
- виключення несанкціонованого використання зберігаються в ПЕОМ програм (тобто захист програм від копіювання). p>
Використання ПЕОМ у військовій, комерційної та інших галузях людської діяльності породжує ряд специфічних проблем, які необхідно вирішити для захисту оброблюваної і зберігається в ПЕОМ інформації. Однією з них є класифікація можливих каналів витоку інформації. Під можливим каналом витоку мається на увазі спосіб, що дозволяє порушнику отримати доступ до гарячої і зберігається в
ПЕОМ інформації [7]. P>
Класифікацію можливих каналів витоку інформації виходячи з типу засобу, що є основним при отриманні інформації по можливому каналу витоку. Отже, можна виділити три типи засобів: людина, апаратура, програма. Стосовно до ПЕОМ групи каналів, в яких основним засобом є людина, складають наступні основні можливі канали витоку: p>
. розкрадання носіїв інформації (дискет; лазерних, магнітних і магнітооптичних дисків і т. д.); p>
. читання інформації з екрану сторонньою особою (під час відображення інформації на екрані законним користувачем або за відсутності законного користувача на робочому місці); p>
. читання інформації з залишених без нагляду роздруківок програм. p>
У групі каналів, в яких основним засобом є апаратура, можна виділити наступні основні канали витоку: p>
. підключення до пристроїв ПЕОМ спеціально розроблених апаратних засобів, p>
КП 46.41010.301 ПЗ що забезпечують доступ до інформації; p>
. використання спеціальних технічних засобів для перехоплення електромагнітних випромінювань технічних засобів ПЕОМ. p>
У групі каналів, в яких основним засобом є програма, можна виділити наступні основні канали витоку: p>
. несанкціонований доступ програми до інформації; p>
. розшифровка програмою зашифрованою інформації; p>
. копіювання програмою інформації з носіїв. p>
У даній роботі нас цікавить остання група тому система захисту даних від несанкціонованого доступу повинна забезпечувати виконання таких функцій: p>
. ідентифікація ресурсів, тобто привласнення ресурсів ідентифікаторів - унікальних ознак, за якими надалі система виробляє аутентифікацію; p>
. аутентифікація захищаються ресурсів, тобто встановлення їх автентичності на основі порівняння з еталонними ідентифікаторами; p>
. розмежування доступу користувачів з операцій над ресурсами p>
(програми, дані), захищеними за допомогою програмних засобів; p>
. адміністрування: p>
= визначення прав доступу до ресурсів захищається, p>
= установка системи захисту на ПЕОМ, p>
= зняття системи захисту з ПЕОМ, p> < p>. контроль цілісності і працездатності систем захисту. p>
Під час створення системи захисту можна виділити наступні основні принципи, яких слід дотримуватися при проектуванні: p>
1. Простота механізму захисту. Цей принцип загальновідомий але не завжди глибоко усвідомлюється. Дійсно, деякі помилки, не виявлені в ході проектування і експлуатації, дозволяють виявити невраховані шляхи доступу. Особливо ретельне тестування програмного або апаратного засоби захисту, проте на практиці така перевірка можлива тільки для простих і компактних схем. P>
2. Відсутність доступу. У механізмі захисту в нормальних умовах доступ повинен бути відсутнім, і для роботи системи захисту необхідні умови, за яких доступ стає можливим. Крім того, вважається, що заборона доступу при p>
КП 46.41010.301 ПЗ відсутності особливих вказівок забезпечує високий ступінь надійності механізму захисту. P>
1. Механізм захисту можна не засекречувати, тобто не має сенсу засекречувати деталі реалізації систем захисту, призначеної для широкого користування. P>
2. Психологічна привабливість. Система захисту повинна бути простою в експлуатації [6]. P>
Виходячи з цього, потрібно розробити систему захисту від несанкціонованого доступу, яка повинна забезпечувати виконання таких функцій: p>
. аутентифікація користувача за паролем і за ключовою дискеті; p>
. шифрування вибраних файлів; p>
. установка на програми захисту від несанкціонованого запуску; p>
. реакція на несанкціонований доступ. p>
1. 2. Вхідна інформація p>
Так як програма працює з файлами (шифрування, установка захистів), то вхідними даними є файли різного типу для шифрування і EXE-і
COM-файли для встановлення пароля та перевірки за ключовою дискеті. p>
1. 3. Постійна інформація p>
Як постійної інформації використовуються таблиці перестановок і константи генератора псевдовипадкових чисел для шифрування файлів
(докладніше див Опис програми. Криптографія). P>
1. 4. Вихідна інформація p>
Вихідні дані - зашифровані файли і захищені програми. P>
КП 46.41010.301 ПЗ p>
2. Обчислювальна система p>
2. 1. Операційна система p>
Програма "Захист даних від несанкціонованого доступу" розроблялася під управлінням операційної системи MS-DOS 6.22. Передбачається, що програма буде працювати без збоїв з MS-DOS і PC-DOS версій не нижче 5.0. P>
Операційна система (ОС) є невід'ємною частиною ПЕОМ. ОС забезпечує управління всіма апаратними компонентами і підтримку роботи програм користувача, надаючи йому можливість спільного управління машиною. P>
До основних переваг MS DOS відносяться: p>
. можливість організації багаторівневих каталогів; p>
. можливість підключення користувачем додаткових драйверів зовнішніх пристроїв; p>
. можливість роботи з усіма послідовними пристроями як з файлами; p>
. розвинений командний мова; p>
. можливість запуску фонових задач одночасно з діалогової роботою користувачів та ін p>
Найважливішою особливістю MS DOS є модульність, що дозволяє при необхідності розширення функцій системи модифіковані окремі її модулі. DOS складається з наступних основних модулів: p>
= базова система введення/виводу (BIOS); p>
= блок початкового завантаження (Boot Record); p>
= модуль розширення базової системи введення/виводу (___BIO.COM); p>
= модуль обробки переривань (___DOS.COM); p>
= командний процесор (COMMAND.COM); p>
= утиліти DOS. p>
Гідністю DOS є те, що будь-яка програма може грати роль сервісної, оскільки для її запуску достатньо вказати лише ім'я файлу, в якому вона міститься. Отже, з точки зору користувача такі програми не відрізняються від вбудованих команд DOS. Програма може сприймати параметри, що задаються в командному рядку. Зберігатися вона може в будь-якому каталозі на будь-якому диску. Вказане властивість робить ДОС відкритою для розширення. Незмінна ядро системи складають лише BIOS і три основних моду-ля: BIO.COM, DOS.COM і COMMAND.COM Загальний обсяг оперативної пам'яті, займаної цими модулями, складає до 60 Кбайт. P>
КП 46.41010.301 ПЗ p>
2. 2. Технічні засоби реалізації завдання p>
Програма працює на комп'ютерах клону IBM, починаючи з процесора
Intel 80-286. Необхідний обсяг оперативної пам'яті - мінімум 1,5 Mb.
Мінімальні вимоги до відеоапаратури - карта VGA і 256 Kb відеопам'яті. P>
2. 3. Програмні засоби реалізації завдання p>
Програма "Захист даних від несанкціонованого доступу" розроблена в середовищі Borland Pascal 7.0 (Borland International ©, 1992). Пакет Borland
Pascal 7.0 враховує новітні досягнення в програмуванні і практиці створення програм і включає в себе три режими роботи: p>
. звичайний режим операційної системи MS-DOS p>
. захищений режим MS-DOS p>
. режим Windows. p>
Пакет Borland Pascal включає в себе як мова програмування - одне з розширень мови Паскаль для ПЕОМ клонів IBM, так і середу, призначену для написання, відладки і запуску програм. p>
Мова характеризується розширеними можливостями в порівнянні зі стандартом, добре розвиненою бібліотекою модулів, що дозволяють використовувати можливості операційної системи, створювати оверлейной структури, організовувати введення-виведення, формувати графічні зображення і т. д. p>
середу програмування дозволяє створювати тексти програм , компілювати їх, знаходити помилки й оперативно їх виправляти, компонувати програми з окремих частин, включаючи стандартні модулі, налагоджувати і виконувати налагоджену програму. Пакет надає користувачеві також великий обсяг довідкової інформації. P>
Версія 7.0 також, як і попередня, дозволяє застосовувати об'єктно-орієнтоване програмування, володіє вбудованим асемблером, має інструментальний засіб створення інтерактивних програм - Turbo Vision, але з'явився ряд характерних особливостей : p>
- виділення кольором різних елементів програми; p>
КП 46.41010.301 ПЗ p>
- ряд додаткових розширень мови, таких, як використання відкритих масивів, параметрів-констант , типізований адресного оператора @ і т. д.; p>
- розширені можливості об'єктно-орієнтованого програмування; p>
- вдосконалені програми Turbo Vision [2]. p>
При написанні програми також використовувався інтегрований пакет
Turbo Vision 2.0. Під час створення прикладної програми програміст великих зусиль витрачає на організацію введення-виведення інформації, тобто на формування інтерфейсу. Вони порівнянні із зусиллями, що витрачається на програмування основного алгоритму програми, за яким вирішується конкретне завдання. Робота, пов'язана з організацією введення-виведення, повторюється від програми до програми, вимагає виконання однотипних операцій, відволікає увагу програміста від виконання основного завдання. P>
Чудовим засобом спрощення роботи по організації вводу-виводу, його уніфікації з урахуванням вимог до інтерфейсу програм є розроблений фірмою Borland International пакет Turbo Vision 2.0, який представляє об'єктно-орієнтовану бібліотеку засобів формування інтерфейсу користувача. До речі, інтерфейс самого Borland Pascal 7.0
(і Turbo Pascal 7.0 теж) побудований на стандартних об'єктах Turbo Vision
2.0. P>
Структуру передачі інформації в достатньо загальному випадку можна представити у вигляді, зображеного на рис . 1. P>
Рішення основного завдання p>
Організація діалогу Безпосередня передача даних p>
Зовнішні пристрої p>
Рис.1. Структура програми з урахуванням організації вводу-виводу. P>
КП 46.41010.301 ПЗ p>
Згідно з цим малюнком програму можна представити як сукупність двох частин: частина програми, що забезпечує рішення основної програми, і частина, забезпечує організацію вводу-виводу з зовнішніх пристроїв (на зовнішні пристрої), - так званий інтерфейс програми. В основну частину (з основної частини) інформація може передаватися двома способами - безпосередня передача інформації (наприклад, програма формує якісь дані та розміщує їх у конкретному файлі на магнітному диску) і передача інформації за допомогою організації діалогу (наприклад, після формування тих же даних відбувається уточнення, в який конкретно файл слід помістити сформовану інформацію). Спосіб, заснований на організації діалогу, є більш універсальним і саме для організації діалогу призначений в першу чергу пакет Turbo Vision. P>
У програмах, що працюють в текстовому режимі, діалог зазвичай організовується за допомогою трьох засобів: меню, діалогових вікон і рядків стану [3]. p>
Також при створенні програми використовувався асемблер - машинно-орієнтована мова. На асемблері написані основні підпрограми, де потрібна висока швидкодія і мінімальний розмір програмного коду. P>
3. Алгоритм завдання p>
Програму умовно можна розділити на кілька частин: p>
1) Інсталяційний модуль. P>
2) Оболонка програми (написана з використанням Turbo Vision 2.0).
3) Криптографічний захист (Borland Pascal 7.0). p>
4) Захист програм паролем (TASM 3.0). p>
5) Захист програм за допомогою ключової дискети (TASM 3.0). p>
6) Блокування вінчестера (TASM 3.0). p>
3. 1 Інсталяційний модуль p>
Модуль інсталяції буде встановлювати програму на вінчестер в певний каталог, а також здійснювати прив'язку програми до унікальних ідентифікаторів BIOS. P>
КП 46.41010.301 ПЗ p>
3. 2. Оболонка програми p>
Під час створення інтерактивного інтерфейсу користувача (оболонки програми) використовувалися стандартні об'єкти пакету Turbo Vision.
Горизонтальне дворівневе меню, рядок стану, робоче поле, діалогові вікна, інформаційні повідомлення та повідомлення про помилки, підтримка " миші "- ось деякі атрибути оболонки. p>
3. 2. Криптографічний захист p>
Перед описом алгоритму слід ввести деякі терміни. P>
зашифрованими даних називається процес перетворення відкритих даних в зашифровані за допомогою шифру, а розшифрування даних - процес перетворення закритих даних у відкриті за допомогою шифру . p>
Шифрування називається процес зашифрування або розшифрування даних. p>
Дешифрування будемо називати процес перетворення закритих даних у відкриті при невідомому ключі і, можливо, невідомому алгоритмі. p>
Криптографічний захист - це захист даних за допомогою криптографічного перетворення, зад яким розуміється перетворення даних шифруванням. p>
Рівняння зашифрування - співвідношення, що описує процес утворення зашифрованих даних з відкритих даних у результаті перетворень, заданих алгоритмом криптографічного перетворення. p>
Рівняння розшифрування - співвідношення, що описує процес освіти відкритих даних із зашифрованих даних у результаті перетворень, заданих алгоритмом криптографічного перетворення. p>
Під шифром розуміється сукупність оборотних перетворень безлічі відкритих даних на безліч зашифрованих даних, заданих алгоритмом криптографічного перетворення. p>
криптостійкості називається характеристика шифру, що визначає його стійкість до дешифруванню. Зазвичай ця характеристика визначається періодом часу, необхідним для дешифрування [6]. P>
Принцип зашифрування полягає в генерації гами шифру за допомогою датчика псевдовипадкових чисел (ПСЧ) та покладенням отриманої гами на відкриті дані з p>
КП 46.41010.301 ПЗ допомогою логічної операції "виключає АБО" (тобто зворотнім чином). p>
Процес розшифрування даних зводиться до повторної генерації гами шифру при відомому ключі і накладення такої гами на зашифровані дані. < br> Отриманий зашифрований текст є досить важким для розкриття в тому випадку, коли гамма шифру не містить повторюваних бітових послідовностей. По суті справи гамма шифру повинна змінюватися випадковим чином для кожного шіфруемого слова. Фактично якщо період гами перевищує довжину всього зашифрованого тексту і невідома ніяка частина вихідного тексту, то шифр можна розкрити тільки прямим перебором (підбором ключа). У цьому випадку крипостійкість визначається розміром ключа. P>
Щоб отримати лінійні послідовності елементів гами, використовуються датчики ПСЧ. До теперішнього часу на основі теорії груп розроблено декілька типів таких датчиків. P>
У своїй програмі я використовував так званий конгруентний генератор
ПСЧ - найбільш доступний і ефективний. Для цього класу генераторів ПСЧ можна зробити математично строге висновок про те, якими властивостями володіють вихідні сигнали цих генераторів з точки зору періодичності та випадковості. P>
Даний лінійний конгруентний датчик ПСЧ виробляє послідовності псевдовипадкових чисел T (i), що описуються співвідношенням p>
(1)
T (0) - вихідна величина, обрана в якості породжує числа. p>
Цей датчик ПСЧ генерує псевдовипадкові числа з певним періодом повторення, що залежать від вибраних значень A і C. Значення М зазвичай встановлюється рівним 2b, де b - довжина слова ЕОМ у бітах. Датчик має максимальний період М до того, як генерується послідовність чисел почне повторюватися. Лінійний конгруентний датчик ПСЧ має максимальну довжину М тоді і тільки тоді, коли A mod 4 = 1 і С - непарне. У своїй програмі я поклав А = 5, С = 27, Т (0) - пароль, що вводиться користувачем. P>
З отриманої послідовністю Т (i) надходять у такий спосіб: p>
F ( i) = T (i) xor D (i) (2) p>
Де в (2) D (i) - послідовність відкритих даних, F (i) - послідовність p>
КП 46.41010.301 ПЗ зашифрованих даних [4]. p>
Також при розробці алгоритму шифрування використовувався алгоритм американського федерального стандарту на шифрування даних - Data
Encryption Standard (DES). p>
При зашифрованими вхідні дані шифруються за формулою (2), далі обробляються блоками по 64 слова (word). Ця обробка полягає в наступному:: 4 слова переставляються відповідно до таблиці, що на рис. 2:
| 40 | 8 | 48 | 16 | 56 | 24 | 64 | 32 |
| 39 | 7 | 47 | 15 | 55 | 23 | 63 | 31 |
| 38 | 6 | 46 | 14 | 54 | 22 | 62 | 30 |
| 37 | 5 | 45 | 13 | 53 | 21 | 61 | 29 |
| 36 | 4 | 44 | 12 | 52 | 20 | 60 | 28 |
| 35 | 3 | 43 | 11 | 51 | 19 | 59 | 27 |
| 34 | 2 | 42 | 10 | 50 | 18 | 58 | 26 |
| 33 | 1 | 41 | 9 | 49 | 17 | 57 | 25 | p>
Рис. 2. Перестановка після зашифрування. P>
Як видно з даної таблиці, слово 40 вхідної послідовності стає 1-им, слово 8 - 2-м і т. д. p>
Процес розшифрування даних є інверсний щодо процесу зашифрування. Тобто дані спочатку переставляються відповідно до таблиці, що на рис. 3, а потім перетворюються за формулою (2).
Як легко бачити, ця перестановка є зворотною по відношенню до початкової.
| 58 | 50 | 42 | 34 | 26 | 18 | 10 | 2 |
| 60 | 52 | 44 | 36 | 28 | 20 | 12 | 4 |
| 62 | 54 | 46 | 38 | 30 | 22 | 14 | 6 |
| 64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
| 57 | 49 | 41 | 33 | 25 | 17 | 9 | 1 |
| 59 | 51 | 43 | 35 | 27 | 19 | 11 | 3 |
| 61 | 53 | 45 | 37 | 29 | 21 | 13 | 5 |
| 63 | 55 | 47 | 39 | 31 | 23 | 15 | 7 | p>
Рис. 3. Перестановка перед розшифрування p>
КП 46.41010.301 ПЗ p>
4. Опис програми p>
При написанні програми використовувалися наступні стандартні бібліотеки Borland Pascal 7.0 і Turbo Vision 2.0: p>
. Модуль Objects. Модуль Objects містить основні визначення об'єктів Turbo Vision, включаючи базовий об'єкт ієрархії Turbo Vision p>
TObject, а також всі невидимі елементи Turbo Vision: потоки, колекції і ресурси. P>
. Модуль App. Модуль App (надано у вихідних кодах) забезпечує елементи оболонки Turbo Vision. 4 дуже потужних об'єктних типу визначені в App, включаючи об'єкти TApplication і p>
TProgram, які служать в якості програм Turbo Vision і об'єкт панелі екрана, який управляє більшістю елементів у віконних програмах. P>
. Модуль Views. Модуль Views містить основні компоненти видимих елементів і корисні компоненти більш складних груп, таких як рамки вікон і смуги скролінгу. Більш складні видимі елементи знаходяться в модулях Dialogs і TextView. P>
. Модуль Dialogs. Модуль Dialogs визначає більшість елементів найбільш часто використовуваних при створенні діалогових вікон. P>
Цей модуль включає самі діалогові вікна (які є спеціалізованими вікнами) і різні елементи управління, такі як кнопки, мітки, залежні і незалежні кнопки, рядки введення і списки історії. p>
. Модуль Menus. Модуль Menus забезпечує всі об'єкти та процедури для системи меню Turbo Vision, включаючи що випадають меню і активні елементи рядка статусу. P>
. Модуль Drivers. Модуль Drivers містить всі спеціалізовані драйвери Turbo Vision, включаючи драйвери мишки і клавіатури, підтримку екрану і систему обробки помилок з монітором подій для програм, керованих подіями. P>
. Модуль Memory. Модуль Memory містить процедури монітора пам'яті p>
Turbo Vision, які забезпечують функції управління купою. P>
. Модуль CRT. Модуль CRT містить константи, змінні та підпрограми, призначені для роботи з консоллю. На відміну від стандартного вводу-виводу, p>
КП 46.41010.301 ПЗ коли він здійснюється через операційну систему, підпрограми цього модуля працюють з BIOS і безпосередньо з відеопам'яттю. P>
. Модуль DOS. Модуль DOS дозволяє використовувати можливості операційної системи MS-DOS, не передбачені у стандарті мови p>
Паскаль, і містить типи, константи, змінні і для реалізації цих додаткових можливостей. P>
Крім перерахованих вище стандартних модулів був розроблений модуль
SetConf, в якому знаходиться функція прив'язки програми до BIOS комп'ютера, тобто захист від копіювання. p>
При запуску програми в першу чергу перевіряється цілісність системи; тобто наявність усіх файлів системи, чи відповідають їх імена та розміри таблиці. Далі відбувається ініціалізація: перевіряються параметри
BIOS. Якщо який-небудь файл системи був змінений або параметри BIOS не відповідають встановленим в програмі, система працювати не буде. Для входу в систему необхідно ввести пароль. Ці перевірки здійснюються в конструкторі Init об'єкта TMyApp. Цей же об'єкт ініціалізує меню
(TMyApp.InitMenu), рядок стану (TMyApp.InitStatusLine), робоче поле
(TMyApp.InitDeskTop), встановлює спеціальну колірну палітру
(TMyApp.GetPalette). Обробка подій (натискання клавіш клавіатури, робота з "мишею") здійснюється в методі HandleEvent об'єкта TMyApp. При виборі будь-якого пункту меню керування передається відповідному об'єкту або викликається потрібна підпрограма. P>
У програмі використовуються наступні процедури, функції та об'єкти: p>
1. Shifr (процедура). Зашифрування файлів будь-якого типу. Спочатку отримуємо пароль від користувача, потім створюємо файл зашифрованих даних p>
(*. M & A). Файл зчитується блоками по 64 word, кодується за допомогою генератора ПСЧ, потім переставляється відповідно до таблиці, що на рис. 2. Отриману послідовність записуємо в файл з розширенням *. M & A і т. д. p>
2. DeShifr (процедура). Розшифрування файлів, зашифрованих процедурою p>
Shifr. P>
3. Plus (процедура). Установка захисту паролем або за ключовою дискеті на програми. P>
4. Block (процедура). Захист вінчестера від запису. P>
5. Passwords (процедура). Зміна пароля входу у програму. Спочатку запитує старий пароль, а потім два рази новий. P>
6. TOptions (об'єкт, нащадок об'єкта TDialog). Виводить діалогове вікно зміни p>
КП 46.41010.301 ПЗ налаштувань шифрування файлів: видаляти чи не видаляти вихідний файл, висвічувати або не висвічувати індикатор процесу шифрування. P>
7. CheckExec (процедура). Обробляє помилки DOS. P>
5. Опис застосування програми p>
Програма призначена для захисту даних від несанкціонованого доступу; в ній реалізовані наступні функції: p>
. шифрування файлів; p>
. захист паролем виконуваних файлів; p>
. захист файлів, що виконуються за допомогою ключової дискети; p>
. відстеження і реакція на помилки; p>
. зміна паролів; p>
. прив'язка до BIOS. p>
Встановлення системи відбувається з ключовою дискети програмою
INSTALL.EXE, яка перевіряє чи не була встановлена система раніше, а якщо ні, то створює на вінчестері каталог C: SUB ROSA і копіює в нього файли системи (Sub Rosa.exe, Block, KeyDisk, Plus, Passw, Setup.res,
System.res). p>
При запуску програми Sub Rosa.exe спочатку перевіряється наявність усіх файлів системи. Якщо хоча б один файл змінений або видалений, то система працювати не буде. Для роботи з програмою необхідно ввести пароль. P>
У верхній частині екрана знаходиться смужка меню, що складається з наступних пунктів: p>
1. "Файли": p>
- "Вибрати" (вибір файлу для роботи); p>
- "Змінити каталог" (зміна поточного каталогу); p>
- "Вихід в DOS "(тимчасовий вихід в DOS); p>
-" Завершення "(завершення роботи з програмою); p>
2. "Захист": p>
- "Встановити пароль" (захист EXE-та COM-файлів паролем); p>
- "Блокувати вінчестер" (заборона запису будь-яких даних на вінчестер); p>
КП 46.41010.301 ПЗ p>
3. "Ключова дискета": p>
- "Додати перевірку по ключу" (захист EXE-та COM-файлів за допомогою ключової дискети);
4. "Криптографія": p>
- "Зашифрувати файл даних" (зашифрування вибраний файл); p>
- "Розшифрувати файл даних" (розшифрування вибраний файл);
5. "Установки": p>
- "Криптографія" (зміна налаштувань криптографії); p>
- "Паролі" (зміна пароля входу в систему);
6. "Про Програму" (інформація про програму). P>
У всіх випадках, крім блокування вінчестера, спочатку необхідно вибрати файл для роботи. Для встановлення захисту паролем або за ключовою дискеті вибирається EXE-або COM-файл, для шифрування - файл будь-якого типу. P>
6. Висновок p>
У висновку проведемо аналіз деяких систем захисту від копіювання.
Слід зазначити, що цей аналіз не є вичерпним, тому що ці системи постійно розвиваються, а також не завжди можна отримати вичерпні алгоритмів - розробники не прагнуть розкривати принципи їх побудови. p>
RANK - пакет захисту від НСД. Цей пакет реалізує функцію контролю доступу до EXE-та COM-файлів. Слід зазначити, що аналіз розмежування доступу до програм ставить під серйозний сумнів можливість реалізації такої функції без додаткових заходів. P>
LATCH - комплекс програм захисту ПЕОМ від НСД. Цей комплекс забезпечує безпеку даних, що зберігаються на вінчестері. При несанкціонованому доступі відбувається "зависання" ПЕОМ або не виявляється НЖМД. P>
Теза про неможливість виявлення НЖМД викликає серйозні сумніви: наприклад, для контролерів SCSI не потрібно визначення типу НЖМД в пам'яті CMOS, так як параметри вінчестера можуть бути прочитані за допомогою команди контролера. p>
Додаток 1 p>
Лістинг програми p>
{******************* ************************************************** *****< br> **)
{*********************************** ***************************************< br> **)
(* *
**)
(** КП "ЗАХИСТ ДАНИХ ВІД НСД"
**)
(** Виконали учні гр.46491 ЕГАНОВ МАКСИМ і ЮЗЕФОВИЧ АРТЕМ
**)
(** 1996
**)
(**
**)
{*********************** ************************************************** *
**)
{*************************************** ***********************************< br> **)
($ M 10240, 0 , 20480) (Розподіл пам'яті)
Program Sub_Rosa;
Uses p>
App, Dialogs, Drivers, Menus, MsgBox, Objects, p>
Validate, Views, Memory, StdDlg , Editors, (Модулі Turbo Vision, далі -
TV) p>
CRT, DOS, (Стандартні модулі) p>
SetConf; (Модуль функції прив'язки до BIOS)
Var p>
MyRes: TResourceFile; (Змінна файлу ресурсів, TV) p>
FName, MainDir, DName: string; (Змінні роботи з файлами та каталогами) p>
MainPass, Pass: string; (Змінні паролів) p>
Pos: string [3]; p>
FilePass: file of char; (Змінна файлу паролів) p>
OptFile, OptInd : word; (Змінні опцій) p>
Int09_Save: pointer; (Змінна адреси 09h переривання) p>
Const (Константи кодів команд, TV) cmAboutBox = 700; (Вікно "Про Програму") cmCode = 1001; (Кодувати файл) cmDeCode = 1002; (декодувати файл) cmSetPass = 1005; (Встановити пароль на вхід в систему) cmLockDisk = 1006; (Заборонити доступ до вінчестера) cmOptions = 1007; (Опції криптографії) cmKeyDisk = 1008; (Ключова дискета) cmPasswords = 1009; (Пароль на виконуваний файл) cmChangePass = 1010; (Змінити пароль на вхід в систему) p>
SetPass = 'passw.com'; p>
KeyDisk = 'keydisk.com'; p>
RMenuBar: TStreamRec = ((Запис для роботи з потоком, TV) p>
ObjType: 2000; p>
VmtLink: Ofs (TypeOf (TMenuBar )^); p>
Load: @ TMenuBar.Load; p>
Store: @ TMenuBar.Store); p>
Type p>
(Установка опцій криптографії) p>
POptions = ^ TOptions; p>
TOptions = object (TDialog) constructor Init; end; p>
(Об'єкт для роботи з текстом)
PMyStaticText = ^ TMyStaticText; p>
TMyStaticText = object (TStaticText) function GetPalette: PPalette; virtual; (Перевизначення палітри) end; p>
(Об'єкти для роботи з файлами і каталогами) p>
PMyFDialog = ^ TMyFDialog; p>
TMyFDialog = object (TFileDialog) function GetPalette: PPalette; virtual; end; p>
PMyFileDialog = ^ TMyFileDialog;
TMyFileDialog = object (TMyFDialog) constructor Init (AWildCard: tWildStr; const ATitle, p>
InputName: string; AOptions: Word; HistoryId: Byte); end; p>
PDirDialog = ^ TDirDialog; p>
TDirDialog = object (TChDirDialog) function GetPalette: PPalette; virtual; end; p>
PMyChDirDialog = ^ TMyChDirDialog; p>
TMyChDirDialog = object (TDirDialog) constructor Init (AOptions: Word; HistoryId: Word); procedure SetUpDialog; function Valid (Command: Word): Boolean; virtual; end; p>
(Установка основного фону програми) p> < p> PMyBackground = ^ TMyBackground; p>
TMyBackground = object (TBackground) p>
Text: TTitleStr; constructor Init (var Bounds: TRect; AText: TTitleStr); procedure Draw; virtual; end ; p>
PMyDesktop = ^ TMyDesktop; p>
TMyDesktop = object (TDesktop) procedure InitBackground; virtual; end; p>
(Об'єкт "Про Програму") p >
PAboutBox = ^ TAboutBox; p>
TAboutBox = object (TDialog) constructor Init; end; p>
(Основний об'єкт) p>
PMyApp = ^ TMyApp; p>
TMyApp = object (TApplication) constructor Init; (ініціалізація) destructor Done; virtual; (завершення роботи) procedure HandleEvent (var Event: TEvent); virtual; (обробка подій) procedure InitMenuBar; virtual; (ініціалізація меню) procedure InitDeskTop; virtual; (ініціалізація робочого поля) procedure InitStatusLine; virtual; (ініціалізація рядка стану) procedure FileOpen (WildCard: PathStr); (вікно для роботи з файлами) function GetPalette: PPalette; virtual; (зміна стандартної палітри) end ; p>
(Русифицированная функція формування повідомлення) function MyMessageBoxRect (var R: TRect; const Msg: string; Params: pointer; p>
AOptions: word): word; const
ButtonName: array [0 .. 3] of string [6] = ( 'Ага', 'Нека', 'Ага', 'Нека'); p>
Commands: array [ 0 .. 3] of Word = (cmYes, cmNo, cmOK, cmCancel); p>
Titles: array [0 .. 3] of string [11] = p>
( 'Попередження ',' Помилка ',' Інформація ',' Підтвердження '); var p>
I, X: integer; p>
Dialog: PDialog; p>
Control: PView ; p>
S: string; p>
begin p>
Dialog: = New (PDialog, Init (R, Titles [AOptions and $ 3])); with Dialog ^ do begin p>
Options: = Options or ofCentered; p>
R. Assign (3, 2, Size.X - 2, Size.Y - 3); p>
FormatStr (S, Msg, Params ^); p>
Insert (New (PStaticText, Init (R, S ))); p>
X: = -2; p>
R. Assign (0, 0, 10, 2); for I: = 0 to 3 do if AOptions and ($ 0100 shl I) 0 then p>
Inc (X, RBX - RAX + 2 ); p>
X: = (Size.X - X) shr 1; for I: = 0 to 3 do if AOptions and ($ 0100 shl I) 0 then begin p>
Control: = New (PButton, Init ( p>
R, ButtonName [I], Commands [i], bfNormal )); p>
Insert (Control); p>
Control ^. MoveTo (X, Size.Y - 3); p>
Inc (X, Control ^. Size.X + 2); end; p>
SelectNext (False); end; p>
if AOptions and mfInsertInApp = 0 then p>
MyMessageBoxRect: = DeskTop ^. ExecView (Dialog) else p>
MyMessageBoxRect: = Application ^. ExecView (Dialog); p>
Dispose (Dialog, Done); end; p>
(Русифицированная функція формування повідомлення стандартного розміру) function MyMessageBox (const Msg: String; p>
Params: Pointer; AOptions: Word): Word; var p>
R: TRect; begin p>
R. Assign (0, 0, 40, 9); p>
MyMessageBox: = MyMessageBoxRect (R, Msg, Params, AOptions); end; p>
function GetCurDir: DirStr; var p>
CurDir: DirStr; begin p>
GetDir (0, CurDir ); if Length (CurDir)> 3 then begin p>
Inc (CurDir [0 ]); p>
CurDir [Length (CurDir)]: =''; end; p >
GetCurDir: = CurDir; end; p>
(Процедура ініціалізації вікна роботи з файлами) procedure TMyApp.FileOpen (WildCard: PathStr); var p>
FileName: FNameStr; begin
FileName: ='*.*'; if ExecuteDialog (New (PMyFileDialog, Init ( p>
WildCard, 'Відкрити файл', 'Назва', fdOpenButton, p>
100)), @ FileName) cmCancel then FName: = FileName; p>
(відкрити файл, потім ...) end; p>
{********* ************************************************** ***************< br> **)
{*----------============= До Р И П Т О Г Р А Ф І Я ================---------< br> -*)
{**** ************************************************** ********************< br> **} p>
(Шифрування файлів) procedure Shifr (InputFileName: string); const p>
A = 5; (Константи для) p>
C = 27; (генератора) p>
M = 65536; (псевдовипадкових чисел, далі - ПСЧ) p>
var p>
TempFile: file of byte; p>
InpF, OutF: file of word; (файли на вході і виході) p>
Password, Password1: string; (змінні для роботи з паролями) p>
OutputFileName, Exten: string; (змінні імен файлів) p>
I, J, K, tmp: byte; (змінні кодування) p>
Temp, SCode, TByte, Code: word; p>
Position: LongInt; (змінні даних про процес) p>
NowPos: real; p>
TPassword: array [1 .. 255] of word; p>
MasByte, Mas, MasEnd, PS: array [1 .. 64] of word; (масиви перестановок) p>
T: array [ 0 .. 64] of word; p>
DirInfo, DirInfo1: SearchRec; (дані про фото) begin if length (FName)> 3 then (Файл обраний?) begin p>
(Отримати пароль) p>
Password: =''; p>
Password1: =''; p>
InputBox ( '?? А Р О Л Ь ',' Введіть пароль: ', Password, 255); p>
InputBox (' П А Р О Л Ь ',' Введіть пароль ще раз: ', Password1, 255); if (Password = Password1) and (length (Password) 0) then p>
begin p>
(Перетворити файл) p>
FindFirst (InputFileName, AnyFile, DirInfo); if DOSError = 0 then begin if DirInfo.Size mod 2 = 1 then begin assign (TempFile, InputFileName); reset (TempFile); while not EOF (TempFile) do read (TempFile, tmp); tmp: = 255; write (TempFile, tmp); close (TempFile); end; p>
(Перетворити назва файлу) p>
Position: = 0; assign (InpF, InputFileName); reset (InpF); for i: = length (InputFileName) downto 1 do if InputFileName [i] = '.' then begin p>
OutputFileName: = copy (InputFileName, 1, i) + 'M & A'; break; end; assign (OutF, OutputFileName); rewrite (OutF); for i: = 0 to length (InputFileName ) do if InputFileName [length (InputFileName) - i] = '.' then case i of p>
0: Exten: = chr (0) + chr (0) + chr (0); p>
1: Exten: = copy (FName, length (FName ) -2, i) + chr (0) + chr (0); p>
2: Exten: = copy (FName, length (FName) -2, i) + chr (0) else Exten: = copy (FName, length (FName) -2, 3) end; for i: = 1 to 3 do begin p>
Temp: = ord (Exten [i ]); p>
Write (OutF, Temp); end; p>
(Почати шифрування) k: = 1; repeat begin p>
(Вважати з вихідного файлу блок розміром 64 * word) for i: = 1 to 64 do p>
If EOF (InpF) then MasByte [i]: = 0 else Read (InpF,
MasByte [i ]); p>
Mas: = MasByte;
T [0]: = ord (Password [k]); if k (Отримати поточну позицію процесу) p>
NowPos: = 100 * Position/DirInfo.Size; inc (Position, 2); if NowPos> 100 then NowPos: = 100; p> < p> Str (Round (NowPos): 3, Pos); if OptInd = 0 then begin p>
GoToXY (77, 1); p>
Write (Pos +'%'); end; p>
(Шифрувати за допомогою ПСЧ) p>
Code: = Mas [i]; p>
T [i]: = (A * T [i - 1] + C) mod M; p>
Code: = T [i] xor Code; p>
Mas [i]: = Code; end; p>
for i: = 1 to 8 do (Кінцева перестановка) for j: = 1 to 8 do case i of p>
1: MasEnd [8 * (j-1) + i]: = Mas [41-j ]; p>
2: MasEnd [8 * (j-1) + i]: = Mas [09-j]; p>
3: MasEnd [8 * (j-1) + i]: = Mas [49-j]; p>
4: MasEnd [8 * (j-1) + i]: = Mas [17-j]; p>
5 : MasEnd [8 * (j-1) + i]: = Mas [57-j]; p>
6: MasEnd [8 * (j-1) + i]: = Mas [25-j ]; p>
7: MasEnd [8 * (j-1) + i]: = Mas [65-j]; p>
8: MasEnd [8 * (j-1) + i]: = Mas [33-j] end; for i: = 1 to 64 do Write (OutF, MasEnd [i]); end; until eof (InpF); p>
MyMessageBox ( 'Файл '+ InputFileName +' зашифровано за назвою '+ p>
OutputFileName, nil, mfInformation + mfOkButton); p>
Close (InpF); if OptFile = 1 then Erase (InpF); p>
Close (OutF); end else MyMessageBox ( 'Файл' + InputFileName + 'не існує!', nil, mfInformation + mfOkButton); p>
end else MyMessageBox ( 'Помилка введення пароля!! ! ', nil, mfError + mfOkButton); end else MyMessageBox (' Файл не вибрано !!!', nil, mfError + mfOkButton); end; p>
procedure DeShifr (InputFileName: String); const p>
A = 5; p>
C = 27; p>
M = 65536; p>
var p>
InpF, OutF: file of word; p>
Password, OutputFileName: string; p>
Password1: string; p>
Exten: string [3]; p>
SCode , Temp, Ext, TByte, Code: word; p>
I, J, K: byte; p>
Position: LongInt; p>
NowPos: real; p>
TPassword: array [1 .. 255] of word; p>
MasByte, Mas, MasEnd, PS: array [1 .. 64] of word; p>
T : array [0 .. 64] of word; p>
DirInfo: SearchRec; p>
begin if (length (InputFileName)> 3) and p>
(copy ( InputFileName, length (InputFileName) -2, 3) = 'M & A') then begin p>
Password: =''; p>
Password1: =''; p>
InputBox ( 'П А Р О Л Ь', 'Введіть пароль:', Password, 255); p>
InputBox ( 'П А Р О Л Ь', 'Введіть пароль ще раз:', Password1 , 255); if (Password = Password1) and (length (Password) 0) then begin p>
FindFirst (InputFileName, AnyFile, DirInfo); if DOSError = 0 then begin p>
Assign (InpF, InputFileName); p>
Reset (InpF); p>
Position: = 0; p>
Exten: =''; for i: = 1 to 3 do begin p>
Read (InpF, Temp); p>
Exten: = Exten + chr (Temp); end; for i: = length (InputFileName) downto 1 do if InputFileName [i ] = '.' then begin p>
OutputFileName: = copy (InputFileName, 1, i) + Exten; break; end; p>
Assign (OutF, OutputFileName); p>
Rewrite ( OutF); for i: = 1 to length (Password) do
TPassword [i]: = ord (Password [i]); k: = 1; repeat begin for i: = 1 to 64 do Read (InpF, MasByte [i]); for i: = 1 to 8 do (початкова перестановка) for j: = 1 to 8 do case i of p>
1: Mas [8 * (i-1) + j] : = MasByte [66-8 * j]; p>
2: Mas [8 * (i-1) + j]: = MasByte [68-8 * j]; p>
3: Mas [8 * (i-1) + j]: = MasByte [70-8 * j]; p>
4: Mas [8 * (i-1) + j]: = MasByte [ 72-8 * j]; p>
5: Mas [8 * (i-1) + j]: = MasByte [65-8 * j]; p>
6: Mas [ 8 * (i-1) + j]: = MasByte [67-8 * j]; p>
7: Mas [8 * (i-1) + j]: = MasByte [69-8 * j]; p>
8: Mas [8 * (i-1) + j]: = MasByte [71-8 * j] end; p>
T [0]: = ord (Password [k]); if k NowPos: = 100 * Position/DirInfo. Size; inc (Position, 2); p>
If NowPos> 100 then NowPos: = 100; p>
Str (Round (NowPos): 3, Pos); if OptInd = 0 then begin p>
GoToXY (77, 1); p>
Write (Pos +'%'); end; p>
T [i]: = (A * T [i-1] + C) mod M; p>
Code: = Mas [i]; p>
Code: = T [i] xor Code; p>