Автоматизация процесса тестирования, защита от изменения, подмены и перехвата при передаче данных и от беспрепятственного физического ко

Автор работы: Пользователь скрыл имя, 04 Сентября 2013 в 05:38, дипломная работа

Описание работы

Все эти проблемы позволяет решить разработанная мною система тестирования. Основное преимущество трёхзвенной структуры заключается в превосходной степени защиты (к базе данных нет прямого доступа из интернета, многоуровневая защита с различными алгоритмами шифрования).
Для проектирования и разработки базы данных использовались источники [1, 5, 6], для создания приложения тестирования [2, 3], а для обеспечения защиты данных [4, 7].

Содержание работы

Введение 5
1 Теоретические основы 6
1.1 Постановка задачи6
1.2 Проектирование баз данных10
1.3 Среда Firebird как средство разработки СУБД14
1.4 Разработка интерфейса пользователя18
1.5 Выбор средств защиты информации22
2 Разработка и апробация проекта 26
Заключение 39
Список использованных источников 40
Приложение А (обязательное) Код программы 41

Файлы: 1 файл

Диплом 2.docx

— 1.01 Мб (Скачать файл)

Существует единственный способ решить указанные вопросы: размещать базы данных и СУБД на собственных серверах, и предоставлять к ним доступ клиентам, например, через интернет и т.п. Возможности терминальных серверов (terminal servers) (Windows или Linux/Unix) так  же можно использовать для реализации таких требований. Таким образом, есть контроль над базой данных, и можно ограничивать доступ к  различным функциям и структурам баз данных, используя имеющиеся  в СУБД Firebird методы обеспечения безопасности (роли, привилегии и т.д.).

В то время, как СУБД Firebird не предоставляет  встроенных средств шифрования данных, существует несколько замечательных  продуктов, чтобы это сделать. Можно  установить программное обеспечение, которое создает защищенные тома (volumes) на компьютере, и мы разместим  базы данных (и другие конфиденциальные данные) на этих томах. Когда компьютер  выключен, все данные таких томов  существуют в зашифрованном виде, и никто не сможете получить к  ним доступ без ключа. При загрузке компьютера необходимо смонтировать (mount) защищенные тома и указать ключ для  дешифрования, чтобы получить доступ к данным. Этот дополнительный, и, обязательно, собственноручный, шаг при запуске компьютера может быть неудобным, но он может обеспечить превосходную безопасность для «не сильно обслуживаемых» компьютерных систем. Непосредственно я использовал TrueCrypt, который может шифровать файлы базы данных 3 симметричными алгоритмами блочного шифрования с размером блока 128 бит и длиной ключа 256 бит: AES, Serpent и Twofish. Программным обеспечением с указанными функциями являются TrueCrypt, Bestcrypt от Jetico и PGPDisk. Альтернативой этому возможно было бы создание на клиентской стороне реализации механизма шифрования/дешифрования данных, но в таком случае у нас пропадает возможность добавлять эффективные индексы и использовать возможности поиска.

Рассмотрим TrueCrypt более детально. Все алгоритмы шифрования используют режим XTS, который более безопасен, нежели режимы CBC и LRW для шифрования «на лету», применяющиеся в предыдущих версиях (работа с уже созданными шифроконтейнерами в этих форматах также возможна).

Программа позволяет выбрать одну из трёх хеш-функций: HMAC-RIPEMD-160, HMAC-Whirlpool, HMAC-SHA-512 для генерации ключей шифрования, соли и ключа заголовка.

Для доступа к зашифрованным  данным можно применять пароль (ключевую фразу), ключевые файлы (один или несколько) или их комбинации. В качестве ключевых файлов можно использовать любые  доступные файлы на локальных, сетевых, съёмных дисках (при этом используются первые 1,048,576 байт) и генерировать свои собственные ключевые файлы.

Одна из примечательных возможностей TrueCrypt — обеспечение двух уровней правдоподобного отрицания наличия зашифрованных данных, необходимого в случае вынужденного открытия пароля пользователем:

  1. Создание скрытого тома, что позволяет задать второй пароль (и набор ключевых файлов) к обычному тому для доступа к данным, к которым невозможно получить доступ с основным паролем, при этом скрытый том может иметь любую файловую систему и располагается в неиспользованном пространстве основного тома.
  2. Ни один том TrueCrypt не может быть идентифицирован (тома TrueCrypt невозможно отличить от набора случайных данных, то есть файл нельзя связать с TrueCrypt как с программой, его создавшей, ни в какой форме и рамках).

Для шифрования трафика и его  сжатия (в случаи больших объёмов  передаваемых данных) мною была также  использована программа ZeBeDee. Сжатие в  которой осуществляется алгоритмами zlib или bzip2, а шифрование осуществляется алгоритмом Blowfish и Diffie-Hellman для согласования ключей. Т.к. нам нужна настоящая  защита данных или метаданных базы данных, то нам необходимо сохранять  контроль над файлом базы данных и  над окружением, в котором происходит работа с этим файлом. Никакое другое решение не обеспечит такой же уровень безопасности.

ZeBeDee проста для понимания: сервер ZeBeDee обрабатывает соединения от  клиентов ZeBeDee. Сервер шифрует данные, сжимает их, и пересылает клиенту.  Клиент расшифровывает, распаковывает,  и пересылает данные программе. ZeBeDee "вклинивается" в передачу  данных между двумя компьютерами. Серверу ZeBeDee не нужно находиться  на том же компьютере, где и  Firebird. Клиент ZeBeDee также не обязан  быть там, где находится приложение, работающее с Firebird. Существует  масса возможных комбинаций, но я выбрал, когда ZeBeDee и Firebird находятся на одной машине.

Предполагается, что существует много удаленных клиентов, и клиент ZeBeDee будет один для всех. Это наиболее характерный случай при работе через Internet.

 

2. Разработка и апробация проекта

 

Не секрет, что базы данных делятся на однопользовательские и многопользовательские. В первом варианте пользователь работает один со своей базой данных, и может  делать с ней все что хочет. При многопользовательском варианте возникает сразу проблема – нужно  обеспечить достоверность данных при  одновременной работе нескольких пользователей  с одной базой данных.

Чтобы обеспечить пользователей удобной работой  в многопользовательском режиме, разработчики придумали транзакции. Перед внесением изменений в б.д.:

1. начинаем транзакцию

2. вносим  изменения

3. пытаемся завершить транзакцию

a. Если завершить удалось, то все ОК

b. Если  произошла ошибка, то отказываемся  от всех изменений и сообщаем  пользователю об обнаружении ошибки.

Этого золотого правила достаточно для написания  любых клиент серверных приложений. Широко при этом используется язык SQL, конкретно нам понадобятся команды Select, Insert, Update, Delete, Drop, Add и другие.

 Для администрирования сервера  FireBird используются утилиты FlameRobin, IBExpert и др. Для того, чтобы получить возможность работы с БД, необходимо проделать следующие операции:

- зарегистрировать сервер;

- присоединиться к серверу;

- зарегистрировать (или создать заново) базу данных;

- присоединиться к базе данных;

На каждой машине регистрировать сервер и БД нужно только один раз. Зарегистрируем сервер и создадим базу данных утилитой FlameRobin.

Утилита FlameRobin предназначена для администрации баз данных в СУБД FireBird. Создание нового набора данных осуществляется с помощью пункта меню Database -> Create new database в соответствии с рисунком 3.

Рисунок 3 – Создание базы данных

На языке SQL  создание новой базы данных осуществляется с помощью  команды:

CREATE DATABASE 'E:\localhost\Курсовая2\Server\BASE.GDB'

USER 'SYSDBA' PASSWORD 'masterkey'

PAGE_SIZE 16384

DEFAULT CHARACTER SET WIN1251;

В IB 6 появилось несколько расширений, как SQL так и типов данных, которые  поддерживаются при помощи диалектов.

В диалекте 3 не поддерживается автоматическая конвертация типов в выражениях. Например, если раньше в SQL можно было написать 1+'3' и получить ответ 4, то в диалекте 3 будет выдано сообщение об ошибке.

Поле ввода «Кодировка» предназначена  для выбора набора символов национального  алфавита для текстовых полей  базы данных. Русские символы Windows содержатся в кодировке Win1251.

Теперь необходимо зарегистрировать базу данных в соответствии с рисунком 4.

Рисунок 4 – Регистрация базы данных.

Многие разделы формы совпадают  с окном создания базы данных. После  создания базы данных необходимо определить структуру информации и ввести данные в таблицы. Эти операции делаются посредством команд языка SQL.

На языке SQL создание таблицы EXAMQUESTION описывается предложением:

CREATE TABLE EXAMQUESTION (

    PK        INTEGER NOT NULL,

    THEME     INTEGER NOT NULL,

    TEXT      VARCHAR(500),

    PICTURE   BLOB SUB_TYPE 0 SEGMENT SIZE 80,

    COMMENTS  VARCHAR(753));

Ввод данных выполняется с помощью  INSERT языка SQL:

CREATE TABLE – команда создания запроса, дальше название таблицы, в скобках указываются параметры таблицы, потом скобка закрывается и обязательно ставится точка с запятой.

NOT NULL – означает что поле не может содержать пустых значений – если пользователь попытается сохранить значение NULL для, то произойдет ошибка на уровне СУБД, а обрабатывать вам эту ошибку в своей программе или нет, это уже ваше дело. Поле TEXT имеет текстовое значение. В Firebird оно обозначается как VARCHAR и в скобках указывается максимальное количество возможных символов.

Также здесь  мы указываем кодировку для символов – это нужно чтобы нормально  отображались русские символы 

SET NAMES WIN1251;

Firebird автоматически определят уникальные индексы для первичных и внешних ключей таблицы. Индексы это механизм для улучшения быстродействия поиска данных. Индекс определяет столбцы которые могут быть использованы для эффективного поиска и сортировки в таблице. Таким образом создаются все таблицы нашей базы данных.

В Firebird нет такого типа как счетчик или autoincrement, выход из этой ситуации обеспечивается созданием, так называемого генератора. Генератор – это хранящаяся в базе данных программа, выдающая при каждом обращении к ней уникальное число. Для каждого автоинкрементного поля в базе данных создается свой генератор.

Пишем запрос:

CREATE GENERATOR GEN_EXAMQUESTION_ID;

Нажимаем  выполнить. Мы создали генератор  GEN_EXAMQUESTION_ID. Теперь нам надо установить начальное значение генератора, делается это следующим образом:

SET GENERATOR GEN_EXAMQUESTION_ID TO 0;

Теперь  у нас есть генератор, с заданным начальным значением.

Теперь необходимо создать триггер - это отдельная программа, ассоциированная  с таблицей или видом, которая  автоматически выполняет действия, при добавлений, изменений или  удалений строки в таблице или  виде.

Когда триггер вызван, он имеет  непосредвенный доступ к добавлению, изменению или уничтожению данных. Триггеру могут быть так же доступны данные из других таблиц.

SET SQL DIALECT 3;

SET NAMES WIN1251;

SET TERM ^ ;

CREATE TRIGGER EXAMTR_SDTFDT FOR EXAMTR

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

New.lastdate = 'NOW';

end

SET TERM ; ^

CREATE TRIGGER – говорит, что мы хотим создать триггер – правило, далее указываем название триггера и для какой таблицы он будет предназначен (FOR EXAMTR).

Предложение ACTIVE BEFORE INSERT – указывает, когда триггер должен выполняться, в данном случае, каждый раз перед созданием новой записи. Слово AS – зарезервированное, открывает тело триггера. Тело триггера всегда (даже если триггер содержит единственный оператор – как в нашем случае) должно ограничиваться парой ключевых слов BEGIN – END.

После завершения разработки БД необходимо разработать два приложения: клиент и сервер, работающие через ориентированные на соединения сокеты:

  1. Сервер подключается к порту на хосте и ждет соединения с клиентом;
  2. Клиент создает сокет и пытается соединить его с портом на хосте;
  3. Если создание сокета прошло успешно, то сервер переходит в режим ожидания команд от клиента;
  4. Клиент формирует команду и передает ее серверу, переходит в режим ожидания ответа;
  5. Сервер принимает команду, выполнеят ее и пересылает ответ клиенту.
  6. и т.д

Клиентская часть систем баз  данных часто оформляется в виде прикладных программ (приложений). Для  создания приложений баз данных в среде Delphi имеется набор компонентов IB.

Перейдем к созданию главной формы сервера. Напишем обработчик события OnFormCreate у основной формы приложения:

procedure TFmExamServer.FormCreate(Sender: TObject);

var Fname,tmpstr:string;

F: textfile;

begin

Stat[0]:= '';

Stat[1]:= 'ожидание ответа';

Stat[2]:= 'готово к старту';

Stat[3]:= 'идет экзамен';

Stat[4]:= 'просмотр результатов';

Stat[5]:= 'просмотр неправильных';

Stat[6]:= 'прервано администратором';

Stat[7]:= 'Завершено';

Try

  IniFile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'settings.ini');

  Fname:=IniFile.ReadString('base','adress','localhost');

  tmpstr:=IniFile.ReadString('base','path','E:\Srv\BASE.GDB');

  IniFile.Free;

  IBDatabase1.DatabaseName:=Fname+':'+tmpstr;

  IBDatabase1.Connected:=true;

  IBDataSetEXAMtr.Open;

except

  MessageDlg('Не удалось соединиться с базой данных', mtError, [mbOk], 0);

  FmExamServer.close;

end;

ShowWorkPlases(-1);

end;

Создаваемое в среде Delphi приложения – «сервер» состоит из нескольких элементов, объединённых в проект. На главной форме в реальном времени отображаются подключенные рабочие станции. В поле «экзаменуемый» выводится ФИО – экзаменуемого. «Время» - время начала экзамена. «Статус» процесса показывает, что в данный момент происходит на рабочей станции.

Информация о работе Автоматизация процесса тестирования, защита от изменения, подмены и перехвата при передаче данных и от беспрепятственного физического ко