Захист
даних від несанкціонованого доступу h2>
1. Введення.
h2>
, що з'явилися на початку 80-их
персональні ЕОМ (ПЕОМ або ПК) міцно увійшли в усі сфери людської
діяльності. Разом з ними у ПЕОМ експлуатуючих організацій і відомств
виникли й численні проблеми. Одна з них - захист інформації. Згідно
статистичними даними понад 80% компаній і агентств несуть фінансові збитки
через порушення безпеки даних. p>
Проблема захисту інформації
являє собою сукупність тісно пов'язаних проблем у галузях права,
організації управління, розробки технічних засобів, програмування та
математики. Одна з центральних завдань проектування систем захисту полягає в
раціональне розподіл наявних ресурсів. p>
Характерна особливість
використання ПЕОМ в нашій країні полягати в тому, що доступ до них мають
багато користувачів. У зв'язку з таким "багатокористувацьким" режимом
роботи виникає цілий набір взаємопов'язаних питань щодо захисту інформації,
що зберігається в ПЕОМ. p>
При створенні та використанні
ПЕОМ виникає цілий ряд взаємопов'язаних теоретичних і практичних проблем.
У комерційних і військових областях однією з основних є проблема захисту
інформації. Так можна виділити наступні об'єктивні причини, що визначають
важливість проблеми захисту інформації: p>
високі темпи зростання парку ПЕОМ,
перебувають в експлуатації; p>
широке застосування ПЕОМ в самих
різних сферах людської діяльності; p>
висока ступінь концентрації
інформації в ПЕОМ; p>
вдосконалення способів
доступу користувачів до ресурсів ПЕОМ; p>
ускладнення обчислювального
процесу в ПЕОМ. p>
Ускладнення методів і засобів
організації машинної обробки інформації призводять до того, що інформація
стає все більш вразливою. Цьому сприяють такі чинники, як постійно
зростаючі обсяги оброблюваних даних, накопичення і зберігання даних в
обмежених місцях, постійне розширення кола користувачів, які мають доступ
як до ресурсів ПЕОМ, так і до програм і даних, що зберігаються в них, ускладнення
режимів експлуатації обчислювальних систем і т. п. [6] p>
1.
Постановка завдання h2>
1. 1.
Організаційно-економічна сутність завдання h2>
Захист інформації в процесі її
збору, зберігання і обробки приймає виключно важливе значення. Під
захистом інформації прийнято приймати сукупність заходів, методів і
засобів, що забезпечують рішення наступних завдань: p>
перевірка цілісності інформації;
p>
виключення несанкціонованого
доступу до захищається програм і даних; p>
виключення несанкціонованого
використання зберігаються в ПЕОМ програм (тобто захист програм від
копіювання). p>
Використання ПЕОМ у військовій,
комерційної та інших галузях людської діяльності породжує ряд
специфічних проблем, які необхідно вирішити для захисту оброблюваної і
що зберігається в ПЕОМ інформації. Однією з них є класифікація можливих
каналів витоку інформації. Під можливим каналом витоку мається на увазі спосіб,
дозволяє порушнику отримати доступ до гарячої і зберігається в ПЕОМ
інформації [7]. p>
Класифікацію можливих каналів
витоку інформації виходячи з типу засобу, що є основним при отриманні
інформації по можливому каналу витоку. Отже, можна виділити три типи
засобів: людина, апаратура, програма. Стосовно до ПЕОМ групи каналів, в
яких основним засобом є людина, складають наступні основні
можливі канали витоку: p>
розкрадання носіїв інформації
(дискет; лазерних, магнітних і магнітооптичних дисків і т. д.); p>
читання інформації з екрану
сторонньою особою (під час відображення інформації на екрані законним
користувачем або за відсутності законного користувача на робочому місці); p>
читання інформації з залишених
без нагляду роздруківок програм. p>
У групі каналів, в яких
основним засобом є апаратура, можна виділити наступні основні
канали витоку: p>
підключення до пристроїв ПЕОМ
спеціально розроблених апаратних засобів, p>
що забезпечують доступ до
інформації; p>
використання спеціальних
технічних засобів для перехоплення електромагнітних випромінювань технічних
засобів ПЕОМ. p>
У групі каналів, в яких
основним засобом є програма, можна виділити наступні основні канали
витоку: p>
несанкціонований доступ
програми до інформації; p>
розшифровка програмою
зашифрованою інформації; p>
копіювання програмою
інформації з носіїв. p>
У даній роботі нас цікавить
остання група тому система захисту даних від несанкціонованого доступу
повинна забезпечувати виконання таких функцій: p>
ідентифікація ресурсів, тобто
привласнення ресурсів ідентифікаторів - унікальних ознак, за якими в
Надалі система виробляє аутентифікацію; p>
аутентифікація захищаються
ресурсів, тобто встановлення їх автентичності на основі порівняння з еталонними
ідентифікаторами; p>
розмежування доступу
користувачів за операціями над ресурсами (програми, дані), захищеними з
допомогою програмних засобів; p>
адміністрування: p>
визначення прав доступу до
захищається ресурсів, p>
установка системи захисту на ПЕОМ
, P>
зняття системи захисту з ПЕОМ, p>
контроль цілісності і працездатності
систем захисту. p>
Під час створення системи захисту
можна виділити наступні основні принципи, яких слід дотримуватися при
проектуванні: p>
Простота механізму захисту. Цей
принцип загальновідомий але не завжди глибоко усвідомлюється. Дійсно, деякі
помилки, не виявлені в ході проектування і експлуатації, дозволяють
виявити невраховані шляхи доступу. Особливо ретельне тестування
програмного або апаратного засоби захисту, проте на практиці така перевірка
можлива тільки для простих і компактних схем. p>
Відсутність доступу. У механізмі
захисту в нормальних умовах доступ повинен бути відсутнім, і для роботи системи
захисту необхідні умови, за яких доступ стає можливим. Крім того,
вважається, що заборона доступу при відсутності особливих вказівок забезпечує
високий ступінь надійності механізму захисту. p>
Механізм захисту можна не
засекречувати, тобто не має сенсу засекречувати деталі реалізації систем
захисту, призначеної для широкого користування. p>
Психологічна привабливість.
Система захисту повинна бути простою в експлуатації [6]. p>
Виходячи з цього, потрібно
розробити систему захисту від несанкціонованого доступу, яка повинна
забезпечувати виконання наступних функцій: p>
аутентифікація користувача за
паролю і за ключовою дискеті; p>
шифрування вибраних файлів; p>
установка на програми захисту від
несанкціонованого запуску; p>
реакція на несанкціонований
доступ. p>
1. 2.
Вхідна інформація h2>
Т. к. програма працює з
файлами (шифрування, установка захистів), то вхідними даними є файли
різного типу для шифрування і EXE-та COM-файли для встановлення пароля і
перевірки за ключовою дискеті. p>
1. 3.
Постійна інформація h2>
Як постійної інформації
використовуються таблиці перестановок і константи генератора псевдовипадкових чисел
для шифрування файлів (докладніше див Опис програми. Криптографія). p>
1. 4.
Вихідна інформація h2>
Вихідні дані - зашифровані
файли і захищені програми. p>
2.
Обчислювальна система h2>
2. 1.
Операційна система h2>
Програма "Захист даних від несанкціонованого доступу"
розроблялася під управлінням операційної системи 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>
2. 2.
Технічні засоби реалізації завдання h2>
Програма працює на
комп'ютерах клону IBM, починаючи з процесора Intel 80-286. Необхідний обсяг
оперативної пам'яті - мінімум 1,5 Mb. Мінімальні вимоги до відеоапаратури --
карта VGA і 256 Kb відеопам'яті. p>
2. 3.
Програмні засоби реалізації завдання h2>
Програма "Захист даних від
несанкціонованого доступу "розроблена в середовищі 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>
ряд додаткових розширень
мови, таких, як використання відкритих масивів, параметрів-констант,
типізований адресного оператора @ і т. д.; 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>
Згідно з цим малюнком програму
можна представити як сукупність двох частин: частина програми, що забезпечує
рішення основної програми, і частина, що забезпечує організацію введення-виведення з
зовнішніх пристроїв (на зовнішні пристрої), - так званий інтерфейс
програми. В основну частину (з основної частини) інформація може передаватися
двома способами - безпосередня передача інформації (наприклад, програма
формує якісь дані та розміщує їх у конкретному файлі на магнітному диску)
і передача інформації за допомогою організації діалогу (наприклад, після
формування тих же даних відбувається уточнення, в який конкретно файл слід
помістити сформовану інформацію). Спосіб, заснований на організації
діалогу, є більш універсальним і саме для організації діалогу
призначений в першу чергу пакет Turbo Vision. p>
У програмах, що працюють в
текстовому режимі, діалог зазвичай організовується за допомогою трьох засобів: меню,
діалогових вікон і рядків стану [3]. p>
Також при створенні програми
використовувався асемблер - машинно-орієнтована мова. На асемблері написані
основні підпрограми, де потрібна висока швидкодія і мінімальний
розмір програмного коду. p>
3. Алгоритм
завдання h2>
Програму умовно можна
розділити на кілька частин: p>
Інсталяційний модуль. p>
Оболонка програми (написана з
використанням Turbo Vision 2.0). p>
Криптографічний захист
(Borland Pascal 7.0). p>
Захист програм паролем (TASM
3.0). p>
Захист програм за допомогою
ключової дискети (TASM 3.0). p>
Блокування вінчестера (TASM
3.0). p>
3. 1
Інсталяційний модуль h2>
Модуль інсталяції буде
встановлювати програму на вінчестер в певний каталог, а також
здійснювати прив'язку програми до унікальних ідентифікаторів BIOS. p>
3. 2.
Оболонка програми h2>
При створенні інтерактивного
призначеного для користувача інтерфейсу (оболонки програми) використовувалися стандартні
об'єкти пакету Turbo Vision.
Горизонтальне дворівневе
меню, рядок стану, робоче поле, діалогові вікна, інформаційні повідомлення
та повідомлення про помилки, підтримка "миші" - ось деякі атрибути оболонки. p>
3. 2.
Криптографічний захист h2>
Перед описом алгоритму
слід ввести деякі терміни. p>
зашифрованими даних називається
процес перетворення відкритих даних в зашифровані за допомогою шифру, а
розшифрування даних - процес перетворення закритих даних у відкриті з
допомогою шифру. p>
Шифрування називається процес
зашифрування або розшифрування даних. p>
Дешифрування будемо називати
процес перетворення закритих даних у відкриті при невідомому ключі і,
можливо, невідомому алгоритмі. p>
Криптографічний захист - це
захист даних за допомогою криптографічного перетворення, під яким
розуміється перетворення даних шифруванням. p>
Рівняння зашифрування --
співвідношення, що описує процес утворення зашифрованих даних з відкритих
даних у результаті перетворень, заданих алгоритмом криптографічного
перетворення. p>
Рівняння розшифрування --
співвідношення, що описує процес утворення відкритих даних із зашифрованих
даних у результаті перетворень, заданих алгоритмом криптографічного
перетворення. p>
Під шифром розуміється
сукупність оборотних перетворень безлічі відкритих даних на безліч
зашифрованих даних, заданих алгоритмом криптографічного перетворення. p>
криптостійкості називається
характеристика шифру, що визначає його стійкість до дешифруванню. Зазвичай ця
характеристика визначається періодом часу, необхідним для дешифрування [6].
p>
Принцип зашифрування полягає
в генерації гами шифру за допомогою датчика псевдовипадкових чисел (ПСЧ) і
накладенням отриманої гами на відкриті дані за допомогою логічної операції "виключає АБО"
(тобто зворотнім чином). p>
Процес розшифрування даних
зводиться до повторної генерації гами шифру при відомому ключі і накладення
такої гами на зашифровані дані. Отриманий зашифрований текст є
досить важким для розкриття в тому випадку, коли гамма шІфраїм не містить
повторюваних бітових послідовностей. По суті справи гамма шифру повинна
змінюватися випадковим чином для кожного шіфруемого слова. Фактично якщо
період гами перевищує довжину всього зашифрованого тексту і невідома ніяка
частина вихідного тексту, то шифр можна розкрити тільки прямим перебором (підбором ключа). У цьому випадку
крипостійкість визначається розміром ключа. p>
Щоб отримати лінійні
послідовності елементів гами, використовуються датчики ПСЧ. До теперішнього
часу на основі теорії груп розроблено декілька типів таких датчиків. p>
У своїй програмі я використовував
так званий конгруентний генератор ПСЧ - найбільш доступний і ефективний.
Для цього класу генераторів ПСЧ можна зробити математично строге висновок
про те, якими властивостями володіють вихідні сигнали цих генераторів з точки
зору періодичності та випадковості. 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>
зашифрованих даних [4]. p>
Також при розробці алгоритму
шифрування використовувався алгоритм американського федерального стандарту на
шифрування даних - Data Encryption Standard (DES). p>
При зашифрованими вхідні дані
шифруються за формулою (2), далі обробляються блоками по 64 слова (word). Ця
обробка полягає в наступному:: 4 слова переставляються відповідно до
таблицею, що на рис. 2: p>
[ p>
8 p>
48 p>
16 p>
56 p>
24 p>
64 p>
32 p>
39 p>
7 p>
47 p>
15 p>
55 p>
23 p>
63 p>
31 p>
38 p>
6 p>
46 p>
14 p>
54 p>
22 p>
62 p>
30 p>
37 p>
5 p>
45 p>
13 p>
53 p>
21 p>
61 p>
29 p>
36 p>
4 p>
44 p>
12 p>
52 p>
20 p>
60 p>
28 p>
35 p>
3 p>
43 p>
11 p>
51 p>
19 p>
59 p>
27 p>
34 p>
2 p>
42 p>
10 p>
50 p>
18 p>
58 p>
26 p>
33 p>
1 p>
41 p>
9 p>
49 p>
17 p>
57 p>
25 p>
Рис. 2. Перестановка після
зашифрування. p>
Як видно з даної таблиці,
слово 40 вхідної послідовності стає 1-им, слово 8 - 2-м і т. д. p>
Процес розшифрування даних
є інверсний щодо процесу зашифрування. Тобто дані спочатку
переставляються відповідно до таблиці, що на рис. 3, а потім
перетворюються за формулою (2). Як легко бачити, ця перестановка є
зворотним по відношенню до початкової. p>
58 p>
50 p>
42 p>
34 p>
26 p>
18 p>
10 p>
2 p>
60 p>
52 p>
44 p>
36 p>
28 p>
20 p>
12 p>
4 p>
62 p>
54 p>
46 p>
38 p>
30 p>
22 p>
14 p>
6 p>
64 p>
56 p>
48 p>
40 p>
32 p>
24 p>
16 p>
8 p>
57 p>
49 p>
41 p>
33 p>
25 p>
17 p>
9 p>
1 p>
59 p>
51 p>
43 p>
35 p>
27 p>
19 p>
11 p>
3 p>
61 p>
53 p>
45 p>
37 p>
29 p>
21 p>
13 p>
5 p>
63 p>
55 p>
47 p>
39 p>
31 p>
23 p>
15 p>
7 p>
Рис. 3. Перестановка перед
розшифрування p>
4. Опис
програми h2>
При написанні програми
використовувалися наступні стандартні бібліотеки Borland Pascal 7.0 і Turbo
Vision 2.0: p>
Модуль Objects. Модуль Objects
містить основні визначення об'єктів Turbo Vision, включаючи базовий об'єкт
ієрархії Turbo Vision TObject, а також всі невидимі елементи Turbo Vision:
потоки, колекції і ресурси. p>
Модуль App. Модуль App
(надано у вихідних кодах) забезпечує елементи оболонки Turbo Vision. 4
дуже потужних об'єктних типу визначені в App, включаючи об'єкти TApplication і
TProgram, які служать в якості програм Turbo Vision і об'єкт панелі
екрана, що управляє більшістю елементів у віконних програмах. p>
Модуль Views. Модуль Views
містить основні компоненти видимих елементів і корисні компоненти більше
складних груп, таких як рамки вікон і смуги скролінгу. Більш складні видимі
елементи знаходяться в модулях Dialogs і TextView. p>
Модуль Dialogs. Модуль Dialogs
визначає більшість елементів найбільш часто використовуваних при створенні
діалогових вікон. Цей модуль включає самі діалогові вікна (які є
спеціалізованими вікнами) і різні елементи управління, такі як кнопки,
мітки, залежні і незалежні кнопки, рядки введення і списки історії. p>
Модуль Menus. Модуль Menus
забезпечує всі об'єкти та процедури для системи меню Turbo Vision, включаючи
що випадають меню і активні елементи рядка статусу. p>
Модуль Drivers. Модуль Drivers
містить всі спеціалізовані драйвери Turbo Vision, включаючи драйвери мишки і
клавіатури, підтримку екрану і систему обробки помилок з монітором подій для
програм, керованих подіями. p>
Модуль Memory. Модуль Memory
містить процедури монітора пам'яті Turbo Vision, які забезпечують функції
управління купою. p>
Модуль CRT. Модуль CRT містить
константи, змінні та підпрограми, призначені для роботи з консоллю. У
відміну від стандартного вводу-виводу, коли він здійснюється через
операційну систему, підпрограми цього модуля працюють з BIOS і безпосередньо
з відеопам'яттю. p>
Модуль DOS. Модуль DOS дозволяє
використовувати можливості операційної системи MS-DOS, не передбачені в
стандарті мови Паскаль, і містить типи, константи, змінні і для
реалізації цих додаткових можливостей. p>
Крім перерахованих вище
стандартних модулів був розроблений модуль SetConf, в якому знаходиться функція
прив'язки до програми BIOS комп'ютера, тобто захист від копіювання. p>
При запуску програми в першу
чергу перевіряється цілісність системи; тобто наявність усіх файлів системи,
чи відповідають їх імена та розміри таблиці. Далі відбувається ініціалізація:
перевіряються параметри BIOS. Якщо який-небудь файл системи був змінений або
параметри BIOS не відповідають встановленим в програмі, система працювати не
буде. Для входу в систему необхідно ввести пароль. Ці перевірки
здійснюються в конструкторі Init об'єкта TMyApp. Цей же об'єкт
ініціалізує меню (TMyApp.InitMenu), рядок стану
(TMyApp.InitStatusLine), робоче поле (TMyApp.InitDeskTop), встановлює спеціальну
кольорову палітру (TMyApp.GetPalette). Обробка подій (натискання клавіш
клавіатури, робота з "мишею") здійснюється в методі HandleEvent об'єкта
TMyApp. При виборі будь-якого пункту меню керування передається
відповідного об'єкта або викликається потрібна підпрограма. p>
У програмі використовуються
наступні процедури, функції та об'єкти: p>
Shifr (процедура). Зашифрування
файлів будь-якого типу. Спочатку отримуємо пароль від користувача, потім створюємо файл
зашифрованих даних (*. M & A). Файл зчитується блоками по 64 word,
кодується за допомогою генератора ПСЧ, потім переставляється відповідно до
таблицею, що на рис. 2. Отриману послідовність записуємо в
файл із розширенням *. M & A і т. д. p>
DeShifr (процедура).
Розшифрування файлів, зашифрованих процедурою Shifr. p>
Plus (процедура). Установка
захисту паролем або за ключовою дискеті на програми. p>
Block (процедура). Захист
вінчестера від запису. p>
Passwords (процедура). Зміна
пароля входу у програму. Спочатку запитує старий пароль, а потім два рази
новий. p>
TOptions (об'єкт, нащадок
об'єкта TDialog). Виводить діалогове вікно зміни налаштувань шифрування файлів:
видаляти чи не видаляти вихідний файл, висвічувати або не висвічувати індикатор
процесу шифрування. p>
CheckExec (процедура). Обробляє
помилки DOS. p>
5. Опис
застосування програми h2>
Програма призначена для
захисту даних від несанкціонованого доступу; в ній реалізовані наступні
функції: 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>
"Файли": p>
- "Вибрати" (вибір файлу для
роботи); p>
- "Змінити каталог" (зміна
поточного каталогу); p>
- "Вихід в DOS" (тимчасовий вихід
в DOS); p>
- "Завершення" (завершення
роботи з програмою); p>
"Захист": p>
- "Встановити пароль" (захист
EXE-та COM-файлів паролем); p>
- "Блокувати вінчестер"
(заборона запису будь-яких даних на вінчестер); p>
"Ключова дискета": p>
- "Додати перевірку по ключу"
(захист EXE-та COM-файлів за допомогою ключової дискети); p>
"Криптографія": p>
- "Зашифрувати файл даних"
(зашифрування вибраний файл); p>
- "Розшифрувати файл даних"
(розшифрування вибраний файл); p>
"Настройки": p>
- "Криптографія" (зміна
налаштувань криптографії); p>
- "Паролі" (зміна пароля
входу в систему); p>
"Про Програму" (інформація про
програмі). p>
У всіх випадках, крім
блокування вінчестера, спочатку необхідно вибрати файл для роботи. Для
встановлення захисту паролем або за ключовою дискеті вибирається EXE-або COM-файл,
для шифрування - файл будь-якого типу. p>
6.
Висновок h2>
У висновку проведемо аналіз
деяких систем захисту від копіювання. Слід зазначити, що цей аналіз не
є вичерпним, тому що ці системи постійно розвиваються, а також не
завжди можна отримати вичерпні алгоритмів - розробники не
прагнуть розкривати принципи їх побудови. p>
RANK - пакет захисту від НСД. Цей
пакет реалізує функцію контролю доступу до EXE-та COM-файлів. Слід зазначити,
що аналіз розмежування доступу до програм ставить під серйозний сумнів
можливість реалізації такої функції без додаткових заходів. p>
LATCH - комплекс програм захисту
ПЕОМ від НСД. Цей комплекс забезпечує безпеку даних, що зберігаються на
вінчестері. При несанкціонованому доступі відбувається "зависання" ПЕОМ або не
виявляється НЖМД. p>
Теза про неможливість
виявлення НЖМД викликає серйозні сумніви: наприклад, для контролерів SCSI
не вимагається визначення типу НЖМД в пам'яті CMOS, так як параметри вінчестера
можуть бути прочитані з допомогою команди контролера. p>
Додаток 1
h2>
Лістинг
програми h2>
Program Sub_Rosa; p>
Uses p>
App, Dialogs, Drivers, Menus, MsgBox, Objects, p>
Validate, Views, Memory, StdDlg, Editors, (Модулі Turbo Vision, далі - TV) p>
CRT, DOS, (Стандартні модулі) p>
SetConf; (Модуль функції
прив'язки до BIOS) p>
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) p>
cmAboutBox = 700; (Вікно "Про
Програмі ") p>
cmCode = 1001; (Кодувати файл)
p>
cmDeCode = 1002; (декодувати
файл) p>
cmSetPass = 1005; (Встановити
пароль на вхід в систему) p>
cmLockDisk = 1006; (Заборонити
доступ до вінчестера) p>
cmOptions = 1007; (Опції
криптографії) p>
cmKeyDisk = 1008; (Ключова
дискета) p>
cmPasswords = 1009; (Пароль на
виконуваний файл) p>
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) p>
constructor Init; p>
end; p>
(Об'єкт для роботи з текстом) p>
PMyStaticText = ^ TMyStaticText; p>
TMyStaticText = object (TStaticText) p>
function GetPalette: PPalette; virtual; (Перевизначення палітри) p>
end; p>
(Об'єкти для роботи з файлами і
каталогами) p>
PMyFDialog = ^ TMyFDialog; p>
TMyFDialog = object (TFileDialog) p>
function GetPalette: PPalette; virtual; p>
end; p>
PMyFileDialog = ^ TMyFileDialog; p>
TMyFileDialog = object (TMyFDialog) p>
constructor Init (AWildCard: tWildStr; const ATitle, p>
InputName: string; AOptions: Word; HistoryId: Byte); p>
end; p>
PDirDialog = ^ TDirDialog; p>
TDirDialog = object (TChDirDialog) p>
function GetPalette: PPalette; virtual; p>
end; p>
PMyChDirDialog = ^ TMyChDirDialog; p>
TMyChDirDialog = object (TDirDialog) p>
constructor Init (AOptions: Word; HistoryId: Word); p>
procedure SetUpDialog; p>
function Valid (Command: Word): Boolean; virtual; p>
end; p>
p>
(Установка основного фону
програми) p>
PMyBackground = ^ TMyBackground; p>
TMyBackground = object (TBackground) p>
Text: TTitleStr; p>
constructor Init (var Bounds: TRect; AText: TTitleStr); p>
procedure Draw; virtual; p>
end; p>
PMyDesktop = ^ TMyDesktop; p>
TMyDesktop = object (TDesktop) p>
procedure InitBackground; virtual; p>
end; p>
(Об'єкт "Про Програму")
p>
PAboutBox = ^ TAboutBox; p>
TAboutBox = object (TDialog) p>
constructor Init; p>
end; p>
(Основний об'єкт) p>
PMyApp = ^ TMyApp; p>
TMyApp = object (TApplication) p>
constructor Init; (ініціалізація) p>
destructor Done; virtual; (завершення роботи) p>
procedure HandleEvent (var Event: TEvent); virtual; (обробка подій) p>
procedure InitMenuBar; virtual; (ініціалізація меню) p>
procedure InitDeskTop; virtual; (ініціалізація робочого поля) p>
procedure InitStatusLine; virtual; (ініціалізація рядка стану) p>
procedure FileOpen (WildCard: PathStr); (вікно для роботи з файлами) p>
function GetPalette: PPalette; virtual; (зміна стандартної палітри) p>
end; p>
p>
(Русифицированная функція
формування повідомлення) p>
function MyMessageBoxRect (var R: TRect; p>
const Msg: string; Params: pointer; p>
AOptions: word): word; p>
const p>
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>
( 'Попередження', 'Помилка',
'Інформація', 'Підтвердження'); 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])); p>
with Dialog ^ do p>
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); p>
for I: = 0 to 3 do p>
if AOptions and ($ 0100 shl I) 0 then p>
Inc (X, R.B.X - R.A.X + 2); p>
X: = (Size.X - X) shr 1; p>
for I: = 0 to 3 do p>
if AOptions and ($ 0100 shl I) 0 then p>
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); p>
end; p>
SelectNext (False); p>
end; p>
if AOptions and mfInsertInApp = 0 then p>
MyMessageBoxRect: = DeskTop ^. ExecView (Dialog) p>
else p>
MyMessageBoxRect: = Application ^. ExecView (Dialog); p>
Dispose (Dialog, Done); p>
end; p>
(Русифицированная функція
формування повідомлення p>
стандартного розміру) p>
function MyMessageBox (const Msg: String; p>
Params: Pointer; AOptions: Word): Word; p>
var p>
R: TRect; p>
begin p>
R. Assign (0, 0, 40, 9); p>
MyMessageBox: = MyMessageBoxRect (R, Msg, Params, AOptions); p>
end; p>
function GetCurDir: DirStr; p>
var p>
CurDir: DirStr; p>
begin p>
GetDir (0, CurDir); p>
if Length (CurDir)> 3 then p>
begin p>
Inc (CurDir [0]); p>
CurDir [Length (CurDir)]: =''; p>
end; p>
GetCurDir: = CurDir; p>
end; p>
(Процедура ініціалізації вікна
роботи з файлами) p>
procedure TMyApp.FileOpen (WildCard: PathStr); p>
var p>
FileName: FNameStr; p>
begin p>
FileName: ='*.*'; p>
if ExecuteDialog (New (PMyFileDialog, Init ( p>
WildCard, 'Відкрити файл', 'Назва', fdOpenButton, p>
100)), @ FileName) cmCancel then FName: = FileName; p>
(відкрити файл, потім ...) p>
end; p>
{********************************************** ******************************}
p>
{*----------============= К Р И
П Т О Г Р А Ф І Я ================----------*} p>
{********************************************** ******************************}
p>
(Шифрування файлів) p>
procedure Shifr (InputFileName: string); p>
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; (дані про фото) p>
begin p>
if length (FName)> 3 then (Файл обраний?) P>
begin p>
(Отримати пароль) p>
Password: =''; p>
Password1: =''; p>
InputBox ( 'П А Р О Л Ь', '
Введіть пароль: ', Password, 255); p>
InputBox ( 'П А Р О Л Ь', 'Введіть
пароль ще раз: ', Password1, 255); p>
if (Password = Password1) and (length (Password) 0) then p>
begin p>
(Перетворити файл) p>
FindFirst (InputFileName, AnyFile, DirInfo); p>
if DOSError = 0 then p>
begin p>
if DirInfo.Size mod 2 = 1 then p>
begin p>
assign (TempFile, InputFileName); p>
reset (TempFile); p>
while not EOF (TempFile) do read (TempFile, tmp); p>
tmp: = 255; p>
write (TempFile, tmp); p>
close (TempFile); p>
end; p>
(Перетворити назва файлу) p>
Position: = 0; p>
assign (InpF, InputFileName); p>
reset (InpF); p>
for i: = length (InputFileName) downto 1 do p>
if InputFileName [i] = '.' then p>
begin p>
OutputFileName: = copy (InputFileName, 1, i) + 'M & A'; p>
break; p>
end; p>
assign (OutF, OutputFileName); p>
rewrite (OutF); p>
for i: = 0 to length (InputFileName) do p>
if InputFileName [length (InputFileName) - i] = '.' then p>
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) p>
else Exten: = copy (FName, length (FName) -2, 3) p>
end; p>
for i: = 1 to 3 do p>
begin p>
Temp: = ord (Exten [i]); p>
Write (OutF, Temp); p>
end; p>
(Почати шифрування) p>
k: = 1; p>
repeat p>
begin p>
(Вважати з вихідного файлу блок
розміром 64 * word) p>
for i: = 1 to 64 do p>
If EOF (InpF) then MasByte [i]: = 0 else Read (InpF, MasByte [i]); p>
Mas: = MasByte; p>
T [0]: = ord (Password [k]); p>
if k
for i: = 1 to 64 do p>
begin p>
(Отримати поточну позицію
процесу) p>
NowPos: = 100 * Position/DirInfo.Size; p>
inc (Position, 2); p>
if NowPos> 100 then NowPos: = 100; p>
Str (Round (NowPos): 3, Pos); p>
if OptInd = 0 then p>
begin p>
GoToXY (77, 1); p>
Write (Pos +'%'); p>
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; p>
end; p>
for i: = 1 to 8 do (Кінцева перестановка) p>
for j: = 1 to 8 do p>
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] p>
end; p>
for i: = 1 to 64 do Write (OutF, MasEnd [i]); p>
end; p>
until eof (InpF); p>
MyMessageBox ( 'Файл' + InputFileName + 'зашифровано за назвою' + p>
OutputFileName, nil, mfInformation + mfOkButton); p>
Close (InpF); p>
if OptFile = 1 then Erase (InpF); p>
Close (OutF); p>
end p>
else MyMessageBox ( 'Файл' + InputFileName + 'не
існує! ', p>
nil, mfInformation + mfOkButton); p>
end p>
else MyMessageBox ( 'Помилка введення пароля !!!', nil, p>
mfError + mfOkButton); p>
end p>
else MyMessageBox ( 'Файл не вибрано !!!', nil,
mfError + mfOkButton); p>
end; p>
p>
procedure DeShifr (InputFileName: String); p>
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 p>
if (length (InputFileName)> 3) and p>
(copy (InputFileName, length (InputFileName) -2, 3) = 'M & A') then p>
begin p>
Password: =''; p>
Password1: =''; p>
InputBox ( 'П А Р О Л Ь', 'Введіть пароль:', Password, 255); p>
InputBox ( 'П А Р О Л Ь', 'Введіть
пароль ще раз: ', Password1, 255); p>
if (Password = Password1) and (length (Password) 0) then p>
begin p>
FindFirst (InputFileName, AnyFile, DirInfo); p>
if DOSError = 0 then p>
begin p>
Assign (InpF, InputFileName); p>
Reset (InpF); p>
Position: = 0; p>
Exten: =''; p>
for i: = 1 to 3 do p>
begin p>
Read (InpF, Temp); p>
Exten: = Exten + chr (Temp); p>
end; p>
for i: = length (InputFileName) downto 1 do p>
if InputFileName [i] = '.' then p>
begin p>
OutputFileName: = copy (InputFileName, 1, i) + Exten; p>
break; p>
end; p>
Assign (OutF, OutputFileName); p>
Rewrite (OutF); p>
for