2010-06-17 18 views
1

Je dois générer et valider des clés de produit et j'ai envisagé d'utiliser un système de clé publique/privée.Chiffrement des clés de produit: chiffrement à clé publique et privée

je produis nos clés de produit basé sur

  • un nom de client (qui pourrait être une chaîne de longueur variable)
  • un numéro de 6 chiffres.

Il serait bon que la clé de produit serait d'une longueur raisonnable (16 caractères environ)

Je dois les chiffrer à la base et distrubute le système de décryptage/validation. Comme notre système est écrit en code managé (.NET), nous ne voulons pas distribuer le système de cryptage, seulement le décryptage. J'ai besoin d'une clé privée publique qui me semble un bon moyen de le faire, crypter avec la clé que je garde et distribuer l'autre clé nécessaire pour la déchiffrement/vérification.

Qu'est-ce qu'un mécanisme approprié pour faire cela avec les exigences ci-dessus?

REMARQUE: il ne s'agit pas d'arrêter le piratage; c'est pour réduire la probabilité d'utilisateurs novices d'installer des composants dont ils n'ont pas besoin/non autorisés à utiliser.

Répondre

1

.NET prend en charge le cryptage à clé publique de différentes manières, telles que http://msdn.microsoft.com/en-us/library/ms867080.aspx. Cela dit, tout ce que vous gagnez, c'est une certaine confiance que quelqu'un avec un accès complet au code libéré n'aurait pas la possibilité d'émettre ses propres clés de produit. Rien de tout cela ne les empêche de patcher le client pour accepter quoi que ce soit comme une clé valide. C'est là que l'obfuscation s'inscrit.

+0

cela ne me donne pas une réponse à la question qui était "Quel est un mécanisme approprié pour faire cela avec les exigences ci-dessus?" –

+0

Comme je l'ai dit, PKE n'est pas vraiment adapté à vos besoins. Si vous voulez simplement arrêter les utilisateurs débutants, cachez simplement le choix d'installation à moins qu'une option de ligne de commande non documentée ne le permette. Documentez ensuite cette option uniquement pour ceux qui ont besoin d'installer le composant requis. –

+0

Bien sûr, pour éviter les correctifs, il y a la signature de code. – ErikHeemskerk

-2

N'essayez même pas de vous faire plaisir avec l'antipiratage. Ça ne vaut pas le coup. J'ai craqué d'innombrables applications (hush) et celles de .NET sont de loin les plus faciles. Mais en réalité, ils sont tous relativement faciles avec suffisamment d'expérience. Si vous ne me croyez pas, consultez isohunt un certain temps.

tl; dr: C'est une bataille perdue. Ne le combat pas. Si vous voulez vraiment gagner, poursuivre les infractions - mais même cela vous fait perdre.

+1

Ceci n'est pas une réponse à ma question. –

+1

"L'utilisation non autorisée de composants" sonne BEAUCOUP comme anti-piratage. –

+1

nous avons et administrateur et un utilisateur et le logiciel est peu susceptible d'être fissuré. Nous ne voulons pas que l'utilisateur installe le composant admin. - - - Si vous ne voulez pas répondre à la question, ne répondez pas. Ne dites pas simplement au questionneur pourquoi il n'aurait pas dû poser la question. Plus les réponses à une question sont douteuses, moins il y aura de chances que l'on y réponde, car les gens voient que les réponses sont déjà contre. –

-2

J'ai fait quelque chose de très similaire. Mais dans mon cas c'était un simple code d'autorisation téléphonique. L'utilisateur téléphonait à un numéro, donnait le nom de son entreprise et l'opération qu'il effectuait, obtenait un code, le tapait dans l'application et pouvait ensuite continuer.

Ce que j'ai fait était de sérialiser une donnée en binaire. Les données comprenaient le nom de l'entreprise hachée, le code d'opération/la date d'expiration et l'espace disponible pour les besoins futurs. J'ai ensuite dispersé les bits autour du tableau pour le confondre. Ensuite, j'ai cartographié chaque 5 bits du tableau binaire sur un alphabet de 32 caractères auth-code (0-9, a-z, excluant I/O/Q/S pour la lisibilité par téléphone).

Cela s'est traduit par un joli code d'authentification de 16 caractères, affiché en tant que blocs 4x4 (#### - #### - #### - ####). Il pourrait être facilement lu au téléphone, car l'utilisateur devait seulement écouter quatre caractères à la fois, ou même envoyer par SMS. Comme avec votre problème, il n'était pas destiné à arrêter les crackers de code à Bletchley Park, mais était suffisant pour empêcher l'employé de bureau moyen de faire quelque chose sans suivre la procédure de l'entreprise. Et, compte tenu de cette portée, a été très efficace.

+0

Pourquoi réinventer la roue? Générez un nombre de 128 bits et utilisez-le comme une valeur de sel lorsque vous hachez le nom de société concaténé et les informations associées avec SHA-1. Donnez-leur le nombre résultant à entrer. À l'autre extrémité, le logiciel effectuera le même calcul et comparera son hachage avec ce que l'utilisateur a saisi. Exécuter un obfuscater sur le logiciel pour cacher le secret partagé. Terminé. Ce schéma est suffisamment sûr, ne prend aucun effort, et ne nécessite pas de nouveaux algorithmes qui pourraient avoir des trous énormes pour tout ce que vous savez. –

+0

Le problème avec cette solution est que vous avez effectivement inclus le keygen dans votre code. Sans besoin de pirater votre logiciel, un pirate débutant peut simplement dupliquer votre keygen et créer toutes les licences qu'il souhaite. Une combinaison de clé publique/privée les empêche au moins de dupliquer votre keygen et s'ils veulent casser votre logiciel, ils devront le pirater directement et probablement le ré-hacher chaque fois que vous publiez une mise à jour. – JamieB