ПРОЕКТЫ: CodeShelter - программируемый электронный ключ защиты |
В данный момент проект остановлен и не поддерживается в связи с переходом на использование более современных и защищенных электронных ключей SenseLock!
Описание
В настоящее время существует множество средств для защиты программного обеспечения от нелицензионного использования, применяемых как на программном уровне, так и с использованием электронных устройств. Каждый из этих способов имеет свои достоинства и недостатки. Электронный ключ CodeShelter был разработан нашей компанией для того, чтобы максимально совместить достоинства обоих способов и создать максимальный уровень защиты для разработчика. Основным достоинством ключа является возможность сокрытия части алгоритма разрабатываемой программы внутри, что не позволит взломщику или конкуренту изучить код и использовать полученную информацию для взлома или применение алгоритмов в других целях.
Ключ CodeShelter является электронным устройством, удачно сочетающим передовые технологии в области микроконтроллеров и четкую концепцию использования новейших криптографических алгоритмов. Благодаря этому, CodeShelter обеспечивает высокую надежность всей системы защиты от копирования, максимально усложняя взлом как программными, так и аппаратными средствами. Разработчику предоставляется набор функций работы с внутренней памятью ключа, лицензиями, функциями шифрования данных и алгоритмам цифровой подписи, а также уникальная технология исполняемого кода внутри ключа. Это позволяет ему успешно справляться с главной задачей - высоконадёжной защитой программного обеспечения от нелицензионного использования и несанкционированного копирования.

Программное обеспечение, поставляемое с электронным ключом CodeShelter, обеспечивает быструю интеграцию в исходный код программы и предоставляет возможность быстрой защиты уже откомпилированного приложения.
Для удобства разработчиков, нами было разработано две версии ключа CodeShelter, отличающихся по возможностям и стоимости:
| Функциональность ключа | CodeShelter Pro | CodeShelter Lite |
|---|---|---|
| Шифрование по Rinjdael AES 128/128 10 раундов | Да | Да |
| Система лицензирования | Да | Да |
| Энергонезависимая память | 16 кб | 8 кб |
| Система удаленного обновления конфигурации | Да | Да |
| Генератор случайных чисел | Да | Да |
| Выполнение произвольных исполняемых модулей | Да | Нет |
| Переопределение основных функций | Да | Нет |
| Работа в режиме HID-устройства | Нет | Да |
Шифрование по Rijndael AES
Скорость AES (Rinjdael AES, 10 раундов, ключ 128 бит): 64 килобита в секунду для версии Lite (ввиду ограничений, накладываемых ограничениями работы HID режима) и 512 килобит в секунду для версии Pro. Алгоритм реализован строго на уровне ядра процессора CodeShelter VM.
Система удаленного обновления конфигурации
Позволяет разработчику изменять лицензии, ключи шифрования, конфигурацию памяти, содержимое памяти максимально безопасным путем. Встроенная система контроля не позволит злоумышленнику производить какие-либо несанкционированные действия над конфигурацией.
Генератор случайных чисел
Генератор случайных чисел с 64 битным состоянием, с внесением погрешности от внешнего источника шума или с внесением отклонений.
Энергонезависимая память
Предназначена для хранения любых пользовательских данных, с возможностью определения полей (только на чтение, только на запись, счетчики, и т.д.). Лицензии и ключи шифрования могут храниться в памяти без возможности доступа к ним извне.
Память имеет многостраничную структуру. На каждую страницу имеется возможность установить следующие атрибуты:
- AA - доступ на чтение без авторизации (удобен для размещения информации о покупателе или любой не конфиденциальной информации);
- AR - доступна для чтения после авторизации;
- AW - доступна для записи после авторизации;
- ARP - доступна для чтения по паролю;
- AWP - доступна для записи по паролю;
Атрибуты ARP, AWP перекрывают атрибуты AA, AP, AW.
Система лицензирования
Позволяет проектировать высокопроизводительную систему контроля как приложений так и отдельных модулей этих приложений. Повышенная гибкость и удобный интуитивный интерфейс проектирования позволит реализовать любую, даже самую эксклюзивную конфигурацию, удовлетворяющую самым изысканным требованиям разработчика.
Работа в режиме HID-устройства
Является одним из основных преимуществ ключа версии Lite. Это позволяет использовать ключ без необходимости установки каких-либо дополнительных драйверов во всех операционных системах, поддерживающих данный тип устройств.
Режим HID поддерживается всеми версиями операционной системы MS Windows начиная с MS Windows 98, а также операционной системой Linux.
Технические характеристики
Устройство обладает энергонезависимой памятью произвольного доступа и ее содержимое защищено от внешнего вмешательства при помощи шифрования. Физический размер памяти в ключе - от 8 килобайт и может быть расширен по желанию заказчика.
Доступ к данным памяти может быть разграничен. При конфигурации ключа существует возможность указывать области памяти, доступ к которым разрешен только для чтения, чтения и записи, или запрещен вообще.
Использование высокозащищенного современного микропроцессора позволяет выполнять внутренний код со скоростью до 55 миллионов инструкций в секунду, а выполнение скриптов в виртуальной машине происходит со скоростью до 2 миллионов инструкций в секунду.
Для подключения к компьютеру используется стандартный USB разъём. Обмен данными между компьютером и электронным ключом может осуществляется по полно-скоростному протоколу USB 2.0.
Физические размеры ключа: 54мм х 18мм х 8.5мм.
Использование функций разработчика
Основным отличием электронных ключей CodeShelter от других является возможность выполнять произвольный код внутри ключа, а также переопределять алгоритм выполнения основных функций. Для этого используется технология динамической работы с исполняемыми модулями.

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

Исполняемый модуль может обращаться напрямую к аппаратным функциям, таким как чтение и запись в память, устанавливая ограничения на чтение/запись определенных областей в ней, так и предопределять поведение ключа, например, меняя ключ шифрования данных.
Таким образом, разработчик может предопределить алгоритм выполнения основных функций, а также добавить обработку поступающих данных. Работа с такими данными организована двумя способами:
- Работа с потоком. Ключ сначала получает данные, затем обрабатывает их и при следующем вызове функции чтения, возвращает обработанный блок;
- Обработка входящего блока с определенным кодом управления. В этом случае, ключ получает данные и код, которые обрабатываются виртуальной машиной в зависимости от кода управления.
Так же возможен вариант комбинирования обоих методов. В обоих случаях обработка блоков данных полностью определяется разработчиком. Таким образом, достигается максимальная степень гибкости настройки и конфиденциальности алгоритмов.
Использование лицензий
Система лицензирования позволяет ограничить выполнение программы, устанавливая ограничение на использование исполняемых модулей или другие виды ограничений. При её применении нет необходимости производить дополнительные действия с кодом приложения и все функции комплектования заказа полностью переходят к менеджерам по продажам, освобождая программистов от лишней работы.
Одним из самых слабых мест в системах лицензирования является возможность подмены данных и отключение проверок в приложении. Используемые в ключе CodeShelterT защитные механизмы позволяют исключить подделку лицензий, а их проверка внутри исполняемых модулей не позволит осуществить взлом приложения простым исправлением кода.
Система лицензирования электронного ключа CodeShelter позволяет:
- Создавать лицензии для различных модулей приложения. Это позволит определять конфигурацию без изменения кода программы в соответствии с требованиями покупателя, что существенно упрощает процедуру продажи программ.
- Устанавливать ограничения на количество запусков или срок действия лицензии. Эти возможности предусмотрены для использования их при создании демонстрационных версий программ.
- Использовать защищенный механизм обновления, исключающий возможность подделки лицензии. Механизм дистанционного обновления лицензий позволяет производить обновление лицензионной информации в ключе пользователя. Для этого менеджеру достаточно лишь отправить строку, которую пользователь должен будет ввести в программе. Внутри ключа произойдет обработка этой строки и выполнены действия, обновляющие лицензионную информацию. Алгоритмы защиты исключают возможность подделки лицензий и использование лицензий в нескольких ключах.
- Создать безопасную систему лицензирования через дилерскую сеть. При использовании ключа CodeShelter, у разработчиков программного обеспечения появится возможность создать надежную сеть распространения программного обеспечения, исключающую некорректное поведение со стороны дилеров, имеющих возможность производить операции с лицензиями. Для этого дилерам поставляются электронные ключи, отвечающие за генерирование лицензий, со счетчиками, ограничивающими количество обращений к генератору лицензий. Алгоритм обновления счетчиков схож с алгоритмом обновления лицензий у пользователей.
Используя лицензирование CodeShelter, производитель программного обеспечения может максимально контролировать распространение продукта, сократив до минимума затраты на его демонстрацию и обновление конфигураций у пользователя.
Варианты использования ключа CodeShelter для защиты программ
Использование системы автоматической защиты
Система автоматической защиты CodeShelter позволяет привязывать к электронному ключу уже собранный код приложения в том случае, если исходный код по каким-либо причинам не доступен. В отличие от имеющихся средств автоматической защиты, выполняющих только дешифрование кода приложения и не защищающих их от распаковки, система автоматической защиты CodeShelter позволяет постоянно проверять целостность защиты, перенося часть кода в защищённое пространство виртуальной машины, исполняемой в ключе.
В системе автоматической защиты реализована опция привязки защищенных участков кода к лицензионной информации, что позволит легко и надежно осуществлять защиту различных модулей приложения без дополнительных временных затрат.
Система автоматической защиты может функционировать следующим образом:
- автоматическая защита всего кода приложения без последующих обращений к ключу;
- автоматическая защита всего кода приложения с последующим обращением к ключу;
- полуавтоматическая защита выбранных участков кода и процедур, отмеченных программистом;
- полуавтоматическая защита выбранных участков кода и процедур, отмеченных программистом с зависимостью от лицензионной информации.

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

Написание и использование собственных функций ключа
Основным преимуществом ключа CodeShelter является возможность выполнения части кода приложения в электронном устройстве. Для Lite версии программа выполняется на заказ специалистами компании "Секьюлэб", а для Pro версии создается самим разработчиком на языке Java.
Разработчику достаточно создать вызов функции в ключе CodeShelter и получить обработанные данные. Таким образом, взлом будет возможен только при эмуляции функций. Использовании собственных функций полностью решает задачу защиты приложения от несанкционированного копирования и проблему защиты кода от изучения и воспроизведения.
