Pratiquement, si le code et les clés sont sur une machine de carte SD, ils seront en mesure de le décompiler, ils seront en mesure de découvrir les clés et ils le seront en mesure d'extraire les données sensibles.
C'est comme le cryptage de films, un DVD doit inclure toutes les informations nécessaires pour décrypter le film afin qu'il puisse être affiché au spectateur, de sorte que tous les mécanismes de protection contre la copie de films sont finalement condamnés.
Le mieux que vous puissiez faire est de modifier l'économie de l'ingénierie inverse de votre produit.
Le chiffrement et / ou l'obscurcissement en vaut-il la peine?
Maintenant que nous avons établi qu'il n'y a aucun moyen de se protéger complètement, les questions deviennent
- Quelle est la probabilité que cela se produise?
- Quelle est la valeur pour quelqu'un d'autre de votre algorithme et de vos données?
- Quel est le coût pour eux d'acheter une licence pour utiliser votre logiciel?
- Quel est le coût pour eux de répliquer votre algorithme et vos données?
- Quel est pour eux le coût de l'ingénierie inverse de votre algorithme et de vos données?
- Quel est le coût pour vous de protéger votre algorithme et vos données?
Si ceux-ci produisent un impératif économique important pour protéger votre algorithme / vos données, alors vous devriez envisager de le faire. Par exemple, si la valeur du service et le coût pour les clients sont élevés, mais que le coût de la rétro-ingénierie de votre code est bien inférieur au coût de développement lui-même, alors les gens peuvent l'essayer.
Donc, cela mène à votre question
- Comment sécurisez-vous votre algorithme et vos données?
Obfuscation
L'option que vous proposez, obscurcissant le code, dérange les aspects économiques ci-dessus - elle essaie d'augmenter considérablement le coût pour eux (5 ci-dessus) sans augmenter considérablement le coût pour vous (6). Le problème est que, comme avec le cryptage DVD, il est voué à l'échec et s'il y a suffisamment de différence entre 3, 4 et 5, alors finalement quelqu'un le fera.
Une autre option pourrait être une forme de stéganographie , qui vous permet d'identifier qui a déchiffré votre code et a commencé à le distribuer. Par exemple, si vous avez 100 valeurs flottantes différentes dans vos données et qu'une erreur de 1 bit dans le LSB de chacune de ces valeurs ne poserait pas de problème avec votre application, encodez un identifiant unique (pour chaque client) dans ces bits . Le problème est que si quelqu'un a accès à plusieurs copies de vos données d'application, il est évident que cela diffère, ce qui facilite l'identification du message caché.
protection
La seule option vraiment sécurisée consiste à fournir une partie critique de votre logiciel en tant que service , plutôt que de l'inclure dans votre application.
Conceptuellement, votre application collecterait toutes les données nécessaires pour exécuter votre algorithme, les regrouperait sous forme de demande à un serveur (contrôlé par vous) dans le cloud , votre service calculerait ensuite vos résultats et les transmettrait au client, qui l'afficherait.
Cela conserve toutes vos données et algorithmes propriétaires et confidentiels dans un domaine que vous contrôlez complètement, et supprime toute possibilité pour un client d'extraire l'un ou l'autre.
L'inconvénient évident est que les clients sont liés à votre prestation de services, sont à la merci de vos serveurs et de leur connexion Internet. Sur le plan positif, ils sont toujours à jour avec des corrections de bugs. Malheureusement, de nombreuses personnes s'opposent au SaaS pour exactement ces raisons.
Ce serait une étape énorme à franchir, et pourrait avoir un coût énorme 6 ci-dessus, mais c'est la seule façon que je peux voir pour garder votre algorithme et vos données complètement sécurisés .