В предыдущей компании у нас были такие вопросы, в основном из-за управленческой паранойи.
Прежде всего, вы должны понимать, что абсолютная безопасность - это всего лишь миф: пока ваша программа работает на ненадежном оборудовании, ее можно декомпилировать независимо от того, какой язык вы используете. Единственное, что вы можете изменить, это стоимость того, что злоумышленник поймет ваше программное обеспечение / алгоритм / данные.
По поводу запутывания: его можно считать первым уровнем защиты, поскольку делает код Java полностью нечитаемым. Хорошие обфускаторы, такие как ProGuard , используют запрещенные символы в именах переменных / методов, предотвращая выполнение декомпилированного кода. Теперь можно считать это достаточно хорошей мерой безопасности, поскольку декомпиляция кода не так же проста, как запуск Jad или других декомпиляторов и наличие отлично работающего кода Java. Однако можно понять большинство алгоритмов, представленных в таком коде (так как читаемый код сильно отличается от компилируемого кода).
Дополнительные меры безопасности включают в себя:
- Запуск конфиденциального кода на сервере с помощью какого-либо веб-сервиса для отправки результатов и получения результатов (с помощью REST / SOAP / YouNameIt)
- Загрузка конфиденциального кода с удаленного сервера с использованием HTTPS и (возможно) дополнительных уровней безопасности.
Из этих двух мер безопасности я бы честно выбрал первый. Действительно, второе может быть сорвано обычными атаками HTTPS (человек посередине, ведение журнала прокси и т. Д., ...) и имеет неудобство major , связанное с переносом кода на ненадежное оборудование, что это возможно заимствование оттуда.