0

Система лицензирования и удаленного обновления для серии EL4

arrow_left назад

Cоздание удобной, гибкой, и в то же время безопасной системы лицензирования и удаленного обновления данных является одной из основных задач при защите программного обеспечения. К сожалению, большинство уже существующих решений не удовлетворяют сразу всем этим условиям. В большинстве случаев слабым местом является защищенность самой системы и отсутствие реальной связи между результатом проверки лицензий и функционирования программы. У злоумышленника всегда есть возможность изменить функцию проверки лицензии (обычно для этого необходимо просто заставить ее возвращать “1” или “0”) и этого будет достаточно, чтобы программа считала, что ее модуль или опция разрешены к использованию. А информацию для обновления электронных ключей легко подменить или изучить.

В созданной нами системе лицензирования и удаленного обновления для электронных ключей SenseLock серии EL4 (кроме модели EL4-NET-RTC) мы постарались устранить этот недостаток, сохранив при этом гибкость настроек и простоту использования.

Мастер-ключ

Для работы c системой лицензирования и создания пакетов удалённого обновления, необходимо наличие мастер-ключа. Только с его помощью могут быть созданы пакеты обновлений, лицензии и записаны данные в ключи пользователей. Мастер-ключ предоставляется клиентам нашей компании по запросу.  Доступ к мастер-ключу осуществляется посредством ввода пароля. Без правильного пароля создание ключей пользователя, лицензий и пакетов удаленного обновления будет невозможно.

Программирование пользовательских ключей

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

Модуль “Программирование ключей” также позволяет производить следующие действия:

  • Настройка ПИН-кодов, которые будут установлены в ключе пользователя. ПИН-код пользователя должен совпадать с используемым в защищенной программе, ПИН-код разработчика может быть любым и должен храниться в надежном месте и не должен распространяться.
  • Начальный номер обновления (рекомендуется устанавливать равным “1” для новых ключей), максимальное количество лицензий и режим работы исполняемых модулей.
  • Установка идентификатора ATR, который будет установлен в ключе (может использоваться защищенной программой для опознания предназначенных для нее ключей), а также пакеты обновления и лицензий. Последние два параметра не являются обязательными.

Также при создании ключа пользователя в него сразу могут быть записаны пакет обновления с исполняемыми модулями защиты разработчика ПО и пакет лицензий.

Система удаленного обновления

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

Основные возможности системы удалённого обновления:

  • Безопасное удаленное обновление исполняемых модулей и файлов с данными, расположенными в электронном ключе SenseLock.
  • Возможность разрешить обновление только для электронного ключа с указанным идентификатором.
  • Защита от обновления старыми данными.

 

Система лицензирования

Основные возможности системы лицензирования:

  • Лицензии, функции по их проверке и результат находятся и выполняются в защищенном пространстве электронного ключа и не могут быть изменены злоумышленниками извне!
  • Создание до 255 лицензий в одном электронном ключе. Каждая лицензия имеет собственные независимые настройки.
  • Ограничение времени работы лицензии. Указывается начальная и конечная даты работы лицензии.
  • Ограничение количества запросов на получение лицензии. Данная возможность позволяет ограничить запуск защищаемой функции на произвольное (от 1 до 65535) количество раз.
  • Возможность безопасного удаленного обновления каждой лицензии.
  • Возможность привязки обновления лицензии к уникальному идентификационному номеру электронного ключа SenseLock. Это исключит несанкционированное использование обновления с электронными ключами других пользователей защищенного программного обеспечения.
  • Защита от обновления уже использованной в электронном ключе лицензией.
  • Получение информации о текущем значении параметров лицензии.
  • Возможность дальнейшего гибкого расширения функциональности системы лицензирования.

 

Принцип работы системы лицензирования

Использование модуля системы лицензирования с защищенным программным обеспечением происходит в два этапа:

Вызов исполняемого модуля лицензирования для получения и проверки лицензии

  1. Программа делает запрос в электронный ключ пользователя на получение необходимой лицензии.
  2. Исполняемый модуль лицензирования проверяет параметры лицензии.
  3. Устанавливается статус лицензии в зависимости от результата проверки. Статус проверки хранится в защищенном пространстве внутри электронного ключа пользователя и не может быть изменен извне.
  4. Результат проверки возвращается в защищенную программу. Данный результат носит исключительно информационный характер и никак не влияет на работу системы лицензирования в случае его изменения злоумышленником.

 

Вызов исполняемого модуля защищенного приложения для выполнения основных функций

  1. Защищенная программа вызывает записанный в электронный ключ пользователя исполняемый модуль разработчика с необходимыми параметрами.
  2. Исполняемый модуль перед выполнением защищенных функций производит проверку статуса лицензии. Это действие производится в защищенном пространстве электронного ключа пользователя и не может быть изменено извне.
    После проверки статуса лицензии разработчик может его сбросить, чтобы для следующего вызова защищенной функции было опять необходимо получать лицензию. Поведение системы лицензирования полностью контролируется разработчиком и зависит от общей схемы защиты.
  3. Результат работы защищенной функции или код ошибки возвращаются в программу.

Дополнительные функции системы лицензирования позволяют:

  • Освобождение полученной лицензии из защищенной программы. В этом случае внутри электронного ключа сбрасывается статус полученной лицензии.
  • Получение списка лицензий в электронном ключе пользователя.
  • Получение полной информации о лицензии по ее идентификатору (описывается структурой LM_RECORD_t).
  • Обновление лицензии в электронном ключе пользователя.

 

Пример использования

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

#define LIC_MODULE_1 0x01 
#define LIC_MODULE_1_VER 0x0100 
// Код программы ... 
/* Получение лицензии */ 
error = SLM_LicCheckout(&s4ctx, LIC_MODULE_1, LIC_MODULE_1_VER); 
if (error != ERR_LM_SUCCESS) 
    { 
        printf("Ошибка получения лицензии: %08X\n", error); return -1; 
    } 
/* Выполнение защищённой функции в электронном ключе */ 
error = ProtectedFunction1(param1, param2, &result); 
if (error != 0) 
    { 
        printf("Ошибка выполнения функции: %08X\n", error); 
    } else 
    { 
        printf("Результат выполнения: %08X\n", result); 
    } 
// Код программы ... 
/* Освобождение полученной лицензии */ 
SLM_LicCheckin(&s4ctx, LIC_MODULE_1);

Пример проверки статуса лицензии в исполняемом модуле разработчика:

DEFINE_AT(LM_STATUS_t, lic_stat, 0x0400, RAM_EXT); 
DEFINE_AT(unsigned char, reserved[150], 0x040B, RAM_EXT); 
IO_PKT_t *input = (IO_PKT_t*)pbInBuff; 
// Переменные, определения и код защищаемых функций ... 
void main() 
{ 
    switch (input->tag) 
    { 
    // Функция #1 
        case CMD_FUNC1 : 
             { // Проверка соответствия идентификатора полученной // лицензии 
             if (lic_stat.id != 1) 
                 { 
                      error = ERR_LICENSE_NOT_CHECKOUT; 
                      break; 
                 } 
             // Проверка статуса полученной лицензии 
             if (lic_stat.status != LIC_STAT_VALID) 
                 { 
                      error = ERR_LICENSE_NOT_VALID; 
                      input->buff = lic_stat.status; 
                      break; 
                 } 
             // Выполнение защищенной функции, если лицензия получена 
             error = func1(input->buff); 
             } 
             break; 
    // Функция #2 
        case CMD_FUNC2 : 
             { // Проверка соответствия идентификатора полученной лицензии 
             if (lic_stat.id != 2) 
                 { 
                      error = ERR_LICENSE_NOT_CHECKOUT; 
                      break; 
                 } 
             // Проверка статуса полученной лицензии 
             if (lic_stat.status != LIC_STAT_VALID) 
                 { 
                     error = ERR_LICENSE_NOT_VALID; 
                     input->buff = lic_stat.status; break; 
                 } 
             // Выполнение защищенной функции, если лицензия получена 
             error = func2(input->buff); 
             } 
             break; 
        default : 
             error = ERR_INVALID_FUNCTION; 
             break; 
} 
// Установка возвращаемого кода ошибки input->tag = error; 
// ... 
}

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

Стоимость

Для всех наших клиентов система безопасного удаленного обновления и лицензирования предоставляется бесплатно!

наверх