Защита інформацією системах дистанційного навчання з монопольним доступом
Наведемо визначення деяких основних термінів, які у криптографії. Алфавіт — кінцеве безліч що використовуються кодування інформації знаків. Текст — упорядкований набір з елементів алфавіту. Для прикладу алфавітів, які у сучасних ІВ можна навести такі: 1. алфавіт Z33 — 32 літери російського алфавіту (виключаючи «є «) і прогалину; 2. алфавіт Z256 — символи, що входять до стандартні коди ASCII і… Читати ще >
Защита інформацією системах дистанційного навчання з монопольним доступом (реферат, курсова, диплом, контрольна)
АННОТАЦИЯ.
Ця дисертація присвячена питанням побудови систем захисту інформації для програмних пакетів, які у монопольному доступі. У ролі об'єкта на дослідження застосування розроблених методів захисту служать системи дистанційного навчання дітей і контролю знаний.
Розглянуто різні методи застосовувані до створення різноманітних систем захисту, розглянута можливість їх застосування для систем дистанційного навчання. Проаналізовані ключові місця, потребують захисту і запропоновані варіанти її здійснення, відзначені їх переваги та недоліки. Запропоновано нових шляхів реалізації захисту для систем використовуваних у монопольній режимі. Розроблено набір програмних модулів призначений на інтеграцію в защищаемый програмний комплекс і який реалізує підсистему захисту. Проведено апробація створеної підсистеми захисту одному з пакетів дистанційного тестування. Наведено керівництва та програмна документація по інтеграції та використання створеної підсистеми захисту для різних програмних комплексов.
Дисертація містить 168 сторінок, 12 ілюстрацій, 1 таблицу.
|ВВЕДЕНИЕ… |7 | |ГЛАВА 1. СТВОРЕННЯ ЗАХИСТУ ДЛЯ ПРОГРАМНИХ ПАКЕТІВ, НА ПРИКЛАДІ | | |СИСТЕМИ ДИСТАНЦІЙНОГО НАВЧАННЯ… | | |1.1. Питання захисту, які стоять перед автоматизированными|12 | |системами дистанційного навчання… | | |1.2. Огляд публікацій з цієї проблеми… |12 | |1.3. Завдання поставлені перед створюваної системою защиты…|14 | | |27 | |1.4. Вибір класу вимог до системи захисту… |30 | |1.5. Висновки… |33 | |ГЛАВА 2. ЗАПРОПОНОВАНІ МЕТОДИ СТВОРЕННЯ ИНТЕГРИРУЕМОЙ СИСТЕМИ | | |ЗАХИСТУ ІНФОРМАЦІЇ … | | |2.1. Вибір об'єктів за захистом… |34 | |2.2. Шифрування даних… |34 | |2.2.1. Деякі загальні відомості… |38 | |2.2.2. Асиметричні криптосистемы… |38 | |2.2.2.1. Криптосистема Эль-Гамаля… |40 | |2.2.2.2. Криптосистема Ривеста-Шамира-Эйделмана… |41 | |2.2.2.3. Криптосистема, джерело якої в еліптичних |42 | |кривих… | | |2.2.3. Адаптований метод асиметричного шифрування… |43 | |2.3. Переваги застосування поліморфних алгоритмів |43 | |шифрування… | | |2.4. Функціональність системи захисту… |45 | |ГЛАВА 3. РЕАЛІЗАЦІЯ СИСТЕМИ ЗАХИСТУ… |47 | |3.1. Вибір коштів розробки та організації системи… |48 | |3.1.1. Коротка характеристика мови програмування З++… |48 | |3.1.2. Коротка характеристика середовища Visual З++… |48 | |3.1.3. Коротка характеристика бібліотеки ATL… |49 | |3.1.4. Коротка характеристика бібліотеки ZLIB… |50 | |3.2. Поліморфний генератор алгоритмів шифрування… |51 | |3.2.1. Загальні принципи роботи поліморфних алгоритмів шифрування і |52 | |расшифрования… | | |3.2.2. Віртуальне машина до виконання поліморфних |52 | |алгоритмів… | | |3.2.3. Генератор полиморфного коду… |56 | |3.2.3.1. Блокова структура полиморфного коду… |59 | |3.2.3.2. Алгоритм генерації полиморфного коду… |59 | |3.2.3.3. Таблиці блоків для генерації полиморфного |62 | |коду… | | |3.2.4. Унікальність генерованого полиморфного алгоритму і |63 | |складність його аналізу… | | |3.3. Особливості реалізації модуля захисту… |65 | |3.4. Захист виконуваних файлів… |68 | |ГЛАВА 4. ЗАСТОСУВАННЯ СИСТЕМИ ЗАХИСТУ… |69 | |4.1. Склад бібліотеки Uniprot… |70 | |4.2. Керівництво програміста з використання модуля |70 | |Uniprot.dll… | | |4.3. Керівництво програміста з використання програми |71 | |ProtectEXE.exe… | | |4.4. Опис використання системи захисту на прикладах… |86 | |4.4.1. Підключення модуля захисту до програми мовою Visual |88 | |З++… | | |4.4.2. Підключення модуля захисту до програми мовою Visual |88 | |Basic… | | |4.4.3. Приклад використання модуля захисту у програмі мовою |89 | |Visual Basic… | | |4.4.4. Приклад використання програми ProtectEXE. exe… |90 | |4.5. Загальні рекомендації по інтеграції системи захисту… |98 | |ОСНОВНІ ВИСНОВКИ І РЕЗУЛЬТАТИ… |99 | |СПИСОК ВИКОРИСТАНИХ ИСТОЧНИКОВ … |101 | |ДОДАТОК. ВИХІДНІ ТЕКСТИ БІБЛІОТЕКИ |102 | |UNIPROT… | | | |105 | | | | | | | | | |.
Розвиток обчислювальної техніки відкрило перед людиною величезне кількість нових можливостей. Обчислювальна техніка знайшла застосування практично в усіх галузях життєдіяльності людини. Але, як і будь-яка інший предмет, який нас оточує, обчислювальну техніку можна використовувати як в інтересах, і на шкоду. Завжди є категорія людей, мають корисливі інтереси, і готові їхнього досягнення вдатися до не все рахуючись ні з його інтересами інших, ні на закони. Так було в останнім часом багато проблем розробникам програмного забезпечення доставляє незаконне копіювання і розповсюдження програм (зване програмне піратство). До цих негараздів комп’ютерної індустрії також можна віднести постійно совершенствующиеся програмні віруси, яких часом лихоманить увесь світ. Постійні спроби зламування хакерами різних мереж, і систем змушують створювати дедалі потужніші засоби захисту. Це лише частина усе те, що йде на сьогодні шкода розробникам програмного забезпечення та його користувачам. На боротьбу з шкідливими програмами (вірусами) витрачаються величезні матеріальні ресурси. Але спочатку значних і радикальних перемог цій ниві битви що немає. Це у принципі, не дивовижно, оскільки комп’ютерна індустрія перебуває в етапі становлення. З іншого боку, цю частину ринку дає змогу отримувати надприбутки. Прикладом може служити компанія Microsoft, яка кілька років з маленької групи розробників величезну корпорацію, получающую величезні доходи. Отже, є надприбутки, тобто й бажаючі незаконним шляхом одержати їх дуже частина. Отже, захист інформації зараз є однією з найбільш важливих проблем розвитку інформаційних технологій. У зв’язку з сказаним раніше, питання захисту і було обрані мною як тематики дисертаційної работы.
Природно, що проблеми, пов’язані із захистом інформації, багатогранні. І у своїй роботі хочу торкнутися і спробувати і розв’язати лише невелику частина їх, обравши як напрями своєї роботи захист систем, які у монопольному режимі, поза довірчій середовища. Об'єктами дослідження бути системи дистанційного навчання. Ці системи обрані тому, що є найвдалішим прикладом програм, що працюють у режимі монопольного доступу. Якраз у такому режимі працює більшість систем дистанційного навчання. Під монопольним доступом розуміється можливість користувача здійснювати з програмою будь-які дії, без можливості контролем із боку. Для цих систем характерні такі завдання інформаційну безпеку, як захист від несанкціонованого копіювання, від модифікації програмного коду у сфері користувача, приховування від користувача частини інформації та низку інших. Чимало з цих завдань дуже актуальні для систем дистанційного навчання дітей і тестирования.
Нині більшість спеціалістів у галузі освіти покладають сподівання сучасні персональні комп’ютери, розраховуючи зі своїми допомогою істотно підвищити якість навчання у масових масштабах, особливо в організації самостійної праці та зовнішньому контролі [1, 2, 3]. Але у здійсненні це завдання породжує безліч проблем. Один із них у тому, що у розробках автоматизованих системах дистанційного навчання (АСДО) немає жодної системи, ніякого що об'єднує початку, унаслідок чого всі АСДО є унікальними, розрізненими, не сполученими друг з одним ні з яким параметрами. Звідси випливає дублювання розробок електронних підручників, їх висока ціна при не завжди гарантованому ролі, труднощі організації зовнішнього контролю, а також неясність питань, які стосуються дидактичній ефективності комп’ютерного навчання взагалі, слабка інтегрованість традиційних підручників із комп’ютерними і ще. Всі ці труднощі, із якими випадає зіштовхуватися розробникам будь-яких комп’ютерних навчальних систем, становлять «вузьке» місце у комп’ютеризації навчання. Не усунувши його, важко очікувати успішне виконання програми, поданої у проекті [4], де заплановано «створення умов та ефективне використання єдиної освітньої середовища на комп’ютерної основі» й перерахувало завдання, є першочерговими у виконанні програми. Наприклад, одне з завдань сформульована так: «Створення, поширення та запровадження у навчальний процес сучасних електронних навчальних матеріалів, їх інтеграція з традиційними навчальними посібниками, і навіть розробка коштів підтримки і супроводження. Забезпечення якості, стандартизація і сертифікація коштів інформаційних технологій навчального призначення» [4]. Очевидно, що ефективність виконання програми безпосередньо залежить від цього, наскільки успішно будуть подолані трудности.
Дуже важлива проблема у сфері організації самостійної праці та, особливо, комп’ютерного зовнішнього контролю є слабка захищеність освітнього програмного забезпечення від «зламування» із єдиною метою доступу до правильним відповідям і підробки результатів контролю [5, 6, 7, 8, 9, 10, 11, 12]. Проблема випливає речей, що здебільшого сучасні контролюючі системи будуються на антропоморфному принципі, суті якого стосовно автоматизації навчання залежить від використанні пам’яті комп’ютера для зберігання еталонних відповідей разом із завданнями. Зазвичай, вони шифруються, але, як свідчить практика, їх можна розшифрувати. Проблема особливо гостро постала з приходом у Росії дистанційних технологій навчання, де зовнішній контроль знань ввозяться основному комп’ютером за відсутності преподавателя.
Існує й проблема захисту який навчає програмного забезпечення від модифікації його коду, із єдиною метою зміни алгоритму оцінювання результатів тестування чи іншого коду. Слабка захищеність від «зламування» будь-яких антропоморфних контролюючих систем створює труднощі під час проведення контролю у системах дистанційної освіти. Зовнішній контроль на відстані виключений, адже ніхто неспроможна гарантувати, що контролюючі програми були «зламано» у виконання контрольної роботи. У зв’язку з цим, іспит можливий тільки з допомогою виїзду викладача доречно зустрічі з «дистанционщиками». Та й у цьому випадку об'єктивність не гарантується, оскільки наявністю відповідей в контролюючою програмі, викладач може лише користуватися інструкціями з проведення іспиту, а й виявляти власну ініціативу, на власний розсуд розпоряджаючись наявною в нього інформацією про еталонних відповідях. З іншого боку, через виїздів викладачів падає якість навчання студентів очній системи освіти. Останнім часом з’явилася нова форма іспиту, яке називають «розподіленої» чи «разнесенной» формою. Такий підхід запозичено студентам заочній форми навчання. У цьому випадку студентам, які навчаються по дистанційної технології, висилають лише екзаменаційні питання (відкритими). Студенти ними відповідають і висилають результати до центру дистанційного навчання. Там вони перевіряються, і студентам повідомляються результати. Така форма забезпечує достатню об'єктивність іспиту, але з популярна, оскільки студенти хочуть знати результати відразу після іспиту, а чи не через за кілька днів, оскільки, у разі незадовільною оцінки, вони зможуть перескласти іспит не відразу, а лише деяке (досить тривале) время.
Отже, дослідження методів створення захисту програм дистанційного навчання мають великий практичного значення. Однак у з тим, що дистанційна освіта перебуває на стадії становлення з нашого країні, проблеми захисту мало опрацьовані. У цьому роботі будуть досліджені методи лікування й запропоновано кілька підходів до створення интегрируемой системи захисту дистанційних освітніх систем.
Метою справжньої роботи є підставою аналіз методів захисту без використання допоміжних апаратних засобів і створення интегрируемого пакета програмних модулів за захистом систем які у монопольному режимі поза довіреною обчислювальної среды.
Завдання исследования.
Досягнення поставленої мети перетвориться на дисертаційної роботи прикладі АСДО сформульованими вирішені такі: 1) Виділено основні ключові об'єкти, підлягають захисту. 2) Розроблено засоби захисту АСДО поза довіреною обчислювальної середовища від масових спроб модифікації коду. 3) Розроблено засоби захисту даних для систем навчання дітей і контролю за навчанням поза довіреною обчислювальної середовища. 4) Проведено аналіз стану і запропоновані можливі засоби застосування розроблених методів. 5) За підсумками даних методів розроблений набір програмних модулів захисту, виділені на інтегрування в системи дистанційного обучения.
Актуальність роботи зумовлена тим, що з недостатнім розвитком комп’ютерних технологій у освітньому процесі виникла потреба у створенні ефективних систем навчання, самоконтролю, зовнішнього контролю та захисту информации.
Наукова новизна праці полягає у наступному: 1) Запропоновано метод захисту програм шляхом шифрування виконуваних файлів, заснований на використанні безлічі унікальних поліморфних алгоритмів. 2) Запропоновано метод організації захисту і його обміну із застосуванням ідеології відкритого ключа, заснованої на поліморфних алгоритми. 3) Відмова від використання апаратних коштів. 4) Створення єдиного набору интегрируемых програмних модулів на інтеграцію у різні системи дистанційного обучения.
Методи дослідження базуються на аналізі робіт, присвячений питанням захисту, і роботах, що з захистом навчальних програмних комплексов.
Практична цінність: 1. Розроблено ефективні засоби захисту систем дистанційного навчання поза довіреною обчислювальної середовища. 2. Базуючись на розробленому методі поліморфних алгоритми шифрування, було запропоновано механізми, що перешкоджають створенню універсальних коштів обходу системи захисту. 3. Розроблені методи не потребують апаратних виборі засобів задля своєї реалізації. 4. Можливість легкої інтеграції створеної системи захисту у вже існуючі програмні комплекси дистанційного обучения.
Впровадження розробки: Розроблена система захисту була інтегрована в програмний комплекс Aquarius Education 4.0, створений спеціалісти кафедри АТМ під керівництвом Юхименко Олександра Сергієнка і являє собою систему автоматизованого тестирования.
Апробація роботи. Усі внутрішні питання, які стосуються темі дисертації, обговорювалися в різних конференціях: 1. Побудова захисту у систему контролю і передачі знань. Друкований Збірник доповідей міжнародної науковій конференції ММТТ-Дон. РГХАСМ, Ростов-на;
Дону, 2002. 2 стор. 2. Система інтеграції захисту для пакетів автономного дистанційного навчання. Друкований Збірник доповідей міжнародної науковій конференції ММТТ-Дон. РГХАСМ, Ростов-на-Дону, 2003. 2 стр.
Дисертація складається з запровадження, чотирьох глав, ув’язнення й приложения.
У першій главі розглянуті труднощі розробки автоматизованих систем дистанційного навчання з погляду його захисту. Проведено огляд публікацій з даної тематиці, виділено завдання, покладені на розроблювану систему защиты.
У другій главі запропоновані методи реалізації вимог, пред’явлених системі захисту. Обрані об'єкти захисту, розглянуті асиметричні методи шифрування і запропонований адаптований метод для розроблюваної системы.
У третій главі увагу приділено безпосередньо реалізації системи захисту. Обрані кошти розробки, розглянутий процес створення компонентів системи защиты.
Четверта глава описує можливості розробленої системи та містить керівництво програміста з її використанню, ряд прикладів. Також дано загальні рекомендації по інтеграції розробленої системы.
Наприкінці урочисто підбито підсумки виконану работы.
У додатку наведено вихідний текст модуля защиты.
ГЛАВА 1. СТВОРЕННЯ ЗАХИСТУ ДЛЯ ПРОГРАМНИХ ПАКЕТІВ, НА.
ПРИКЛАДІ СИСТЕМИ ДИСТАНЦІЙНОГО НАВЧАННЯ 1.1. Питання захисту, які стоять перед автоматизованими системами дистанційного обучения.
Дедалі більше увагу приділяється новому напрямку освіти — дистанційному навчанню. Дистанційне освіти з одного боку відкриває нові можливості, з іншого ставить нові завдання. Однією із завдань є будування захисту у систему контролю і передачі знаний.
Прикладом може бути контролю над достовірністю результатів комп’ютерного тестування. Сюди, належить проблема побудови системи розмежування доступу у різних програмних комплексах, призначених для автоматизації процесу навчання. Розглянемо таку поширену на цей час ситуацію. На кафедрі створено систему, куди входять віртуального лектора і підсистему тестування. Що стосується використання системи в аудиторіях кафедри, жодних ускладнень немає, оскільки студенти перебувають під медичним наглядом викладацького складу. Але орієнтація освіти на дистанційне навчання перебуває вносить своїх коректив. Виникає потреба у можливості використання цієї програмного забезпечення студентом у своїй локальної машині. Таке завдання може бути розв’язана (і вирішується досить добре) із застосуванням мережевих технологій. У такій системі студент заходить на сайт, де він може займатися навчанням чи проходити різні види тестування. Але система незручною тим, що вимагає постійної підключення до неї. Трапляються такі негативні боку: а) чималі фінансових витратах; б) необхідність, щоб кожен студент мав можливість перебувати у мережі; в) низька пропускну здатність, якщо до уваги якість вітчизняних телефонних ліній; р) вимушене обмеження навчального матеріалу, викликаного його объемом.
Наприклад, доведеться обмежитися картинкою, де зовсім знадобилася показати видеоролик.
Звідси виникає потреба зробити це систему автономної з можливістю перекидання в носіях, як-от CD-ROM.
Природно, як постає проблема захисту даних, які є для проведення тестування. Якщо навчальну інформацію можна зберігати вільно, то доступом до інформації, настановленим проведення тестування, повинен бути закритий для студента. Ще одне запитання у тому, як організувати збирати інформацію про проведеному тестуванні - проблема достовірності отриманих результатів. Припустимо, що студент приносить результат (звіт, сгенерированный програмою) свого тестування на дискеті як файла. Отже, вона повинна матимуть можливість його модифікувати. Та й як бути впевненим, що не скористався системою, спеціально зміненої для фальсифікації результатів тестирования.
Сформулюємо проблеми, що з захистом, й інших питань, які стосуються системам дистанційного обучения.
1. Відсутність можливості достовірно визначити, пройшов чи студент тестування самостійно. З цією завдання він міг використовувати іншу людину (наприклад, більш підготовленого студента).
2. Невідомо, скільки вже разів студент спробував пройти тестування. Студент має можливість встановлювати систему дистанційного навчання у кількох примірниках і/або копіювати її, тим самим зберігаючи її поточний стан. Так студент має можливість необмеженого кількості спроб проходження тестування і можливість вибрати їх спробу з найкращим результатом.
3. Існує можливість створення універсального редактора файлів результатів тестування. Він можна використовувати студентом для коригування оцінок виставлених програмою тестирования.
4. Існує загроза створення універсальної програми перегляду файлів з завданнями і відповідями. Тим самим було, студент має можливість довідатися вірні запитання в тестах.
5. Можливість модифікації програмного коду системи тестування, з метою зміни алгоритму виставляння оценок.
6. Необхідна легка адаптація вже існуючих систем дистанційного навчання дітей і тестування. Це першу чергу пов’язане про те, що до цих системам вже є бази з лекціями, тестовими завданнями й дуже далее.
1.2. Огляд публікацій з даної проблеме.
У минулому розділі було сформульовано низку основних проблем систем дистанційного навчання дітей і контролю, з погляду захисту. Ці чи такі проблеми виникають в усіх, хто створює систем дистанційного навчанням. Питання дистанційного навчання зараз стає дедалі популярним. І практично всі вузи зайняті створенням своїх систем дистанційного навчання. У інтернеті є дуже багато інформації за цими розробкам. Цікаво, що, говорячи про перевагах тій чи іншій системи, зазвичай якось замовчується у тому, як система захищена. Звісно, деякі системи під час проведення тестування розуміють видеоконференцию. Але це дуже дорогий метод і, природно, він навряд у незабаром отримає распространение.
Як підходу до розв’язання деяких проблем, можна навести приклад системи, описаної у тижневику «Закон. Фінанси. Податки. «у статті «Компьютер-экзаменатор «[13]:
" Вчені СГУ розробили нову тест-систему. Для контролю за навчанням студентів у Сучасному гуманітарному університеті застосовується оригінальна система тестування, яка використовує друковані материалы.
На підвищення якості процесу впроваджено систему з застосуванням самого персонального комп’ютера викладача і індивідуальних електронних приладів тестування. За її використанні повністю виключається рутинна ручна перевірка і проставление оцінок методистом.
Система забезпечує індивідуальне (а чи не групове) тестування будь-який зручний студентові час і будь-якого предмета. У студентів немає можливість доступу до друкованих ключам тестів та оцінки за тест. З іншого боку, абсолютно виключається несанкціоноване копіювання і подальше використання ПО, обслуговуючого систему тестирования.
До складу системи входять особисті ідентифікатори у студентів і викладачів, ПК, прилад тестування і пристрій виводу-введення-висновку информации.
Як особистих ідентифікаторів використовуються безконтактні пластикові електронні карти, що виробляють унікальний код. Прилад тестування, який лунає кожному студентові, забезпечує контроль часу, і навіть приймання і передачу даних від комп’ютера та назад по оптичного каналу. Пристрій вводу-виводу інформацією прилад тестування, подключаемое до ПК, перетворює дані, які від комп’ютера, в оптичні сигнали, передані в прилад тестування. Одне пристрій вводу-виводу інформації може підтримувати роботу будь-якого числа приладів тестирования.
Робота електронної системи іде за рахунок наступному сценарієм. Системі пред’являється особистий ідентифікатор (пластикова картка з кодом) методиста, що проводитиме тестування. Далі системі пред’являється ЛІ студента. Система виробляє пошук базі даних та виведення на екран монітора даних про студента (ФИО, номер контракту і номер групи). Методист вибирає тест, який відповідатиме студент. Дані можна запровадити і з клавіатури, і провівши сканером по штрих-коду, нанесеному за кожен варіант тесту. Студентові видаються прилад тестування листок з питаннями. Час, виділений для відповіді тест, контролюється в приладі тестування й у комп’ютері. Студент, натиснувши клавішу на приладі тестування, бачить що залишилося в нього час. За 5 хв. остаточно тестування прилад попереджає студента звуковим і текстовим повідомленнями. Після закінчення тестування студент повертає прилад методистові. Виробляється активація устрою виводу-введення-висновку і достойний прийом зібраних даних із приладу в компьютер.
Далі система порівнює відповіді студенти з еталонними й висуває оцінку, що потім заносить в підсумкову зачетную відомість. Кожну оцінку система підписує своєї електронної підписом. Електронна підпис в наступному автоматично перевіряється, і будь-яка несанкціоноване зміна даних в залікової відомості буде исключено.
Аналогів такої системи нині немає. СГУ готовий всім заинтересовавшимся даної унікальної системою надати всебічне сприяння і консультації. «.
Застосувати подібні методи практично важко. Причина очевидна — це надто висока ціна побудови системи з допомогою таких апаратних коштів, та й не зовсім то вирішення питань дистанційного тестирования.
Під розв’язання багатьох з вище перерахованих проблем може лежати у будівництві системи з принципу клиент/сервер, з допомогою мереж Intranet/Internet. Але суперечить можливості використання таких програм, у локальному режимі. До того ж суперечить пункту, що стосується адаптації вже існуючих систем. Отже побудова як і моделі розглядатися не будет.
У деяких доповідях цілком чесно відзначається, що є безліч невирішених проблем. Прикладом може бути тези доповіді О. С. Белокрылова в «Використання курсу дистанційного навчання на економічному факультеті РГУ «[14]. Вони зазначено, що проведена робота дає різні позитивні результати застосування інтернет-технології. Однак далі відзначається, що новационный характер продукту обумовлює наявність деяких недоробок і негативних сторін програми. Однією є: «слабка захист (студенти може використати чужій пароль і виконувати завдання під чужим ім'ям); «.
Про те каже З. У. Альошин, розглядаючи принципи побудови оболонки інформаційно-освітньої середовища «Chopin», має структуру, показану малюнку 1 [15].
[pic].
Малюнок 1. Структура оболонки «Chopin» Він зазначає: «Готові тести зберігаються у файловою системі даних (ФСД) як текстових файлів Windows з розширенням «tst». Такий формат дуже зручний при практичної експлуатації системи. Система є прозорою, логіка її роботи то, можливо проконтролирована впритул до нижнього рівня. Разом про те, така відкритість створює низку негараздів у забезпечення її безпеки. Система інформаційної безпеку полягає в розмежування прав користувачів. «.
У статті «Проблема зворотний зв’язок при дистанційному навчанні. «О. Г. Оганесян зазначає, що систему дистанційної освіти повинен мати чималі кошти захисту від несанкціонованого втручання та підміни реальних студентів їх дублерами [16]. Далі говориться, що проблему ідентифікації студентів, здається, не має рішення. Справді, як зазначалось, паролі й інші атрибути особистої ідентифікації проблеми не вирішують, т.к. студент зацікавлений замінити себе дублером і має необмежені можливості такий підміни. Технічне рішення на її виявлення придумати поки що не. І це організаційні, схоже, є. Вихід можливо, у створенні поступового контролю за навчанням із єдиною метою формування труднощів для підміни який струменіє тестування дублером. Знайти дублера однією іспит набагато простіше, ніж період обучения.
У деяких роботах відзначається, що застосовані системи захисту може мати негативні сторони. У тезах доповідей Занимонец Ю. М. зазначає: «іноді надмірні захисту створювали проблеми при інсталяції і експлуатації програмного забезпечення «[17]. Отже, важливим моментом є хороша продуманість системи захисту. Інакше вони можуть скоріш нашкодити, ніж бути корисними. На цьому знову можна робити висновків, питання захисту (у сфері дистанційної освіти) погано проработаны.
Деякі вчені розглядають захист у дуже обмеженому аспекті. М. М. Сенцов і В. С. Солдаткин, описуючи програмний комплекс тестового контролю за навчанням «Тест», говорять про наступному [18]:
" Кожна частина програмного комплексу функціонує самостійно. У клієнтської частини немає можливості доступу до бази даних на її зміни — може бути з адміністраторської частини при знанні пароля доступу до бази даних. Робота клієнтської частини необхідна заповнена база даних тестовими завданнями. Це має бути наперед зроблено з частини адміністратора. «.
Отже, існує захист від модифікації, але немає захисту від перегляду. Також, цілком очевидний, відсутня захист звітів про результатах тестирования.
У деяких статтях цю проблему не розглядається. Дуже цікава система, описана у статті «Автоматизована система розробки електронних підручників. «А. А. Мицель, очевидно взагалі захищена [19]. Усі це означає тому, що проблеми дуже важливі, але у цій галузі мало наработок.
Аналогічно, Д. А. Жолобов, говорячи про створенні генератора мультимедійних підручників, зазначає, що ваша програма повинна також мати можливість захисту даних підручника від несанкціонованого доступу [20]. Але нічого говориться у тому, як реалізована захист у цієї системе.
Р.И.Вергазов і П. А. Гудков, описуючи систему автоматизованого дистанційного тестування, відзначають, що у мережному варіанті можна побудувати дуже надійну систему [21]. Існує варіант до роботи системи та в локальному режимі. Не згадується, чи існують захист при використанні цією системою у цьому режиме.
Тепер звернімося до до списку проблем, наведеному у минулому розділі. Проведемо огляд досліджень з даним питанням у різних работах.
1. Відсутність можливості визначити, пройшов чи студент тестування самостійно. З цією завдання він міг використовувати іншу людину (наприклад, більш підготовленого студента).
Це, мабуть, найскладніше завдання. Неможливо завадити студентові піти до друга і бажання попросити виконати певну лабораторну роботу, пройти тестування. Без застосування спеціальної апаратури це практично нереально. Але, природно, застосування апаратних коштів неможливо з хоча би своєї ціни. Отже, такий її варіант розглядатися нічого очікувати. По крайнього заходу не реальний так цьому етапі стану освіти в стране.
Проблема те, що студент йтися до, а чи не виконувати лабораторну роботу вдома, практично проблема установки кількох копій комплексу «віртуальна лабораторія ». Отже, ця проблема буде обговорена у пункті № 2.
Ось що пише П. С. Ложников у справі розпізнавання користувачів в системах дистанційної освіти [22]:
" Сьогодні гостра якість знань, отримані з використанням технології дистанційної освіти. При очній формі навчання більшість викладачів ведуть обліку відвідуваності студентів. З переходом на до дистанційної освіти (ДО) аудиторія учнів збільшилася у кілька разів, й уміти враховувати відвідуваність студентів проблематично. ДО пред’являє певних вимог до психологічним особливостям обучаемого. По-перше, в нього має бути висока стійка мотивація до отриманню освіти. По-друге, студент досить чітко повинен представляти бажаного результату навчання. І, по-третє, він має розуміти, що відповідає за знання, отримані з допомогою СРО. Говорити про тому, що сьогодні тривають на дистанційну форму навчання котрі мають такими психологічними даними не можна. Більшість людей Росії навчається за сам факт отримання диплому. І в багатьох твердження у тому, що ДО забезпечує людині вільний графік навчання, асоціюється з вільним відвіданням серверу СРО. У зв’язку з цим, цілком імовірно, що з тестуванні студент може посадити за комп’ютер замість себе обізнаного у предметі людини. Навігаційна система ДО повинна перевіряти, перебуває через віддаленим комп’ютером той самий обучаемый, за якого він видає, тобто, зробити розпізнавання пользователя.
Як сьогодні вирішують це проблема? Кожен що надходить на навчання у СРО людина має своє вхідний ім'я і пароль для входу на сервер з навчальними матеріалами. При зверненні обучаемого до сервера про неї можна збирати інформацію, корисну для преподавателя:
. перелік сторінок, відвіданих користувачем за сеанс работы;
. час, проведене з кожної странице;
. активовані гіперпосилання на даної странице;
. перелік файлів, хто був скопійовані користувачем з навчального сервера;
. час тестирования;
. та інших. За необхідності адміністратор серверу СРО можна з допомогою що збираються інформації відновити будь-який сценарій сеансу роботи будь-якого обучаемого.
Та все зібрана в такий спосіб інформація є непрямої. Тобто, тоді як систему увійшла людина по вхідному імені Ілліча та паролю свого колеги з метою відзначитися і брати участь у тестуванні, його неможливо викрити. Інакше кажучи, потрібні прямим доказам те, що даний сеанс навчання провів справді той користувач, з ім'ям порівняно вхідний ім'я і пароль. «.
Далі у статті йдеться про розпізнаванні користувачів із застосуванням додаткового апаратного забезпечення. Пропонується вживати такі біометричні характеристики людини, як дактилограма, геометрія руки, райдужна оболонка очі, сітківка очі, голос, геометрія особи, що нам технічно нескладне интереса.
Цікавіший є напрям, позначене у статті як розпізнавання користувачів з допомогою додаткового програмного забезпечення. Розвиток дослідження цього питання ми можемо знайти у посібнику «Як інформацію «(глава «Ідентифікація користувача: СВІЙ — ЧУЖИЙ? ») [23]. Ось основні ідеї, излагаемые у тому руководстве:
" Почерк унікальний, знають все. Але деякі здогадуються, що у спілкуванні з комп’ютером індивідуальність користувача виявляється: швидкість, звичка використовувати основну чи додаткову частина клавіатури, характер «здвоєних» і «строенных» натискань клавіш, улюблені прийоми управління комп’ютером…, з допомогою яких можна назвати конкретної людини серед усіх які працювали даної машині. І нічого дивного, — це на кшталт здібності меломанів розрізняти на слух піаністів, виконуючих один витвір. Які ж виявити індивідуальні особливості клавіатурного почерку? Також, як і за графологічної експертизі: потрібні еталонний і досліджуваний зразки тексту. Краще, якщо їх зміст буде однаковим (так звана, парольна чи ключова фраза). Зрозуміло, по двом-трьом, навіть із десяти нажатым клавішах відрізнити користувача неможливо, потрібна статистика.
Набираючи ключовою фрази комп’ютер дозволяє зафіксувати багато різних параметрів, але для ідентифікації найзручніше використовувати час, витрачене на введення окремих літер. А повторивши введення фрази кілька разів у результаті матимемо безліч тимчасових інтервалів кожному за символу. На базі отриманих значень можна розрахувати середнє час введення кожного символу, дозволене відхилення від середнього, й берегти ці результаті ролі еталонів кожному за пользователя.
Унікальні особливості клавіатурного почерку виявляються двома методами: по набору ключовою фрази чи з «вільному» тексту. Кожен обов’язково має режими настроювання й ідентифікації. При їх настроюванні визначаються і запам’ятовуються еталонні характеристики введення користувачем ключових фраз, наприклад, час, витрачене деякі літери. На режимі ідентифікації, після винятку грубих помилок, еталонне й отримане безлічі сопоставляются (перевіряється гіпотеза — про рівність їх центрів розподілу). «.
Далі у керівництві викладаються відповідні алгоритми для настройки та молодіжні організації ідентифікації системи, використовує аналіз клавіатурного подчерка, рухів мишки. Що стосується системам дистанційного навчання, використання подібного методу міг би дати можливість виявлення ситуації, коли, використовуючи комп’ютер сяде інший. Хоча наведені у статті методи цікаві, але де вони досить ненадійні, а дослідження цьому напрямі зажадає окремої роботи. Для навчання системи необхідно певний час. Що стосується студента цього часу у тому, та й за всієї роботі йому доведеться вводити зовсім небагато текстових даних. Руху мишки у системі аналізувати буде сложно.
2. Невідомо, скільки ж разів студент спробував пройти тестування. Студент має можливість встановлювати систему дистанційного навчання у кількох примірниках і/або копіювати її, тим самим зберігаючи її поточний стан. Студент має можливість необмеженого кількості спроб проходження тестування і вибрати з них спроби з найкращим результатом.
Застосування різних хитрощів при зберіганні інформації про виконану студентом роботі. Розв’язати цю проблему непросто. У кожному разі неможливо дізнатися, що студент встановив пакет програм дистанційного навчання на двох комп’ютерах, та був використовує один для тренування і добору правильних відповідей, а другий вже для тестування. До чого може вступити простіше й скористатися програмою до створення безлічі віртуальних машин в одній фізичної. Такий програмою, наприклад, є WMware [24]. Чи може створити одну віртуальну автомобіль і встановити ній програму, що виробляє тестування. Ну, а потім, якщо результат проходження тестування її буде влаштовувати, він зможе відновити попереднє стан всій віртуальній системи, просто зробивши відкіт. Це, наприклад, дозволяє зробити згадувана раніше програма WMware. Тобто., фактично, використовуючи цю програму, студент має можливість створювати «моментальний зліпок «всього комп’ютера. Що дає він повинен повернутися до попередньому состоянию.
Однією з методом вирішення проблеми може бути використання індивідуальної дискети студента. Ідея тут той самий, як і використовувалася при захисту програмного забезпечення від несанкціонованого копіювання. Зараз цих цілей все чаші використовується технологія електронних ключів (Hasp і т.д.). Сенс у цьому, що дискета форматируется, та був використовується особливим чином. Тобто. працювати з такою дискетою може лише спеціальний набір програм. Стандартними методами таку дискету не можна ані скопіювати, ні переглянути інформацію у ньому, оскільки він зберігається в особливому форматі. Працювати з такою дискетою можуть розв’язуватися тільки програми, що входять до склад системи дистанційного навчання. Без ключовою дискети система працювати нічого очікувати. На цієї дискеті можна відзначати кількість спроб тестування тощо., тим самим вирішуючи аналізовану проблему.
Але це технологія перестав бути рішенням проблеми. Подивимося, що, наприклад, в електронному посібнику боротьби з хакерами про деякі таких системах [23]:
" Система JAWS.
Ключевая інформація у системі розташований доріжці 0 інженерного циліндра з номером 42. Автор системи захисту від копіювання JAWS стверджує, що, створені дискети не копіюються програмою COPYWRIT. Це твердження не чи реальні. Дискета копіюється програмою COPYWRIT, якщо вказати максимальний номер копируемого циліндра, рівним 42.
Система НОТА.
Авторы цією системою також вирішили розмістити інформацію про захист у сфері інженерних циліндрів. На відміну не від системи JAWS розв’язали використовувати доріжку 0 циліндра 41. Але програму COPYWRIT також успішно копіюють цю дискету.
Система SHIELD.
Авторы системи SHIELD не пішли второваним шляхом використання інженерного циліндра і порушення CHRN. Вони використовували вільне простір на доріжці 0 циліндрів 0, 1 і 2 розміщувати ключовою інформації. Дискета не копіюється безпосередньо програмою COPYWRIT. Проте після копіювання програмою COPYWRIT досить обробити дані програмою DISK EXPLORER і Ви маєте працездатну копию.
Система BOARD.
На дискеті застосовується метод форматування із довжиною 1. Також застосовується метод збільшення довжини останнього сектора, для заплутування програм COPYIIPC і COPYWRIT. Застосовуваний формат має такі характеристики. Формат однаковий для циліндрів 0 і 41. Виконується форматування на 11 секторів з N=1, GAP=255 і символом заповнювачем формату «X». Перші 9 секторів мають стандартні R від 1 до 9 і N=2. Передостанній CHRN має R=11 і N=6. У останнього сектора поля CHRN відповідно рівні 123, 17, 249 і 7. Отриманий формат під час роботи з секторами від 1 до 9 має «негативний» GAP3, оскільки форматування виконується з кодом довжини 1, а операції з секторами виконуються з кодом довжини 2. У цьому CRC сектора залазить на SYNC адресного маркера ідентифікатора наступного сектора. У першому секторі циліндра 41 записується ключова інформація, а сектора 2, 3, …, 9 заповнюються символами F6h, що має маскувати їх під звичайний формат. Разом про те, автори перевіряють з усього обсягу ключовою інформації лише інформацію з першого сектора на циліндрі 41. Тому, за копіюванні досить завести звичайний сектор з номером 1 на 41 циліндрі і переписати туди ключову інформацію. Автори не використовували додаткових можливостей контролю ключовою інформації. Аналіз даних під час читання передостаннього сектора на ключових доріжках дозволяє контролювати розмір GAP3 і символ заповнювач, використані при форматуванні, і навіть CHRN останнього сектора на доріжці і довжину доріжки. «.
Опис багатьох інших систем тут опушено, позаяк у цілому схожі з роботи вже описаними. Як бачимо, використання такого підходу не вирішує проблему. Досить легко скористатися спеціалізованими програмами копіювання або створити свій аналог. Звідси можна дійти невтішного висновку, що розробка системи з допомогою ключовою дискети не раціональніша. Такий підхід також потягне безліч труднощів. Наприклад, незрозуміло, що робити у разі втрати чи псування дискети. Але, очевидно, у тому разі студентові доведеться проходитиме тестування іще одна раз, що підприємство вочевидь неприемлемо.
Можна дійти невтішного висновку, що використання таких спеціальних апаратних коштів, то цієї проблеми також має досить задовільного рішення. Але її рішенню можна постаратися наблизитися, використовуючи специфічні методи зберігання стану (наприклад, у реєстрі тощо.) і тих самим ускладнюючи процес махінації. Та загалом разі знову дасть результату, якщо студент скористається віртуальної машиною, створеної, наприклад, програмою WMware.
3. Існує можливість створення універсального редактора файлів результатів тестування. Він можна використовувати студентом для коригування оцінок виставлених програмою тестирования.
Тут можна було скористатися ідеєю ключовою дискети задля збереження результату. Тим самим було модифікація результату почала б дуже скрутної. Але це метод має одну обмеження, що робить його практично непридатним. Це необхідність спрямування передачі результату дискети. Тобто. натомість, аби лишень відіслати результат мережі, доведеться доставляти його за дискете.
Але є ще один метод. Це використання шифрування з відкритою ключем. Для стислого ознайомлення з шифруванням з використання відкритого ключа звернутися до книжки Баpичева Сеpгея «Kpиптогpафия без секретів «[25]:
" Хоч би як були складні, і надійні писав криптографічні системи — їх слабке місце при практичної реалізації - проблема розподілу ключів. Для здобуття права можливий обмін конфіденційної інформацією між двома суб'єктами ІВ, ключ може бути сгенерирован них, та був якимось чином, знову ж у конфіденційному порядку переданий іншому. Тобто. загалом разі передачі ключа знов-таки потрібно використання якийсь криптосистемы.
Аби вирішити цієї проблеми з урахуванням результатів, отриманих класичну і сучасну алгеброю, було запропоновано системи з відкритою ключом.
Суть їх у тому, що кожним адресатом ІВ генеруються два ключа, пов’язані між собою за певним правилу. Один ключ оголошується відкритим, а інший закритим. відкритий ключ публікується і доступний кожному, хто хоче послати повідомлення адресата. секретний ключ зберігається у тайне.
Вихідний текст шифрується відкритим ключем адресата і передається йому. зашифрований текст у принципі може бути розшифровано тим самим відкритим ключем. Дешифpование повідомлення можливе лише використанням закритого ключа, що лише самому адресата. писав криптографічні системи з відкритою ключем використовують звані необоротні чи односторонні функції, які мають наступним властивістю: при заданому значенні x щодо просто обчислити значення f (x), та якщо y=f (x), то немає простого шляхи до обчислення значення x.
Безліч класів необоротних функцій і породжує й усе розмаїття систем з відкритою ключем. Не всяка необоротна функція готовий до використання їх у реальних ИС.
У самому визначенні необоротності присутній невизначеність. Під необоротністю розуміється не теоретична необоротність, а практична неможливість обчислити зворотне значення, застосовуючи сучасні обчислювальні кошти за доступний для огляду інтервал часу. Тому, аби гарантувати надійний захист інформації, до систем з відкритим ключем (СІК) пред’являються дві важливі і очевидних вимоги: 1. перетворення вихідного тексту має бути необоротним і виключати її відновлення з урахуванням відкритого ключа. 2. визначення закритого ключа з урахуванням відкритого також має бути неможливим на сучасному технологічному рівні. у своїй бажана точна нижня оцінка складності (кількості операцій) розкриття шифра.
Алгоритми шифрування з відкритою ключем отримали широке поширення сучасних інформаційних системах. Так, алгоритм RSA став світовим стандартом де-факто для відкритих систем.
Взагалі, всі запропоновані сьогодні криптосистемы з відкритою ключем спираються однією з таких типів необоротних перетворень: 1. Розпад великих чисел на прості множники. 2. Обчислення логарифма у кінцевому полі. 3. Обчислення коренів алгебраїчних уравнений.
Тут же відзначити, що алгоритми криптосистемы з відкритою ключем (СІК) можна залучити до трьох призначеннях. 1. Як самостійні засоби захисту переданих і збережених даних. 2. Як кошти на розподілу ключів. алгоритми СІК більш трудомісткі, ніж традиційні криптосистемы. Тому часто практично раціонально з допомогою СІК розподіляти ключі, обсяг яких інформації незначний. До того ж з допомогою звичайних алгоритмів здійснювати обмін великими інформаційними потоками. 3. Кошти аутентифікації користувачів. «4. Існує можливість створення універсальної програми перегляду файлів з завданнями і відповідями. Отже, студент має можливість довідатися вірні запитання в тестах.
Такої проблеми стосується Б. М. Маутов у статті «Захист електронних підручників з урахуванням програмно-апаратного комплексу «Символ-КОМ «[26]. Але її істотним недоліком служить наявність апаратної частини. Що дуже обмежує зокрема можливість використання системы.
Природним виходом із даній ситуації є застосування шифрування даних. Але принципово цю проблему дозволити неможливо. Студентові що необхідно дати і питання звірити з відповіддю, а цього необхідно розшифрувати дані з еталонними відповідями. Для їх розшифровки необхідний ключ, що у будь-якому разі треба десь зберігати. Отже, за бажання, інформацію можна отримати відкритому виде.
Побічної проблемою є можливість зацікавленим обличчям несанкціонованого зміни баз даних навчальних систем. Цю проблему зачіпає Тыщенко О. Б., говорячи про потребу використання паролів або системи паролів [27]. Хоча це питання у статті кілька з іншого ракурсу, він перетинається з обговорюваної проблемою. Збереження даних в навчальною системі передбачає можливість їх перегляду, отже, наявність способу доступу до цих данных.
5. Можливість модифікації програмного коду системи тестування за метою зміни алгоритму виставляння оценок.
Хоч як дивно, але такі важливе запитання захисту мало освячений. Майже у всіх працях з темі захисту в системах дистанційного навчання не розглядається. Почасти зрозуміло. Для систем побудованих з допомогою мережі Internet, її практично немає. Оскільки контролює частина міститься за серверу, то то цієї проблеми не актуальна. Для систем дистанційного забезпечення, виділені на локального режиму використання, цю проблему практично зводиться до широко відому проблему захисту ПЗ від зламування. Вочевидь, що це і є причиною, що питання не отримує розкриття у різних роботах. Але не робить його менш важным.
Ось що, наприклад, пише Оганесян А. Р. у статті «Проблема «шпаргалок» чи як забезпечити об'єктивність комп’ютерного тестування? «[28]:
" Майже кожен студент, вперше зіштовхуючись із нової йому системою комп’ютерного тестування, намагається віднайти лазівки, що дозволяють одержувати завищені оцінки. Пошук йде широким фронтом і раніше чи пізно більшість лазівок можна знайти і мені стає надбанням усіх студентів. Боротися із ній потрібно. Понад те, корисно заохочувати цей процес, допомагає відшукувати прогалини у системі комп’ютерного тестування. І тому, щоправда, у неї доводиться вбудовувати спеціальні механізми, дозволяють стежити діями студентів, оскільки у тому інтересах ділитися ні з викладачем своїми знахідками. «.
Хотів би тут відзначити, що до того, як заохочувати процес отыскивания дір, треба ж таки створити система захисту досить високого рівня. З погляду модифікації програмного коду, дана стаття не пропонує відповідних методів захисту. Далі, незрозуміло, як можна вбудовувати спеціальні механізми, дозволяють спостерігати над діями студентів. Точніше, дуже складно створення надійного механізму, завдяки якому система дистанційного навчання повідомить про своє зламування відповідної системі за викладача. Отже, поставлене запитання дуже важливий і вимагає ретельної проработки.
6. Необхідна можливість легкої адаптації вже існуючих систем дистанційного навчання дітей і тестування. Це першу чергу пов’язане з тим, що ці системи вже є бази з лекціями, тестовими завданнями й дуже далее.
Важливим чинником і те, що наявні нині різні системи автоматизації процесу навчання написані різними мовами. Це Visual З++, Delphi і Visual Basic та іншими мовами. Отже, для взаємодії із нею потрібно зручний і, підтримуваний цими мовами механізм взаємодії. Можна вживати такі кошти, як іменовані канали, сокеты. Але використання таких механізмів хоч і стандартно в ОС Windows, та їх використання не просте. Треба мати певні знання з даному вопросу.
Останнім часом широке застосування знайшла технологія COM. Багато АСДО, розроблені з її використанням чи з допомогою таких її різновидів, як OLE і ActiveX. Наприклад наведемо слова Романенка В. В., описывающего створення автоматизованої системи розробки електронних підручників [29]:
" У системі буде використано багато сучасних технології програмування, зокрема, COM, тобто система матиме модульну структуру, пов’язану інтерфейсами COM. Це зробить систему гнучкою, легко модифицируемой. За такими принципам створюються всі сучасні офісні докладання. «.
Можна дійти невтішного висновку, що взаємодія модуля захисту з допомогою технології COM дуже гнучко і дуже використовується для побудови модульних програм. Це дуже важливо, оскільки необхідне саме легке інтегрування у вже існуючі системи. 1.3. Завдання поставлені перед системою защиты.
Раніше перераховано проблеми, пов’язані улаштуванням захисту у системах дистанційного навчання дітей і контролю за навчанням. Було проведено огляд публікацій з даним питанням. Спробуємо тепер відокремити завдання, вирішення яких лежить поза сферою можливості програмних засобів і рішення яких ставляться до адміністративним засобам контролю. Для інших завдань спробуємо запропонувати методи їхньої організації рішення і може включити підтримку їхніх рішень на функціональність розроблюваної системи защиты.
На жаль, два проблеми лежать поза сферою можливості програмних засобів не залучаючи додаткового апаратного забезпечення. Нагадаємо их.
1. Відсутність можливості достовірно визначити, пройшов чи студент тестування самостійно. З цією завдання він міг використовувати іншу людину (наприклад, більш підготовленого студента).
Природним розв’язання цієї проблеми може служити тільки правильне побудова курсу. Процес контролю за навчанням треба будувати те щоб ускладнити процес підміни дублером. Знайти дублера однією тест набагато простіше, ніж період навчання. Отже, змушені виключити це питання з списку завдань, вирішення яких має надати розроблюваний модуль защиты.
2. Невідомо, скільки вже разів студент спробував пройти тестування. Студент має можливість встановлювати систему дистанційного навчання у кількох примірниках і/або копіювати її, тим самим зберігаючи її поточний стан. Так студент має можливість необмеженого кількості спроб проходження тестирования.
Це завдання у чомусь аналогічна попередній і, на жаль, не має програмного рішення. Розв’язанням цієї проблеми скоріш буде правильне побудова системи дистанційного навчання. Наприклад, при тестуванні доцільно запропонувати досить багато питань, найоптимальнішим виходом був частиною їхнього автоматична генерація. Це виключило можливість перегляду всіх запитань і проби різних варіантів відповідей. Прикладом такої системи може бути система генерації завдань із фізиці, який складають за правилами, використовуючи як значень, запропонованих на вирішення, випадкові числа.
3. Існує можливість створення універсального редактора файлів результатів тестування. Він можна використовувати студентом для коригування оцінок виставлених програмою тестирования.
Тут допоможе може з’явитися застосування механізму відкритих ключів. Саме такою механізм потрібно буде реалізовувати системі захисту. Зазначимо, що використовуватися шифрування з допомогою відкритого ключа над класичному розумінні. Метод полягатиме у генерувальників поліморфних алгоритмів шифрования/расшифрования. У цьому одному алгоритму шифрування відповідатиме один алгоритм розшифровки. А відтворення алгоритму шифровки/расшифровки за наявними у наявності зворотного алгоритму занадто занадто багато роботи. Модуль має забезпечити побудові складного для аналізу полиморфного коду, що має перешкоджати побудові зворотного алгоритма.
4. Існує можливість створення універсальної програми перегляду файлів з завданнями і відповідями. Отже, студент має можливість дізнатися вірні запитання в тестах.
Розв’язання даної проблеми я вважаю над використанні стійких криптоалгоритмов, а способі зберігання даних. Одна річ, коли всі дані зберігатимуться в текстовому вигляді. Потім цей текстовий файл буде просто підданий шифруванню. І тут, розшифрувавши ці дані з використанням знайденого ключа, зловмисник отримає всі, що треба. Зовсім інша річ, якщо написати механізм чтения/записи даних, використовує записи різних типів. Припустимо, ми зберігаємо спочатку блок з назвою роботи, потім, зберігаємо ідентифікатор картинки, потім дані самої картинки, потім даних про правильному відповіді, тощо. І тепер знання ключа розшифровки дає, т.к. для ще треба знати формат сохраняемых даних. А зломщик це може дізнатися лише лише провівши глибокий аналіз внутрішньої роботи ПО. І навіть якщо й проведе, і знатиме формат читаемых/сохраняемых даних, змушений буде створити програму, що дозволить працювати із нею. Через те, що збережені дані може мати дуже складний формат, це малоймовірно. Інакше повторити досить більшу частину невідомого програмного кода.
Додаткову складність повинен внести генератор алгоритмів шифрования/расшифрования. Шляхом зберігання даних в пакетах, отдаваемых студентові, і зашифрованих різними алгоритмами, досягатиметься додаткова складність створення універсальної програми просмотра.
5. Можливість модифікації програмного коду системи тестування, з метою зміни алгоритму виставляння оцінок чи іншого кода.
Хоч як дивно, підказати рішення хіба можуть такі програми, як віруси. Точніше, полиморфные віруси. Полиморфной називається програма, кожен штам (копія) яким характеризується від іншого. Два примірника такий програми можуть не збігатися жодної послідовністю байт, та заодно функціонально є копіями [30]. Віруси використовують полиморфные генератори для ускладнення їх виявлення. Нам поліморфний код цікавий з іншої причини. До нього дуже складно вносити зміни. Точніше, внести виправлення в конкретний примірник докладання видається великий проблемою, тоді як застосувати його модифікації до іншого примірнику неможливо. Звідси слід висока складність написання універсального алгоритму, який би зраджував полиморфную програму те щоб вона до початку функціонувати як цього хоче злоумышленник.
Через війну виникає ідея побудови підсистеми з такого опису. Система представляє з себе файл, що зберігається у зашифрованому вигляді. Программа-загрузчик розшифровує його безпосередньо у пам’яті і далі запускає. Кожен файл зашифрований своїм методом, а отже, просте модифікація невозможна.
Можливо створення програми, взламывающей систему тестування, що базується на методах динамічної модифікації пам’яті програми чи створенні та завантаження зліпка даних на згадку про. Створення як і програми саме собою дуже важко і вимагає високої квалификации.
6. Необхідна можливість легкої адаптації вже існуючих систем дистанційного навчання дітей і тестування. Це першу чергу, пов’язане з тим, що ці системи вже є бази з лекціями, тестовими завданнями й дуже далее.
Це завдання повністю лежать у сфері інформаційних технологій і має досить найпростіше його вирішення. У ОС Windows існує механізм, який дозволить легко адаптувати вже існуючі системи дистанційного навчання дітей і тестування, причому, створених різними мовами. Вона має широкої підтримкою коштів розробки та бібліотек. Це COM (Component Object Model). COM — модель компонентных об'єктів Microsoft [31].
Зокрема, прикладом простоти роботи з COM-модулями може бути Visual Basic. За інших засобах розробки програмного забезпечення цьому механізму приділено багато уваги. У Visual З++ існує потужна бібліотека ATL (Active Template Library) і розробити COM-модулей і взаємодії з ними. ATL — бібліотека активних шаблонів, що дає безліч шаблонів мови З++, виділені на налагодження ефективних СОМ-компонентов. Але найголовніша перевага у цьому, що з здобуття права підключити модуль захисту, крім самої DLL, знадобиться лише бібліотека типів (TLB файл). Бібліотека типів варта надання іншим додатків і середах програмування інформації про складових об'єктах, котрі її містяться. 1.4. Вибір класу вимог до системи защиты.
Займаючись розробкою системи захисту, було логічною вибрати клас, до якого вона належатиме. Це важливо у частковості з погляду бедующего користувача такої системи. Вона мусить мати уявлення про її властивості, надійності і яка уможливила сферу застосування. Засадничими документами у сфері інформаційну безпеку нині являются:
. Помаранчева книга (TCSEC).
. Райдужна серия.
. Гармонізовані критерії Європейських країн (ITSEC).
. Рекомендації X.800.
. Концепція захисту від НСД Гостехкомиссии за Президента РФ.
Зупинимо нашу увагу на на TCSEC. Помаранчева книга обрано, як документ став свого роду классическим.
TCSEC, званий найчастіше за кольором обкладинки «Помаранчевої книгою », був вперше опубліковано у серпні 1983 року. Вже за його назву заслуговує коментарю. Йдеться щодо безпечних, йдеться про надійних системах, причому слово «надійний «трактується як і, як і поєднанні «надійна людина «— людина, якому можна довіряти. «Помаранчева книга «пояснює поняття безпечної системи, яка «управляє, у вигляді відповідних коштів, доступом до інформації, отже лише належним чином авторизовані особи чи процеси, діючі від імені, отримують право читати, писати, створювати і видаляти інформацію » .
У «Помаранчевої книзі «надійну систему окреслюється «система, яка використовує достатні апаратні і програмні засоби, щоб забезпечити одночасну обробку інформації різного рівня таємності групою користувачів без порушення прав доступу » .
Відразу відзначимо, що TCSEC для розроблюваної системи фактично непридатний. Цей документ розроблений з погляду безпеки рівня військових та інших державних служб. У нашому випадку, підхід з місця зору побудові настільки захищених систем зайвий. Адже зацікавленим у зламі розроблюваної системи швидше все буде бути студент, проходить навчання захищеної нею АСДО. Отже й модульна побудова програмно-апаратної системи є зайвим і найдорожчим заняттям. Це підтверджує малу придатність спрямування класифікації такі документи, як TCSEC. І як побачимо далі, розроблювана система по класифікації TCSEC не надає ніякої захисту. Тобто система, адаптована з її використанням, захищеної бути не будет.
Основні елементи політики безпеки, відповідно до «Помаранчевої книзі «, містять у собі по крайньої мере:
. Довільне управління доступом;.
. Безпека використання объектов;
. Мітки безопасности;
. Примусове управління доступом.
Довільне управління доступом — це метод обмеження доступу до об'єктах, заснований обліку особистості суб'єкта чи групи, у якому суб'єкт входить. Довільність управління у тому, що якийсь обличчя (зазвичай власник об'єкта) може на власний розсуд давати іншим суб'єктам чи відбирати в них права доступу до объекту.
Безпека використання об'єктів — важливе практично доповнення коштів управління доступом, предохраняющее від випадкового чи навмисного вилучення секретної інформації з «сміття ». Безпека використання повинна гарантуватися для областей оперативної пам’яті (зокрема, для буферів з образами екрана, розшифрованими паролями тощо.), для дискових блоків і магнітних носіїв в целом.
Задля реалізації примусового управління доступом з суб'єктами і об'єктами асоціюються мітки безпеки. Мітка суб'єкта описує його благонадійність, мітка об'єкта — ступінь закритості котра міститься у ньому інформації. Відповідно до «Помаранчевої книзі «, мітки безпеки складаються із двох галузей — рівня таємності і списку категорій. Рівні таємності, підтримувані системою, утворюють упорядкований безліч, що може виглядати, наприклад, так:
. цілком секретно;
. секретно;
. конфиденциально;
. несекретно.
Примусове управління доступом грунтується на зіставленні міток безпеки суб'єкта і об'єкта. Суб'єкт може читати інформацію з об'єкта, якщо рівень таємності суб'єкта не нижче, ніж в об'єкта, проте категорії, перелічені в мітці безпеки об'єкта, є у мітці суб'єкта. У разі кажуть, що мітка суб'єкта домінує над міткою об'єкта. Сенс сформульованого правила зрозумілий — читати можна лише те, що належить. Суб'єкт може записувати інформацію в об'єкт, якщо мітка безпеки об'єкта домінує над міткою субъекта.
Примусове управління доступом реалізовано у багатьох варіантах операційними системами і СУБД, відмінних підвищеними заходами безпеки. Незалежно від практичного використання, принципи примусового управління є зручним методологічним базисом для початковій класифікації інформації та розподілу прав доступа.
" Критерії «Міністерства оборони США відкрили шлях до ранжирування інформаційних систем за рівнем надійності. У «Помаранчевої книзі «визначається чотири рівні безпеки (надійності) — D, З, B і A. Рівень D призначений для систем, визнаних незадовільними. Принаймні переходу від рівня З до A до надійності систем пред’являються дедалі більше жорсткі вимоги. Рівні З і B поділяються на класи (C1, C2, B1, B2, B3) із зростанням надійності. Отже, всього є шість класів безпеки — C1, C2, B1, B2, B3, A1.
Розроблювана система, не дозволить забезпечити рівень хоча б класу С1. У цій не будемо приводити і розглядати вимоги, налагающиеся «Помаранчевої книгою «визначені классы.
1.5. Выводы.
Відповідно до попереднього матеріалу, проблема захисту систем локального дистанційного навчання справді часі вимагає себе уваги. У цьому, досі напрацювань у цій галузі не багато. Більшість системи захисту лежить поза сферою можливості програмного забезпечення і потребує відповідної адміністративної організації та контролю. Що говорить про необхідність розроблення теоретичних і практичних методик побудови локального дистанційного процесу навчання. Цей поділ, мабуть, можна зарахувати до педагогічним наук. Однак саме собою педагогіка неспроможна, без підтримки з боку, побудувати такої системи дистанційного навчання, яка відповідала всі вимоги, як з боку якості навчання, і з погляду організації контролю в такому навчанні. Отже, рішення в організацію систем дистанційного навчання дати добро тільки симбіоз педагогічних і технічних наук. Отже, основний завданням інформаційних технологій є будування необхідної технічної бази, задля її подальшого її використання їх у організації різних схем дистанційного навчання, зокрема, можливо, не розроблених. Багато кроки у цьому напрямі вже зроблено. Наприклад, розроблено дуже багато систем дистанційного навчанні і тестування. Захист ж таких систем, буде ще однією великим кроком, оскільки, якщо хоч один з основних вимог до систем дистанційного навчання нічого очікувати виконано, то, фактично, це і неможливість використання такої системи загалом. Система захисту повинна матимуть можливість легкого включення до вже існуючі АСДО. Мова, на якому написана таку систему, ні, наскільки можна, мати значення, тобто система захисту мусить бути універсальна. Цією системі необхідно надавати набір сервісів, зручний використання. Вони нібито будуть використовуватися творцями системи навчання на адаптацію їх систем до вимогам з погляду захисту. Саме таку універсальну і легко интегрируемую система захисту що й спробую розробити зважену та показати на прикладах, де і вони можуть знайти применение.
ГЛАВА 2. ЗАПРОПОНОВАНІ МЕТОДИ СТВОРЕННЯ ИНТЕГРИРУЕМОЙ.
СИСТЕМИ ЗАХИСТУ ИНФОРМАЦИИ.
2.1. Вибір об'єктів для защиты.
Розглянемо структурне побудова деяких систем дистанційного локального тестування і навчання дітей і постараємося виділити загальні слабкі місця та можливості защиты.
Як мовилося раніше раніше, система захисту, розроблювана у цій роботі, не належить до систем дистанційного навчання, побудованих по технології клієнт-сервер. Такі системи вже з визначенню досить добре захищені. Усі бази даних із матеріалами на навчання, тестування тощо, зберігаються на сервері. У потрібну тільки п’яту частину цих даних потрапляє на комп’ютер клієнта (див. малюнок 2). І тут, наприклад, не потрібно захист бази з відповідями, оскільки перевірка правильності може відбуватися на серверної боці. Проте, на таку системи модуль захисту буде також можливо корисний. Тож якщо за комп’ютером студента встановлюється якийсь набір програм, організуючий його навчання, то можливо, й існування критичних місць, де може знадобитися захист виконуваних модулів від модифікації коду чи інша функціональність модуля защиты.
[pic].
Малюнок 2.
Але розроблювана система захисту, як уже згадувалося раніше, орієнтована на локальний пакет дистанційного навчання. Звідси випливає, що бази з завданнями, лекціями тощо, зберігаються безпосередньо на комп’ютері студента (див. малюнок 3).
[pic].
Малюнок 3.
У разі вразливим місцем стають такі об'єкти, як канали зв’язок між АРМ викладача і студента. Можливий варіант взаємодії між тими АРМами як off-line. Під уразливими об'єктами розуміються різні файли (приміром, із результатами проміжного тестування), з допомогу яких і було організується інформаційне взаємодія між АРМ. Уразливі бази лекцій, бази з завданнями і відповідями. Також саме програмне забезпечення то, можливо схильна модифікації. На малюнку 4 зображено структурна схема одній з можливої системи дистанційного обучения.
[pic].
Малюнок 4.
Тепер на докладніше об'єкти системи дистанційного локального навчання, потребують защиты.
Дані, є текстом завдань із відповідями, можуть бути переглянуті. Не буде простою справою у разі, коли ці дані зберігаються у складному бінарному форматі, оскільки не повідомляючи устрою відповідного формату, перегляд таких даних зовнішніми програмами дуже складний. Багато АСДО зберігають ці завдання у простому текстовому вигляді чи форматі WORD документів, і, отже, перегляд таких даних жодних ускладнень не викликає. І, відповідно, доступом до базі завдань автоматично дискредитують систему тестирования.
Можлива ситуація, коли небажана можливість необмеженого доступу як до баз заданий/ответов, до обучающему матеріалу. Наприклад, небажано стала вельми поширеною навчальних матеріалів, і потрібно обмежити їхню перегляд тільки з відповідної системи тестування. Природно, абсолютної захисту тут може бути, так як у кожному разі не можна, заборонити, наприклад, просто сфотографувати монітор. Але, тим щонайменше, шифрування таких даних іноді оправдано.
Виконувані файли систем тестування піддаються модифікації із єдиною метою зміни алгоритму його роботи. Прикладом може бути зміна алгоритму виставляння оцінки за пройдене тестування чи алгоритму генерації звіту із відповідною оцінкою. Додаткова складність у тому, щоб ускладнити процес масового зламування. Немає такої програми, яку неможливо зламати. Критерій трудомісткості зламування прямо пропорційний критерію надійності. Отже, поставлено завдання наскільки можна запобігти створення програми — зломщика, який буде застосувати для модифікації який навчає пакета будь-якого студента. Отже, необхідно не створення дуже складної системи захисту виконуваних модулів. Завдання у тому, щоб розроблена кимось программа-взломщик не мала свого дії інші пакети, чи, точніше, щоб створення такий програми було досить важким і економічно недоцільним. Уявімо цю ситуацію. Групі студентів видали пакет дистанційного який навчає програмного забезпечення. Одне з студентів замість чесного навчання дітей і тестування витратив постійно на вивчення і зламування цієї системи, у результаті отримав гарну оцінку, не ознайомившись із предметом. Такий окреме питання сам не страшний. Набагато страшнішим є, якщо цього даний студент почне поширювати свій технічне досягнення. І, в такий спосіб, може й, що це студенти наступного навчання скористаються цим. Результатом матиме не володіння курсом студентами, навчання яких на зламаною системі дистанційного навчання. Одне з шляхів захисту — це створення унікальних програмних модулів. Тобто модулів, котрим неприйнятна проста программа-взломщик модифицирующая певну послідовність байт. Пропоноване рішення генерації таких модулів буде описано в подальшому і грунтуватиметься на застосуванні поліморфних алгоритмів шифрования.
Зміни схильні до результатів тестування, тобто звіт, формований системою обучения/тестирования. Система дистанційного навчання може бути побудована за принципом, коли студент надсилає файл з результатами її тестування електронною поштою чи, скажімо, приносить на дискеті. І тут, цей файл немає право являти собою, наприклад, простий текстовий файл. Часто в простих системах тестування, спочатку не розроблених для дистанційного навчання, ці файли для зручності видаються текстовими документами чи іншими форматами зручними для перегляду. У випадку, тут конче необхідно застосування шифрування даних. У реалізованої системі вона побудовано основі асиметричних механізмів шифрування. Це, по-перше, дозволить захистити дані від модифікації, а, по-друге, «підпише «отримані дані. Досить кожного студента забезпечити пакетом тестування за унікальним ключем, і неможливо скористатися чужим файлом з отчетом.
2.2. Шифрування даних 2.2.1. Деякі загальні сведения.
Проблема захисту шляхом її перетворення, виключає її прочитання стороння особа, хвилювала людський розум з давнини. Історія криптографії - ровесниця історії людського мови. Понад те, спочатку писемність як така була криптографічного системою, позаяк у древніх суспільствах нею володіли лише избранные.
Бурхливий розвиток писав криптографічні системи отримали роки першою і другий світових війн. Поява обчислювальних засобів у повоєнні роки прискорило розробку й вдосконалення криптографічних методів. Взагалі історія криптографії вкрай захоплююче, і гідна окремої розгляду. Як хорошою книжки на тему криптографії можна рекомендувати «Основи сучасної криптографії «Баричев З. Р. [32].
Чому проблема використання криптографічних методів у інформаційних системах (ІВ) стала зараз особливо актуальна?
З одного боку, розширилося використання комп’ютерних мереж, в частковості, глобальної Інтернету, якими передаються більше об'ємів інформації державного, військового, комерційного та приватного характеру, не допускає можливість доступу до неї сторонніх лиц.
З іншого боку, поява нових потужних комп’ютерів, технологій мережевих і нейронних обчислень прискорило дискредитацію криптографічних систем, не так давно вважалися практично нераскрываемыми.
Усе це постійно підштовхує дослідників створення нових криптосистем і ретельний аналіз вже существующих.
Проблемою захисту шляхом її перетворення займається криптология. Криптология поділяється на два напрями — криптографію і криптоанализ. Цілі цих напрямів прямо противоположны.
Криптографія займається пошуком і дослідженням методів перетворення інформації із єдиною метою приховання її содержания.
Сфера інтересів криптоанализа — дослідження можливості расшифровывания інформації не повідомляючи ключів. Сучасна криптографія поділяє їх у чотири великих класса.
1. Симетричні криптосистемы.
1. Криптосистемы з відкритою ключом.
2. Системи електронного цифрового підпису (ЭЦП).
3. Системи управління ключами.
основні напрями використання криптографічних методів — передача конфіденційної комп’ютерної інформації каналами телефонного зв’язку (наприклад, електронна пошта), встановлення дійсності переданих повідомлень, зберігання інформації (документів, баз даних) на носіях в зашифрованому виде.
Отже, криптографія дає можливість перетворити інформацію таким чином, що її прочитання (відновлення) можливе лише за знанні ключа.
Наведемо визначення деяких основних термінів, які у криптографії. Алфавіт — кінцеве безліч що використовуються кодування інформації знаків. Текст — упорядкований набір з елементів алфавіту. Для прикладу алфавітів, які у сучасних ІВ можна навести такі: 1. алфавіт Z33 — 32 літери російського алфавіту (виключаючи «є «) і прогалину; 2. алфавіт Z256 — символи, що входять до стандартні коди ASCII і КОИ-8; 3. двоїчний алфавіт — Z2 = {0,1}; 4. восьмеричний чи шестнадцатеричный алфавіт. Шифрування — процес перетворення вихідного тексту, що має також назва відкритого тексту, в шифрований текст. Расшифрование — процес, зворотний шифруванню. За підсумками ключа шифрований текст перетворюється на вихідний. Криптографічна система є сімейство T перетворень відкритого тексту. Члени цього сімейства індексуються, чи позначаються символом k; параметр k зазвичай називається ключем. Перетворення Tk визначається відповідним алгоритмом і значенням ключа k. Ключ — інформація, необхідна для безперешкодного шифрування і расшифрования текстів. Простір ключів K — це набір можливих значень ключа. Криптосистемы поділяються на симетричні і асиметричні (чи з відкритим ключем). У симетричних криптосистемах для шифрування, й у расшифрования використовується і той ж ключ. У системах з відкритою ключем використовуються два ключа — відкритий і закритий (секретний), які математично пов’язані одне з одним. Інформація шифрується з допомогою відкритого ключа, що доступний всім бажаючим, а розшифровується з допомогою закритого ключа, відомого лише одержувачу повідомлення. Терміни розподіл ключів і управління ключами ставляться до процесів системи обробки інформації, змістом якого є вироблення і розподіл ключів між користувачами. Електронної цифровий підписом називається присоединяемое до тексту його криптографічне перетворення, що дозволяє і при отриманні тексту іншим користувачем перевірити авторство та істинність повідомлення. Кpиптостойкостью називається характеристика шифру, що його стійкість до расшифрованию не повідомляючи ключа (тобто. криптоанализу). Є кілька показників криптостойкости, серед яких:. кількість всіх можливих ключів;. середнє час, необхідне успішної криптоаналитической атаки тієї чи іншої виду. Ефективність шифрування з метою захисту інформації залежить від збереження таємниці ключа і криптостойкости шифра.
2.2.2. Асиметричні криптосистемы.
Тепер зупинимося на асиметричні криптосистемам і коротко розповімо про неї. Пов’язано це про те, що у у системі захисту буде запропоновано і використаний механізм побудований за принципом асиметричних криптосистем.
Асиметричні чи двухключевые системи є з великим класом криптографічних систем. Ці системи характеризуються тим, що з шифрування й у расшифрования використовують різні ключі, пов’язані між собою деякою залежністю. У цьому дана залежність така, що встановити один ключ, знаючи інший, з обчислювальної погляду дуже трудно.
Одне з ключів (наприклад, ключ шифрування) може бути зроблений загальнодоступним, й у разі проблема отримання загального секретного ключа для зв’язку відпадає. Якщо зробити загальнодоступним ключ расшифрования, то, на базі отриманої системи можна побудова системи аутентифікації переданих повідомлень. Оскільки у більшості випадків один ключ з двох робиться загальнодоступним, такі отримали також назва криптосистем з відкритим ключом.
Криптосистема з відкритою ключем визначається трьома алгоритмами: генерації ключів, шифрування і расшифрования. Алгоритм генерації ключів відкритий, всякий може подати на вхід випадкову рядок r належної довжини й одержати пару ключів (k1, k2). Одне з ключів (наприклад, k1) публікується, вона називається відкритим, а другий, званий секретним, зберігається таємно. Алгоритми шифрування [pic] і расшифрования [pic]таковы, що з будь-якого відкритого тексту m [pic].
Розглянемо тепер гіпотетичну атаку зловмисника з цього систему. Противнику відомий відкритий ключ k1, але невідомий відповідний секретний ключ k2. Противник перехопив криптограму d і намагається знайти повідомлення m, де [pic]. Оскільки алгоритм шифрування відкритий, противник може просто послідовно перебрати всіх можливих повідомлення довжини n, обчислити кожному за такого повідомлення mi криптограму [pic] і порівняти di з d. Те повідомлення, котрій di = d і буде потрібним відкрито. Якщо пощастить, то відкритий текст буде знайдено досить швидко. У найгіршому ж разі перебір буде виконано під час порядку 2nT (n), де T (n) — час, необхідну шифрування повідомлення довжини п. Якщо повідомлення мають довжину порядку 1000 бітов, такий перебір нездійсненний практично і яких найпотужніших компьютерах.
Ми розглянули лише з можливих способів атаки на криптосистему і найпростіший алгоритм пошуку відкритого тексту, званий зазвичай алгоритмом повного перебору. Використовується й інше назва: «метод грубої сили». Інший найпростіший алгоритм пошуку відкритого тексту — розпізнавання. Цей очевидний алгоритм вимагає невеликих обчислень, але спрацьовує з пренебрежимо малої ймовірністю (на великих довжинах текстів). Насправді противник може намагатися атакувати криптосистему у різний спосіб і використовувати різні, витонченіші алгоритми пошуку відкритого текста.
Наприклад коротко розповімо про кілька класичних асиметричних системах шифровани.
2.2.2.1. Криптосистема Эль-Гамаля.
Система Эль-Гамаля — це криптосистема з відкритою ключем, заснована на проблемі логарифма. Система включає як алгоритм шифрування, і алгоритм цифровий подписи.
Безліч параметрів системи включає просте число p і ціла кількість g, ступеня якого з модулю p породжують велика кількість елементів Zp. У користувача A є секретний ключ a і щирий ключ y, де y = ga (mod p). Припустимо, що користувач B хоче послати повідомлення m користувачеві A. Спочатку B вибирає випадкове число k, менше p. Потім він обчислює y1 = gk (mod p) і y2 = m Є (yk (mod p)), де Є позначає побітове «який виключає АБО ». B посилає A пару (y1, y2). Після набуття шифрованого тексту користувач A обчислює m = (y1a mod p) Є y2.
Відомий варіант цієї схеми, коли операція Є замінюється на множення по модулю p. Це зручніше тому, що у першому випадку текст (чи значення хэш-функции) необхідно розбивати на блоки тієї самої довжини, як і число yk (mod p). У другий випадок цього потрібне і можна обробляти блоки тексту заздалегідь заданої фіксованою довжини (меншою, ніж довжина числа p).
2.2.2.2. Криптосистема Ривеста-Шамира-Эйделмана.
Система Ривеста-Шамира-Эйделмана (Rivest, Shamir, Adlеman — RSA) є криптосистему, стійкість якої полягає в складності виконання завдання розкладання числа на прості сомножители. Коротко алгоритм можна описати наступним образом:
Користувач A вибирає пару різних простих чисел pA і qA, обчислює nA = pAqA і вибирає число dA, таке що НОД (dA, j (nA)) = 1, де j (n) — функція Эйлера (кількість чисел, менших n і взаємно простих з n. Якщо n = pq, де p і q — прості числа, то j (n) = (p — 1)(q — 1)). Потім він обчислює величину eA, таку, що dAЧeA = 1 (mod j (nA)), і розміщає в загальнодоступною довідкової таблиці пару (eA, nA), що є відкритим ключем користувача A.
Тепер користувач B, бажаючи передати повідомлення користувачеві A, представляє вихідний текст x = (x0, x1, …, xn-1), x Про Zn, 0 Ј і < n, по підставі nA: N = c0+c1 nA+…
Користувач У зашифровує текст під час передачі його користувачеві А, застосовуючи до коефіцієнтам сi відображення [pic]: [pic], одержуючи зашифроване повідомлення N ". З огляду на вибору чисел dA і eA, відображення [pic]является взаємно однозначним, і зворотним щодо нього буде відображення [pic] Користувач, А виробляє расшифрование отриманого повідомлення N ", застосовуючи [pic].
Щоб знайти відображення [pic], зворотне стосовно [pic], потрібно знання множників nA = pAqA. Час виконання найкращих з відомих алгоритмів розкладання при n > 10 145 нині виходить межі сучасних технологічних возможностей.
2.2.2.3. Криптосистема, джерело якої в еліптичних кривых.
Розглянута вище криптосистема Эль-Гамаля полягає в тому, що проблема логарифмирования у кінцевому простому полі є складною з обчислювальної погляду. Проте, кінцеві поля не є єдиними алгебраїчними структурами, у яких може бути завдання обчислення дискретного логарифма. У 1985 року Коблиц і Міллер незалежно друг від друга запропонували використовуватиме побудови криптосистем алгебраїчні структури, певні на безлічі точок на еліптичних кривых.
2.2.3. Адаптований метод асиметричного шифрования.
Розглянуті раніше методи побудови асиметричних алгоритмів криптопреобразований хоч й цікаві, але з досить добре підходять для розв’язуваної завдання. Можна було б узяти реалізацію вже готового асиметричного алгоритму, чи відповідно до теоретичного опису, реалізувати його самостійно. Але, по-перше, тут йдеться про ліцензуванні і використанні алгоритмів шифрування. По-друге, використання стійких криптоалгоритмов пов’язані з правової базою, стосуватися якої хотілося. Сам собою стійкий алгоритм шифрування не потрібен. Він просто зайвий і створить лише додаткове уповільнення роботи програми при шифровании/расшифровании даних. Також планується виконувати код шифрования/расшифрования в віртуальної машині, із чого випливають великі труднощі реалізації цієї системи, якщо використовувати складні алгоритми шифрування. Віртуальне машина дає ряд переваг, наприклад, робить більш важкодоступній можливість проведення деяких операцій. Як прикладу можна навести перевірку алгоритмом припустимого строку свого использования.
Звідси висновок, що створюваний алгоритм шифрування може бути достатній простий. Та заодно він має забезпечувати асимметричность й можуть бути досить складною для аналізу. Саме виходячи з цих позицій розпочинає своє початок ідея створення поліморфних алгоритмів шифрования.
Основна складність полягатиме у будівництві генератора, який повинен видавати не вдома два алгоритму. Один — для шифрування, інший — для расшифрования. Ключів У цих алгоритмів шифрования/расшифрования немає. Можна сміливо сказати, що які самі є ключами, або що вони містять ключ всередині. Вони повинні бути влаштовані в такий спосіб, щоб виробляти унікальні перетворення над даними. Тобто два сгенерированных алгоритму шифрування повинні виробляти шифрування абсолютно різними способами. І їх розшифровки можна буде використовувати лише відповідний алгоритм расшифрования, який був сгенерирован разом з алгоритмом шифрования.
Унікальність створення таких алгоритмів має забезпечити поліморфний генератор коду. Виконуватися такі алгоритми будуть у віртуальної машині. Аналіз таких алгоритмів має стати дуже важким і недоцільним занятием.
Перетворення над даними досить тривіальні, але практично, ймовірність генерації двох однакових алгоритмів повинна котитися до нуля. Як елементарних дій варто використовувати такі нересурсоемкие операції, як складання із будь-яким числом чи, наприклад, побітове «який виключає чи «(XOR). Але повторення кількох таких перетворень з изменяющимися аргументами операцій (залежно від адреси шифруемой осередки) робить шифр досить складною. Генерації кожен раз нової послідовності таких перетворень з участю різних аргументів ускладнює аналіз алгоритма.
2.3. Переваги застосування поліморфних алгоритмів шифрования.
Перевагою застосування поліморфних алгоритмів шифрування для систем, за функціональністю схожим з АСДО, можна віднести такі пункты:
. слабка очевидність принципу побудови системи защиты;
. складність створення універсальних коштів на обходу системи защиты;
. легка реалізація системи асиметричного шифрования;
. можливість легкої, швидкої адаптації й ускладнення такий системы;
. можливість розширення віртуальної машини з приховання частини кода.
Розглянемо нині кожний із цих пунктів окремо і обгрунтуємо ці переваги. Можна навести та інші зручності, пов’язані з використання поліморфних механізмів в алгоритми шифрування. Але, мій погляд, перелічені переваги є основними які заслуговують внимания.
1) Слабка очевидність принципу побудови системи захисту, є наслідком вибору досить своєрідних механізмів. По-перше, це саме виконання коду шифрования/расшифрования в віртуальної машині. По-друге, набори поліморфних алгоритмів, унікальних кожному за пакета защищаемого програмного комплексу. Це має спричинити серйозні труднощі при спробі аналізу роботи такої системи в пошуках слабких місць для атаки. Якщо цю систему відразу створить видимість труднощі й малої очевидності роботи своїх внутрішніх механізмів, то швидше за все це зупинить людини від подальших досліджень. Правильно побудована програму з використанням розроблюваної системи захисту може лише виявитися складної на цей вид, а й бути такою насправді. Обрані ж методи зроблять пристрій даної системи нестандартним, і, можна сказати, неожиданным.
2) Складність створення універсальних коштів на обходу системи захисту залежить від можливості генерації унікальних пакетів захищеного ПО. Створення універсального механізму зламування засобів захисту утруднено при відсутності вихідного коду. Інакше необхідний глибокий, докладний та фаховий аналіз такої системи, осложняемый тим, кожна система використовує свої алгоритми шифрования/расшифрования. А модифікація окремого примірника захищеного ПО інтересу технічно нескладне. Адже основний наголос робився право на захист від неї масового зламування, а чи не на високу надійність окремого примірника пакета.
3) Легка реалізація системи асиметричного шифрування, хоч і є побічним ефектом, проте не вельми корисна і важлива. Вона подає собою слідство необхідності генерувати дві різні алгоритму, один для шифрування, а інший для расшифрования. За підсумками асиметричного шифрування то можна організувати багатий набір різних механізмів в защищаемом програмному комплексі. Приклади такого застосування дадуть в інших розділах даної работы.
4) Можливість легкої, швидкої адаптації й ускладнення такої системи. Коли щодо розробників система надається в вихідному коді, те в нього є всі умови щодо його зміни. Це може бути викликане необхідністю додавання нової функціональності. У цьому на таку функціональності може бути підтримку з боку зміненої віртуальної машини. І тут робота нових механізмів може бути складної для аналізу з боку. Також легко вносити зміни з єдиною метою ускладнення генератора полиморфного коду і збільшення блоків, у тому числі будуються полиморфные алгоритми. Це, наприклад, може бути корисним у цьому разі, якщо кимось, не дивлячись попри всі складності, буде створено універсальний пакет для зламування системи зашиті. Тоді зовсім невеликі зміни у коді, можуть звести нанівець праці зломщика. Слід зазначити, що це є дуже простим дією, і потенційно сприяє захисту, оскільки робить процес створення зламування ще більше нерациональным.
5) Оскільки програмісту віддаються вихідні коди система захисту, то він легко може скористатися існуючої віртуальної машиною й розширити її для потреб. Це ж стосується й генератора поліморфних алгоритмів. Наприклад, може вбудувати в поліморфний код ряд специфічної щодо його системи функцій. Зараз є можливість позбавити можливості використання алгоритмів за часом. А десь, можливо, знадобиться обмеження за кількістю запусків. Можна розширити лише віртуальну машину з виконання у ній критичних дій. Наприклад, перевірку результатів відповіді. Виконання віртуального коду набагато складніше для аналізу, отже, розширюючи механізм віртуальної машини, можна домогтися підвищення захищеності АСДО.
2.4. Функціональність системи защиты.
Раніше було розглянуто мети, котрим розробляється система захисту, і навіть методи, за якими цю систему буде побудована. Сформулюємо функції системи захисту, які вона повинна буде надати программисту.
1. Генератор поліморфних алгоритмів шифрування і расшифрования.
2. Віртуальне машина у якій можуть виконуватися полиморфные алгоритмы.
Наголосимо також на, що віртуальна машина то, можливо легко адаптована, з виконання програм іншого назначения.
3. Асиметрична система шифрування данных.
4. Обмеження використання поліморфних алгоритмів по времени.
5. Захист виконуваних файлів від модификации.
6. Контроль за часом можливості запуску виконуваних файлов.
7. Підтримка таблиць відповідностей між іменами зашифрованих файлів і лобіювання відповідних їм алгоритмам шифрования/расшифрования.
8. Упаковка шифруемых данных.
ГЛАВА 3. РЕАЛІЗАЦІЯ СИСТЕМИ ЗАЩИТЫ.
3.1. Вибір коштів розробки та організації системы.
На розробку системи захисту необхідний компілятор, у якого хорошим швидкодією генерованого коду. вимога швидкодії зумовлено ресурсоемкостью алгоритмів шифрування і расшифрования. Також необхідна середовище із хорошою підтримкою COM. Бажано, щоб мова була объектно орієнтований, що має допомогти з розробки досить складного полиморфного генератора.
Природним вибором буде використання Visual З++. Він відповідає всім з необхідними вимогами. Також знадобиться бібліотека для стискування даних. Найкращим кандидатом є бібліотека ZLIB. Тепер на окремо кожен із компонентів, із єдиною метою показати чому було зроблено саме такий вибір. У розгляд ввійдуть: мову З++, середовище Visual З++, бібліотека активних шаблонів (ATL), бібліотека ZLIB.
3.1.1. Коротка характеристика мови програмування С++.
Объектно-ориентированный мову З++ створювався як розширення мови Сі. Розроблений Бьярном Страуструпом (Bjarne Stroustroup) з AT&T Bell Labs в початку 80-х, З++ набув широкого поширення серед програмістів по чотирьом важливим причин.. У мові З++ реалізовано кілька доповнення до стандартному Си.
Найважливішим із цих доповнень є объектная орієнтація, що дозволяє програмісту використовувати объектно-ориентированную парадигму розробки.. Компілятори З++ широко доступні, а мову відповідає стандартам ANSI.. Більшість програм на З++ широко доступні, а мову відповідає стандартам ANSI.. Більшість програм на Сі без різних змін, або із змінами, можна компілювати з допомогою компілятора З++. З іншого боку, чимало програмістів, володіють мовою Сі, можуть відразу почати працювати з компілятором З++, поступово освоюючи його нові возможности.
У цьому непотрібно займатися новим складний объектно-ориентированный мову від початку.. Програми на З++ зазвичай зберігають ефективність програм на Си.
Оскільки розробники З++ приділялася велика увага ефективності генерованого коду, З++ найкраще адресований завдань, де швидкодія коду має важливе значение.
Хоча більшість експертів розглядають З++ як мову, фактично З++ є розвинене объектно-ориентированное розширення Сі, чи объектно-ориентированный «гібрид». Мова допускає змішане програмування (з допомогою концепції програмування Сі і объектно-ориентированной концепції, і це можна зробити охарактеризувати як недостаток.
Объектно-ориентированное програмування (ОВП) (основна методологія програмування 90-х. вона є результатом тридцятирічного досвіду і практики, котрі беруть початок у мові Simula 67 тривають в мовами Smalltalk, LISP, Clu й більш пізніх (Actor, Eiffel, Objective З, Java і З++. ОВП (це стиль програмування, який фіксує поведінка реального світу отже деталі розробки приховані, але це дозволяє тому, хто переймається тим, мислити в термінах, властивих цьому завданні, а чи не програмування. ОВП (це програмування, сфокусована на даних, причому дані і поведінку нерозривно пов’язані. Вони разом становлять клас, а об'єкти є екземплярами класса.
З++ щодо молодий і що розвивається мову, лише у 1998 року був затверджений стандарт ANSI, і ще все компілятори цілком відповідають цьому стандарту. Проте мову дуже популярний і поширений не менше, ніж Си.
Вибір зупинено мовою З++ з таких причин. Оскільки використовуватиметься середовище Visual З++, то немає сенсу відмовитися від переваг мови З++, тим паче, що ваша програма досить складна. Наприклад, механізми винятків можуть бути корисні. Ще однією перевагою є можливість вільно використовувати розумні покажчики на COM інтерфейси, що це часто буває зручне. Використання бібліотеки ATL теж передбачає необхідність мови З++, оскільки він написана саме у нем.
3.1.2. Коротка характеристика середовища Visual C++.
У зв’язку з тим, що сьогодні рівень складності програмного забезпечення дуже високий, розробка додатків Windows з допомогою лише якогоабо мови програмування (наприклад, мови З) значно не може. Програміст повинен затратити багато часу влади на рішення стандартних завдань із створенню многооконного інтерфейсу. Реалізація технології COM вимагає від програміста ще більше складної работы.
Щоб полегшити роботу програміста майже всі сучасні компілятори з мови З++ містять спеціальні бібліотеки класів. Такі бібліотеки містять у собі практично весь програмний інтерфейс Windows і дозволяють йому користуватися при програмуванні засобами вищого рівня, ніж звичайні виклики функцій. У результаті зазнає суттєвого спрощення розробка додатків, мають складний інтерфейс користувача, полегшується підтримка технології COM і їхню взаємодію з базами данных.
Сучасні інтегровані кошти розробки додатків Windows дозволяють автоматизувати процес створення докладання. І тому використовуються генератори додатків. Програміст відповідає стосовно питань генератора додатків яких і визначає властивості докладання — чи підтримує воно многооконный режим, технологію COM, тривимірні керівні органи, довідкову систему. Генератор додатків, створить додаток, відповідальна вимогам, і надасть вихідні тексти. Користуючись їм, як шаблоном, програміст зможе швидко розробляти свої приложения.
Такі кошти автоматизованого створення додатків включені у компілятор Microsoft Visual З++ і називаються MFC AppWizard. Заповнивши кілька діалогових панелей, можна вказати характеристики докладання і отримати її тексти, забезпечені великими коментарями. MFC AppWizard дозволяє створювати однооконные і многооконные докладання, і навіть докладання, які мають головного вікна, -замість нього використовується діалогова панель. Можна ще включити підтримку технології COM, баз даних, довідкової системы.
Середовище Visual З++ 6.0 було обрано як одне з найкращих коштів розробки мовою З++ для ОС Microsoft Windows. Важливим чинником є його підтримка такими утилітами, як Visual Assist, BoundsChecker, які у своє чергу дозволяють створювати програми швидше і якісно. Компілятор Visual З++ генерує досить оптимізований код, що дуже важливо задля розроблюваного приложения.
3.1.3. Коротка характеристика бібліотеки ATL.
Бібліотека активних шаблонів (ATL) є основу для створення невеликих СОМ — компонентів. У ATL використані нові можливості шаблонів, додані в З++. Вихідні тексти цієї бібліотеки поставляються в складі системи розробки Visual З++. З іншого боку, у цю систему розробки введено безліч майстрів Visual З++, що полегшує є початковим етапом створення ATL-проектов.
Бібліотека ATL забезпечує реалізацію ключових можливостей СОМ компонентів. Виконання багатьох рутинних процедур, з якими ми зіштовхнулися розробки останнього прикладу, можна запобігти з допомогою використання класів шаблонів ATL. Наведемо далебі неповний список функцій ATL. Деякі із них розглянуті у цій главе.
. Утиліта AppWizard, призначена до створення первинного ATLпроекта.
. Майстер об'єктів, використовуваний для додавання до проекту компонентів різних типов.
. Підтримка за умовчанням основних інтерфейсів COM, як-от IUnknown и.
IClassFactory.
. Підтримка механізму транспортування користувальницького интерфейса.
. Підтримка базового механізму диспетчеризації (автоматизації) і двунаправленного интерфейса.
. Істотна підтримка розробки невеликих елементів управления.
ActiveX.
Основне завдання ATL є полегшення створення невеликих СОМкомпонентів. Завдання MFC — прискорення розробки великих Windows-приложений. Функції MFC і ATL кілька перекриваються, насамперед у сфері підтримки OLE і ActiveX.
Оскільки розроблюваний модуль захисту не великий і вимагає який або роботи з графічним інтерфейсом, то що природно вибрати його, а чи не тяжча і зайвий за функціональністю MFC.
3.1.4. Коротка характеристика бібліотеки ZLIB.
Бібліотека ZLIB є невелику й зручну бібліотеку на мові З. Її призначення — упаковування й розпакування даних. Оскільки вона поширюється у вихідних кодах, що його буде легко і зручно використовувати в разрабатываемом модулі. Також відзначимо, що ця бібліотека є вільно розповсюджуваній, що ні тягне у себе порушення прав.
3.2. Поліморфний генератор алгоритмів шифрования.
Розглянемо побудова генератора поліморфних алгоритмів шифрування і расшифрования. Ці алгоритми завжди генеруються парами, механізм їх генерації дуже схожий здійснюється одним кодом. Різниця в тому, що використовуються блоки, що виробляють зворотні перетворення. Спочатку розглянемо, яка взагалі виглядають загальний алгоритм шифрования/расшифрования. Потім покажемо, що таке готовий код алгоритму шифрования/расшифрования, і розповімо про віртуальної машині, де він виконується. Також буде призведе отладочный висновок віртуальний машини, демонструє роботу алгоритмів шифрования/расшифрования. Далі буде розглянутий безпосередньо сам алгоритм побудови полиморфного коду, і підраховано можливість генерації однакових алгоритмів та шляхи підвищення складності поліморфних алгоритмов.
3.2.1. Загальні принципи роботи поліморфних алгоритмів шифрування і расшифрования.
Уявімо які генеруються алгоритми шифрования/расшифрования в загальному вигляді. Вони складаються з 8 функціональних блоків, деякі з них можуть повторюватися. На малюнку 5 приведено абстрактна схема роботи алгоритму шифрования/расшифрования. Повторювані блоки є такі эллипсами, які перебувають під квадратами. Кількість таких блоків вибирається випадково при генерації кожної нової пари алгоритмів. Функціональні блоки і їх номер відзначені числом у маленькому прямокутнику, розміщеним у правом верхньому розі великих блоков.
Відразу відзначимо, що з свою роботу віртуальна машина використовує віртуальні регістри і пам’ять. Початкова вміст віртуальної пам’яті, як і саме сгенерированный алгоритм, зберігається в файлі. Наприклад, саме у віртуальної пам’яті то, можливо записано, скільки байт необхідно розшифрувати. Деякі віртуальні регістри і віртуальні осередки пам’яті містять сміття не використовуються або використовуються в неодружених блоках. Вільні блоки складаються з однієї або більш базових інструкцій віртуальної машини. Вони є функціональними блоками, та його опис буде опушено. Холостим блокам буде приділено увагу наступному розділі. На схемою довільні регистры/ячейки пам’яті позначаються як літера, А цифрою. Поліморфний генератор випадково вибирає, який саме регістр чи осередок пам’яті буде задіяно у кожному конкретному алгоритмі шифрования/расшифрования. Розглянемо тепер кожен із функціональних блоків докладніше. [pic].
Малюнок 5. Алгоритм шифрования/расшифрования загалом виде.
Блок 1 заносить в віртуальний регістр чи зміну (позначимо її як A1) адресу шифруемого/расшифруемого блоку даних. Для віртуальної машини ця адреса насправді завжди є нулем. Річ у тім, що коли відбувається виконання віртуальної інструкції модифікації даних, то віртуальна машина додає до цієї адреси справжню адресу у пам’яті вже з нею виробляє операції. Можна уявити A1 як індекс в масиві шифруемых/расшифруемых даних, адресованих з нуля.
Блок 2 заносить в віртуальний регістр чи зміну (позначимо її як A2) розмір блоку даних. А2 виконує роль лічильника в циклі перетворення даних. Зауважимо, що його значення завжди у 4 рази менше, ніж справжній розмір шифруемых/расшифруемых даних. Це з тим, що полиморфные алгоритми завжди працюють із блоками даних, кратних за величиною 4 байтам. Причому, операції перетворення виконуються над блоками, кратними 4 байтам. Про вирівнювання даних із 4 байта піклуються більш высокоуровневые механізми, використовують віртуальну автомобіль і полиморфные алгоритми для шифрування і расшифрования даних. Постає питання, звідки алгоритму «знати », якого розміру блок він повинен зашифрувати, адже за його генерації такий інформації просто немає. Необхідна значення він бере з осередки пам’яті. Віртуальне машина пам’яті знає саме про цю осередку пам’яті і для початком виконання полиморфного алгоритму заносить туди необхідне значение.
Блок 3 поміщає в віртуальний регістр чи зміну (позначимо її як A3) константу, що у перетворення. Ця константа, можливо, потім і кільця нічого очікувати використана для перетворення даних, все залежить від цього, який код буде сгенерирован. Блок 3 може бути повторений кілька разів. Над даними здійснюється повний набір різних перетворень, в кожному їх беруть участь різні регистры/переменные, инициализированные у блоці 3.
Блок 4 може бути основним. Саме він, а, точніше, набір цих блоків виробляє шифрование/расшифрование даних. Кількість цих блоків випадково і дорівнювала кількості блоків номер 3. При перетвореннях буде обов’язково використано значення з A3. Наприклад, замість A3 може використовуватися константа чи значення з лічильника. На цей час поліморфний генератор підтримує 3 виду перетворень: побітове «який виключає чи «(XOR), складання і віднімання. Набір цих перетворення можна легко розширити, головне, щоб таке перетворення мало зворотний операцию.
Блок 5 служить збільшення A1 на одиницю. Як у всіх інших блоках війни операція можуть виконати по-різному, тобто із використанням різних елементарних інструкцій віртуальної машины.
Блок 6 організує цикл. Він зменшує значення A2 на одиницю, і якщо результат досягнуто не дорівнює 0, то віртуальна машина переходить до виконання четвертого блоку. Насправді управління може бути передане однією з неодружених блоків між блоком 3 і 4, але з функціональної погляду це значення не имеет.
Блок 7 виробляє перевірку обмеження з часу використання алгоритму. Код з перевірки на обмеження за часом належить до холостим командам і насправді, може бути і виконуватися в коді велике кількість раз. Те, що ставиться до холостим блокам коду зовсім не від отже, що він не нести функціонального навантаження. Він справді перевіряти обмеження, але, як та інші вільні блоки, може розташовуватися довільним чином у порожніх проміжках між функціональними блоками. Оскільки це блок може теоретично будь-коли зустрітися серед неодружених блоків, то хоч одне разів його слід виконати. Саме тому і винесено як із функціональних блоків. Якщо навіть за генерації алгоритму від генератора непотрібен обмеження за часом, то ролі аргументу до віртуальної команді перевірки часу використовується спеціальне число.
Блок 8 завершує роботу алгоритма.
3.2.2. Віртуальне машина до виконання поліморфних алгоритмов.
Спочатку наведемо список інструкцій, підтримуваних нині віртуальної машиною. Коди цих інструкцій мають тип E_OPERATION і визначені у файлі p_enums.h так: enum E_OPERATION // Інструкції { EO_ERROR = -1, // Неприпустима інструкція EO_EXIT0, EO_EXIT1, EO_EXIT2, // Кінець роботи EO_NOP0, EO_NOP1, EO_NOP2, EO_NOP3, // Порожні команди EO_TEST_TIME0, EO_TEST_TIME1, // Контроль часу EO_MOV, EO_XCHG, // Пересилання даних EO_PUSH, EO_POP, // Робота зі стеком EO_XOR, EO_AND, EO_OR, EO_NOT, // Логічні операції EO_ADD, EO_SUB, EO_MUL, EO_DIV, EO_NEG, // Арифметичні операції EO_INC, EO_DEC, EO_TEST, EO_CMP, // Операції сравнения.
// (впливають на прапори) EO_JMP, EO_CALL, EO_RET, // Оператори безумовного переходу EO_JZ, EO_JNZ, EO_JA, EO_JNA, // Умовні переходи };
У таблиці 1 приведено інформація за цими інструкціям та перераховані їх аргументы.
Таблиця 1. Опис інструкцій віртуальної машини. |Назва |Дія | |EO_EXIT0 |Команди роботи. Після цього її виконання | |EO_EXIT1 |віртуальна машина зупиниться, і управління буде | |EO_EXIT2 |передано вище. Дані інструкції аргументів немає. | |EO_TEST_TIME0 |Команди контролю часу. Мають один аргумент — | |EO_TEST_TIME1 |останній доступний день використання. | |EO_MOV |Команда пересилки даних. Має два аргументу — джерело| | |і одержувач. | |EO_XCHG |Ця команда обмінює значення двох регістрів чи | | |осередків пам’яті, переданих двох аргументах. | |EO_PUSH |Зберігає переданий на стеці. | |EO_POP |Знімає значення з вершини стека й поміщає в зазначену | | |осередок пам’яті чи регістр. | |EO_XOR |Логічний операція XOR. Має два аргументу. Результат | | |міститься у осередок пам’яті чи регістр, переданий в | | |ролі першого аргументу. |.
Продовження таблиці 1. Опис інструкцій віртуальної машини. |Назва |Дія | |EO_AND |Логічний операція AND. Має два аргументу. Результат | | |міститься у осередок пам’яті чи регістр, переданий в | | |ролі першого аргументу. | |EO_OR |Логічний операція OR. Має два аргументу. Результат | | |міститься у осередок пам’яті чи регістр, переданий в | | |ролі першого аргументу. | |EO_NOT |Логічний операція NOT. Має один аргумент. Результат | | |міститься у осередок пам’яті чи регістр, переданий в | | |ролі аргументу. | |EO_ADD |Арифметична операція складання. Має два аргументу. | | |Результат міститься у осередок пам’яті чи регістр, | | |переданий як аргументу. | |EO_SUB |Арифметична операція вирахування. Має два аргументу. | | |Результат міститься у осередок пам’яті чи регістр, | | |переданий як аргументу. | |EO_MUL |Арифметична операція множення. Має два аргументу. | | |Результат міститься у осередок пам’яті чи регістр, | | |переданий як аргументу. | |EO_DIV |Арифметична операція розподілу. Має два аргументу. | | |Результат міститься у осередок пам’яті чи регістр, | | |переданий як аргументу. | |EO_NEG |Арифметична операція зміни знака. Має один | | |аргумент. Результат міститься у осередок пам’яті чи | | |регістр, переданий як аргумент. | |EO_INC |Збільшує значення осередки пам’яті чи регістру на | | |одиницю, переданої в єдиному аргументі. | |EO_DEC |Зменшує значення осередки пам’яті чи регістру на | | |одиницю, переданої в єдиному аргументі. | |EO_TEST |Операція порівняння двох аргументів на рівність. Якщо | | |аргументи рівні, то прапор ZERO виставляється в true, в | | |іншому разі в false. | |EO_CMP |Операція порівняння двох аргументів. Якщо аргументи | | |рівні, то прапор ZERO виставляється в true, у протилежному | | |разі false. Якщо Сталін перший аргумент менше другого, то | | |прапор ABOVE виставляється в true, інакше в | | |false. |.
Продовження таблиці 1. Опис інструкцій віртуальної машини. |Назва |Дія | |EO_JMP |Ця інструкція здійснює безумовний перехід по | | |адресою, зазначеному як аргумент. | |EO_CALL |Ця інструкція здійснює виклик функції адресою, | | |зазначеному як аргумент. | |EO_RET |Ця інструкція повертає управління попередньої | | |функції. Аргументів немає. | |EO_JZ |Умовний перехід за адресою, зазначеному як | | |аргументу. Умовою є ZERO == true. | |EO_JNZ |Умовний перехід за адресою, зазначеному як | | |аргументу. Умовою є ZERO == false. | |EO_JA |Умовний перехід за адресою, зазначеному як | | |аргументу. Умовою є ABOVE == true. | |EO_JNA |Умовою є ABOVE == false. |.
Зазначимо, що аргументи може бути наступних типов:
EOP_REG — Регистр
EOP_REF_REG — Пам’ять за адресою в регистре.
EOP_VAR — Переменная.
EOP_REF_VAR — Пам’ять за адресою в переменной.
EOP_CONST — Константне значение.
EOP_RAND — Випадкове число. Перелічені типи були оголошені у файлі p_enums.h.
Наприклад, наведемо як буде перепрасувати код складання регістру N 1 з константою 0×12 345: DWORD AddRegAndConst[] = { EO_ADD, EOP_REG, 1, EOP_CONST, 0×12 345 };
Для наочної демонстрації, як відбувається виконання коду в віртуальної машині при шифровании/расшифровании даних, наведемо уривок із листа отладочного звіту. Кожне дію, у отладочном режимі протоколюється в файлі uniprot.log. Завдяки цьому, було легко налагоджувати механізм генерації поліморфних алгоритмів саму роботу алгоритмів. Додатковим результатом створення механізму протоколювання стала можливість показати, як відбувається виконання алгоритму шифрування расшифрования. Нижче наведено уривок із листа файла uniprot. log, належить до процесу шифрування даних. З метою скорочення обсягу тексту, зібрано дублирующийся висновок всередині циклу. Також при генерації цього алгоритму були виставлено вкладеність шифрування рівна одиниці, і майже зібрано вільні блоки.
=== Start TranslateOperations === mov RAND ==> REG2 xchg REG2 VAR16 REG2 VAR16 mov CONST ==> VAR11 dec VAR11 ==> VAR11 cmp VAR11 CONST jnz CONST.
mov RAND ==> REG6 xchg VAR14 VAR12 VAR14 VAR12 mov CONST ==> VAR15 add VAR15 VAR18 ==> VAR15 mov RAND ==> REG4 mov CONST ==> VAR19 add VAR19 VAR9 ==> VAR19 add REG8 REG7 ==> REG8 xchg REG2 VAR13 REG2 VAR13.
Эта частина повторюється багаторазово: mov RAND ==> REG6 xor REF_VAR11 VAR14 ==> REF_VAR11 mov RAND ==> REG4 mov RAND ==> REG9 xor REF_VAR11 VAR15 ==> REF_VAR11 sub VAR11 CONST ==> VAR11 mov RAND ==> REG7 dec VAR14 ==> VAR14 cmp VAR14 CONST jnz CONST …
mov RAND ==> REG1 add REG9 REG6 ==> REG9 test_time1 VAR10 OK TIME (continue) exit.
3.2.3. Генератор полиморфного коду 3.2.3.1. Блокова структура полиморфного кода.
Основу генератора полиморфного коду становлять таблиці вибору. Як було вже описано раніше, алгоритм шифрування і расшифрования складається з восьми обов’язкових функціональних блоків. Кожен блок хоч і виконає суворо певну функцію, але, можливо реалізований багатьма способами. Причому з різних віртуальних регістрів і заснування віртуальних осередків пам’яті. Можливі комбінації реалізації блоку описані у спеціальних таблицях наступного виду, про які буде вказано пізніше. //——————————————————————————————— // Блок N5. (x1) // Служить в організацію циклу. // ES_VARIABLE0 — осередок, яка то, можливо зайнята під лічильник. // ES_REG0 — регістр, що може бути зайнятий під лічильник. // ES_ADDRESS0 — куди перейти для повтору цикла.
BLOCK_START (0500) EO_DEC, EOP_VAR, ES_VARIABLE0, EO_CMP, EOP_VAR, ES_VARIABLE0, EOP_CONST, 0, EO_JNZ, EOP_CONST, ES_ADDRESS0 BLOCK_END (0500).
BLOCK_START (0501) EO_DEC, EOP_REG, ES_REG0, EO_CMP, EOP_REG, ES_REG0, EOP_CONST, 0, EO_JNZ, EOP_CONST, ES_ADDRESS0 BLOCK_END (0501).
BLOCKS_START (05) BLOCK (0500) BLOCK (0501) BLOCKS_END (05).
BLOCKS_SIZE_START (05) BLOCK_SIZE (0500) BLOCK_SIZE (0501) BLOCKS_SIZE_END (05) //——————————————————————————————-;
Під полиморфизмом розуміється як вибір, і поєднання довільного набору блоків, а й їхні розташування у пам’яті. Слід зазначити, що аж побудова алгоритму з набору різних блоків досить складна процедура. Оскільки необхідно враховувати використання віртуальних регістрів й віртуальною пам’яті, які у різних блоках по-різному. Наприклад, використання певного регістру як лічильника у другому блоці автоматично призводить до обліку цієї особливості та призначення цього регістру у всіх інших блоках.
Як було зазначено раніше, алгоритми шифрування і расшифрования генеруються одним алгоритмом і функціонально різняться лише блоками перетворень даних. У цьому їх схожість закінчується. Коди алгоритму шифрування і расшифрования можуть цілком несхожі друг на одного й складатися з різного набору інструкцій віртуальної машины.
Повернімося до розподілу блоків у пам’яті. Поза тим, кожен алгоритм складається з довільного набору функціональних блоків, ці блоки немає фіксованого місця розташування. Скажімо, під весь алгоритм виділено 200 байт, а розмір всіх блоків у сумі становить 100 байт. У результаті становище цих блоків хіба що «плаває «від однієї згенерованого алгоритму до іншого. Повинно виконуватися лише одну умову: дотримання чіткої послідовності розташування блоків. Тобто, адресу розташування блоку з великим номером може бути менше, ніж адресу блоку із меншим номером. Для наочності наведемо малюнок 6.
[pic]Рисунок 6. Розташування функціональних блоків в памяти.
Білим кольором показані все функціональні блоки. Сірим кольором відзначені порожні місця, які заповнені довільними холостими блоками. Може вийти, наприклад, і такі картина розподілу блоків, коли між деякими немає проміжку заповнюваного холостими блоками. Така ситуація показано малюнку 7.
[pic]Рисунок 7. Щільне розташування функціональних блоків в памяти.
Як функціональні блоки, і вільні, може мати різну довжину. Після випадкового розташування функціональних блоків відбувається заповнення порожніх просторів з-поміж них холостими блоками. Причому, існують вільні блоки довжиною 1, щоб можна було заповнити порожні місця у будь-якому разі. Розмір пам’яті, виділений під створюваний код алгоритму, вибирається довільно. У цьому версії він у межах від 160 до 200 байт. Це запасом покриває максимально необхідний розмір пам’яті, необхідний розміщення 8 найбільших функціональних блоків з всіх можливих, і місце під вільні блоки. Більше великий поліморфний код хоч і буде складніше для аналізу, але це може істотно уповільнити процес шифрування і расшифрования. У цій найкраще дотримуватися розумного баланса.
3.2.3.2. Алгоритм генерації полиморфного кода.
Наведемо тепер пошагово як працює генератор полиморфного коду. 1. У першому етапі вибираються характеристики майбутніх алгоритмів. До них относятся:
a) розмір пам’яті, виділеної під код;
б) у яких регістрах чи осередках розташовуватимуться покажчики на модифицируемый код;
р) скільки вже разів повторюватимуться функціональні блоки 3 і 4;
буд) у яких регістрах чи осередках розташовуватимуться лічильники циклов;
У цьому кількість повторень блоків 3 і 4 має бути однаковим й у алгоритму шифрування й у алгоритму расшифрования, оскільки кожної команді перетворення даних при шифруванні мусить бути сопоставлена зворотна команда в алгоритмі расшифрования. 2. Віртуальне пам’ять, яка у алгоритмі, заповнюється випадковими значення. 3. Складається 1-ый функціональний блок і міститься у проміжне хранилище.
а) Випадковим чином шукається підходящий перший блок. Критерій пошуку — блок повинен використовувати регістр чи осередок пам’яті під покажчик, залежно від цього які характеристики було обрано першою шаге.
(пункт б).
б) У код блоку підставляється відповідний номер регістру чи адресу віртуальної осередки пам’яті. 4. Складається 2-ой функціональний блок і міститься у проміжне сховище. Алгоритм створення подібний до алгоритму, описаного за крок 3. Але тільки тепер підставляється як номер регістру чи осередки пам’яті, куди поміщається значення, а й адресу пам’яті з джерелом. У цей осередок пам’яті надалі віртуальна машина розміщувати розмір шифруемой/расшифруемой області. 5. Необхідна кількість раз створюються та вкладаються у проміжне сховище функціональні блоки під номером 3. Механізм їх генерації також схожий із кроками 3 і 4. Відмінністю і те, деякі константи в коді блоку замінюються випадковими числами. Наприклад, цих значень при шифруванні чи расшифровании складатимуться з преобразуемыми осередками пам’яті, вычитаться тощо. 6. Підраховується розмір вже сгенерированных блоків. Ця кількість потім використовуватиметься випадкової генерації адреси початку блоків в циклі. 7. Розраховується розмір пам’яті, який виділено під вже згенеровані блоки (розташовані до циклу) з резервуванням місця під вільні блоки. Також підраховується адресу першого блоку в циклі. 8. Необхідна кількість раз створюються та міститься у проміжне сховище функціональні блоки під номером 3. Це крок трохи складніше, ніж інші. Тут дуже сильна залежність між сгенерированным кодом шифрування і расшифрования. У коді расшифрования використовуються зворотні дією дії щодо операцій шифрування. Водночас містяться у зворотної послідовності. 9. Складається 5-ый функціональний блок і міститься у проміжне сховище. 10. Складається 6-ї функціональний блок і міститься у проміжне сховище. Це блок, організуючий цикл, й тому він використовує адреси, розраховані кроці 7. 11. Складається 7-ой функціональний блок і міститься у проміжне сховище. 12. Складається 8-ой функціональний блок і міститься у проміжне сховище. 13. Створені функціональні блоки розміщуються лише у області пам’яті з проміжками випадкового розміру. Після цього виходить картина така тим, що наведено на малюнках 6 і аналогічних сім. 14. Решта проміжки заповнюються випадково обраними холостими блоками. У цьому ці блоки також піддаються модифікації кода.
Наприклад, підставляються випадкові, але невикористовувані номери регістрів, записуються випадкові константи тощо. 15. Відбувається запис в файл необхідних ідентифікаторів, структур, різних даних, і самого полиморфного коду. У результаті отримуємо те, що називається файлом з поліморфний алгоритмом.
3.2.3.3. Таблиці блоків для генерації полиморфного кода.
Вище неодноразово згадувалися таблиці блоків, серед яких вибір. Наведемо задля прикладу частина таблиці з блоками N 1 і опишемо її пристрій. //——————————————————————————————— // Блок N0. (x1) // Служить для ініціалізації покажчика нулем. // ES_VARIABLE0 — осередок яка то, можливо зайнята під покажчик. // ES_REG0 — регістр що може бути зайнятий під покажчик. BLOCK_START (0000) EO_MOV, EOP_VAR, ES_VARIABLE0, EOP_CONST, 0 BLOCK_END (0000).
BLOCK_START (0001) EO_MOV, EOP_REG, ES_REG0, EOP_CONST, 0 BLOCK_END (0001).
BLOCK_START (0002) EO_PUSH, EOP_CONST, 0, ES_RANDOM_NOP, ES_RANDOM_NOP, EO_POP, EOP_REG, ES_REG0 BLOCK_END (0002).
.. .. .. .
BLOCKS_START (00) BLOCK (0000) BLOCK (0001) BLOCK (0002) BLOCK (0003). .. .. BLOCKS_END (00).
BLOCKS_SIZE_START (00) BLOCK_SIZE (0000) BLOCK_SIZE (0001) BLOCK_SIZE (0002) BLOCK_SIZE (0003). .. .. BLOCKS_SIZE_END (00) //——————————————————————————————-;
Розглянемо рядок «BLOCK_START (0000) ». BLOCK_START представляє собою макрос що робить код зрозумілішим і розкривається так: #define BLOCK_START (num) const static int block_##num [] = { BLOCKS_END розкривається у: #define BLOCK_END (num) }; const size_t sizeBlock_##num = CALC_ARRAY_SIZE (block_##num);
Отже, BLOCK_START і BLOCK_END дозволяє їм отримати іменований масив та її довжину. Це зручне автоматичного побудови масиву покажчиків на блоки та його довжину. Нам найцікавіше ці допоміжні макроси, а наступна рядок. EO_MOV, EOP_VAR, ES_VARIABLE0, EOP_CONST, 0.
Це одне із варіантів реалізації першого блоку. EO_MOV означає, що виконано команда пересилки даних. EOP_VAR означає, що поставив запис здійснюватиметься в осередок пам’яті. Цей блок ніколи стане обраним, якщо виборі характеристик алгоритму буде вирішено, під покажчик необхідно використовувати регістр. Якщо буде й прийнято рішення використовувати осередок пам’яті, цей блок потрапить у список з якого потім випадково буде зроблено вибір. ES_VARIABLE0 це ідентифікатор цього разу місце якого «буде підставлений номер перемінної, використовуваної для зберігання покажчика. Цей номер також генерується на етапі вибору характеристик. EOP_CONST означає, що перемінної буде присвоєно значення константи. Цим значенням є 0.
Так інтерпретується рядок: EO_MOV, EOP_REG, ES_REG0, EOP_CONST, 0. Але тепер, замість віртуальної осередки пам’яті виступає віртуальний регістр. Цікавіший є такий блок: EO_PUSH, EOP_CONST, 0, ES_RANDOM_NOP, ES_RANDOM_NOP, EO_POP, EOP_REG, ES_REG0.
Принцип його роботи у наступному. На вершину стека поміщається константне значення однакову 0. На місце ES_RANDOM_NOP поміщаються довільний холостий блок. Останній рядку відбувається отримання значення з стека і запис їх у віртуальний регістр, обраний під указатель.
Макроси BLOCKS_START і BLOCKS_SIZE_START носять допоміжний характері і уявити не можуть великого інтересу. Вони просто будують таблиці адрес різних блоків та його размеров.
3.2.4. Унікальність генерованого полиморфного алгоритму і складність його анализа.
Важлива ідея в разрабатываемом модулі захисту криється у побудові складного для аналізу полиморфного коду, що має перешкоджати побудові зворотного алгоритму, позаяк у захищуваних системах часто просто неможливо зберігати ключі окремо від даних. Якщо є доступом до ключам, то і збільшується ймовірність якимось чином зробити несанкціоновані дії. З цього випливає необхідність створення складних для аналізу алгоритмів шифрования/расшифрования. Однією з цих коштів є віртуальна машина. Іншим — використання поліморфних алгоритмів. Це утрудняє спроби з аналізу механізмів шифрування даних, оскільки повний аналіз одного алгоритму обмаль у аналізі іншого. Чим більший можливо варіантів побудови полиморфного коду, тим паче трудомісткою стає процедура аналізу. Отже, можна сказати, що критерій надійності підвищується із кількості можливих варіантів полиморфного коду. Підрахуємо кількість можливих варіантів, котрі можуть згенерувати розроблений генератор полиморфного кода.
Можливість генерації двох однакових пар становить: (232*3)^5 (3.5*1050. Де 232 — випадково використовувана константа для шифрування. 3 — кількість можливих операцій над числом. 5 — якомога більше проходів для шифрування. Фактично це означає що дві однакових алгоритму ні ніколи сгенерированы цієї системою. Але не є метою. Бо те що ні генеруються 2 однакових алгоритму, байдуже. Важливо що «аналіз таких різнорідних механізмів шифрования/расшифрования дуже погано піддаватися анализу.
Покажемо з прикладу, що став саме можуть дати полиморфные алгоритми. Припустимо хтось задумав створити універсальний редактор звітів про виконаних роботах, створюваних АРМ студента. У цьому вся звіті зберігається оцінка про тестуванні. Її виправлення і мета. АРМ студента шифрує файл зі звітом унікальним полиморфным алгоритмом, сгенерированным спеціально для даного студента. Ключ расшифрования у студента не зберігається. Він перебуває в АРМ викладача і є для ідентифікації, що студент виконав роботу саме на АРМ. Інакше файл зі звітом просто більше не расшифруется.
Для обходу такої системи можна піти двома шляхами. Перший варіант полягає у эмуляции системи генерації звітів й порядку використання наявного файла з алгоритмом шифрування. Друга можливість — це створення алгоритму расшифрования за алгоритмом шифрування. Після цього файл зі звітом можна буде легко розшифрувати, модифікувати і знову зашифрувати. У обох випадках доведеться розбиратися, як використовувати надані COM сервіси модуля захисту, що саме собою не просте завдання. Але, скажімо, це було зроблено, і сьогодні ми зупинимося інших моментах.
У першому випадку може знадобитися розробляти досить складну систему із єдиною метою эмуляции генератора звіту. Це дуже труднореализуемо. У певному сенсі доведеться повторити більшу частину функціональності АРМ студента. Тож якщо в звіті зберігатимуться питання, хто був задано студентові, то, фактично, доведеться з цим базою запитань і випадково вибирати їх. Інакше, якщо використовувати суворо певний набір, те в всіх, хто скористається такий системою зламування, збігатимуться звіти. Це можуть призвести до підозрі із боку викладача. Отже, в грамотне й складно організованою АСДО цей підхід мало применим.
Залишився другий шлях, що полягає у генерувальників зворотного алгоритму. Тут по дорозі і постає багатоваріантність коду. Неможливо застосувати маску з метою пошуку функціональних блоків, отже, і їх виділити. Можна тільки написати високоінтелектуальний аналізатор коду, який перетворить алгоритм в псевдокод, а потім уже потім нього побудує зворотний. Це дуже складне завдання. Причому, для написання такий програми доведеться досконально вивчити код віртуальної машини. У разі, коли вихідні коди відсутні, це може перетворитися на непосильним завданням. Точніше сказати, в надто дорогою у своїй реалізації, підвладне й в написанні лише высококвалифицированному специалисту.
Якщо хтось реалізує другого варіанта програми, то невеликого розширення бази блоків у вихідних кодах буде досить, щоб всю роботу знадобилося проробити заново.
На погляд, створена система досить складна у плані аналізу та може ефективно допомогти захищати АСДО та інші програми від несанкціонованих действий.
3.3. Особливості реалізації модуля защиты.
Розроблюваний модуль захисту Uniprot являтиме файл типу dynamic link library (DLL) безпосередньо з ім'ям Uniprot.dll.
Для організації взаємодії модуль захисту надає набір інтерфейсів з допомогою технології COM. Для описи інтерфейсів використовується спеціальну мову — IDL, за своєю структурою дуже схожий на З++. У визначенні інтерфейсу описуються заголовки назв функцій із їхніх імен, які повернуться типів, вхідних і вихідних параметрів, а також їхніх типів. Докладно з наданими інтерфейсами можна буде потрапити ознайомитися розділ 4.2. Інтерфейси, достойні IDL файлі, перетворюються IDL-компилятором (MIDL.EXE) в двоїчний формат і записуються в файл з розширенням TLB, що називається бібліотекою типів. Цей файл буде необхідний, наприклад, від використання модуля Uniprot. dll з середовища Visual Basic. З процесом підключення TLB файлів в Visual Basic можна ознайомитися розділ 4.4.2.
Для реєстрації модуля у системі необхідно викликати у ньому функцію DllRegisterServer, яка внесе потрібні зміни до реєстру. Для цього можна скористатися утилітою regsvr32.exe. Вона поставляється разом із операційній системою, тому повинна бути про всяк машині. Regsvr32 повинна завантажити СОМ-сервер і може викликати у ньому функцію DllRegisterServer, яка внесе потрібні зміни у реестр.
Організація роботи з зашифрованими файлами будується з урахуванням механізмів дескрипторів (чи описателей файла). Кожному відкритого чи створеному файлу призначається унікальний (у межах цього процесу) ідентифікатор, являє собою число в форматі short. Цей ідентифікатор повертається викликає програмі, після що хоче може проводити з цього файлом набір операцій. Усі номери відкритих файлів зберігаються в внутрішньої таблиці модуля, і кожному їх відповідає структура даних, необхідна до роботи з нею. Зокрема, там зберігається поточна позиція для читання даних, алгоритм для шифрования/расшифрования даних. Коли роботу з файлом завершено, програма повинна закрити файл з відповідним ідентифікатором. Він вивели із таблиці, й у наступний раз той самий ідентифікатор може бути до роботи з іншим файлом. Якщо файл нічого очікувати закритий, то після завершення програми, використовує модуль захисту, файл буде пошкоджений, і із ним надалі неможлива. 3.4. Захист виконуваних файлов.
Однією з коштів, які входять у комплект розроблюваної системи має стати програма за захистом їхню відмінність від модифікації. Вирішили використовувати вже наявні механізми шифрування, засновані на поліморфний алгоритми. Про переваги такого методу говорилося раніше. Уперших, це велика складність створення універсального зломщика, а, по-друге, можливість заборони запуску програм без наявності файла з алгоритмом расшифрования.
Розроблена програма має дві можливих режиму запуску. Перший — для генерації зашифрованого файла із зазначеного виконуваного модуля. Другий -для запуску захищеного модуля. Розглянемо кроки, які виконує механізм шифрування вихідного файла.
1. Ініціалізація бібліотеки Uniprot.
2. Читання виконуваного файла в память.
3. Запуск виконуваного файла із прапором зупинки. Тобто програма завантажується, але управління не получает.
4. Читання частин завантаженою програми розвитку й пошук її відповідних частин у прочитане файлі. Знайдені частини коду зберігаються окремо. Після цього їхнє місце в буфері з прочитаним файлом замінюються випадковими значениями.
5. Генерація алгоритму шифрування і расшифрования.
6. Запис в зашифрований файл буфера з прочитаним, та був зміненим файлом. У цей самий файл пишуться виділені фрагменти кода.
7. Видалення файла шифрування, оскільки він понад не надає интереса.
Тепер на кроки, що виконує механізм що запускає зашифрований файл на исполнение.
1. Пошук відповідного файла з алгоритмом расшифрования.
2. Створення тимчасового виконуваного файла і запис до нього «зіпсованого «файла (див. механізм шифрування, пункт 4).
3. Запуск «зіпсованого «виконуваного файла із прапором зупинки. Тобто програма завантажується, але управління не получает.
4. Відновлення «зіпсованих «місць у пам’яті. Початковий код для виправлення також зберігається в зашифрованому файле.
5. Передача управління розшифрованому файлу.
6. Чекання закінчення виконання запущеній программы.
7. Видалення тимчасового файла.
Як очевидно з описи, ця програма достатня проста у своїй устрої і достатня ефективна. ГЛАВА 4. ЗАСТОСУВАННЯ СИСТЕМИ ЗАЩИТЫ.
4.1. Склад бібліотеки Uniprot До складу бібліотеки входять такі компоненты:
1. Вихідні тексти COM модуля Uniprot.dll.
2. Вихідні тексти програми ProtectEXE.exe.
3. Окремо зібрані файли, необхідних підключення Uniprot.dll.
Цими файлами є: export. cpp, export. h, Uniprot.tlb.
4. Файл reg_uniprot.bat для реєстрації COM модуля Uniprot.dll.
5. Керівництво програміста з використання модуля Uniprot.dll.
6. Керівництво програміста з використання програми ProtectEXE.exe.
7. Набір прикладів написаних на Visual Basic, котрі демонструють роботи з бібліотекою Uniprot.
4.2. Керівництво програміста з використання модуля Uniprot.dll.
Спочатку опишемо допоміжний тип CreateMode, вживаний у методі Create. Він описує тип створюваного зашифрованого файла. У цьому версії модуля Uniprot може мати два значення: DEFAULT і DISABLE_ARC. Перший їх повідомляє функції, що буде створено звичайний зашифрований файл. Дані у ньому спочатку упаковані бібліотекою zlib, та був вже зашифровані. Це може дати суттєву перевагу щодо зменшення розміру вихідного файла, наприклад, на картинках в форматі BMP чи простому тексті. Використання DISABLE_ARC призведе до створення зашифрованого, але з стиснутого файла. Це дасть виграш за часом при розпакуванню і упаковці, але з зменшить розмір зашифрованого файла. Це може бути корисно при шифруванні вже стиснутих файлів. Прикладом можуть бути картинки в форматі JPG.
enum CreateMode { DEFAULT = 0, DISABLE_ARC = 1 } CreateMode;
Тепер опишемо функції, надані інтерфейсом IProtect. У цілому цей інтерфейс зібрані функції загального плану і генерації файлів з полиморфными алгоритмами шифрування і расшифрования.
interface IProtect: IDispatch {.
[id (1), helpstring («method GetInfo »)].
HRESULT GetInfo (.
[out] short *version, [out] BSTR *info);
[id (2), helpstring («method Generate UPT files »)].
HRESULT GenerateUPTfiles (.
[in] BSTR algorithmCryptFileName,.
[in] BSTR algorithmDecryptFileName);
[id (3), helpstring («method Generate Time Limit UPT files »)].
HRESULT GenerateTimeLimitUPTfiles (.
[in] BSTR algorithmCryptFileName,.
[in] BSTR algorithmDecryptFileName,.
[in] long LimitDays);
[id (4), helpstring («method Generate Time Limit UPT files »)].
HRESULT GenerateTimeLimitUPTfiles2(.
[in] BSTR algorithmCryptFileName,.
[in] BSTR algorithmDecryptFileName,.
[in] long LimitDaysCrypt,.
[in] long LimitDaysDecrypt); };
Теперь опишемо кожну з функцій інтерфейсу IProtect.
HRESULT GetInfo ([out] short *version, [out] BSTR *info);
Функція GetInfo повертає рядок зі стислої інформації про даному модулі та її версії. Можливо використана щоб одержати виряджаючи даних про модулі. Наприклад, ім'я автори і рік створення. Версія зберігається як числа наступним чином: 0×0100 — версія 1.00, 0×0101 — версія 1.01, 0×0234 — версія 2.34 і таке інше. Опис використовуваних параметрів: version — сюди буде занесена версія модуля. info — сюди буде занесена рядок зі стислої інформацією щодо модуле.
HRESULT GenerateUPTfiles (.
[in] BSTR algorithmCryptFileName,.
[in] BSTR algorithmDecryptFileName);
Функція GenerateUPTfiles генерує два файла-ключа. Вони уявляють собою згенеровані полиморфным генератором алгоритми шифрування і расшифрования. У цьому розшифрувати зашифрований файл можна тільки відповідним алгоритмом расшифрования. Генерируемая пара ключів на практиці унікальна. Можливість генерації двох однакових пар становить: (232*3)^5 (3.5*1050. Де 232 — випадково використовувана константа для шифрування. 3 — кількість можливих операцій над числом. 5 — максимальне кількість проходів для шифрування. Опис використовуваних параметрів: algorithmCryptFileName — ім'я вихідного файла з алгоритмом шифрування. algorithmDecryptFileName — ім'я вихідного файла з алгоритмом расшифрования.
HRESULT GenerateTimeLimitUPTfiles (.
[in] BSTR algorithmCryptFileName,.
[in] BSTR algorithmDecryptFileName,.
[in] long LimitDays);
Функція GenerateTimeLimitUPTfiles генерує два файла-ключа, обмежених використання за часом. У цілому нині функція еквівалентна GenerateUPTfiles, але які генеруються нею алгоритми мають додаткове властивість. Їх використання обмежена певним часом. Кількість днів, протягом що вони працюватимуть, вказується у третій параметрі LimitDays. Відлік починається з цього дня. Це може бути корисним, наприклад, обмеження терміну використання проектів. Природна захист як така ненадійна, оскільки неможливо захисту від перекладу годин на комп’ютері чи модифікації коду модуля захисту з єдиною метою видалення відповідних перевірок. Але тим щонайменше це може дати додаткові властивості захищеності, по крайнього заходу від рядових користувачів. Опис використовуваних параметрів: algorithmCryptFileName — ім'я вихідного файла з алгоритмом шифрування. algorithmDecryptFileName — ім'я вихідного файла з алгоритмом расшифрования. LimitDays — кількість днів, протягом яких функціонувати згенеровані алгоритмы.
HRESULT GenerateTimeLimitUPTfiles2(.
[in] BSTR algorithmCryptFileName,.
[in] BSTR algorithmDecryptFileName,.
[in] long LimitDaysCrypt,.
[in] long LimitDaysDecrypt);
Функція GenerateTimeLimitUPTfiles2 генерує два файла-ключа, обмежених використання за часом. На відміну від функції GenerateTimeLimitUPTfiles, час обмеження використання алгоритму шифрування і расшифрования задається не загальне, а індивідуальне. Опис використовуваних параметрів: algorithmCryptFileName — ім'я вихідного файла з алгоритмом шифрування. algorithmDecryptFileName — ім'я вихідного файла з алгоритмом расшифрования. LimitDaysCrypt — кількість днів, протягом яких функціонувати сгенерированный алгоритм шифрування. LimitDaysDecrypt — кількість днів, протягом яких функціонувати сгенерированный алгоритм расшифрования.
Наступний наданий модулем захисту інтерфейс має ім'я IProtectFile. У ньому зібрані функції роботи з зашифрованими файлами, такі створення зашифрованого файла, запис до нього, читання тощо. Ідеологія роботи з зашифрованими файлами побудовано дескрипторах. При створення нових або відкритті зашифрованого файла то відповідність ставиться дескриптор, з допомогою що його подальшому і відбувається роботу з файлом.
interface IProtectFile: IDispatch {.
[id (1), helpstring («method Create New File »)].
HRESULT Create (.
[in] BSTR name,.
[in] CreateMode mode,.
[in] BSTR uptFileNameForWrite,.
[out, retval] short *handle);
[id (2), helpstring («method Open File »)].
HRESULT Open (.
[in] BSTR name,.
[in] BSTR uptFileNameForRead,.
[in] BSTR uptFileNameForWrite,.
[out, retval] short *handle);
[id (3), helpstring («method Close File »)].
HRESULT Close (.
[in] short handle);
[id (4), helpstring («method Write To File »)].
HRESULT Write (.
[in] short handle,.
[in] VARIANT buffer,.
[out, retval] long *written);
[id (5), helpstring («method Read From File »)].
HRESULT Read (.
[in] short handle,.
[out] VARIANT *buffer,.
[out, retval] long *read);
[id (6), helpstring («method Write String To File »)].
HRESULT WriteString (.
[in] short handle,.
[in] BSTR buffer,.
[out, retval] long *written);
[id (7), helpstring («method Read String From File »)].
HRESULT ReadString (.
[in] short handle,.
[out] BSTR *buffer,.
[out, retval] long *read);
[id (8), helpstring («method From File »)].
HRESULT FromFile (.
[in] short handle,.
[in] BSTR FileName,.
[out, retval] long *read);
[id (9), helpstring («method To File »)].
HRESULT ToFile (.
[in] short handle,.
[in] BSTR FileName,.
[out, retval] long *written); };
Опишем функції у цьому интерфейсе.
HRESULT Create (.
[in] BSTR name,.
[in] CreateMode mode,.
[in] BSTR uptFileNameForWrite,.
[out, retval] short *handle);
Функція Create служить до створення нових зашифрованих файлів. Оскільки в знову створений файл можна тільки писати, то функції необхідний до роботи лише файл з алгоритмом шифрування. Ім'я файла з цим алгоритмом передається третім параметром і обов’язковий. Параметр mode має тип CreateMode, чого він служить, було зазначено раніше. При успішному створенні файл, в handle повертається його дескриптор. Після закінчення роботи з файлом, його неодмінно потрібно закрити, використовуючи функцію Close. Опис використовуваних параметрів: name — ім'я створюваного файла. mode — тип створюваного файла (див. раніше опис типу CreateMode) uptFileNameForWrite — ім'я файла з алгоритмом шифрування. handle — возвращаемый дескриптор створеного файла.
HRESULT Open (.
[in] BSTR name,.
[in] BSTR uptFileNameForRead,.
[in] BSTR uptFileNameForWrite,.
[out, retval] short *handle);
Функція Open відкриває раніше створений зашифрований файл. Файл може бути відкритий як читання так записи. Після цього випускати з них можна отримати тільки один з цих двох операцій — читання чи запис даних. Це обумовлена тим, що в файлі є блоки різного розміру. Ця особливість є наслідком необхідності зберігання подібного типу даних, як VARIANT. Отже, запис до даних в файлі може лише послідовна. І щоб коли після відкриття файла зробити до нього запис, то прочитати старі дані потім із нього буде неможливо. Можна сміливо сказати, що відкриття файла для записи еквівалентно його створенню, за парою винятків. Перше виняток у тому, що з відкритті файла не вказується його тип. Тобто, немає необхідності вказувати, слід пакувати дані перед шифруванням чи ні. Інформації про типі береться з вже існуючого файла. Друге у тому, що з відкриття файла, в відмінність від створення, обов’язково необхідний файл з алгоритмом расшифрования. Режим відкриття файла залежить від цього, зазначений чи файл з алгоритмом шифрування. Ім'я файла з алгоритмом расшифрования обов’язковий параметром. Файл з алгоритмом расшифрования — немає. Якщо він не зазначений, те з такого файла можна буде лише читання. Якщо зазначений, він може бути як читання, і запис. При успішному відкритті файла в handle повертається дескриптор цього файла. Після закінчення роботи з файлом його обов’язково потрібно закрити, використовуючи функцію Close. Опис використовуваних параметрів: name — ім'я открываемого файла. uptFileNameForRead — ім'я файла з алгоритмом расшифрования. uptFileNameForWrite — ім'я файла з алгоритмом шифрування. handle — возвращаемый дескриптор відкритого файла.
HRESULT Close (.
[in] short handle);
Функція Close закриває раніше створений чи відритий файл. Якщо програма за всієї роботі створить новий зашифрований файл чи відкриє вже існуючий файл для записи, але з викликає функцію Close до свого завершення, але файл буде пошкоджений. Після закриття файла дескриптор стає ушкодженим та її більше не можна використовувати як параметра й інших функцій. Опис використовуваних параметрів: handle — дескриптор закрываемого файла.
HRESULT Write (.
[in] short handle,.
[in] VARIANT buffer,.
[out, retval] long *written);
Функція Write виробляє запис в файл даних, переданих перемінної типу VARIANT. Запис виробляється у файл пов’язані з дескриптором, рухаючись в параметрі handle. У возвращаемом значенні written після роботи функції, буде зазначено кількість байт записаних в файл.
Бо за розробці модуля захисту від початку була закладено принцип можливості використання програми, написаних різними мовами, то важливим питанням є програмний інтерфейс. Саме з цієї причини і був обраний типу VARIANT.
Тип VARIANT призначений до подання значень, які можуть опинитися динамічно змінювати свій тип. Якщо будь-який інший тип перемінної зафіксовано, то перемінні VARIANT можна вносити перемінні різних форматів. Ширше всього VARIANT застосовується у випадках, коли фактичний тип даних змінюється чи невідомий в останній момент компіляції. Змінним типу VARIANT можна присвоювати будь-які значення будь-яких цілих, дійсних, строковых і булевых типів. Для сумісності коїться з іншими мовами програмування передбачена також можливістю присвоєння цим змінним значень даты/времени. З іншого боку, варіантні перемінні можуть утримувати масиви перемінної довжини і розмірності із елементами зазначених типів. Усі цілі, справжні, строковые, символьні і булевы типи сумісні з типом VARIANT щодо операції присвоювання. Варіантні перемінні можна поєднати у висловлюваннях з цілими, дійсними, строковыми, символьними і булевыми. У цьому, наприклад, всі необхідні перетворення Delphi виконує автоматически.
Щоправда, відразу обмовимося, що передавати модулю захисту у змінних VARIANT годі й зовсім усе що догоджає. Наприклад, не можна передати адресу на COM інтерфейс, що логичною, оскільки неясно, як такі дані інтерпретувати. Опис використовуваних параметрів: handle — дескриптор файла для записи. buffer — записываемое значення. written — повертає розмір записаних даних в байтах.
HRESULT Read (.
[in] short handle,.
[out] VARIANT *buffer,.
[out, retval] long *read);
Функція Read читає з файла дані і повертає у вигляді перемінної типу VARIANT. Читання робиться з файла що з дескриптором, переданого в параметрі handle. У возвращаемом значенні read після роботи функції буде зазначено кількість прочитаних з файла байт. Опис використовуваних параметрів: handle — дескриптор файла для читання. buffer — які повертаються дані. read — повертає розмір прочитаних даних в байтах.
HRESULT WriteString (.
[in] short handle,.
[in] BSTR buffer,.
[out, retval] long *written);
Функція WriteString служить для запис у зашифрований файл рядки. Зазначимо, що рядок можна записати, використовуючи функцію Write, оскільки тип VARIANT дозволяє зберігати рядки. Ця функція заведена для більшого зручності, оскільки строковый тип набув значного поширення. По крайнього заходу, як показала практика, він часто-густо є у системах навчання дітей і тестування. Опис використовуваних параметрів: handle — дескриптор файла для записи. buffer — записувана рядок. written — повертає розмір записаних даних в байтах.
HRESULT ReadString (.
[in] short handle,.
[out] BSTR *buffer,.
[out, retval] long *read); Функція ReadString служить для читання рядки зашифрованого файла. Опис використовуваних параметрів: handle — дескриптор файла для читання. buffer — возвращаемая рядок. read — повертає розмір прочитаних даних в байтах.
HRESULT FromFile (.
[in] short handle,.
[in] BSTR FileName,.
[out, retval] long *read);
Функція FromFile дозволяє записати в зашифрований файл дані, прочитані з іншого файла. Інакше висловлюючись, дана функція зберігає повністю довільний файл в зашифрованому файлі. Це то, можливо зручно, якщо, наприклад, слід зберегти й зашифрувати набір картинок в форматі jpg. Якби дана функція була відсутня, то довелося б спочатку програмно зчитувати ці файли на згадку про, а потім уже потім нотувати у зашифрований файл. Щоб полегшити завдання програмісту й була створена ця функція. Зворотним дією — витяганням файла з зашифрованого сховища — займається функція ToFile. У результаті виходить шуканий файл в незашифрованном вигляді. Це може бути слабким місцем організації захисту. Але цього є сенс з погляду зручності адаптації вже існуючих програмний комплексів навчання дітей і тестування. Відразу хочеться помітити, що коли є бажання уникнути тимчасових файлів в незашифрованном вигляді, те складнощів немає. Розглянемо з прикладу jpg файла. Досить записати такий файл в зашифрованому вигляді, використовуючи функцію Write. Це не так важко, оскільки тип VARIANT може зберігати масиви байт. Надалі цей масив байт буде можливо безпосередньо рахувати, у пам’ять і відобразити на екрані, не вдаючись до тимчасовим фалам не диску. Але річ у цьому, що часто це вимагатиме істотною доопрацювання вже існуючого програмного забезпечення. І простіше, по крайньої, мері на початковому етапі знають впровадження системи захисту, з допомогою деякого зниження ступеня надійності, швидко модифікувати вже наявну програму. Ця може бути важливим моментом. Щойно файл буде відображено на екрані, цей тимчасовий файл можна відразу стерти. Опис використовуваних параметрів: handle — дескриптор файла для читання. FileName — ім'я файла який додається в зашифроване сховище. read — повертає розмір прочитаних даних в байтах.
HRESULT ToFile (.
[in] short handle,.
[in] BSTR FileName,.
[out, retval] long *written);
Функція ToFile виробляє зворотне дію щодо FromFile. Вона дістає файл з сховища. Опис використовуваних параметрів: handle — дескриптор файла для читання. FileName — ім'я извлекаемого файла. written — повертає розмір записаних даних в байтах.
Інтерфейс IProtectConformity об'єднує набір допоміжних функцій, покликаних полегшити використання системи з велику кількість файлів, з алгоритмами і зашифрованими даними. Наприклад, візьмемо АРМ викладача. У цьому системі то, можливо багато різноманітних даних, що з певними студентами. Якщо такі дані зашифровані, необхідно знати, саме файлом з алгоритмом це. Всі ці взаємозв'язку необхідно зберігати. Що стосується, якщо вона система написана з допомогою СУБД, складнощів виникнути на повинен. Якщо немає, доведеться вносити деяку додаткову функціональність, що є підмножиною можливості СУБД. Щоб полегшити адаптацію таких проектів, не використовують БД, призначені функції описуваного інтерфейсу. Фактично, вони дозволяють будувати і з таблицями відповідностей. Така таблиця є набір пар, у якому ім'я зашифрованого файла й ім'я відповідного файла алгоритму для шифрування чи расшифрования. У такій таблиці може бути пошук, як у імені зашифрованого файла, і під назвою файла з алгоритмом. Надалі файли, бережуть інформацію відповідності файлів з цими і відповідними файлами з алгоритмами, називатимемо файлами відповідностей. Наголосимо також на, що файли відповідностей теж піддаються шифрованию.
interface IProtectConformity: IDispatch {.
[id (1), helpstring («method Create Conformity File »)].
HRESULT CreateConformityFile (.
[in] BSTR name,.
[in] BSTR uptFileNameForRead,.
[in] BSTR uptFileNameForWrite,.
[in] BSTR ArrayOfStrings);
[id (2), helpstring («method Easy Create Conformity File »)].
HRESULT EasyCreateConformityFile (.
[in] BSTR name,.
[in] BSTR uptFileNameForCreate,.
[in] BSTR ArrayOfStrings);
[id (3), helpstring («method Read Conformity File »)].
HRESULT ReadConformityFile (.
[in] BSTR name,.
[in] BSTR uptFileNameForRead,.
[out, retval] BSTR *ArrayOfStrings);
[id (4), helpstring («method Get UptAlgName by FileName »)].
HRESULT GetAlgName (.
[in] BSTR Strings,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr);
[id (5), helpstring («method Get FileName by UptAlgName »)].
HRESULT GetDataName (.
[in] BSTR Strings,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr);
[id (6), helpstring («method Get UptAlgName by FileName From File »)].
HRESULT GetAlgFromFile (.
[in] BSTR FileName,.
[in] BSTR uptFileNameForRead,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr);
[id (7), helpstring («method Get FileName by UptAlgName From File »)].
HRESULT GetDataFromFile (.
[in] BSTR FileName,.
[in] BSTR uptFileNameForRead,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr); };
Теперь опишемо кожну з функцій інтерфейсу IProtect.
HRESULT CreateConformityFile (.
[in] BSTR name,.
[in] BSTR uptFileNameForRead,.
[in] BSTR uptFileNameForWrite,.
[in] BSTR ArrayOfStrings);
Функція CreateConformityFile створює новий файл відповідностей і записує до нього відповідну таблицю. Таблиця віддається у вигляді одного рядки, у якій послідовно записані імена файлів. Усі непарні - імена файлів з цими, все парні - відповідні алгоритми шифрування чи расшифрования. Імена би мало бути укладено в подвійні лапки. Це пов’язана з тим, що неможливо працювати із конкретними іменами файлів, що містять прогалини. Між лапками наприкінці імені одного файла і лапками перед ім'ям другого може тупцювати довільне кількість прогалин і символів табуляції або повернення каретки й переносу рядки. Підтримка одночасного зберігання інформації, як про файлах для шифрування, так расшифрования не здійснена. Це з двох причин. По-перше, зовсім нескладно завести два файла, а інтерфейс функцій і кількість істотно скорочується. По-друге, дана функціональність відповідності двох файлів можна застосовувати та інших цілей. Хочеться зробити більш абстрактної. Слід дати таку рада для шифрування великого кількості файлів одним алгоритмом: зручно створити відповідну каталог, куди поміщаються шифруемые файли, записати в файл відповідностей ім'я цього каталогу й відповідний алгоритм шифрования/расшифрования для роботи з файлами у тому каталоге.
Файли з алгоритмом шифрування і расшифрования до роботи з файлом відповідностей будуть автоматично створено, матимуть імена які у за аргументи функції. Опис використовуваних параметрів: name — ім'я створюваного файла, для зберігання інформації відповідності. uptFileNameForRead — ім'я створюваного файла з алгоритмом расшифрования. uptFileNameForWrite — ім'я створюваного файла з алгоритмом шифрування. ArrayOfStrings — рядок з туристичною інформацією про соответствиях.
HRESULT EasyCreateConformityFile (.
[in] BSTR name,.
[in] BSTR uptFileNameForCreate,.
[in] BSTR ArrayOfStrings);
Функція EasyCreateConformityFile подібна функції CreateConformityFile, та на відміну від нього, не відкриває нові файли з алгоритмами шифрування і расшифрования. Вона використовує вже наявний алгоритм шифрування. name — ім'я створюваного файла, для зберігання інформації відповідності. uptFileNameForCreate — ім'я файла з алгоритмом шифрування. ArrayOfStrings — рядок з туристичною інформацією про соответствиях.
HRESULT ReadConformityFile (.
[in] BSTR name,.
[in] BSTR uptFileNameForRead,.
[out, retval] BSTR *ArrayOfStrings);
Функція ReadConformityFile читає вміст файла відповідностей і повертає його вигляді рядки. Рядок має хоча б формат, як і передана наприклад, у функцію CreateConformityFile. Опис використовуваних параметрів: name — ім'я зашифрованого файла з інформацією щодо відповідностях. uptFileNameForRead — ім'я файла з алгоритмом расшифрования. ArrayOfStrings — возвращаемая рядок з туристичною інформацією про соответствиях.
HRESULT GetAlgName (.
[in] BSTR Strings,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr);
Функція GetAlgName, використовуючи ім'я файла з цими, повертає відповідний алгоритм шифрування чи расшифрования. Пошук виробляється у переданої рядку. Формат рядки еквівалентний формату, з яким працюють, і інші функції. Наприклад, EasyCreateConformityFile чи ReadConformityFile. Опис використовуваних параметрів: Strings — рядок з туристичною інформацією про відповідностях. SearchName — ім'я файла з цими, котрій буде зроблено пошук відповідного алгоритму. ResultStr — яке ім'я файла з алгоритмом.
HRESULT GetDataName (.
[in] BSTR Strings,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr);
Функція GetDataName, використовуючи ім'я файла з алгоритмом, повертає ім'я відповідного файла з цими. Пошук виробляється у переданої рядку. Формат рядки еквівалентний формату, з яким працюю та інші функції. Наприклад EasyCreateConformityFile чи ReadConformityFile. Опис використовуваних параметрів: Strings — рядок з туристичною інформацією про відповідностях. SearchName — ім'я файла з алгоритмом, котрій буде зроблено пошук відповідного файла з цими. ResultStr — яке ім'я файла з данными.
HRESULT GetAlgFromFile (.
[in] BSTR FileName,.
[in] BSTR uptFileNameForRead,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr);
Функція GetAlgFromFile, подібно функції GetAlgName, повертає відповідний алгоритм шифрування чи расшифрования під назвою файла з даними. На відміну від нього, на вході вона отримує не рядок з туристичною інформацією про відповідностях, а ім'я з цим інформацією і алгоритм на її расшифрования. Функція може бути більш зручна у плані її використання, але він менш ефективна. Тож якщо потрібно активно працювати з таблицями відповідностей, то тут для прискорення роботи рекомендується відмовитися від використання функції GetAlgFromFile. Ощадливіше буде одноразово прочитати інформацію про відповідностях, використовуючи функцію ReadConformityFile, та був використовувати функцію GetAlgName. Опис використовуваних параметрів: FileName — ім'я файла з зашифрованої інформацією щодо відповідностях. uptFileNameForRead — файл з алгоритмом расшифрования. SearchName — ім'я файла з цими, котрій буде зроблено пошук відповідного алгоритму. ResultStr — яке ім'я файла з алгоритмом.
HRESULT GetDataFromFile (.
[in] BSTR FileName,.
[in] BSTR uptFileNameForRead,.
[in] BSTR SearchName,.
[out, retval] BSTR *ResultStr);
Функція GetDataFromFile, подібно функції GetDataName, повертає ім'я відповідного файла з цими, під назвою файла з алгоритмом. На відміну від неї, на вході вона отримує не рядок з туристичною інформацією про відповідностях, а ім'я з цієї інформацією і алгоритм на її расшифрования. Функція може бути більш зручна у плані її використання, але він менш ефективна. Тож якщо потрібно активно працювати з таблицями відповідностей, то тут для прискорення роботи рекомендується відмовитися від використання функції GetDataFromFile. Ощадливіше буде одноразово прочитати інформацію про відповідностях, використовуючи функцію ReadConformityFile, та був використовувати функцію GetDataName. Опис використовуваних параметрів: FileName — ім'я файла з зашифрованої інформацією щодо відповідностях. uptFileNameForRead — файл з алгоритмом расшифрования. SearchName — ім'я файла з алгоритмом, котрій буде зроблено пошук відповідного файла з цими. ResultStr — яке ім'я файла з данными.
4.3. Керівництво програміста з використання програми ProtectEXE.exe.
Програма ProtectEXE. EXE варта захисту виконуваних файлів від модифікації. Під виконуваними модулями розуміються EXE файли в форматі PE (Portable Executables). Захист виконуваних модулів полягає в їх шифруванні. Особливістю утиліти ProtectEXE і те, що вона шифрує кожний виконаний файл унікальним полиморфным алгоритмом. Це утрудняє зокрема можливість використання програмного зломщика, заснованого на модифікації певних кодів у програмі. Оскільки кожна виконуваний файл зашифрований своїм методом, те й модифікувати їх єдиним методом неможливо. Утиліта ProtectEXE. EXE Демшевського не дозволяє захисту від динамічного модифікування у пам’яті. Це надто складно не може бути досягнуто без істотною переробки вихідного тексту самої защищаемой програми. Однак у рамках захисту дистанційних засобів такий захист мусить бути досить ефективна, оскільки створення взламывающей програми економічно мало доцільно, отже й швидше за все нічого очікувати осуществлено.
Модуль ProtectEXE. EXE має дві можливих режиму запуску. Перший режим призначений для генерації зашифрованого файла із зазначеного виконуваного модуля. Другий режим служить безпосередньо для запуску захищеного модуля.
Наведемо етап створення зашифрованого файла. До сформування зашифрованого файла необхідно запустити ProtectEXE. EXE, вказавши у ролі параметра ім'я шифруемого виконуваного файла. Можна вказати як ім'я, а й шлях. У результаті буду сгенерированы два файла. Якщо було зазначено лише ім'я, то файли розташовуватимуться нинішнього року каталозі. Якщо було вказано шлях до файлу, то згенеровані файли буде створено у тому каталозі, де і шифруемый файл. Перший файл матиме розширення upb. Він представляє собою безпосередньо зашифрований виконуваний файл. Другий файл буде мати розширення upu. Він є ключ, необхідний розшифровки виконуваного файла. Під час розробки ProtectEXE було винесено рішення зберігати зашифрований файл і ключ щодо його розшифровці над єдиному файлі, а роздільно. Це було зроблено з єдиною метою більшої гнучкості. Якщо зберігати всі у одному файлі, це означатиме, що його завжди буде можливо запустити. Окреме зберігання ключа дозволяє створювати систему, де запуск певних програм буде заборонено. Наприклад, програма дистанційного навчання дозволяти запускати набір певних програм тільки тоді ми, якщо буде виконано ряд умов. Припустимо, після здачі певного набору робіт. Коли певні роботи здано, і захищені, АРМ викладача видає студентові необхідних подальшої роботи ключові файли. Можна було б, звісно, видавати відразу расшифрованный бінарний файл, але програма може бути досить великий, і це нераціонально. І, тим паче, тоді немає жодних складнощів скопіювати її іншому студентові, якому вона повинна бути выдана.
Тепер опишемо другий режим роботи. Це безпосередньо запуск зашифрованого модуля. На його запуску необхідно запустити ProtectEXE, вказавши у ролі параметра шлях збереження та ім'я зашифрованого файла з розширенням upb. Якщо буде знайдено ключовою файл з тим самим ім'ям, але з розширенням upu, то програма запустять. У цьому буде створено тимчасовий файл з розширенням exe. Він розташовуватися у тому каталозі, де нахолодятся фали з розширенням upb і upu. Цей файл тимчасовий і буде винесений після роботи програми. Цей файл, хоч і має розширення exe, перестав бути виконуваним файлом. У чому можна переконатися, спробувавши запустити його. Результатом з нього зависання. Тому годі було боятися, що це расшифрованный файл, і студент зможе скопіювати його, що він буде создан.
4.4. Опис використання системи захисту на прикладах 4.4.1. Підключення модуля захисту до програми мовою Visual C++.
Розпишемо кроки, які наобходимо проробити, щоб підключити COM модуль Uniprot до програми, написаної на Visual C++.
1. Створіть новий чи відкрийте вже наявний проект.
2. Створіть нову папку в каталозі з проекту чи виберете яка існує і скопіюйте у ній необхідних підключення бібліотеки файли. Це файли: export. h, export. cpp, Uniprot.tlb.
3. Відкрийте MFC ClassWizard. І тому выбирете в меню пункт.
View->ClassWizard.
4. Натисніть на кнопку Add Class і виберете пункт «From a type library… » .
5. Зазначте шлях до файлу Uniprot. tlb і прочиніть его.
6. У діалозі Confirm Classes вам швидше все буде досить відразу натиснути кнопку «Ok ». Але коли ви незгодні продложенными установками за умовчанням, то можете доповнити них соответсвующие изменения.
7. Закрийте діалог MFC ClassWizard.
8. Увімкніть до проекту файли export. h, export.cpp.
9. Додати include «export.h «у ті модулі, де ви плануєте використовувати бібліотеку Uniprot. 10. Перевірте, що з вас инициализируется роботу з COM. Тобто викликається функція CoInitialize. 11. Тепер ви можете працювати з бібліотекою COM наприклад так.
IProtect ProtectObj;
IProtectFile ProtectFileObj;
ProtectObj.CreateDispatch (UniprotLibID);
ProtectFileObj.CreateDispatch (UniprotLibID);
LPDISPATCH pDisp = ProtectFileObj. m_lpDispatch;
HRESULT hr = pDisp ->QueryInterface (.
IProtectFileIntarfaceID,.
(void**)&ProtectFileObj.m_lpDispatch);
VERIFY (hr == S_OK);
4.4.2. Підключення модуля захисту до програми мовою Visual Basic.
Розпишемо кроки, які наобходимо проробити, щоб підключити COM модуль Uniprot до програми, написаної на Visual Basic. 12. Створіть новий чи відкрийте вже наявний проект. 13. Створіть нову папку в каталозі з проекту чи виберете яка існує і скопіюйте у ній необхідний підключення бібліотеки файл. Це файл: Uniprot.tlb. 14. Відкрийте діалог References. І тому выбирете в меню пункт.
Project->References. 15. Натиснімо кнопку Browse. 16. Зазначте файл Uniprot. tlb і прочиніть його. 17. Поставте у списку пташку навпроти що з’явилася рядки Uniprot 1.0.
Type Library і натисніть Ok. 18. Тепер ви можете працювати з бібліотекою COM наприклад так.
Dim handle As Integer.
Dim obj As New protect.
Dim ver As Integer.
Dim strInfo As String obj. GetInfo ver, strInfo.
Dim p. s As String p. s = «Version: «+ Str (ver / 256) + ». «+.
Str ((ver Mod 256) / 16) + Str (ver Mod 16) p. s = p. s + Chr (13) + «Info: «+ strInfo.
MsgBox s.
Dim file As IProtectFile.
Set file = obj handle = file. Create (FileName, Default, cryptUPT).
4.4.3. Приклад використання модуля захисту у програмі мовою Visual Basic.
Розглянемо кілька демонстраційних програмах. Уявімо, що з нас існує комплекс, що з двох частин. Перша у тому числі варта викладача, іншу — для студента. Надалі ми йменуватимемо відповідно «АРМ викладача «і «АРМ студента ». АРМ викладача варта складання запитань і перегляду результатів тестування. А АРМ студента варта контролю за навчанням. Природно, приклади даних програм дуже упрощены.
Спочатку наведемо текст програми АРМ викладача без використання захисту. На малюнку 8 показаний її користувальницький інтерфейс. |Private Sub Edit_Click () |[pic] | |orm1.ole_doc.DoVerb |Малюнок 8. Інтерфейс АРМ викладача | |End Sub | | | | | |Private Sub Form_Load () | | |Form1.ole_doc.Format = | | | «Rich Text Format «| | |End Sub | | | | | |Private Sub Load_Click () | | |Open «c:temptemp.rtf «For| | |Input As #1 | | |Dim str, tmp | | |Do While Not EOF (1) | | |Input #1, tmp | | |str = str + tmp | | |Loop | | |Close #1 | | |Form1.ole_doc.DoVerb | | |vbOLEDiscardUndoState | | |Form1.ole_doc.DataText = | | |str | | |Form1.ole_doc.Update | | |End Sub | | | | | |Private Sub Save_Click () | | |Dim msg | | |Form1.ole_doc.DoVerb | | |vbOLEDiscardUndoState | | |msg = | | |Form1.ole_doc.DataText | | |Open «c:temptemp.rtf «For| | |Output As #1 | | |Print #1, msg | | |Close #1 | | |End Sub | | | | | |Private Sub | | |ViewResult_Click () | | |Open «c:tempresult.txt «| | |For Input As #1 | | |Dim n As Integer | | |Input #1, n | | |Close #1 | | |result = n | | |End Sub | |.
Итак, ця програма дозволяє завантажити текст питання з файла, відредагувати його й знову зберегти. Насправді, природно, крім цього має існувати механізм генерації пакета програм, тож даних для студента. Тобто. у цей пакет, очевидно, має входити АРМ студента, база даних, і т.д. У прикладі ми це опускаємо і припускаємо, що збережений текст — усе, що необхідно. Ця програма дозволяє переглянути файл результат тестування по заданому питання. Це файл генерує АРМ студента. Він є файл, у якому записано число — оцінка за питання. Недоліки даної програми ми розглянемо трохи нижче, коли познайомимося з АРМ студента. На малюнку 9 показаний її зовнішній вигляд. |Private Sub SaveResult (a) | | |Open «c:tempresult.txt «For |[pic] | |Output As #1 |Малюнок 9. Інтерфейс АРМ студента | |Print #1, a | | |Close #1 | | |End | | | | | |End Sub | | |Private Sub Command1_Click (Index As| | |Integer) | | |SaveResult (2) | | |End Sub | | | | | |Private Sub Command2_Click () | | |SaveResult (2) | | |End Sub | | | | | |Private Sub Command3_Click () | | |SaveResult (5) | | |End Sub | | | | | |Private Sub Command4_Click () | | |SaveResult (2) | | |End Sub | | | | | |Private Sub Form_Load () | | |Form1.ole_doc.Format = «Rich Text | | |Format «| | |Open «c:temptemp.rtf «For Input | | |As #1 | | |Dim str, tmp | | |Do While Not EOF (1) | | |Input #1, tmp | | |str = str + tmp | | |Loop | | |Close #1 | | |Form1.ole_doc.DoVerb | | |vbOLEDiscardUndoState | | |Form1.ole_doc.DataText = str | | |Form1.ole_doc.Update | | |End Sub | |.
Як бачимо цю програму проста. Вона просто виводить текст питання і чекає. Після цього записує оцінку в файл. На малюнку 10 показано, що таке файл з результатом.
[pic].
Малюнок 10. Файл з незашифрованным результатом.
Природно, таку систему не витримує жодної критики з місця зору захисту. По-перше, файл з аналогічним запитанням представляє з себе простий RTFфайл. Звісно, коли ці файли зберігатимуться в захищеної базі, то проблем не виникне. Ми ж припускаємо, що коли вони зберігаються відкрито. Припустимо, що таких файлів багато, і неприпустимо, щоб студент мав до ним доступ. Відповідно, це одна з місць, де знадобиться модуль захисту. Друге, мабуть, ще більше важливе місце — це файл результат. На цей час це текстовий файл, із кількістю, що означає оцінку. Збереження результату у вигляді як просто, і недопустимо.
Тепер, використовуючи модуль зашиті, ми виправимо перелічені недоліки. Спочатку покажемо новий інтерфейс користувача і пояснимо зміни. Кнопки «Завантажити текст », «Зберегти текст «залишилися, але тепер програма працюватиме з зашифрованими даними. Кнопка «Імпорт старих даних «варта читання незашифрованного файл з вопросом.
Кнопка «Згенерувати пакет «генерує 4 алгоритму. Першу пару алгоритмів шифрования/расшифрования використовується для записи/чтения файла з питанням. У цьому студентові досить віддати лише файл з алгоритмом расшифрования. Друга пара використовується під час роботи з файлом, що містить результат тестування. Алгоритм шифрування призначений для АРМ студента. Алгоритм расшифрования належить до АРМ викладача і служи для расшифрования цього файла. Передача студентові лише окремих алгоритмів підвищує надійність защиты.
Новий інтерфейс АРМ викладача зображений малюнку 11.
[pic].
Малюнок 11. Новий інтерфейс АРМ преподавателя.
Розглянемо, які зміни знадобилося доповнити програму. Їх зовсім небагато. Додалася глобальна перемеренная obj. Вона варта взаємодії з COM-модулем. Глобальної вона бути не зобов’язана, просто це було зроблено для стислості програми. Типом цієї перемінний є покажчик на інтерфейс IProtect. Скористатися ж нашим цей інтерфейс для шифрования/расшифрования неможливо. Тому, надалі obj будемо перетворювати цей покажчик до покажчику на інтерфейс IProtectFile. Dim obj As New protect Private Sub Edit_Click () Form1. ole_doc.DoVerb End Sub Private Sub Form_Load () Form1. ole_doc.Format = «Rich Text Format «End Sub.
Ця підпрограма варта генерації 4 алгоритмів шифрования/расшифрования. Для простоти вона записуються у тимчасову папку. Причому, які генеруються алгоритми буде зведено використання за часом. Файл «c:tempcrypt.upt «і «c:tempdecrypt.upt «призначені до роботи з файлом що містить питання. Файл «c:tempcryptres.upt «і «c:tempdecryptres.upt «призначені до роботи з фалом результату. Отже до роботи АРМ-преподавателя необхідні файли «c:tempcrypt.upt », «c:tempdecrypt.upt «і «c:tempdecryptres.upt ». А для АРМ-студента необхідні файли «c:tempdecrypt.upt », «c:tempcryptres.upt ». Private Sub Generate_Click () Dim days As Integer days = DaysLimit obj. GenerateTimeLimitUPTfiles «c:tempcrypt.upt », «c:tempdecrypt.upt », days obj. GenerateTimeLimitUPTfiles «c:tempcryptres.upt », «c:tempdecryptres.upt », days End Sub.
Ця підпрограма фактично стара підпрограмою завантаження файла з аналогічним запитанням. Вона служить для імпорту даних у колишньому форматі ніж набирати само вважають наново. Private Sub Import_Click () Open «c:temptemp.rtf «For Input As #1 Dim str, tmp Do While Not EOF (1).
Input #1, tmp str = str + tmp Loop Close #1 Form1. ole_doc.DoVerb vbOLEDiscardUndoState Form1. ole_doc.DataText = str Form1. ole_doc.Update End Sub.
Ось нова підпрограма читання тексту питання з файла. Дамо коментар до деяким рядках. Dim file As IProtectFile — оголошує покажчик на інтерфейс IProtectFile, що дозволяє шифровать/расшифровывать файли. handle = file. Open («c:temptemp.dat », «c:tempdecrypt.upt », «c:tempcrypt.upt ») — відкриваємо файл з аналогічним запитанням і зберігаємо дескриптор відкритого файла. readSize = file. Read (handle, v) — читаємо зміну типу Variant, яка насправді представлятиме з себе рядок. file. Close (handle) — закриває файл. Private Sub Load_Click () Dim handle As Integer Dim file As IProtectFile Set file = obj handle = file. Open («c:temptemp.dat », «c:tempdecrypt.upt », «c:tempcrypt.upt ») Dim readSize As Long Dim v As Variant readSize = file. Read (handle, v) Dim str As String str = v Form1. ole_doc.DoVerb vbOLEDiscardUndoState Form1. ole_doc.DataText = str Form1. ole_doc.Update file. Close (handle) End Sub.
Вот що тепер виглядає нова підпрограма збереження питання на файл. Private Sub Save_Click () Dim handle As Integer Dim file As IProtectFile Set file = obj handle = file. Create («c:temptemp.dat », Default, «c:tempcrypt.upt ») Dim writeSize As Long Dim v As Variant Dim str As String str = Form1. ole_doc.DataText v = str writeSize = file. Write (handle, v) file. Close (handle) End Sub.
И останнє, це нова підпрограма читання файлів результат тестування. Private Sub ViewResult_Click () Dim handle As Integer Dim file As IProtectFile Set file = obj handle = file. Open («c:tempresult.dat », «c:tempdecryptres.upt », «c:tempcryptres.upt ») Dim readSize As Long Dim v As Variant readSize = file. Read (handle, v) Dim str As String result = v file. Close (handle) End Sub.
Внешний вид АРМ студента посутньо не змінився. Наведемо лише сам віршик програми. Dim obj As New protect Private Sub SaveResult (a) Dim handle As Integer Dim file As IProtectFile Set file = obj handle = file. Create («c:tempresult.dat », Default, «c:tempcryptres.upt ») Dim writeSize As Long Dim v As Variant Dim str As String str = Form1. ole_doc.DataText v = a writeSize = file. Write (handle, v) file. Close (handle) End End Sub.
Private Sub Command1_Click (Index As Integer) SaveResult (2) End Sub.
Private Sub Command2_Click () SaveResult (2) End Sub.
Private Sub Command3_Click () SaveResult (5) End Sub.
Private Sub Command4_Click () SaveResult (2) End Sub.
Private Sub Form_Load () Form1. ole_doc.Format = «Rich Text Format «Dim handle As Integer Dim file As IProtectFile Set file = obj.
handle = file. Open («c:temptemp.dat », «c:tempdecrypt.upt », «c:tempcrypt.upt ») Dim readSize As Long Dim v As Variant readSize = file. Read (handle, v) Dim str As String str = v.
Form1.ole_doc.DoVerb vbOLEDiscardUndoState Form1. ole_doc.DataText = str Form1. ole_doc.Update.
file.Close (handle) End Sub.
Наприклад малюнку 12 наведено приклад зашифрованого файла з результатом тестування. Тепер зрозуміти, що він зберігається, стало складним делом.
[pic].
Малюнок 12. Файл з зашифрованим результатом.
4.4.4. Приклад використання програми ProtectEXE.exe.
Як приклад наведемо код на Visual З++, що проводить шифрування виконуваного файла, та був код, продукує запуск зашифрованого файла. Обидві функції приймають на вході ім'я файла з розширення exe. Для більшої ясності рекомендується ознайомитися з наведених раніше описом програми ProtectEXE. void CreateEncryptedModule (const CString &FileName) { CString Line (_T («ProtectExe.exe »)); Line += FileName; STARTUPINFO StartupInfo; memset (&StartupInfo, 0, sizeof (StartupInfo)); StartupInfo. cb = sizeof (StartupInfo); PROCESS_INFORMATION ProcessInformation; if (!CreateProcess (Line, NULL, NULL, NULL, FALSE, 0,.
FALSE, NULL, &StartupInfo,.
&ProcessInformation)) throw _T («Error run ProtectExe. exe »); WaitForInputIdle (ProcessInformation.hProcess,.
INFINITE); WaitForSingleObject (ProcessInformation.hProcess,.
INFINITE); CloseHandle (ProcessInformation.hProcess); DeleteFile (FileName); }.
void RunEncryptedModule (const CString &FileName) { CString EncryptedFileName (FileName); EncryptedFileName = EncryptedFileName. Mid (0, FileName. GetLength () — 3); EncryptedFileName +=_T («upb »); CString Line (_T («ProtectExe.exe »)); Line += EncryptedFileName; STARTUPINFO StartupInfo; memset (&StartupInfo, 0, sizeof (StartupInfo)); StartupInfo. cb = sizeof (StartupInfo); PROCESS_INFORMATION ProcessInformation; if (!CreateProcess (Line, NULL, NULL, NULL, FALSE, 0,.
FALSE, NULL, &StartupInfo, &ProcessInformation)) throw _T («Error run ProtectExe. exe »); WaitForInputIdle (ProcessInformation.hProcess, INFINITE); WaitForSingleObject (ProcessInformation.hProcess, INFINITE); CloseHandle (ProcessInformation.hProcess); } 4.5. Загальні рекомендації по інтеграції системи защиты.
У розділі буде надано ряд різних рад та рекомендацій ще, метою якого є допомогу у створенні надійнішою й ефективної системи захисту. Рекомендації носять розрізнений характері і тому об'єднують у єдиний і пов’язаний текст, а буде приведено окремими пронумерованими пунктами.
1. Перед початком робіт з модифікації існуючого програмного забезпечення з єдиною метою інтеграції системи захисту рекомендується старанно ознайомитися з наведеної документацією і прикладах з використання різних функцій. Також неодмінною умовою до початку робіт, є базові навички роботи технологією COM. Якщо вже ви невідомі з технологією COM, то тут можна порекомендувати як літератури з до цієї теми такі книжки: Модель COM й застосування їх ATL 3.0 [31], Сутність технології COM. [33], Programming Distributed Applications with COM and Microsoft Visual Basic 6.0 [34].
2. Перш ніж приступати безпосередньо до створення програмних коштів чи його модифікації, покликаних захистити цільову систему, на початку слід продумати адміністративну організацію бедующей системи. Як говорилося раніше, масу різноманітних проблем, що з захистом АСДО, можна розв’язати лише адміністративними методами. І що нічого очікувати розроблена відповідна організаційна система, програмна захист її компонентів матиме мало сенсу. Звідси випливає дана рекомендація приділити цьому завданні багато уваги, ба більше, що слід приділити захисту які у ній програмних компонентів. На жаль, в цієї роботи питання адміністративної організації такої системи практично не зачіпаються. Це з тим, що завдання як така величезна й потребує окремого цілого ряду робіт. Причому спрямованість цієї своєрідної робіт носить, скоріш, педагогічний характер, і, отже, належить до відповідної сфері педагогічних наук. У виконану праці підготовлені кошти, необхідних і буде використані нових, або адаптируемых АСДО.
3. Багато системах дистанційного навчання використовуються різні принципи, з допомогою яких, можливо відмовитися від зберігання відповідей в відкритому вигляді. Це дозволяє бути впевненим, що відповіді для бази питань будь-коли передбачено переглянути. Такі системи побудовано на використанні функції, яка однобічно перетворює відповідь на певний код, потім порівнюваний з еталонними. Розроблена система захисту легко дозволяє вживати аналогічний механізм. І тому досить створити ключ шифрування. Ключ расшифрования непотрібен, може бути видалити. Потім кожен вірний відповідь окремо шифрується цим ключем. У результаті виходить набір файлів з зашифрованими відповідями. Після цього їх зручно поєднати у один єдиний файл, але вже залежить від цього, як буде реалізовуватися таку систему. Далі ця файл, яке у собі зашифровані відповіді й ключ шифрування, віддається студентові. Коли студент вводить відповідь, він шифрується відданим йому ключем. Після цього зашифрований файл з відповіддю порівнюється зі еталонним. Якщо вони самі збігаються, відповідь вірний. У результаті, хоча відповіді й зберігаються в студента, скористатися він ними не може. Якщо хтось поставить собі за мету дізнатися, які відповіді вірні, то потрібно чи перебирати все варіанти, шифруя їх і порівнюючи, що дуже занадто багато роботи, чи влаштувати аналіз полиморфного алгоритму шифрування і створити відповідний алгоритм расшифрования, що ще більше трудоемко.
4. Ще однією з рекомендацій буде створення системного журналу. По через це рекомендується ознайомитися з статтею Оганесяна А. Р. «Проблема «шпаргалок» чи як забезпечити об'єктивність комп’ютерного тестування? «[28].
5. Створюючи АСДО, подбайте про дублювання інформації. У протилежному разі, знищення, наприклад, бази з цими про зданих роботах може мати дуже тяжкі наслідки. Це — рада не належить до захисту інформації, а може допомогти дуже підвищити надійність системи в целом.
ОСНОВНІ ВИСНОВКИ І РЕЗУЛЬТАТЫ.
1. Виконано з порівняльного аналізу існуючих підходів до організації захисту даних в системах з монопольним доступом, з прикладу автоматизованих систем дистанційного навчання. Відзначено, що є багато захищених навчальні систем, які у середовищі інтернет, але немає захищені пакети для локального використання. Це зумовлено погано проработанными і ще досить добре вивченими методами побудови захищених АСДО.
2. За підсумками аналізу, запропонований комплекс заходів, дозволяє підвищити захищеність АСДО. Розроблено програмні кошти, призначені для інтеграції у вже існуючі навчальні системи, з метою їхнього захисту при використанні поза довіреною обчислювальної среды.
3. У розробленому програмне забезпечення було використано нові технології шифрування даних. Повністю виключена необхідність використання апаратних средств.
4. Розроблено систему захисту, керівництво для програміста, набір тестових прикладів і щодо її застосування. Створена систему було інтегрована у вже існуючий комплекс Aquarius Education 4.0, розроблений спеціалісти кафедри АТМ.
СПИСОК ВИКОРИСТАНИХ ИСТОЧНИКОВ.
1. Аунапу Т. Ф., Веронская М. В. Автоматизація навчання з позицій системного аналізу // Управління якістю вищої освіти умовах багаторівневої підготовки фахівців та впровадження освітніх стандартів: Тез. доповідей республіканської науково-методичною конференції. — Барнаул: Алт. держ. техн. ун-т, 1996. — З. 5 — 6. буд 2. Брусенцов Н. П., Маслов С. П., Рамиль Альварес X. Микрокомпьютерная система «Наставник». — М.: Наука, 1990. — 224 з. 3. Кондратова О. А. Психологічні вимоги до комп’ютерних навчальних засобів і систем навчання // Проблеми гуманізації й побудувати нові засоби навчання у системі інженерної освіти: Тез. докл. міжвузівській науково-практичній конференції. — Новокузнецьк: Сиб. Держ. гірничометалургійна академія, 1995. — З. 78 — 80. 4. Федеральна цільова програма «Розвиток єдиної освітньої інформаційного середовища на 2002 — 2006 роки» (проект). — М.: Минобразования,.
2001. — 35 з. 5. Кручинин В. В., Ситникова Е. А. Проблема захисту комп’ютерних екзаменаційних програм, у ТМЦ ДО // Сучасна освіта: масовість і якість. Тез. докл. регіональної науково-методичною конференції. —.
Томськ: ТУСУР, 2001. — З. 144. 6. Махутов Б. М., Шевельов М. Ю. Захист електронних підручників в дистанційному навчанні // Освіта ХХІ сторіччя: інноваційні технології, діагностика, і управління умовах інформатизації і гуманізації: Матеріали III.
Всеросійської науково-методичною конференції міжнародною участю. —.
Красноярськ: КГПУ, 2001. — З. 106 — 108. 7. Раводин О. М. Проблеми створення дистанційної освіти в.
ТУСУРе // Дистанційне освіту. Стан, проблеми, перспективы.
Тез. докл. науковометодичної конференції, Томськ, 19 листопада Еге 1997 р. —.
Томськ: ТУ СУР, 1997. — З. 19 — 25. 8. Шевельов М. Ю. Автоматизований зовнішній контроль самостійної роботи студентів у системі дистанційної освіти /У Дистанційно освіту. Стан, проблеми, перспективи. Тез. докл. науковометодичної конференції. — Томськ: ТУСУР, 1997. — З. 49. 9. Шевельов М. Ю. Прилад для дихотомічної оцінки семантичних повідомлень в автоматизованих навчальних системах // Сучасні техніка і технології. Рб. статей міжнародній науково-практичній конференції. —.
Томськ: ТПУ, 2000. — З. 152. 10. Шевельов М. Ю. Програмно-апаратна контроль та цивільного захисту информации.
// Сучасна освіта: масовість і якість. Тез. докл. науковометодичної конференції 1−2 лютого 2001 р. — Томськ: ТУСУР, 2001.—С.
99—100. 11. Шелупанов А. А., Пряхин А. В. Аналіз проблеми інформацією системі дистанційної освіти // Сучасна освіта: масовість і якість. Тез. докл. регіональної науково-методичною конференції. —.
Томськ: ТУ СУР, 2001. — З. 159 — 161. 12. Кацман Ю. Я. Застосування комп’ютерних технологій при дистанційному навчанні студентів // Тез. доповідей регіональної науково методичної конференції «Сучасна освіта: масовість і якість ». — Томськ: ТУСУР, 2001. — С.170 — 171. 13. Прес-група СГУ. Компьютер-экзаменатор. // Електронний еженедельник.
" Закон. Фінанси. Податки. «- 2000. — № 11 (77). 14. Белокрылова О. С. Використання курсу дистанційного навчання на економічному факультеті РГУ // Cовременные інформаційні технології в процесі: Тез. докл. Навчально-методична конференція. — Апрель.
2000. 15. Альошин С. В. Принципи побудови оболонки інформаційно — освітньої середовища CHOPIN // Нові інформаційні технології: Тез. докл. Восьма міжнародна студентська школа семінар. — Крым:
Алтайский державний технічний університет, Травень 2000. 16. Оганесян О. Г. Проблема зворотний зв’язок при дистанційному навчанні //.
Відкрите освіту. — 2002. — березень. 17. Занимонец Ю. М., Зінькова Ж. Г. Проведення всеросійського комп’ютерного тестування «Телетестинг-2000 «в Ростовському госуниверсите // Сучасні інформаційні технології в процесі: Тез. докл. Учебнометодична конференція. — 2000. — квітень. 18. Сенцов, В. С. Програмний комплекс тестового контролю за навчанням «Тест» //.
Нові інформаційні технології: Тез. докл. Восьма міжнародна студентська школа семінар. — Крим: Алтайский державний технічний університет, Травень 2000. 19. Мицель. А. А. Автоматизована система розробки електронних підручників // Відкрите освіту. — 2001. — травень. 20. Жолобов Д. А. Генератор мультимедіа підручників // Нові інформаційні технології: Тез. докл. Восьма міжнародна студентська школа семинар.
— Крим: Астраханський державний технічний університет, Травень 2000. 21. Вергазов Р. І., Гудків П. А. Система автоматизованого дистанційного тестування // Нові інформаційні технології: Тез. докл. Восьма міжнародна студентська школа семінар. — Крым:
Пензенский державний університет, Травень 2000. 22. Ложников П. З. Розпізнавання користувачів в системах дистанційної освіти: огляд // Educational Technology & Society. — 2001. — № 4, internet 23. Расторгуєв С.П., Долгин А.Є., Потанін М. Ю. Як информацию.
// Електронний посібник боротьби з хакерами. internet.
24. Ерижоков А. А. Використання VMWare 2.0 // Публікація у мережі ІНТЕРНЕТ на сервері internet.
25. Баpичев З. Kpиптогpафия без секретів. — М.: Наука, 1998. — 105 з. 26. Маутов Б. М. Захист електронних підручників з урахуванням програмноапаратного комплексу «Символ-КОМ «// Відкрите освіту. — 2001. — квітень. 27. Тыщенко О. Б. Нове засіб комп’ютерного навчання — електронний підручник // Комп’ютери в процесі. — 1999. — № 10. — З. 89−92.
28. Оганесян А. Р., Єрмакова М. А., Чабан До. Про. Проблема «шпаргалок» чи як забезпечити об'єктивність комп’ютерного тестування? // «Львіська політехніка». — 2001. — № 6. Публікація у мережі ІНТЕРНЕТ на сервері internet.
29. Романенка В. В. Автоматизована система розробки електронних підручників. // Нові інформаційні технології університетській освіті: Тез. докл. Матеріали сьомий Міжнародної Научно;
Методичної конференції. — Томськ: Томський Державний Университет.
Систем Управління і Радіоелектроніки, Березень 2000. 30. Касперський Є.В. Комп’ютерні віруси: що це таке вже й як ви їх боротися. — М.: СК Пресс, 1998. — 288 з., мул. 31. Трельсон Еге. Модель COM й застосування їх ATL 3.0: Пер. з анг. — СПб.(БХВ;
Петербург, 2001. — 928 з.(мул. 32. Баричев З. Р. та інших. «Основи сучасної криптографії». — М.: «Гаряча лінія -телеком», 2001 — 120 з. 33. Бокс. Д. Сутність технології COM. Бібліотека програміста. — СПб.:
Пітер, 2001. — 400 з.: мул. 34. Ted Pattison. Programming Distributed Applications with COM and.
Microsoft Visual Basic 6.0. — Microsoft Press, 1998. — 260 з. ISBN 1;
57 231−961−5.