IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Générer license application


Sujet :

Java

  1. #21
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    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.

  2. #22
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par william44290 Voir le message
    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 ?

  3. #23
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    - 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

  4. #24
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Super merci

    Et 2 users ayant le même nom sur 2 pc différents pourront alors utiliser ton logiciel ?

  5. #25
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    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.

  6. #26
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    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.

  7. #27
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    Et 2 users ayant le même nom sur 2 pc différents pourront alors utiliser ton logiciel ?
    Oui

  8. #28
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par william44290 Voir le message
    Et 2 users ayant le même nom sur 2 pc différents pourront alors utiliser ton logiciel ?
    Oui
    J'ai jamais dit qu'il fallait retirer l'information qui concerne l'utilisateur. J'ai juste dit qu'un numéro de série d'un disque dur n'identifie pas un PC .
    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.

  9. #29
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ta clé publique se résume à un byte[].

    Une version naive de stockage de la clé publique serait une classe ou tu aurait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    publis static byte[] LICENCE_KEY = new Byte[] {0x24,0x45,0xa0,0x5b,0x0F,......}
    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.

  10. #30
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ta clé publique se résume à un byte[].

    Une version naive de stockage de la clé publique serait une classe ou tu aurait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    publis static byte[] LICENCE_KEY = new Byte[] {0x24,0x45,0xa0,0x5b,0x0F,......}
    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.
    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.

  11. #31
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par sinok Voir le message
    J'ai juste dit qu'un numéro de série d'un disque dur n'identifie pas un PC .
    C'est clair, mais une carte réseau aussi peut être changée, peut-être moins fréquemment qu'un disque dur, surtout si elle est intégrée à la carte mère, mais bon...

  12. #32
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par youss20 Voir le message
    Comment vous faites vous tous ???.
    Je distribue en open source ^^

  13. #33
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    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 ?

  14. #34
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    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.

  15. #35
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par sinok Voir le message
    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.
    Bonne idée merci.
    Et je sauvegarde ça où ? Dans un fichier ? Dans la BD ?

  16. #36
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    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.

  17. #37
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    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.

  18. #38
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par sinok Voir le message
    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...
    C'est justement ce que j'avais commencé à faire. J'ai donc crypté le fichier où je sauvegarde la date courante avec une clé AES.

  19. #39
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    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...

  20. #40
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par youss20 Voir le message
    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/09/2013, 10h35
  2. Réponses: 2
    Dernier message: 03/07/2009, 08h15
  3. Réponses: 3
    Dernier message: 04/05/2009, 14h56
  4. Réponses: 2
    Dernier message: 05/02/2008, 13h29
  5. [EDI] Editeur de haut niveau pour générer une application Web en PHP/MySQL
    Par Speezaker dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 14/12/2007, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo