МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ НЕТИПОВОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ «ГИМНАЗИЯ №2»
Секция «Информационные технологии»
Возрастная номинация: 9-11 класс
Проектная работа по теме:
«Обфускация данных, как метод защиты информации»
Выполнил:
Крючков Виталий,
ученик 11 «А» класса
Руководитель:
Куренко Н.В.,
учитель информатики
МАНОУ «Гимназия № 2»
Баранова Т.А.,
Учитель информатики
МАНОУ «Гимназия №2»
г. Мариинск
2022 год
Оглавление
Введение 3
Основная часть 5
Что такое обфускации 5
Методы обфускации данных 5
Практическое применение с помощью Python 6
Заключение 13
Список использованных источников литературы 14
Введение
«Кто владеет информацией, тот владеет миром»
Н. Ротшильд.
Натан Ротшильд, основатель огромной банковской династии Ротшильтов, как-то сказал эту фразу, которая сразу стала крылатой. Человечество всегда старалось найти способ передачи информации так, чтобы враги или посторонние не могли получить к ней доступ. И с каждым годом информация играет все более важную роль в нашей жизни.
Современный мир – мир высоких технологий и сделанных на их основе изобретений. Именно поэтому одним из важнейших современных активов любого предприятия является информация.
Зависимость человечества от неё действительно сложно переоценить. Информация – это самый ценный ресурс человека на данном этапе его развития. Безусловно, именно поэтому она подлежит защите. И одной из самых надежных защитных технологий является шифрование информации.
Именно поэтому проект посвящён теме шифрования данных и его видов.
Актуальность выбранной темы заключается в том, что современные технологии имеют возможность хранить и передавать всё большие объемы информации. Вместе с этим информация становится всё более уязвимой по разным причинам. В настоящее время безопасность данных является одной из ключевых задач во многих отраслях, а потому заинтересованность информационного сообщества в более стойких ко взлому, а также более быстрых в своей работе алгоритмах может и будет проявляться как сейчас, так и в дальнейшем.
Объект исследования: программный код.
Предмет исследования: способы различного запутывания кода.
Цели проекта: разработать и повысить уровень защиты программного кода за счет использования элементов обфускации.
Задачи проекта:
Провести анализ существующих методов обфускации данных;
Выбрать самые эффективные из методов обфускации программного кода, исходя из времени выполнения их программы;
Выявить наиболее подходящие под критерии методы.
Методы исследования:
Описательный
Аналитический
Практический
Основная часть
Что такое обфускации
Обфускации, или запутывание кода – это приведение исходного или исполняемого кода программы к виду, при котором сохраняются функциональность и работоспособность программы, но затрудняется анализ, понимание работы алгоритмов, их модификация или декомпиляция.
Методы обфускации данных
Методы обфускации данных делятся на: обфускации хранения, обфускации соединения, обфускации переупорядочивания.
Обфускация хранения направлена на создание и использование сложных типов данных, замену существующих типов данных и т.п.
Включает следующие преобразования:
разделение переменных;
замена статических данных на процедурные, например, замена строк на функцию, возвращающую требуемую строку в зависимости от входных параметров;
изменение области видимости переменных.
Обфускация соединения состоит в объединении или разделении данных, или структур данных.
В качестве примера таких методов могут служить операции с массивами:
разделение одного массива на множество массивов,
изменение размерности массивов,
соединение нескольких переменных в массив.
Обфускация переупорядочивания состоит в изменении порядка следования объектов.
Включает следующие преобразования:
изменение порядка объявления переменных,
изменение порядка следования функций,
изменения внутренней организации структур и классов.
Практическое применение с помощью Python
В своей программе я буду применять несколько методов обфускации данных на практике (объединение переменных в массив, объединение массивов, изменение размерности массива, изменение параметров функции, разделение данных массива) и сравнивать время, за которое программа выполняется.
Исходный код программы выглядит так:
def formula(so, ks, k, ko):
return ((so*ks)/(k*ko))
ks=1204
ko=20
a=37
b=23.4
d=[5,9,7,3,1,3,2,10,6,7,9,4,9,3,6,8,9,2,7,9]
k=a*b
so=sum(d)
y=formula(so, ks, k, ko)
if y5:
print('В первой сотне')
else:
print('Не в первой сотне')
Время выполнения исходной программы: 2,05365 секунд
Объединение переменных в массив:
def formula(so, ks, a, b, ko):
return ((so*ks)/(a*b*ko))
c= [1204, 20, 37, 23.4]
d=[5,9,7,3,1,3,2,10,6,7,9,4,9,3,6,8,9,2,7,9]
y= formula (sum(d), c[0], c[3], c[2], c[1])
if y5:
print ('В первой сотне')
else:
print ('Не в первой сотне')
Время выполнения программы: 2,38165 секунд
Объединение массивов и изменение размерности массива:
def formula(so, ks, a, b, ko):
return ((so*ks)/(a*b*ko))
c=[1204, 20, 37, 23.4]
d=[[5,9,7,3],[1,3,2,10],[6,7,9,4],[9,3,6,8],[9,2,7,9], [1204,20,37,23.4]]
s=0
for i in range(len(d)-1):
for j in range(len(d[i])):
s+=d[i][j]
y=formula(s, d[5][0],d[5][3], d[5][2], d[5][1])
if y5:
print('В первой сотне')
else:
print('Не в первой сотне')
Время выполнения программы: 2,61335 секунд
Изменение параметров функции:
d=[[5,9,7,3],[1,3,2,10],[6,7,9,4],[9,3,6,8],[9,2,7,9], [1204,20,37,23.4]]
s=0
def formula():
return ((s*d[5][0])/(d[5][3]*d[5][2]*d[5][1]))
for i in range(len(d)-1):
for j in range(len(d[i])):
s+=d[i][j]
y=formula()
if y5:
print('В первой сотне')
else:
print('Не в первой сотне')
Время выполнения программы: 2,67835 секунд
Разделение данных массива:
d=[[5,9,7,3],[1,3,2,10],[6,7,9,4],[78.9, 403, 37, 23.4]]
s=0
m=0
t=[[9,3,6,8],[9,2,7,9],[1204,20,9,0]]
for i in range(len(d)-1):
for j in range(len(d[i])):
s+=d[i][j]
def formula():
return (((s+m)*t[2][0])/ (d[3][2]*d[3][3]*t[2][1]))
for i in range(len(t)-1):
for j in range(len(t[i])):
m+=t[i][j]
y=formula()
if y5:
print('В первой сотне')
else:
print('Не в первой сотне')
Время выполнения программы: 2,92435 секунд
Заключение
В ходе выполнения проекта на практике были изучены методы применения обфускаций данных. Разработаны и протестированы рабочие алгоритмы запутывания программного кода на языке Python.
Наиболее эффективными методами обфускации данных являются “Разделение данных массива”, “Изменение параметров функции”, которые позволяют повысить сложность понимания и анализа работы программы, что подтверждается сокращением времени обработки программы на 42% и 30%.
Проделанная работа указывает на то, что обфускация данных как самостоятельный инструмент запутывания кода мало изучена, и что усложнение методов шифрования информации в современном мире имеет огромное значение для сохранности данных и интеллектуальной собственности.
Список использованных источников литературы:
https://ru.wikipedia.org/wiki/Обфускация_(программное_обеспечение)
https://studme.org/128268/informatika/opredelenie_obfuskatora
https://habr.com/ru/post/533954/
https://www.techtarget.com/searchsecurity/definition/obfuscation
https://stackoverflow.com/questions/3344115/how-to-obfuscate-python-code-effectively
3