Научная статья на тему 'Алгоритм защиты программного обеспечения от незаконного копирования'

Алгоритм защиты программного обеспечения от незаконного копирования Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
4
1
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
защита программного обеспечения / защита информации / встраиваемый модуль защиты / привязка к аппаратным средствам

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — А П. Медведев

С развитием цифровизации всех сфер жизни общества кратно возрастает и актуальность разработки нового программного обеспечения, а следовательно и методов его защиты от незаконного копирования и воспроизведения. Основные риски связаны как со взломом готового релиза, так и с утечкой отдельных сегментов кода еще на этапе разработки. При этом шансы утечки напрямую зависят как от количества вовлеченных на разных этапах в процесс разработки специалистов, так и количества самих этапов. Целью данной работы является разработка встраиваемого модуля, направленного на защиту программного обеспечения или отдельных его элементов от незаконного копирования и дальнейшего воспроизведения.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Алгоритм защиты программного обеспечения от незаконного копирования»

Алгоритм защиты программного обеспечения от незаконного

копирования

А.П. Медведев Иркутский государственный университет путей сообщения

Аннотация: С развитием цифровизации всех сфер жизни общества кратно возрастает и актуальность разработки нового программного обеспечения, а следовательно и методов его защиты от незаконного копирования и воспроизведения. Основные риски связаны как со взломом готового релиза, так и с утечкой отдельных сегментов кода еще на этапе разработки. При этом шансы утечки напрямую зависят как от количества вовлеченных на разных этапах в процесс разработки специалистов, так и количества самих этапов. Целью данной работы является разработка встраиваемого модуля, направленного на защиту программного обеспечения или отдельных его элементов от незаконного копирования и дальнейшего воспроизведения.

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

Задача защиты программного обеспечения является неотъемлемой часть процесса разработки. Вместе с тем, на текущий момент не существует единого подхода к реализации самих методов защиты программ от незаконного копирования и воспроизведения. Большая часть методов защиты, как правило, базируются на методах скрытия программного кода [1] или привязки программного обеспечения к аппаратной составляющей. Так, в работе [2] описаны два метода привязки программного обеспечения к аппаратному окружению: автоматическая защита и защита при помощи API-функций. В работе [3] рассматриваются подходы с точки зрения общего разделения методов на программные и аппаратные. В работе [4] представлен способ создания программ, скрывающий возможность отслеживая выполнения кода. В работе [5] рассматривается подход, состоящий в использовании фиктивных операций для сокрытия деталей алгоритма, выполняемого процессором, а публикация [6] призывает оценивать алгоритм защиты программного обеспечения с точки зрения разных уровней абстракций.

Нельзя не отметить также опыт защиты программного обеспечения на базе имеющихся криптографических систем защиты информации, описанных в [7] и методов защиты с использованием графических составляющих [8]. Существуют также алгоритмы, направленные на защиту потока обработки данных на основе динамической фрагментации [9]. Не перестает также быть актуальным и классический подход к защите программного обеспечения, на основе скрытия функций [10] и скрытия кода на основе алгоритмов AES [11]. В данной работе рассматривается метод, по своим характеристикам относящийся к семейству методов «Автоматической защиты», описанном в работе [1], имеющий при этом несколько особенностей, существенно повышающих его стойкость к взлому.

Условно, представленный алгоритм защиты программного обеспечения состоит из нескольких этапов:

- этап создания запроса (встраиваемый в код или в качестве отдельного приложения), на основе которого впоследствии будет сгенерирован уникальный ключ;

- этап генерации ключа;

- этап проверки ключа (встраиваемый в программное обеспечение).

В качестве примера реализации алгоритма был выбран язык программирования C#.

В качестве функции преобразования (шифрования) была выбрана функция на основе оператора XOR (исключающее ИЛИ), являющимся обратимой функцией.

Таким образом, функция шифрования будет иметь вид: char SecretFunction(char character, ushort Key){

character = (char)(character A Key);

return character;}

М Инженерный вестник Дона, №5 (2024) ivdon.ru/ru/magazine/arcliive/n5y2024/9185

Представленный алгоритм использует несколько наборов ключей -ключ пользователя и два ключа защиты. Ключ пользователя (кеу_шег) предназначен для создания уникального идентификатора (хэша) оборудования конечного пользователя. Ключи защиты, состоящие из двух наборов ключей (весге1Кеу1, весге1Кеу2), необходимы для защиты самого уникального ключа и случайной вставки («балласта»).

Этап создания запроса В общем виде процесс создания запроса представляет собой сбор идентификаторов выбранного перечня оборудования, к которому осуществляется привязка, шифрование этого набора ключом пользователя и дальнейшая запись в файл запроса.

На рис.1 изображена логическая блок-схема работы алгоритма запроса ключа.

Вывод: БепаМс) Вывод: зЬИМй

Рис.1. Схема работы алгоритма на этапе запроса ключа

В качестве примера реализации запроса приведем фрагмент кода генерации запроса, основанном на связке серийных номеров материнской платы, жесткого диска и процессора:

кеу_шег = 0x0001; (1)

8епа1_1ё=МоШегВоагёГО+Уо1ите8епа1[мУо1ите8епаШитЬегм].То81гт§().Тп т() + РгосеББогГО; ЮгеасИ (уаг с т БепаЫё)

+= 8есге1Еипс1:юп(с, кеу_шег);

и

Далее в работе будем рассматривать пример, когда полученная последовательность-строка записывается в файл запроса request.dat.

Этап генерации ключа На этом этапе, в качестве примера, определим следующие переменные:

secretKey1 = 0x0008; secretKey2 = 0x0022;

string name_add = "текст"; (выбирается произвольно) string name = "имя"; (задается вручную) shifr_id = "mu!rushof@18@0DCECGDCGCGG111@1742"; Схематично этап генерации представлен на рис.2.

(2)

(3)

(4)

Рис.2. Схема работы алгоритма на этапе генерации ключа

Шифруем переменную shifr_id двумя ключами и объединяем истинную часть и «балластную»: foreach (var c in shifr_id)

shifr_id1 += SecretFunction(c, secretKey1); foreach (var c1 in shifr_id)

shifr_id2 += SecretFunction(c1, secretKey2); key = shifr_id1+ shifr_id2;

Шифруем имя пользователя (name) и добавляем случайный текст (name_add), шифрованный на другом ключе:

foreach (var c3 in name)

name_tmp1 += SecretFunction(c3, secretKey1); foreach (var c4 in name_add)

name_tmp2 += SecretFunction(c4, secretKey2); name = name_tmp1+name_tmp2;

Далее в работе будем считать, что обе переменные были записаны в файл лицензии keyfile.dat, где первая строка - переменная key, вторая - name.

Этап проверки ключа Итак, файл ключа представляет собой текстовый документ, состоящий из двух строк, где первая строка (key) содержит в себе шифрованную информацию и «балласт», вторая строка (name) - шифрованные имя пользователя и случайный текст.

На этапе проверки ключа производится сбор серийных номеров оборудования, к которому осуществляется привязка и шифрование аналогично этапу создания запроса. Далее производится работа с полученным ключевым файлом на предмет отделения ключевой информации и имени от «балласта» и случайного текста, а затем их дешифрование на ключе защиты (secretKey1). Вычисленные и полученные из файла данные ключей сравниваются, на основании чего делается вывод об истинности соответствия ключа лицензии и аппаратных средств. На рис.3 изображена логическая блок-схема работы алгоритма этапа проверки ключа.

М Инженерный вестник Дона, №5 (2024) ivdon.ru/ru/magazine/arcliive/n5y2024/9185

Рис.3. Схема работы алгоритма на этапе проверки ключа Аналогично алгоритму запроса серийные номера оборудования шифруются ключом юзера (1).

serial_id=MotherBoardID+VolumeSerial[MVolumeSerialNumberM].ToString().Tri m() + ProcessorlD; foreach (var c in serial_id)

shifr_id += SecretFunction(c, key_user); Считываем из файла keyfile.dat переменную name:

string name = File.ReadLines(Application.StartupPath.ToString() + "\\keyfile.dat",

Encoding.Default).Skip(1).First();

Расшифровываем name из файла:

foreach (var c in name)

realname += TopSecret(c, secretKeyl); где realname - переменная, содержащая имя и случайный текст («балласт»). Отделяем имя от случайного текста: string name_true = realname.Substring(5); где 5-длина переменной текста (4) Работаем с ключом, cчитываем из файла:

string key = File.ReadLines(Application.StartupPath.ToString() + "\\keyfile.dat",

Encoding.Default).Skip(0).First();

Отделяем вторую половину («балласт»):

string vtor_pol = key.Substring(key.Length / 2);

string per_pol = key.Remove(n, vtor_pol.Length); //Обрезали первую половину

строки (пока еще шифрованную)

Расшифровываем первую половину строки:

var key_tmp = per_pol.ToArray(); //преобразуем строку в символы

foreach (var c in key_tmp)

realkey += SecretFunction (c, secretKeyl);

где realkey - расшифрованный и очищенный от «балласта» ключ, который

должен быть равен переменной shifr_id, то есть сборному serial_id

оборудования пользователя, зашифрованном на ключе пользователя

(key_user).

Проверяем:

if (realkey == shifr_id)

{активация функционала программы}

else

{выход}

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

Литература

1. Behera C., Bhaskari L. Different Obfuscation Techniques for Code Protection // Procedia Computer Science, 2015, Vol. 70, pp. 757-763.

2. Барсуков О.М., Сидоренко И.А., Коренев М.О. Программный модуль защиты информации от незаконного копирования // Актуальные проблемы деятельности подразделений УИС, 2014, С. 43-45.

3. Аверин А.А., Рогожникова Е.Г. Защита программного обеспечения от незаконного копирования // Певзнеровские чтения, 2014, №1, С.5-11.

4. Goldreich O. Towards a Theory of Software Protection (Extended Abstract) // Advances in Cryptology — CRYPTO' 86. Lecture Notes in Computer Science, 1987, Vol. 263, pp. 426-439.

5. Hollmann H.D.L.,Linnartz J.P.M.G., J.H.van Lint, Baggen C.P.M.J., Tolhuizen L.M.G. Protection of software algorithms executed on secure modules // Future Generation Computer Systems, 1997, Vol. 13, Issue 1, pp. 55-63.

6. Swinson J. Copyright or Patent or Both: An Algorithmic Approach to Computer Software Protection // Harv. JL & Tech, 1991, Vol.5, pp.145-214.

7. Маро.Е.А. Алгебраический анализ стойкости криптографических систем защиты информации // Инженерный вестник Дона, 2013, №4. URL: ivdon. ru/ru/magazine/archive/n4y2013/1996.

8. Панкратов С.А. Использование графической информации для защиты программного и информационного обеспечения // Инженерный вестник Дона, 2012, №2. URL: ivdon.ru/ru/magazine/archive/n2y2012/792.

9. Huang J., Kong X. Research on Data Privacy Security Comprehensive Protection Program Based on Computer Data Protection Algorithm // 2023 IEEE International Conference on Image Processing and Computer Applications (ICIPCA), 2023, pp. 325-329.

10. Sander T., Tschudin C.F. On Software Protection via Function Hiding // Information Hiding. IH 1998. Lecture Notes in Computer Science, 1998, Vol. 1525, pp. 111-123.

11. Ismanto R., Salman M. Improving Security Level through Obfuscation Technique for Source Code Protection using AES Algorithm // Proceedings of the 2017 7th International Conference on Communication and Network Security, 2017, pp. 18-22.

References

1. Behera C., Bhaskari L. Procedia Computer Science, 2015, Vol. 70, pp. 757-763.

2. Barsukov O.M.,Sidorenko I.A., Korenev M.O. Aktual'nye problemy deyatel'nosti podrazdeleniy UIS, 2014, pp. 43-45.

3. Averin A.A., Rogozhnikova E.G. Pevznerovskie chteniya, 2014, №1, pp.

5-11.

4. Goldreich O. Advances in Cryptology — CRYPTO' 86. Lecture Notes in Computer Science, 1987, Vol. 263, pp. 426-439.

5. Hollmann H.D.L.,Linnartz J.P.M.G., J.H.van Lint, Baggen C.P.M.J., Tolhuizen L.M.G. Future Generation Computer Systems, 1997, Vol. 13, Issue 1, pp. 55-63.

6. Swinson J. Harv. JL & Tech, 1991, Vol.5, pp. 145-214.

7. Maro.E.A. Inzhenernyj vestnik Dona, 2013, №4. URL: ivdon.ru/ru/magazine/archive/n4y2013/1996.

8. Pankratov S.A. Inzhenernyj vestnik Dona, 2012, №2. URL: ivdon.ru/ru/magazine/archive/n2y2012/792.

9. Huang J., Kong X. 2023 IEEE International Conference on Image Processing and Computer Applications (ICIPCA), 2023, pp. 325-329.

10. Sander T., Tschudin C.F. Information Hiding. IH 1998. Lecture Notes in Computer Science, 1998, Vol. 1525, pp. 111-123.

11. Ismanto R., Salman M. Proceedings of the 2017 7th International Conference on Communication and Network Security, 2017, pp. 18-22.

Дата поступления: 11.03.2024 Дата публикации: 22.04.2024

i Надоели баннеры? Вы всегда можете отключить рекламу.