Есть способы сделать то, что вы хотите, но это не дешево и не легко.
Стоит ли это?
При рассмотрении вопроса о том, следует ли защищать программное обеспечение, сначала необходимо ответить на ряд вопросов:
- Насколько вероятно, что это произойдет?
- Какое значение для вашего алгоритма и данных кому-то еще?
- Какова стоимость покупки лицензии на использование вашего программного обеспечения?
- Сколько стоит копирование вашего алгоритма и данных?
- Сколько стоит им обратный инжиниринг вашего алгоритма и данных?
- Сколько стоит защита вашего алгоритма и данных?
Если это создает значительный экономический императив для защиты вашего алгоритма / данных, то вам следует заняться этим. Например, если стоимость услуги и стоимость для клиентов высоки, но стоимость обратного инжиниринга вашего кода намного ниже, чем стоимость его разработки самостоятельно, тогда люди могут попробовать его.
Итак, это приводит к вашему вопросу
- Как вы защищаете свой алгоритм и данные?
Уныние
запутывание
Вариант, который вы предлагаете, запутывая код, смешивается с экономикой выше - он пытается значительно увеличить стоимость для них (5 выше) без значительного увеличения стоимости для вас (6). Исследование Центром шифрованных функций сделало несколько интересных исследований по этому вопросу. Проблема в том, что, как и в случае с шифрованием DVD, он обречен на неудачу, если достаточно разницы между 3, 4 и 5, и в конце концов кто-то это сделает.
Обнаружение
Другим вариантом может быть форма Steganography , которая позволяет вам определить, кто расшифровал ваши данные и начал их распространять. Например, если у вас есть 100 различных значений с плавающей запятой как часть ваших данных, и 1-битная ошибка в LSB каждого из этих значений не вызовет проблемы с вашим приложением, закодируйте уникальное (для каждого клиент) идентификатор в эти биты. Проблема в том, что если кто-то имеет доступ к нескольким копиям данных вашего приложения, очевидно, что они различаются, что облегчает идентификацию скрытого сообщения.
Защита
SaaS - Программное обеспечение как услуга
Более безопасным вариантом может быть предоставление критической части вашего программного обеспечения в качестве услуги , а не включение ее в ваше приложение.
Концептуально, ваше приложение будет собирать все данные, необходимые для запуска вашего алгоритма, упаковывать его как запрос к серверу (контролируемому вами) в облаке , тогда ваша служба будет вычислять ваш результаты и передать его клиенту, который отобразит его.
Это сохраняет все ваши проприетарные, конфиденциальные данные и алгоритмы в домене, который вы полностью контролируете, и исключает любую возможность извлечения клиента любым из них.
Очевидным недостатком является то, что клиенты привязаны к вашему обслуживанию, находятся в зависимости от ваших серверов и их интернет-соединения. К сожалению, многие люди возражают против SaaS именно по этим причинам. С другой стороны, они всегда в курсе исправлений ошибок, и ваш вычислительный кластер, вероятно, будет иметь более высокую производительность, чем ПК, на котором работает пользовательский интерфейс.
Это был бы огромный шаг, который мог бы стоить выше 6, но это один из немногих способов сохранить ваш алгоритм и данные в полной безопасности .
Защитные ключи для программного обеспечения
Хотя традиционные защитные ключи для программного обеспечения защищают от компьютерного пиратства, они не защищают от алгоритмов и извлекаемых данных в вашем коде.
Более новые ключи переноса кода (такие как SenseLock & dagger; ), похоже, могут делать то, что вы хотите. С этими устройствами вы извлекаете код из приложения и переносите его на защищенный процессор ключа. Как и в случае SaaS, ваше приложение будет связывать данные, передавать их ключу (возможно, USB-устройству, подключенному к вашему компьютеру) и считывать результаты.
В отличие от SaaS, пропускная способность данных вряд ли будет проблемой, но производительность вашего приложения может быть ограничена производительностью вашего SDP.
& кинжал; Это был первый пример, который я смог найти с помощью поиска в Google.
Надежная платформа
Еще одним вариантом, который может стать жизнеспособным в будущем, является использование Trusted Platform Module и Trusted Execution Technology для защиты критических областей кода. Каждый раз, когда клиент устанавливает ваше программное обеспечение, он предоставляет вам отпечаток своего оборудования, а вы предоставляете ему ключ разблокировки для этой конкретной системы.
Этот ключ будет позволять дешифровать и выполнять код в доверенной среде, где зашифрованный код и данные будут недоступны вне доверенной платформы. Если что-либо вообще о доверенной среде будет изменено, это приведет к аннулированию ключа, и эта функциональность будет потеряна.
Для клиентов это дает преимущество в том, что их данные остаются локальными, и им не нужно покупать новый ключ для повышения производительности, но у него есть потенциал для создания постоянного требования к поддержке и вероятности того, что ваши клиенты станут разочарованы обручами, через которые им пришлось прыгать, чтобы использовать программное обеспечение, которое они купили и оплатили - теряя добрую волю.
Заключение
То, что вы хотите сделать, не просто и не дешево. Это может потребовать больших инвестиций в программное обеспечение, инфраструктуру или и то, и другое. Вы должны знать, что это стоит вложений, прежде чем начать этот путь.