В статье рассматривается процесс защиты программного обеспечения от несанкционированного использования. В частности, приводятся примеры практического применения и внедрения файла лицензии в программный продукт. Использования файла лицензии как источника информации об условиях приобретения программного продукта конечным потребителем.
В мире коммерческого программного обеспечения существуют несколько популярных видов защиты от несанкционированного использования [1]:
– Локальная программная защита. В том числе защита с последующей активацией продукта через Интернет.
– Защита путем переноса части программы в облако. Известный также как подход SaaS (“Software As A Service” — программное обеспечение как услуга).
В свою очередь, локальная программная защита может быть реализована множеством способов, самым популярным из которых является проверка специального серийного ключа продукта. Однако, ключ продукта, зачастую не может нести в себе дополнительную информацию, такую как персональные данные конечного пользователя или какие-либо условия приобретения продукта.
Как быть в случае если программный продукт состоит из несколько частей, которые могут быть или не быть приобретены пользователем? Как разрешить потребителю использовать только часть возможностей программы? Здесь нам на помощь приходит файл лицензии.
Файл лицензии (License file) — текстовый файл, содержащий информацию об условиях использования программного продукта в открытом виде. А также цифровую подпись, гарантирующую целостность и достоверность этой информации.
Рассмотрим пример файла лицензии (Рис. 1). В данном примере мы имеем четыре информационных поля и цифровую подпись (“xxxxxxxxxxxxxxxxxxxxx”) вычисленную по алгоритму RSA-SHA256.
Рис. 1. Файл лицензии
– Version — Версия программного обеспечения для интерпретации файла лицензии.
– App version — Версия программного продукта, подлежащего защите.
– E-mail — Персональная информация пользователя программного обеспечения.
– Valid — Срок действия приобретенной лицензии.
В основе создания и проверки цифровой подписи файла лицензии лежит использование пары криптографических ключей — открытого и закрытого. Закрытый ключ хранится у владельца программного продукта (разработчика ПО) и ни при каких обстоятельствах не должен передаваться третьим лицам. Открытый же ключ, наоборот, распространяется вместе с программным продуктом и доступен всем пользователям программного продукта.
Рассмотрим процесс получения (генерации) файла лицензии на конкретном примере. Будем использовать Open Source библиотеку (с открытым исходным кодом) “nodejs-license-file” для защиты программного обеспечения, разработанного на платформе Electron. Electron — фреймворк позволяющий создавать кроссплатформенные приложения используя веб-технологии, такие как Node.js, HTML, CSS и JavaScript. [2]
Прежде всего установим библиотеку “nodejs-license-file”:
> npm install nodejs-license-file --save --save-exact
Для подключения требуется всего одна строка программного кода:
const licenseFile = require('nodejs-license-file');
Предположим, мы хотим получить точно такой же файл лицензии какой представлен на Рис. 1. Для этого нам потребуется составить шаблон для генерации и передать его вместе с информационными данными в библиотеку — генератор. На Рис. 2 представлен пример программного кода, позволяющий получить содержимое файла лицензии. Результат выполнения этого кода будет выведен в консоль и будет полностью совпадать с содержанием на Рис. 1.
Рис. 2. Программный код для генерации файла лицензии
Из Рис. 2 следует, что для генерации файла лицензии необходим только один ключ из пары криптографических ключей, а именно закрытый ключ.
Далее, рассмотрим процесс проверки лицензионного файла на стороне пользователя программного продукта. Обычно, при первом запуске программы, пользователю предлагается указать путь до файла лицензии. После чего, специальный алгоритм внутри лицензируемого программного обеспечения должен принять решение, является ли содержание файла достоверным и не было ли оно модифицировано с момента генерации. Для этого необходимо проверить цифровую подпись, а именно, соответствует ли подпись тем данным, которые указаны в файле лицензии. В случае если эта проверка проходит успешно, данные можно считать достоверными.
На Рис. 3 показан программный код, необходимый для проверки и извлечения информационных данных из лицензионного файла, при использовании библиотеки “nodejs-license-file”.
Рис. 3. Программный код для проверки и извлечения данных из файла лицензии
Из Рис. 3 следует, что для проверки достоверности и получение информации из файла лицензии необходим только один ключ из пары криптографических ключей, а именно открытый ключ. Результат выполнения кода (изображен на Рис. 4) будет выведен в консоль и будет включать в себя информацию о проверке и все данные из лицензионного файла.
Рис. 4. Результат проверки и разбора лицензионного файла на клиенте
Зачастую при распространении программного продукта, разработчику важно учитывать на каких условиях его продукт был приобретен. В зависимости от этих условий, пользователь получает разный набор возможностей в рамках одного и того же программного продукта. Использование файла лицензии упрощает и защищает процесс получения прав на использование продукта конечным пользователем.
Литература:
- Анализ рынка средств защиты от копирования и взлома программных средств. // Citforum. URL: http://citforum.ru/security/articles/analis/ (дата обращения: 09.10.2017).
- About Electron. // Electron. URL: https://electron.atom.io/docs/tutorial/about/ (дата обращения: 09.10.2017).