10
votes

Activation du produit avec certificat de clé publique

J'ai besoin d'idées comment créer un algorithme d'activation. Par exemple, j'ai un certificat de démonstration. À condition que l'application fonctionne en mode démo. Lorsque la version complète est fournie, l'application s'exécute en mode complet. Est-ce même possible et comment serait un bon moyen de créer ce système?

Un simple était que je pensais que je voudrais seulement avoir une 2 cordes cryptées, maintenant lorsque le déchiffrement est affectueux avec le certificat de clé publique de démonstration, l'application s'exécutera en mode démo et etc.

Edit: Utilisation C # et Windows 7


3 commentaires

Me rappelle une de mes réponses à une question précédente: Stackoverflow.com/Questtions/3002067/...


Alors, quel est le cas d'utilisation? Quel type de logiciel protège-t-il, quel genre de volume, quel prix?


@jamie, voir le commentaire sous votre réponse.


7 Réponses :


1
votes

Un simple était que je pensais serait juste avoir un 2 crypté Cordes, maintenant, lorsque le déchiffrement est affectueux avec la démo publique Certificat de clé alors l'application s'exécutera en mode démo et etc ..

pourrait être une solution simple. Mais de cette façon, vous n'empêcherez pas quelqu'un d'inverser l'ingénieur de vos fichiers binaires et de faire passer à la bonne ligne d'exécution. Tout le monde a votre programme, possède une version complète de celui-ci, ce n'est donc qu'une question de trouver comment briser ce mécanisme simple.

Peut-être qu'une meilleure solution est cryptée une partie des fichiers binaires nécessaires à l'utilisation de la version de l'application complète, au lieu d'une simple chaîne. De cette façon d'exécuter la version complète de l'application, une personne doit déchiffrer ces fichiers binaires afin de les exécuter.

Veuillez prendre en considération que même cette solution ne suffit pas. Il y a d'autres problèmes avec ceux:

  1. Est-ce que toute la version de votre outil partagera la même clé de cryptage? Briser l'un d'entre eux pour briser tous ..
  2. Même si vous utilisez une clé différente pour chaque application binaire publiée, le binaire crypté est-il identique? Une fois fissuré un, vous pouvez réutiliser les fichiers binaires non cryptés pour toutes les applications distribuées.

    Comment résoudre ces problèmes? Il n'y a pas de solution simple. La plupart des logiciels commerciaux les plus importants avec des systèmes de protection même sophistiqués sont cassés quelques heures ou quelques jours après leur libération.


1 commentaires

Oui, vous avez raison et je sais à ce sujet. La question concerne l'algorithme d'activation / le système ne consistant pas à empêcher son ingénierie inverse.



9
votes

Vous pouvez faire quelque chose comme:

  1. Génère une paire de clés publique / privée
  2. En tant que propriétaire de la clé privée, vous pouvez signer ces "certificats d'activation" (appelés AC à partir de maintenant)
  3. Dans votre application, avec clé publique, vous pouvez vérifier si le panneau est correct

    Comme surbose mentionnée - vous ne pouvez pas empêcher l'ingénierie inverse. En général, une personne pourrait prendre la fonctionnalité et la mettre dans sa propre application et éliminer ainsi tout algorithme d'activation possible. Donc, vous ne pouvez supposer que (ou faire) cela est suffisamment difficile pour ne pas valoir l'effort (c'est la même chose que pour la cryptographie - lorsque vous effectuez le coût de la rupture du message, alors le profit de l'obtenir, vous pouvez dire que c'est bien sécurisé).

    afin que vous puissiez:

    1. Faire une auto-vérification exécutable (signée par vous, auto-vérifiant basée sur une clé publique codée dur (une chose: vous devez ignorer cette valeur lorsque vous vérifiez automatiquement).
    2. Faites quelques astuces avec des pointeurs (pointez sur la fonction d'activation, passez au 7e bit et modifier la valeur de celui-ci pour quelque chose en fonction de la valeur d'un autre pointeur; dans certains endroits étranges changent de valeurs codées dur à ceux basés sur la survenue de certains bits Dans d'autres endroits du code; généralement - rendez-vous plus difficile à casser que de changer simplement de bits dans l'exécutable avec l'éditeur Hex)
    3. Essayez de faire un protocole que votre serveur utiliserait pour poser des questions sur l'application ("gimme la valeur de 293 octets de vous-même") et vérifiez les réponses.
    4. Utilisez l'imagination et pensez à une méthode d'auto-vérification étrange personne n'a été utilisée avant :)

      Comme mentionné - rien de tout cela n'est sécurisé de couper la partie d'authentification. Mais rien n'est et cela pourrait rendre plus difficile pour les craquelins.


0 commentaires

3
votes

Ce gars a écrit Un publication d'un blog sur une idée similaire, expliquant ce qu'il a fait avec leur propre logiciel commercial. A également écrit une liste de recommandations sur les techniques de craquage les plus évidentes. J'espère que ça vous aide.


2 commentaires

Il n'a pas mentionné l'attaque où vous vous remplissez simplement la clé publique. Peut-être qu'il ne l'avait pas mentionné parce que son trivial de réaliser et qu'il brise complètement cette approche.


Je n'ai pas pensé à ça. Merci.



1
votes

Activation du produit n'est pas un problème que la cryptographie asymétrique peut résoudre. La cryptographie asymétrique consiste à garder les secrets de votre adversaire. Le problème est que vous ne pouvez pas garder un secret qui est stocké sur votre machine adversaires, ce serait Sécurité bien que l'obscurité .

La bonne façon de faire l'activation du produit . Est de générer un NONCE CRYPTOGRAPHIQUE qui est stockée dans une base de données sur votre serveur. Vous donnez à cette nonce au client lorsqu'ils achètent le produit, puis ils l'activent en ligne. Ce processus d'activation pourrait télécharger de nouveaux matériaux, ce qui rendrait plus difficile l'attaquant de modifier la copie qu'ils ont pour "déverrouiller" de nouvelles fonctionnalités.

mais même avec des systèmes DRM qui nécessite que vous soyez en ligne tout en utilisant le produit. Comme ceux que ceux trouvés dans de nouveaux jeux comme "de la poussière" sont toujours cassé Quelques heures de leur libération.


11 commentaires

Vous avez raison si quelqu'un va modifier vos fichiers binaires (bien que le contenu téléchargé puisse être facilement capturé, alors que la licence peut être achetée, beaucoup plus pourraient être volées). Si quelqu'un ne va pas modifier vos fichiers binaires en utilisant la cryptographie asymétrique pour signer et vérifier que les licences de produit sont assez éprouvées (aussi longtemps que votre clé privée, qui n'est pas distribuée, reste secrète)


@userx s'ils ne vont pas craquer votre logiciel, personne ne se soucie de cela et il n'y vaut rien. Mais que diriez-vous, essayez et pirate logiciel en tant que service (SaaS). Fissuration Wow n'est pas si facile, même si même des serveurs piratés ont été créés.


Désolé, mais je ne parviens toujours pas à voir ton point. Le cryptage asymétrique a une place dans les activations de produits et la licence. Protège-t-il contre toutes les méthodes de piratage, no. Cela vous permet-il de vérifier qu'une licence provient d'une source donnée, oui. Toute l'activation du produit est la sécurité par l'obscurité. Je suis en désaccord avec la déclaration de couverture que si "personne ne craque votre logiciel, personne ne se soucie". La fissuration est très spécifique à l'industrie. Gaming, oui c'est un problème. Enterprise Web Load Balance, pas tellement.


@userx laissez-moi être clair que cela n'est en aucune forme ou forme un système sécurisé.


Vous prétendez que le secret est "stocké sur votre machine adversaires", mais la clé privée (ce que vous utilisez pour signer la licence) reste interne. La clé publique (ce que vous utilisez pour vérifier la licence) est ce qui est exposé. Bien sûr, si vous craignez le logiciel et remplacé le Cert public en interne avec un autre, vous avez raison. Mais ce n'est pas différent de si quelqu'un craignait votre binaire et simplement contourné votre mécanisme de licence. La question ne concerne pas la protection des SaaS ou des jetons DRM; Il s'agit d'activation du produit. Comment activer un produit avec une clé signée ne pas faire cela raisonnablement?


@userx Le problème est qu'un modèle économique s'appuie sur quelque chose qui est totalement et totalement impossible à résoudre. Si vous pensez avoir une solution, vous êtes un imbécile .


Je ne pense pas que je proposais une solution absolue ... En fait, tout le contraire de cela, simplement en désaccord avec votre message parce que la cryptographie asymétrique peut avoir une place dans la prévention du piratage ... juste parce que c'est un problème difficile à résoudre le problème t le rendre futile. C'est un équilibre délicat entre tentative de niveau de protection IP et commodité de l'utilisateur. Le cryptage asymétrique peut parcourir cette ligne bien, si elle est mise en œuvre correctement.


@userx Il prendra 3-5 minutes pour casser votre solution.


Sans modifier les fichiers binaires, je ne vois pas comment. Si vous pouviez déterminer la clé privée d'un certificat RSA 1024 bits dans 3 à 5 minutes, SSL ne serait pas en sécurité non plus. Soin de donner un exemple? Oui, je me rends compte que vous pouvez simplement échanger la clé publique utilisée en interne. Je ne sais pas comment cela est bien différent de simplement modifier un binaire pour sauter la vérification de la licence tout ensemble (qui rend toute méthode anti-piratage inutile). Je suppose que vous pourriez remplacer la mise en œuvre de la RSA sur votre machine locale pour toujours utiliser une clé publique différente (au risque de briser tout le reste qui utilise RSA sur cette machine).


@userx ok donc je vais ouvrir cette bouteille de bière sans l'ouvre-bouteille dans ma main. Ce n'est pas un modèle de menace réaliste. À votre santé.


Je ne parviens tout simplement pas à voir comment la présumant que quelqu'un ne trouve pas (et de remplacer) votre proposition basée sur la nonce est mieux que de penser que quelqu'un ne trouvera pas (et remplacera) votre clé publique. Les deux sont des menaces et vous semblent être à une échelle similaire (ingénierie inverse et correctif binaire), mais en fonctionnement normal, on implique une configuration de serveur et une connexion Internet, l'autre nécessite une implémentation de RSA. S'il y a quelque chose ici, je manque, j'aimerais apprendre davantage sur le sujet.



-2
votes

Vous pouvez utiliser asprotect pour résoudre ce problème. C'est un bon point de regard.


0 commentaires

5
votes

Contexte: J'ai déployé un système basé sur l'activation construit sur un système de licence tiers, c'est-à-dire serveur, base de données, intégrations de commerce électronique. J'ai également écrit séparément un système d'activation C # à l'aide de clés RSA, mais ne l'a jamais déployé.

Produit Activation signifie généralement que le logiciel doit être activé sur une machine donnée. Je suppose que c'est ce que tu veux dire. Si tout ce que vous voulez faire, c'est avoir deux chaînes qui signifient "démo" et "acheté", puis ils seront déchiffrés et distribués en quelques heures (en supposant que votre produit soit précieux). Il n'y a tout simplement aucun point.

Alors. En supposant que vous voulez "activation", lorsque l'utilisateur achète votre logiciel, le processus suivant doit se produire:

  1. Le logiciel de commande de commande indique au serveur de générer une "touche d'achat" et d'envoyer à l'utilisateur
  2. L'utilisateur entre "Touche d'achat" dans le logiciel
  3. Le logiciel envoie une clé d'achat et une identification unique de la machine au serveur.
  4. Server combine la clé d'achat et l'ID de la machine dans une chaîne et la signent avec son certificat et le renvoie à l'utilisateur.
  5. Vérifications du logiciel que la signature est valide à l'aide de la clé publique des serveurs.
  6. Le logiciel pourrait enregistrer dans de nombreux endroits: charger le SIG dans de nombreux endroits, la vérifiant dans d'autres.

    Lors de la génération des touches d'achat, le serveur peut stocker non seulement quels produits ont été achetés, mais quel niveau de produit. Vous pouvez également avoir des produits «GRATUIT» de temps limité, l'utilisateur peut donc essayer la version complète du logiciel pendant 30 jours.

    Vous utilisez c #, assurez-vous d'empêcher d'obscurier les fichiers binaires, à l'aide de Dotfuscator ou d'équivalent. Cependant, même avec cela, vous ne pouvez rien faire contre un pirate informatique déterminé. Votre objectif, je suppose, est de forcer les utilisateurs non payants à être des pirates informatiques eux-mêmes ou de risquer d'utiliser une version fissurée: les enfants ne se soucient pas, les sociétés pourraient. Ymmv.

    Le code qui fait la vérification doit être dans chaque assemblage qui nécessite une protection, sinon un attaquant peut supprimer de manière triviale la protection en remplaçant l'assemblage qui fait la vérification. Coupez et collez le code si vous devez.

    ou juste acheter quelque chose.

    Une autre option consiste à avoir le serveur pré-générer des "touches d'achat" et donnez-leur au service d'exécution de la commande, mais vous n'obtenez donc pas à lier la clé aux détails des clients (au moins pas avant leur inscription). Mieux vaut que le serveur de commerce électronique a frappé votre serveur lorsqu'un achat a été effectué et que votre serveur l'envoie-vous.

    La partie difficile n'est pas tellement la génération de touches d'activation, car il s'agit de la création du serveur, de la base de données et de l'intégration avec le logiciel de commerce électronique, et surtout des problèmes humains: permettez-vous des installations illimitées par Touche d'achat? Seulement 1? Si seulement 1, vous devez avoir un support client et un moyen d'autoriser un utilisateur à l'installer sur une nouvelle machine. C'est juste un problème. Toutes sortes de plaisir.


5 commentaires

Ceci est une bonne réponse, mais la création d'une activation basée sur le serveur n'est tout simplement pas l'option pour moi. Je devrais mentionner que dans mon message original ...


Eh bien, dans ce cas, attendez-vous à une clé pour vous faire fuir. Si tel est un problème, vous pouvez surveiller les sites Warez et inclure une liste de clés bloquées dans chaque nouvelle version du logiciel. L'utilisation d'un cryptage Pubkey est bonne car cela signifie que les attaquants ne peuvent pas créer de logiciels Keygen (à moins qu'ils pirater votre ordinateur et obtenir la clé, auquel cas tous les paris sont éteints). Sur cette note, si vous voulez aller fou, vous pouvez utiliser un certificat vérifié qui permet la révocation.


Juste pour obtenir d'autres idées, je mentionne ici que cette application ne serait pas utilisée pour un usage public, elle est utilisée dans un groupe très étroit de sociétés, quiconque n'aura plus rien à voir avec cela.


Avez-vous vérifié qu'ils iront avec une solution personnalisée? Nous avons eu quelques clients (Fortune 50) qui nécessiteraient des licences floating Flexlm. Si vous n'avez pas eu cela, leurs gars, ils ne l'appuieraient pas, alors les ministères ne pouvaient pas l'acheter.


Oui, je suis sûr qu'ils accepteront toute solution que nous allons mettre en œuvre. Et plus à mentionner, dans l'environnement, l'application est utilisée, il n'y a pas de connexion Internet, il n'est donc pas possible que l'activation à l'aide de serveur n'est pas possible.



0
votes

L'un des avantages du cryptage de clé publique est que vous pouvez Vérifiez l'origine d'une pièce donnée. Donc, si vous stockez la clé publique de votre assembly, signez une pièce donnée (disons un code d'autorisation ou un numéro de série) Votre assemblage peut déterminer de manière vérifiablement que vous étiez celui qui créait ces données - et non un pirate informatique. Les données réelles elles-mêmes ne sont pas toutes importantes - cela peut être une simple valeur de passe / échec.

Ceci est en fait assez facile à voir avec .NET. Vous pouvez utiliser un certificat X509 ou comme nous l'utilisons dans Licence de DeployLX le RsacryptoServiceProvider .

Je recommande vivement d'acheter un produit commercial (ce qui importe vraiment lequel, bien que Deploylx est excellent) et ne pas le faire vous-même pour 2 raisons

  1. Même si vous êtes un excellent développeur, vous aurez probablement mal la première fois. Et toute économie que vous auriez pu être appréciée en roulant votre propre sera perdue pour vous remettre de cette erreur.
  2. Vous passerez beaucoup plus de temps à travailler sur votre propre système - le temps que vous devriez dépenser de votre produit.

    La deuxième phase dans la protection du logiciel consiste à s'assurer qu'elle exécute la façon dont vous l'avez créée - et n'a pas été modifiée par un pirate informatique. Peu importe le cryptage que vous utilisez si les pirates peuvent vérifier si (sous licence) à si (vrai) .


0 commentaires