Production de licences, cryptage? - Java - Programmation
Marsh Posté le 29-04-2008 à 13:57:50
C'est faisable avec un système de cryptage à clé publique.
Regarde du coté du package de cryptographie de Java, il y a des algo tout prêts.
Edit:
Regarde ici: http://java.sun.com/j2se/1.4.2/docs/guide/security/CryptoSpec.html
A toi aussi de savoir si tu préféres utiliser une signature ou bien crypter totalement ton document.
Marsh Posté le 29-04-2008 à 15:42:37
Merci nerisson
J'ai regardé ces références de plus près mais je ne comprend pas bien la fonction d'un cryptage asymétrique à clé publique /privée. Si j'ai bien compris il me semble que pour décrypter le fichier licence, il faudra que les deux clés figurent en dur dans le code qui , étant en java est, parait il, très facilement décompilable.
J'ai l'impression que mon système ne tient vraiment pas la route si on peut decompiler le java....
Me trompe-je?
Merci encore pour la réponse, et si vous connaissez un système de licensing simple...en java ou pas....
jp
Marsh Posté le 29-04-2008 à 16:52:36
Est-ce que tu veux vraiment crypter ton fichier ou bien est-ce qu'une signature numérique incluse dans ton fichier suffirais ?
Sans vouloir donner un cours les systèmes de cryptage à clé publique / privée, je pense que c'est la solution qui te convient.
La clé privée doit impérativement rester secrete, tu ne la fourniras pas, elle te servira à crypter ton fichier.
Par contre tu donneras la clé publique à tes clients. Cette clé leur permettra de décrypter le fichier ou bien d'authentifier ta signature. L'interêt de la clé publique est qu'elle ne peut pas servir à crypter, donc aucun risque que ton client s'amuse à modifier ton fichier.
Le plus connu des algo de cryptage à clé publique/privée est le RSA, je t'invite à chercher un peu de doc pour comprendre le concept. Pas le peine de regarger comment ca marche, l'API de crypto de Java s'occupe de te masquer ca (dans le lien que je t'ai donné tu vois que tu peut crypter / décrypter en une dizaine de lignes de code).
Marsh Posté le 29-04-2008 à 17:53:51
Merci beaucoup, reste une chose que je ne comprends pas très bien:
je lis ceci sur RSA: (wikipedia)
"Cet algorithme est fondé sur l'utilisation d'une paire de clés composée d'une clé publique pour chiffrer et d'une clé privée pour déchiffrer ou signer des données confidentielles. La clé publique correspond à une clé qui est accessible par n'importe quelle personne souhaitant chiffrer des informations, la clé privée est quant à elle réservée à la personne ayant créé la paire de clés. "
Mon besoin sera que le logiciel décrypte (donc utilise sa clé privée, que j'aurai du coder en java...donc accessible par décompilation...?) un fichier licence crypté par mes soins (avec la clé publique donc)
J'ai cru comprendre qu'il est aisé de passer de la clé privée à la clé publique ( asymétrie du mécanisme je crois), donc si un decompileur intercepte ma clée privée dans le code il a ma clée publique, mon algo de cryptage et peut générer des fichiers licence à sa guise? Me plante-je complètement?
Merci de ton point de vue, ou si tu as une bonne adresse pou y mieux comprendre, je suis ultra preneur?
As tu déjà eu à gérer du licensing? Si oui quelle solution as tu choisi?
Sinon merci pour l'adresse du manuel jce, une vrai mine.
jp
Marsh Posté le 30-04-2008 à 08:29:10
Le code java étant décompilable, quelque soit ta routine de vérification des clef, on peut toujours remplacer :
Code :
|
par :
Code :
|
Après tu peut toujours tenter de masquer/déguiser ce principe sous 36 couches, ce sera toujours le même problème mais si c'est assez compliqué à déméler en théorie au bout d'un moment ça devient moins cher de prendre une licence que de tenter de casser le logiciel et les gens préfèreront acheter la licence (note que ça marche aussi en abaissant le prix de la licence ).
Marsh Posté le 30-04-2008 à 08:31:35
Ben oui le problème du décryptage est que tu doit stocker ta clé privée dans ton code, donc facilement décompilable (De toute facon quitte à décompiler du code, ton client pourrait très bien bidouiller ton code à un autre pour passer outre ta license).
C'est pour ca que je parlais de signature numérique au lieu de cryptage, car dans ce cas la c'est la clé publique qui sera dans ton code.
Marsh Posté le 30-04-2008 à 08:32:57
nerisson a écrit : Ben oui le problème du décryptage est que tu doit stocker ta clé privée dans ton code, donc facilement décompilable (De toute facon quitte à décompiler du code, ton client pourrait très bien bidouiller ton code à un autre pour passer outre ta license). |
Ça résouds pas vraiment le problème, si on peut lire la clef publique dans le code on peut la remplacer par une autre clef pour laquelle on connait la clef privée qui va avec
Marsh Posté le 30-04-2008 à 08:36:01
Voui, de toute facon en Java y'a pas de solution miracle pour ce genre de problèmes.
Marsh Posté le 30-04-2008 à 15:30:48
Merci pour vos bonnes idées et réflexions (celle de julius en dernier...).
En fait la connotation 'publique' de la clé n'est valable que lors d'un échange de données. Dans le cas du licensing (le mien) la clé public (de cryptage) ne sera jamais rendue publique elle sera aussi secrète que la clé private de décryptage.
Je peux donc simplement ( après avoir créé ma paire de clé) crypter en 'clé public' mon fichier de licence et mettre dans le code de mon logiciel un moyen de décoder avec la cle private de décryptage. Bien malin ce lui qui:
1 va décompiler mon code pour lire la clé private de décryptage
2 va déduire la clé public de la clé private pour editer un fichier licence selon ses désirs.
Au pire mon décompileur peut toujours faire sauter le 'if' de validation de la licence. Mais il ne devrait pas pouvoir générer d'autres fichiers licences...
Si j'ajoute une obfuscation (brouillage du bytecode) telle que procurée par proguard. Je devrais éloigner les bidouilleurs du dimanche....pour un temps...?
Un article m'a paru plus clair que les autres sur la question du cryptage asymétrique:
http://www.geekgirls.com/net_publick.htm
Ce fil sur le licensing peut rester vivace car je n'ai pas trouvé beaucoup de chose en googlant et si d'autres ont des idées....
jp
Marsh Posté le 01-05-2008 à 00:44:25
nerisson a écrit : Voui, de toute facon en Java y'a pas de solution miracle pour ce genre de problèmes. |
Dans les langages compiles non plus d'ailleurs ...
Marsh Posté le 29-04-2008 à 12:05:41
Bonjour à tous,
[quote]
Je cherche des informations sur une façon simple de générer des licences pour un logiciel en java.
On m'a demandé de trouver un système qui permettrai simplement d'envoyer un fichier contenant les identifiants des users 'autorisés' du logiciel basé sur un serveur chez le client.
En somme,
1 user= 1 licence.
1 'fichier licence' contiendrait les n login/mot de passes des users autorisés donc n licences
L'idée serait d'envoyer ce fichier licence sous forme cryptée au client.
Le logiciel pourrait décrypter ce fichier pour utiliser les logins/mot de passe.
Le logiciel chez le client devrait donc pouvoir uniquement décrypter le fichier licence, mais être incapable d'en créer un (donc de crypter selon sa capacité de décryptage).
Reste que la capacité à encrypter appartiendrai à l'éditeur , seul capable de produire les licences.
J'espère que le principe vous parait clair? Vous semble t il valable?
Connaissez vous des outils pour coder un processus du genre?
Merci d'avance pour toute aide ou référence...lien, forum...
jpConfiguration: Windows XP
Internet Explorer 7.0