je converti ma string code en valeur hexa et j'affiche cette valeur hexa. la clé doit être saisie en hexa une algo décale cette clé hexa et doit retomber sur la valeur de code.
je converti ma string code en valeur hexa et j'affiche cette valeur hexa. la clé doit être saisie en hexa une algo décale cette clé hexa et doit retomber sur la valeur de code.
Donc en résumé:
- user.name + nom application = string "concat"
- tu cryptes "concat" à l'aide de ta clé privée.
- tu codes cela en hexa et tu proposes au client de saisir ce code hexa que tu stockes dans un fichier dans user.home
- après saisie, tu décryptes ce code hexa avec ta clé publique
- et tu compares les 2
C'est bien ça ?
- user.name + nom application = string "concat"
oui
- tu cryptes "concat" à l'aide de ta clé privée.
oui j'obtien un code
je demande au client de m'envoyer ce code
à réception du code je calcule sa clé et je lui envoi
il saisie la clé dans son soft, lors de la saisie si la clé ok je l'enregistre dans un fichier dans user.home
Super merci
Et 2 users ayant le même nom sur 2 pc différents pourront alors utiliser ton logiciel ?
Salut tchize_,
Quand je demandais comment stocker la clé publique dans l'application, je voulais dire où est-ce que mon appli va aller la chercher pour décrypter la license ? A partir de quelle source ?
Pour le moment cette clé publique est dans un keystore (protégé par mot de passe) avec la clé privée, et ce keystore reste chez moi évidemment.
Le disque dur n'est pas une bonne idée en soit, imagines que l'utilisateur en change....
Le seul élément dont on est sur qu'il va constamment rester identique est l'adresse MAC de l'ordinateur.
Celà est possible à partir de java 6 en java http://www.kodejava.org/examples/250.html ou en utilisant les commandes systèmes telles que ifconfig/ipconfig/... selon les OS
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.
Et 2 users ayant le même nom sur 2 pc différents pourront alors utiliser ton logiciel ?
Oui
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.
ta clé publique se résume à un byte[].
Une version naive de stockage de la clé publique serait une classe ou tu aurait
Je dit naif puisque, comme elle est centralisé elle est facilement changeable. La complexité de ta tâche dépendra de la sécurité que tu veux mettre dedans, et cette sécurité dépendra de l'intérêt que tu aura à protéger ton application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part publis static byte[] LICENCE_KEY = new Byte[] {0x24,0x45,0xa0,0x5b,0x0F,......}
Bah mon application n'est pas une révolution et elle sera majoritairement utilisée par des gens qui n'y connaissent pas grand chose en informatique, mais j'aimerais quand même que ça soit sécurisé un minimum.
Est-ce que cette solution de stockage "naif" suffit ?
Y'aurait-il d'autres solutions pour que mon appli puisse accéder à cette clé publique ?
Comment vous faites vous tous ???
Je compte à la fin obfusquer mes sources pour brouiller un peu les pistes et rendre la tâche difficile à un éventuel hacker.
Bonjour,
Pour la date d'expiration de la licence, je compare simplement avec la date système du pc du client. Mais si le client est malin et change la date de son pc, mon application n'expire jamais.
Comment peut-on remédier à ça ?
Sauvegarder la date et la timezone à chaque exécution et vérifier que la date précédente n'es pas postérieure à la date courante. (prendre en compte le changement de timezone et le changement d'heure été/hiver sur certaines configs.
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.
Pour l'instant, j'ai testé en sauvegardant bêtement les dates dans un fichier et ça fonctionne. Le problème est que, si le client trouve la combine de modifier ce fichier, l'application n'expirera jamais.
Il faudrait pour ça qu'il change le fichier avant chaque démarrage de l'appli, un poil contraignant. Puis il te suffit de crytper ton fichier pour que la plupart des utilisateurs n'y arrivent pas. Un gars qui saura décrypter ce genre de fichiers saura de toute façon déjouer toute protection que tu mettras en place...
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.
Bonjour,
j'ai développé une application java pour une clinique, et mon but est d'essayer de la sécuriser au maximum en sachant que je ne suis pas expert en cryptographie.
Voilà un peu en gros ce que j'ai fait, j'aimerais avoir un peu votre avis histoire de ne pas rester bête et de continuer à apprendre.
Une fois mon application installée sur un ordinateur de la clinique, j'exécute sur ce pc également un petit programme à moi qui va générer une licence pour le client.
- Je génère donc chez moi une paire de clés privée/publique que je stocke (chez moi) dans un keystore *.p12
- Je crée un fichier "licence" avec l'id du client, l'adresse mac de son pc, la date de début et de fin de la licence.
- Je chiffre ce fichier "licence" à l'aide de ma clé privée, et je le sauvegarde sur le disque du client.
- Je sauvegarde également la clé publique dans un fichier sur le disque du client.
- Lorsque le client exécute l'application, cette dernière va déchiffrer le fichier "licence" à l'aide de la clé publique, et vérifier sa validité en comparant les données du fichier "licence" avec celles du fichier Porperties (id du client), ainsi que l'adresse mac du pc avec celle contenue dans le fichier "licence", et enfin la date d'expiration.
- Concernant la date d'expiration, je sauvegarde la date courante à chaque exécution de l'application dans un fichier "dateExec" sur le pc du client. Ce fichier est chiffré à l'aide d'une clé AES (stockée aussi sur le pc du client). Je vérifie que cette date soit bien antérieure à la date courante pour éviter que le client triche en revenant à une date antérieure.
Voilà pour la partie licence.
Pour se connecter à la BD, les utilisateurs doivent entrer leur login et mdp. Les mdp sont hashés MD5 et stockés dans la BD.
J'ai aussi un fichier bd.conf contenant les données "en clair" pour se connecter à la BD. Je compte le crypter également avec une clé AES.
Que pensez-vous de tout cela ? Vos critiques argumentées et conseils sont les bienvenus. Merci d'avance.
PS: J'ai également obfusqué mon *.jar avec proguard histoire de brouiller un peu plus les pistes, mais les string restent codées "en clair" après décompilation, ce qui n'est pas très sûr je pense...
Salut
Ca me aprait pas mal, mais un gros trou : la clef AES stockée en clair chez le client. Autant ne pas crypter si tu fais ça
Ne peut tu faire une requête toute simple à un server NTP (par exemple) ? Comme ça tu reçois un temps sûr et non manipulable sans avoir besoin de crypter. Tu compares la date reçue avec celle du server en autorisant une marge d'erreur si tu le souhaites. Enfin à toi de voir
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager