Afin d'empêcher que quelqu'un de saisir mes données facilement, je cache des données de mon service sous forme de fichiers cryptés (protection contre la copie, fondamentalement). p>
Cependant, pour le faire, je dois stocker la clé de cryptage dans l'assembly .NET afin qu'il puisse chiffrer et déchiffrer ces fichiers. p>
Être conscient des outils tels que le réflecteur .NET de la porte rouge qui peut tirer ma clé à partir de la clé, j'ai un sentiment que ce n'est pas un moyen très sûr de le faire ... Existe-t-il des meilleures pratiques à faire cela? p>
3 Réponses :
Vous devez décider de ce qui est un niveau de risque acceptable. Il n'y a pas de moyen «sûr» de faire cela. P>
Si le risque d'une personne utilisant un réflecteur, ou simplement d'ouvrir l'assemblage à l'aide de la classe System.Reflection.Assemblier et saisissez la ressource de cette façon, est trop grande, votre prochaine étape est probablement de télécharger la clé à partir du serveur lorsque vous démarrez. P>
Alors que quelqu'un devra faire quelque chose comme le débogage tout en utilisant votre code et saisissez la clé de cette façon. Vous pouvez expirer des choses qui sont en cache et échanger les clés. Vous pouvez le faire pour que les individus aient chacun leurs propres clés pour protéger les données d'un utilisateur d'un autre utilisateur. P>
Vous pouvez faire beaucoup de choses, mais si votre objectif est de garder quelqu'un de la capable de déchiffrer des informations qu'un assemblée que vous mettez sur leur machine a la capacité de déchiffrer, vous devez savoir que c'est presque impossible. Tout ce que vous pouvez vraiment faire est d'élever le coût em> de pirater vos clés / données; Vous ne pouvez pas l'arrêter. P>
+1 pour souligner la futilité et le coût du pirate informatique, mais il devrait également essayer de minimiser l'impact (voir ma réponse pour une tentative d'explication de ce que je veux dire ici)
Ouais, après avoir lu votre message et en lui donnant une pensée, je pensais que tout se résume à une évaluation des coûts / risques. J'ai proposé un schéma qui décourage probablement la plupart des gens d'essayer, sauver les 5 à 10% des utilisateurs avertis en informatique, qui est un risque «acceptable».
Je suis heureux. Vous avez probablement fait la bonne décision et, sinon, vous pouvez toujours le changer. ;)
Vous ne pouvez pas empêcher la récurrence, mais vous pouvez empêcher le recrutement des données falsifiées: p>
Tant que votre code circule sur un ordinateur accessible par d'autres personnes, vous ne pouvez aucun moyen que vous puissiez les empêcher d'examiner le programme. La décompilation et l'analyse coûtent cependant du temps. Comme le souligne MaxguerineyiiI, il s'agit de niveaux de menace acceptables. P>
Dans votre cas, le problème n'est pas tellement que celui qu'un pirate informatique peut décompiler votre code, mais beaucoup plus qu'ils peuvent changer les données que vous souhaitez protéger (qui possède la licence). p>
Vous pouvez donc utiliser un Public Key Cryptography pour chiffrer les données. De cette façon, le pirate pirate peut lire, mais il ne peut pas re-chiffrer. P>
La cryptographie clé publique ne vous aidera pas ici, autant que je puisse dire (et aussi, vous n'utilisez jamais directement un système PK (au moins RSA) pour chiffrer les données; il ne doit être utilisé que pour chiffrer les touches à un algorithme symétrique (telle que AES)).
Même dans ce cas, un pirate informatique suffisamment qualifié peut s'engager. Démontez, échangez dans votre propre clé, boom. Les trucs cryptés sont soudainement lisibles. Vous pouvez empêcher que les données d'être renvoyées au serveur en la signant sur le côté serveur, cependant ... vous avez raison à ce sujet. Tout dépend de ce que le besoin réel est; Comme c'est le cas avec tant de ces questions.
Il n'y a pas de préoccupations de re-chiffrement, les fichiers mis en cache sont des morsures judicieuses que les utilisateurs paient pour avoir accès à, et lorsque leur abonnement expire, je ne veux plus qu'ils puissent y accéder.
@MaxGuNseyIIII: Vous êtes correct sur les implications locales (to to the client) ... Le code de moment est exécuté dans un environnement non protégé, il doit être considéré comme suspect ... 'thread' :-) niveau et tout cela.
Comme Max indique, vous devez envisager un modèle de menace. P>
Quel genre d'attaquants êtes-vous inquiet? (Il est légitime de se préoccuper de certains, et pas si légitime de se préoccuper des autres). Les catégories typiques pourraient être «utilisateur avertissant non informatique qui a acheté le programme», «personne dédiée disposée à passer des heures sur une solution», «Utilisateur occasionnel qui sait trouver des fissures en ligne», etc. P>
Selon votre scénario exact, des solutions peuvent être différentes. p>
Un élément intéressant / triste à noter, est que si votre produit est populaire, il ne prend qu'une ou deux personnes dédiées à s'asseoir et à la casser, puis à relâcher le patch pour tous. C'est la nature du logiciel, je suppose, et c'est un problème non résolu lorsque toute votre application s'exécute sur sa machine. P>
Clairement, l'implication est que ce n'est pas un problème si votre demande fonctionne comme un site Web - c'est-à-dire sur une machine de votre contrôle. P>
Je sais que ce n'est pas une réponse particulièrement utile. P>
Voulez-vous dire que j'ai fait allusion à considérer un modèle «menace»? ;)
@MAXGUERNSEYIII: OOPS .. Aucun prix pour deviner ce que je travaillais en écrivant ce post: p