La valeur de l'obscurcissement ou de la protection dépend de plusieurs facteurs.
En vaut-elle la peine?
Lorsque nous cherchons à protéger un logiciel, nous devons d'abord répondre à une nombre de questions:
- 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?
- Qu'est-ce 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 le coût pour eux de l'ingénierie inverse de votre algorithme et données?
- Quel est le coût pour vous de la protection de votre algorithme et de vos données?
Si ceux-ci produisent un impératif économique important pour protéger votre algorithme / vos données, vous devrait envisager de le faire. Par exemple, si la valeur du service et le coût pour les clients sont tous deux élevés, mais que le coût de l'ingénierie inverse de votre code est bien inférieur au coût de développement eux-mêmes, alors les gens peuvent essayer.
Donc, cela mène à votre question
- Comment sécurisez-vous votre algorithme et vos données?
Découragement
Obfuscation
L'option que vous suggérez, obscurcir le code, perturbe les aspects économiques ci-dessus - elle essaie d'augmenter considérablement le coût pour eux (5 ci-dessus) sans en augmenter beaucoup le coût (6). Les recherches menées par le Centre des fonctionnalités chiffrées ont mené à des recherches intéressantes à ce sujet. Le problème est que, comme avec le cryptage de DVD, il est voué à l'échec s'il y a suffisamment de différence entre 3, 4 et 5, alors quelqu'un finira par le faire.
Détection
Une autre option pourrait être une forme de stéganographie, qui vous permet d'identifier qui a déchiffré vos données et commencé à les 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 (à chaque client) dans ces bits. Le problème est que si quelqu'un a accès à plusieurs copies des données de votre application, il serait évident que cela diffère, ce qui facilite l'identification du message caché.
Protection
SaaS - Logiciel en tant que service
Une option plus sûre pourrait être de fournir la 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 à l'exécution de votre algorithme, la mettrait en package sous forme de requête à un serveur (contrôlé par vous) dans le cloud , votre service calculera ensuite vos résultats et le renvoyer au client, qui l'affichera.
Cela garde toutes vos données et algorithmes exclusifs et confidentiels dans un domaine que vous contrôlez complètement, et supprime toute possibilité qu'un client extrait 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. Malheureusement, de nombreuses personnes s'opposent au SaaS pour exactement ces raisons. Sur le plan positif, ils sont toujours à jour avec les correctifs de bogues, et votre cluster de calcul sera probablement plus performant que le PC sur lequel ils exécutent l'interface utilisateur.
Ce serait un énorme pas en avant pour prendre cependant, et pourrait avoir un coût énorme 6 ci-dessus, mais c'est l'un des rares moyens de garder votre algorithme et vos données complètement sécurisés .
Dongles de protection logicielle
Bien que les dongles de protection logicielle traditionnels protègent contre le piratage de logiciels, ils ne protègent pas contre les algorithmes et les données de votre code en cours d'extraction.
Les nouveaux dongles de portage de code (tels que SenseLock † ) semble cependant pouvoir faire ce que vous voulez. Avec ces appareils, vous retirez le code de votre application et le portez vers le processeur de clé de sécurité sécurisée. Comme avec le SaaS, votre application regrouperait les données, les transmettrait au dongle (probablement un périphérique USB connecté à votre ordinateur) et relirait les résultats.
Contrairement au SaaS, la bande passante des données ne serait probablement pas un problème, mais les performances de votre application peuvent être limitées par les performances de votre SDP.
† C'était le premier exemple que j'ai pu trouver avec une recherche Google.
Plateforme de confiance
Une autre option, qui pourrait devenir viable à l'avenir, consiste à utiliser un module de plateforme de confiance et une technologie d'exécution de confiance pour sécuriser les zones du code. Chaque fois qu'un client installe votre logiciel, il vous fournira une empreinte digitale de son matériel et vous lui fournissez une clé de déverrouillage pour ce système spécifique.
Cette clé permettrait alors de déchiffrer le code et exécuté dans l'environnement de confiance, où le code et les données cryptés seraient inaccessibles en dehors de la plate-forme de confiance. Si quoi que ce soit dans l'environnement de confiance changeait, cela invaliderait la clé et cette fonctionnalité serait perdue.
Pour le client, cela présente l'avantage que ses données restent locales et qu'il n'a pas besoin d'acheter un nouveau dongle pour améliorer les performances, mais il a le potentiel de créer une exigence d'assistance continue et la probabilité que vos clients soient frustrés par les obstacles qu'ils ont dû franchir pour utiliser les logiciels qu'ils ont achetés et payés - vous perdre de la bonne volonté.
Conclusion
Vous seul pouvez répondre si les aspects économiques du découragement ou de la protection conviennent à votre situation. Mais plus vous optez pour une protection, plus elle sera chère, et donc plus vous devrez risquer de la perdre pour la justifier.