Далее суммируем с результатом предыдущего цикла:
,
,
,
. (4)
После окончания цикла необходимо проверить, есть ли
ещё блоки для вычислений. Если да, то переходим к следующему элементу массива
и повторяем цикл.
Результат вычислений находится в буфере
, это и есть хэш. Если выводить
побайтово, начиная с младшего байта
и закончив старшим байтом
, то мы получим MD5-хэш.
Для большей безопасности мы будем находить и сравнивать хэши не только
паролей, но также и 1 и 3 символов из пароля. Таким образом, на основании
одного пароля, будет происходить двойная проверка.
.6 Обеспечение целостности данных
Целостность базы данных -это соответствие имеющейся в базе данных информации её внутренней логике, структуре и всем явно заданным правилам. Каждое правило, налагающее некоторое ограничение на возможное состояние базы данных, называется ограничением целостности. Примеры правил: вес детали должен быть положительным; количество знаков в телефонном номере не должно превышать 25; возраст родителей не может быть меньше возраста их биологического ребёнка и так далее.
Обеспечение целостности данных было заложено ещё в создании модели базы данных при задании типов полей и использовании внешних ключей. Таким образом, пользователь не сможет в качестве наименования поставщика записать число и не сможет, создавая номенклатуру указывать поставщика, которого нет в базе данных.
Реализация приведенного ограничения не гарантирует нам полное соблюдение целостности данных. Например, на предприятии имеется два склада: склад № 1 и склад № 2. Пусть товар поступает на склад№ 1 и оформляется его продажа. Поскольку нет прямого соответствия между складами и товарами (нет таблицы с полями «Склад» и «Номенклатура»), может получиться так, что мы будем продавать товар с подразделения, которое связано со складом № 2, но не имеет отношения к складу №1.
Если не создать дополнительные проверки, то мы будем получать
отрицательные остатки по складу № 2, в то время как на складе № 1 будет лежать
товар. Данная ситуация некорректна, и мы обязаны включить дополнительные
проверки на целостность, но уже реализованные в приложении.
.7 Шифрование содержимого базы данных
Обязательным шагом в защите базы данных является шифрование её содержимого, ведь в случае успешного взлома и отсутствия шифрования злоумышленник получит сразу всю информацию. Если информация зашифрована, то её злонамеренное использование невозможно.
В качестве алгоритма шифрования выбран алгоритмAES. На текущий момент этот алгоритм считается достаточно надежным, имеет приемлемую длину ключа и отсутствие метода простого взлома [14].
AES является стандартом, основанным на алгоритме
Rijndael. Для AES длина блока входных данных (input) и длина блока с промежуточным результатом шифрования
(State) постоянна и равна 128 бит, а длина
шифроключа Kсоставляет 128, 192, или 256 бит. При этом, исходный алгоритм
Rijndael допускает длину ключа и размер блока от 128 до 256 бит с шагом в 32
бита. Для обозначения выбранных длин input, Stateи K в32-битных словах используются обозначения:
для input и State,
для K соответствующих длин [15].
В начале шифрования input копируется в массив State по
правилу:
,(5)
для
и
.
После этого к State применяется процедура AddRoundKey() и затем State проходит через процедуру трансформации (раунд) 10, 12, или 14 раз (в зависимости от длины ключа), при этом надо учесть, что последний раунд несколько отличается от предыдущих. В итоге, после завершения последнего раунда трансформации, State копируется в блок выходных данных (output) по правилу.
Отдельные трансформации SubBytes(), ShiftRows(), MixColumns()иAddRoundKey()обрабатываютState. Массив w содержит keyschedule.
В рассматриваемой версии алгоритма AES-128 ключ шифра
состоит из 128 битов, поделенных на 16 байтов:k0, k1, k2, … k15и записывается в столбцы матрицы
InputKey. Каждый столбец матрицы InputKey образует слово, то есть фактически
ключ шифра - это четыре слова w0, w1, w2, w3, где w0= k0, k1, k2, k3,w1 = k4, k5, k6,k7и так далее (рисунок 9).
k0
k4
k8
k12
k1
k5
k9
k13
k2
k6
k10
k14
k3
k7
k11
k15
w0
w1
w2
w3
w4
w5
w6
w7
…
w42
w43
Рисунок10- Формирование ключей раунда
Из этих слов с помощью специального алгоритма (о нем позже) образуется
последовательность из 44 слов: w0, w1, w2, …, w43 (каждое слово по 32 бита).
На каждый раунд шифрования подаются по четыре слова этой
последовательности. Они и будут играть роль раундового ключа. Схема
преобразования данных показана на рисунке10.
Рисунок 11- Схема шифрования и дешифрования AES
Перед первым раундом выполняется операция AddRoundKey (суммирование по
модулю 2 с начальным ключом шифра). Преобразования, выполненные в одном раунде,
обозначают Round (State, RoundKey) где переменная State является матрицей,
описывающей данные на входе раунда и на его выходе после шифрования; переменная
RoundKey - матрица, содержащая раундовый ключ.
Раунд состоит из 4 различных преобразований (рисунок 11).
В данные преобразования входят:
) побайтовая подстановка в S-боксе с фиксированной таблицей замен
(SubBytes);
) побайтовый сдвиг строк матрицы State на различное количество байт
(ShiftRows);
) перемешивание байт в столбцах (MixColumns);
) сложение по модулю 2 с раундовым ключом (AddRoundKey).
Последний раунд несколько отличается от предыдущих тем, что не
задействует функцию MixColumns [16,17].
Рисунок 12- Схема раундов шифрования и дешифрования AES
При дешифровании в каждом раунде выполняются обратные операции:
InvShiftRows, InvSubBytes, AddRoundKey и InvMixColumns. Порядок выполнения
операций при шифровании и дешифровании различен, причины чего будут ясны после
детального рассмотрения каждого преобразования.
Поскольку алгоритм используетконечное поле Галуа GF(28),
рассмотрим математические основы шифра AES. Для описания алгоритма используется конечное поле
Галуа GF(28), построенное как расширение поля GF(28) = {0,1} помодулю неприводимого
многочлена. Элементами поляGF(28) являются многочлены вида:
Степень многочленов меньше 8,а коэффициенты b7,b6,…,b0Î{0,1}. Операции в поле выполняются по модулю Представление двоичного числаb7b6b5b4b3b2b1b0 в виде многочлена с коэффициентами b7,b6,…,b0позволяет интерпретировать байт как битовый многочлен в
конечном поле GF(28):
Например, байт 63 задает последовательность битов 01100011 и определяет
конкретный элемент поля 01100011 « Рассмотрим основные математические операции в поле GF(28):
) сложение байт можно выполнить любым из трех способов:
.1) представить байты битовыми многочленами и сложить их по обычному
правилу суммирования многочленов с последующим приведением коэффициентов суммы
по модулю 2 (операция XOR над коэффициентами);
.2)суммировать по модулю 2 соответствующие биты в байтах;
.3)сложить байты в шестнадцатеричной системе исчисления;
Например, следующие три записи эквивалентны:
представление в виде многочленов:
битовое представление:
шестнадцатеричное представление:
{57} Å{83}= {D4}; (11)
) умножение байт выполняется с помощью представления их многочленами и
перемножения по обычным алгебраическим правилам. Полученное произведение
необходимо привести по модулю многочлена Перемножение многочленов в поле можно упростить, введя операцию умножения
битового многочленана Для любого ненулевого битового многочлена Для нахождения обратного элемента используют расширенный алгоритм
Эвклида.
.7.1 Многочлены с коэффициентами, принадлежащими полю GF(28)
Многочлены третьей степени с коэффициентами Таким образом, в этих многочленах в роли коэффициентов при неизвестных
задействованы байты вместо бит. Далее такие многочлены будем представлять в
форме слова[a0,a1, a2,a3].
В стандарте AES при умножении многочленов используется приведение по
модулю другого многочлена Для изучения арифметики рассматриваемых многочленов введем дополнительно
многочлен:
где Тогда сумма многочленов Умножение является более сложной операцией. Пусть, мы перемножаем два
многочлена:
Результатом умножения будет многочлен
где Чтобы результат можно было представить четырехбайтовым словом, необходимо
взять результат по модулю многочлена степени не более 4. Авторы шифра выбрали
для этой цели многочлен Поэтому в произведении коэффициенты при степенях где Рассмотрим подробнее преобразования раунда шифрования:
) операция SubBytes. Операция выполняет нелинейную замену байтов,
выполняемую независимо с каждым байтом матрицы State. Замена обратима и
построена путем комбинации двух преобразований над входным байтом (рисунок 12);
) нахождение обратного (инвертированного) элемента относительно умножения
в поле GF(28) (считается, что нулевой байт {00} переходит самв
себя);
) выполнение некого аффинного преобразования: умножение инвертированного
байта на многочлен
и суммирование с многочленом
в поле F2.
В матричной форме процедура SubBytes записывается как
где
через Если
на вход функции попадает нулевой байт, то результатом замены будет число Рисунок
13-Операция SubBytes
Созданную
на основе операцииSubBytes специальную таблицу замен байтов в шестнадцатеричной
системе называют S-боксом или таблицей преобразований SubBytes(таблица
13).
Таблица 13 -Таблица преобразований SubBytes
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
63
7C
77
7B
F2
6B
6F
C5
30
01
67
2B
FE
D7
AB
76
1
CA
82
C9
7D
FA
59
47
FO
AD
D4
A2
AF
9C
A4 CO
2
B7
FD
93
28
36
3F
F7
CC
34
A5
E5
F1
71
D8
31
15
3
04
C7
23
C3
18
96
05
9A
07
12
80
E2
EB
27
B2
75
4
09
83
2C
1A
1B
6E
5A
AO
52
3B
D6
B3
29
E3
2F
84
5
53
D1
00
ED
20
FC
B1
5B
6A
CB
BE
39
A4
AC
58
CF
6
DO
EF
AA
FB
43
4D
33
85
45
F9
02
F7
50
3C
9F
A8
7
51
A3
40
8F
92
9D
38
F5
BC
B6
DA
21
10
FF
F3
D2
8
CD
0C
13
EC
5F
97
44
17
C4
A7
7E
3D
64
5D
19
73
9
60
81
4F
DC
22
2A
90
88
46
EE
B8
14
DE
5E
0E
DE
A
E0
32
3A
0A
49
06
24
5C
C2
D3
AC
62
91
95
AE
79
B
E7
CB
37
6D
8D
D5
4E
A9
6C
56
F4
EA
65
E7
8B
08
C
BA
78
25
2E
1C
A6
B4
C6
F8
DD
74
IF
4B
BD
1D
8A
D
70
3E
B5
66
48
03
F6
OE
61
35
57
B9
86
C1
2B
9E
E
E1
F8
98
11
69
D9
8E
94
9B
1E
87
E9
CE
55
28
DF
F
8C
A1
89
OD
BF
E6
42
68
41
99
2D
OF
BO
54
BB
16
Например, если Рисунок14- Операция ShiftRows
С помощью операции MixColumns выполняется перемешивание байтов в столбцах
матрицы State. Каждый столбец этой матрицы принимается за многочлен над полем
GF(28) и умножается на фиксированный многочлен
по модулю многочлена Как показано выше, такую операцию можно записать в матричном виде как
Рисунок15-ОперацияMixColumns
Функция
AddRoundKey(State,RoundKey) побитово складывает элементы переменной RoundKey
и элементы переменной State по принципу: i-й столбец данных ( При
шифровании первое сложение ключа раунда происходит до первого выполнения
операции SubBytes.
Рисунок 16- Операция AddRoundKey
Рисунок 17 демонстрирует свойства рассеивания и перемешивания информации
в ходе шифрование алгоритмом AES. Видно, что два раунда обеспечивают полное
рассеивание и перемешивание информации. Достигается это за счет использования
функций ShiftRowsи MixColumns. Операция SubBytes придает шифрованию стойкость
против дифференциального криптоанализа, а операция AddRoundKey обеспечивает
необходимую секретную случайность.
Рисунок 17-Перемешивание информации
Для трех вариантов ключей AES полный перебор требует 2127, 2191
или 2255операций соответственно.
Даже наименьшее из этих чисел свидетельствует, что атака с использованием
перебора ключей сегодня не имеет практического значения. В соответствии с
оценками разработчиков шифр устойчив против таких видов криптоаналитических
атак как:
) дифференциальный криптоанализ;
)линейный криптоанализ;
)криптоанализ на основе связанных ключей (слабых ключей в алгоритме нет)
.8 Защита от дизассемблирования
Процесс дизассемблирования представляет собой преобразование программы в
её исходный код на языке ассемблера. Обладая исходным кодом, злоумышленник
может определить важную функцию и использовать её, например, авторизацию в
приложение.
Простейшей защитой от дизассемблирования является подстановка
дополнительных функций. В нашем случае после функции проверки пароля вставлена
ничего не значащая функция, которая нарушает логику того, что после проверки
пароля происходит функция авторизации.
Также различные функции находятся в разных местах программы, что изменяет
последовательность её выполнения на уровне кода.
Подобные меры позволяют запутать картину дизассемблированного кода, что
усложняет применение данной атаки для злоумышленника [26].
.9 Резервное копирование
В приложении предусмотрена возможность создания резервной копии базы
данных. Для этой цели используется утилита mysqldump, которая автоматически
устанавливается вместе с СУБД MySql.
Mysqldump формирует текстовый документ, содержащий все sql-команды необходимые для создания копии базы данных.
Для восстановления базы данных можно также использовать утилиту mysqldumpили любое иное программное
обеспечение, позволяющее автоматически выполнить sql-команды из заданного файла.
Полный код, реализующий резервное копирование, представлен в приложении
А, в описании содержимого файла «interfaceadmin.cpp».
Программа написана с использованием интегрированной среды разработкиQtCreator на языке программирования C++.
При разработке приложения использовалась библиотека OpenSSL.
Основной задачей разрабатываемого приложения является предоставление
конечному пользователю возможности работы с базой данных посредством
программного интерфейса.
С помощью приложения пользователь сможет занести необходимую
первоначальную информацию (такую как имена и пароли новых пользователей
приложения, наименования товаров, данные о поставщиках и так далее) и в
дальнейшем использовать её при оформлении торговых операций (закупок товара,
продаж товара), а также для вывода отчетности на экран.
Классы приложения, которые условно можно разделить на служебные
(хэширование, шифрование и так далее), и относящиеся к работе с базой данных
(номенклатура, склады и так далее) взаимодействуют между собой.
Представленная диаграмма классов отражает данное взаимодействие (рисунок
18).
Рисунок 18-Диаграмма классов
Рассмотрим пример работы с программой. Представим, что наша компания
занимается продажей дизайнерских изделий ручной работы, закупаемых у
индивидуального предпринимателя Совкиной Дарьи, а также букетов от компании ООО
«Цветы Радости». Для продажи мы арендуем торговое место в магазине «Любимый» по
адресу Джамбула 45, а также занимаемся продажами через Интернет.
Вход в программу показан на рисунке 19.
Рисунок 19-Первый вход
Изначально в программе не созданы пользователи. Для их создания
нажимается кнопка «Первый вход». Создается пользователь «Администратор» со
стандартным паролем «123» и следующим интерфейсом (рисунок 20).
Рисунок 20-Интерфейс администратора
Далее администратор заходит в окно «Текущие пользователи» для изменения
своего пароля (рисунок 21).
Рисунок 21-Обновление пароля
После этого администратор может вернуться в свой интерфейс и создать
новых пользователей (рисунок 22).
Рисунок 22-Создание новых пользователей
Чтобы создать нового пользователя, его пароль должен быть больше 3
символов, данное условие необходимо для дополнительной проверки, о чем
говорилось ранее в работе (рисунок 23).
Рисунок 23-Создание новых пользователей
Созданный пользователь входит под своим логином и паролем, получая тот
интерфейс, который определен ему его правами доступа (рисунок 24).
Рисунок 24-Пример произвольного пользовательского интерфейса
Войдя в свой профиль, пользователь начинает заполнять базу данных
первичными данными. Например, заполняя поставщика (рисунок 25).
Рисунок 25-Окно поставщиков
Создав поставщика и занеся остальные данные в таблицу, пользователь может
переходить к заведению номенклатуры в базе (рисунок 26).
Рисунок 26-Окно номенклатуры
В процессе выполнения ВКР была проделана следующая работа:
) была спроектирована модель базы данных в соответствии с предмет-ной
областью «Торговля»;
) разработана архитектура безопасности системы, создана диаграмма классов
будущего приложения;
) проанализировано взаимодействие методов защиты с работой приложения;
) разработано приложение для работы с базой данных, внедрены методы
защиты приложения.
Выполнив данную работу, в результате мы получили защищенную программу,
которая позволяет осуществлять работу для выбранных пользователей с учетом их
спецификации - товаровед задает наименование товаров, поставщиков, складов,
производителей и т.д., а также ведает закупками. Продавец формирует продажи по
имеющейся номенклатуре. Директор просматривает отчеты с информацией о доходах и
расходах предприятия. Администратор может корректировать все таблицы, а также
исполнять административные функции, такие как, например, создавать новых
пользователей. Таким образом, была достигнута поставленная цель ВКР.
Данное приложение обеспечивает минимальный функционал для ведения
торгового учета и может успешно использоваться компаниями малого бизнеса.
1. Гайдамакин
Н. А. Автоматизированные информационные системы, базы и банки данных. Вводный
курс: учебное пособие/Н. А. Гайдамакин - М.: Гелиос АВР, 2002. - 368 с.
. Вакуленко
Т. Г. Анализ бухгалтерской (финансовой) отчетности для принятия управленческих
решений / Т. Г. Вакуленко - СПб.: Герда, 2003. - 288 с.
. Когаловский
М. Р. Энциклопедия технологий баз данных / М. Р. Когаловский- М.: Финансы и
статистика, 2002. - 800 с.
. Савицкий
Н. И. Технологии организации, хранения и обработки данных. / Н. И. Савицкий -
М.: Инфра, 2001. - 232 с.
. Куперштейн
В. И. Современные информационные технологии в делопроизводстве и управлении. /
В. И. Куперштейн- СПб.: Питер, 1999.
. Андрейчиков
А.В. Анализ, синтез, планирование решений в экономике. / Андрейчиков А. В. -
М.: Финансы и статистика, 2002. - 368 с.
. ГусеваТ.
И.Проектирование баз данных в примерах и задачах. / Т. И. Гусева - М.:Юнити,
2000.
8. Гилула М. М. Множественная модель данных в информационных
системах. /М. М. Гилула- М.: Наука, 1992.
. Грабер М. А. Введение в SQL. / М. А. Грабер- М.: Лори, 1996. -
379 с.
. Карпова И.П. Базы данных: Учебное пособие / И.П. Карпова. -
СПб.: Питер, 2013. - 240 c.
. Кириллов В. В. Введение в реляционные базы данных.Введение в
реляционные базы данных / В.В. Кириллов, Г.Ю. Громов. - СПб.: БХВ-Петербург,
2012. - 464 c.
12. Википедия.
Хэширование [Электронный ресурс] : сайт свободной энциклопедии. - Режим доступа
:https://ru.wikipedia.org/wiki/Хэширование(дата обращения 23.11.2016).
13. Википедия. Алгоритм MD5
[Электронный ресурс] : сайт свободной энциклопедии. - Режим доступа
:<https://ru.wikipedia.org/wiki/MD5>(дата обращения 20.11.2016).
14. Википедия. Шифрование [Электронный ресурс] : сайт свободной
энциклопедии. - Режим доступа :https://ru.wikipedia.org/wiki/
Шифрование(дата обращения 27.11.2016).
. Практическая криптография. Лекция 9.[Электронный ресурс].
Электронный документ. - Режим доступа:#"897131.files/image144.jpg">
Рисунок Б.1- Окно запуска программы
На рисунке Б.2 проиллюстрировано окно создания складов с уже
существующими записями.
Рисунок Б.2- Окно создания складов
На рисунке Б.3проиллюстрировано окно создания складов с уже существующими
записями.
Рисунок Б.3- Окно создания складов
Следующий рисунок отображает создание ставок НДС.
Рисунок Б.4- Окно создания ставок НДС
На рисунке Б.5 проиллюстрировано окно назначения цен товаров, с учетом
поставщика.
Рисунок Б.5- Окно назначения цен
Следующее окно показывает закупки, сделанные кладовщиком (товароведом).
Рисунок Б.6- Окно закупок
Рисунок Б.7 показывает работу продавца (создание продаж).
Рисунок Б.7- Окно продаж
Следующие окна показывают функционалдиректора. На рисунке Б.8 изображена
статистика продаж за весь перирод ( флажкив отборах не установлены).
Рисунок Б.8- Интерфейс директора, статистика продаж
Рисунок Б.9- Интерфейс директора, продажи по выбранной номенклатуре
Рисунок Б.11- Интерфейс директора, выручка за выбранный период
Отрицательная выручка на рисунке выше характеризуется тем, что в данный
период мы оформляли закупки, чья стоимость превысила сумму продаж в данный
день.
. (7)
. Всего в поле GF(28)
насчитывается 256многочленов.
.(8)
.
; (9)
; (10)
(результат приведения равен остатку
от деления произведения на
).
:
.(12)
в полеGF(28) существует
многочлен
обратный к нему по умножению, то есть
). (13)
ÎGF(28)из конечного поля
имеют вид:
(14)
.
,(15)
ÎGF(28).
и
имеет вид:
.(16)
,
. (18)
,(19)
;
;
;
;
;
;
, для которого справедливо
. (20)
,
0,1,2, 3 равны сумме произведений
по индексам, для которых
,
,
= 0,1,2,3. Таким образом, после приведения по модулю
получим:
, (21)
;
;
;
(22)
(23)
, (24)
обозначены входные биты, а через
- выходные.
. Процесс замены байтов с помощью таблицы подстановки
иллюстрирует рисунок 12. Нелинейность преобразования обусловлена нелинейностью
инверсии
, а обратимость - обратимостью матрицы.
1,1=
, то результат замены этого байта следует искать на
пересечении строки с индексом
и столбца с индексом
. Операция ShiftRows применяется к
строкам матрицы State- ее первая строка неподвижна, а элементы нижних трех
строк циклически сдвигаются вправо на 1, 2 и 3 байта соответственно (рисунок
14). По сути это перестановка элементов матрицы, в которой участвуют только
элементы строк, поэтому преобразование обратимо.
.
(25)
(рисунок 15).
(26)
0,1,2,3) складывается с определенным4-байтовым
фрагментом расширенного ключа
, где
- номер поточного раунда алгоритма (рисунок 16).
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХИСТОЧНИКОВ
