Технологии Guardant

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

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

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

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

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

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

Эволюция технологий защиты

За всю свою немалую по меркам IT-индустрии историю, по некоторым оценкам составляющую почти 30 лет, электронные ключи эволюционировали от примитивных перемычек, выставленных определенным способом, до современных интеллектуальных устройств, способных выполнять сложные вычисления.

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

Проверка присутствия ключа Самый простой и древний способ привязки, применялся для самых первых ключей. Его нейтрализация не представляет практически никакой сложности.В настоящее время может использоваться только как подготовительная операция для последующей работы с ключом.
Чтение данных из памяти ключа Приложение пользуется считанными из ключа статическими данными для своей дальнейшей работы. Этот способ появился, когда в ключах для хранения данных стали применяться схемы ПЗУ (ROM).
Чтение и запись данных в память ключа Кроме чтения статических данных, приложение также пишет в ключ некую информацию для последующего использования.Этот способ является развитием предыдущего, он появился, когда для хранения данных в ключе начали использоваться электрически перепрограммируемые ПЗУ (EEPROM).
Вычисление однонаправленных функций с секретом Это уже достаточно сложный метод, который возможен для ключей на программируемых микроконтроллерах и заказных микросхемах (ASIC). Однако его стойкость зависит от выбранной функции преобразования.Приложение работает с предопределенным набором входных данных и проверяет наличие ключа по предвычисленным выходным данным. При этом сами выходные данные или производные от них должны храниться непосредственно в приложении.Секрет для преобразования данных может задаваться либо разработчиками электронного ключа, либо разработчиками приложения.
Зашифрование и расшифрование данных криптографически стойкими симметричными алгоритмами Появление этого метода было обусловлено ростом производительности микроконтроллеров, используемых в ключах.Он позволяет работать не с предопределенными, а с «натуральными» данными приложения, что затрудняет нейтрализацию такой привязки.Ключ шифрования задается разработчиками приложения и хранится в памяти электронного ключа, не покидая ее во время преобразования.
Вычисление электронной цифровой подписи Ресурсов современных микропроцессоров достаточно для реализации в электронных ключах асимметричных криптографических алгоритмов.Основное достоинство этого метода состоит в том, что для привязки приложения к ключу можно взять абсолютно любые, и даже случайные, данные.Для проверки ЭЦП используются программно-реализованные алгоритмы, которые можно хорошо замаскировать среди других вычислений.
Выполнение электронным ключом произвольного кода Один из самых современных методов. Основное его достоинство состоит в том, что ключ может выполнять осмысленные и полезные для приложения вычисления над «натуральными» данными.Из недостатков можно назвать необходимость правильного выбора алгоритмов, размещаемых в ключе.Критерии выбора основаны на производительности и сложности алгоритмов для анализа по входным и выходным данным.