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

Langage Java Discussion :

Stocker une clé privée


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut Stocker une clé privée
    Salut à tous,

    Je me pose une question toute simple :
    "Comment stocker une clé privée dans mon programme Java pour éviter qu'elle soit retrouvé par une simple "décompilation" du .jar ?"

    Merci à vous!

    Bonne soirée et bon week-end!

    ++

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    Salut,

    je pense que ce n'est pas possible, au pire tu pourras rendre cela plus difficile à retrouver mais pas impossible.

    Il faudrait peut être la demander à chaque démarrage de l'appli.
    ca dépend a quoi te sert cette clé.

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut
    Hello,

    A quoi sert la clé n'est pas le problème, il s'agit d'une clé secrète servant dans un algorithme de cryptage symétrique qui donc doit être préservée de l'extérieur. Sinon l'ensemble du système se trouve compromis.

    Par contre, je suis surpris qu'il ne soit pas possible de la protéger par un quelconque moyen.

    Merci quand même ,

    Bonne journée

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Si c'est possible de le faire. Stocker la clef encryptée, et protégée par un mot de passe. Par contre le seul vrai moyen sécurisé est de demander ce mot de passe au démarrage de l'application... Cette solution n'est pas spécifique à Java mais commun à tous les langages : stocker un secret de manière réelement sécurisée ne se fait qu'en protégeant par un mot de passe entré par l'utilisateur...

    A plus

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut
    Bonjour,

    Alors si je comprends bien, l'idée est de crypter la clé secrète avec une autre clé secrète (mot de passe) qui est saisie par un utilisateur.
    Je vois deux problèmes :
    • dans tous les cas, le maillon faible est l'utilisateur, donc lui confier la clé n'est pas une bonne idée
    • dans mon cas, je n'ai pas d'utilisateur, personne pour saisir un mot de passe, il me faut donc vraiment protéger la clé dans le programme


    Merci pour vos réponses

    Bonne journée

    ++

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par Harry_Tauper Voir le message
    dans mon cas, je n'ai pas d'utilisateur, personne pour saisir un mot de passe, il me faut donc vraiment protéger la clé dans le programme
    tu te rend compte de ce que tu demande? C'est ce que l'industrie des medias n'est toujours pas parvenue à faire malgrès ses moyen 'comment rendre un secret lisible tout en empechant la lecture de ce secret'. Soit tu met un mot de passe (et le user devra le tapper pour débloquer la clé), soit la clé privée n'est pas ou peu protégée, et dans ce cas c'est la machine qu'il va falloirr protéger pour éviter qu'elle soit compromise. Par exemple, les clés privée ssl/tls des serveur web ne sont en général protégées que par le système de sécurité de l'OS qui ne permet qu'à l'administrateur et au user faisant tourner le service d'y avoir accès. Dans tous les cas, à un moment donné, cette clé devra être lisible.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Par curiosité : que veux-tu protéger ?

    a++

  8. #8
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu te rend compte de ce que tu demande? C'est ce que l'industrie des medias n'est toujours pas parvenue à faire malgrès ses moyen 'comment rendre un secret lisible tout en empechant la lecture de ce secret'. Soit tu met un mot de passe (et le user devra le tapper pour débloquer la clé), soit la clé privée n'est pas ou peu protégée, et dans ce cas c'est la machine qu'il va falloirr protéger pour éviter qu'elle soit compromise.
    Ok, et le mot de passe tu le protèges comment ? On tourne donc en rond non ?
    Sinon effectivement sécuriser la machine est surement le plus efficace. Sauf que dans mon cas, l'équipement contenant ce programme est déployé à très grande échelle, donc impossible de garantir l'intégrité de l'ensemble des équipements contenant la clé.

    Je cherche simplement à empêcher qu'une suite de valeur ne soit pas facilement visible à l'intérieur du .jar, il ne me semble pas que cela soit fou. N'y a-t-il aucun moyen de protéger le contenu d'un .jar (ne serait-ce que de la décompilation) ? Par exemple, l'obfuscation en J2ME n'existe-t-elle pas en J2SE ?

    Sinon pour adiGuba, je cherche simplement à sécuriser la communication entre 2 équipements à l'aide d'une clé privée.

    En tous cas, merci pour vos réponses.

    Bonne après-midi

    ++

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Harry_Tauper Voir le message
    Je cherche simplement à empêcher qu'une suite de valeur ne soit pas facilement visible à l'intérieur du .jar, il ne me semble pas que cela soit fou. N'y a-t-il aucun moyen de protéger le contenu d'un .jar (ne serait-ce que de la décompilation) ? Par exemple, l'obfuscation en J2ME n'existe-t-elle pas en J2SE ?
    Cela ne fait que rendre la chose un peu plus compliqué... mais pas impossible !

    Si ton application tourne sur un système "hostile" (que tu ne maitrise pas), il y a un grand nombre de moyen pour récupérer l'information...


    Citation Envoyé par Harry_Tauper Voir le message
    Sinon pour adiGuba, je cherche simplement à sécuriser la communication entre 2 équipements à l'aide d'une clé privée.
    Pourquoi ne pas utiliser la Cryptographie asymétrique ?

    Ainsi la clef privé connu de l'application ne sert qu'à recevoir des messages, et il devient complètement inutile de la récupérer...

    a++

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par Harry_Tauper Voir le message
    Ok, et le mot de passe tu le protèges comment ? On tourne donc en rond non ?
    il n'est stocké nulle part, sa protection n'a donc pas de sens. C'est à l'utlisateur de le retenir.
    Sinon effectivement sécuriser la machine est surement le plus efficace. Sauf que dans mon cas, l'équipement contenant ce programme est déployé à très grande échelle, donc impossible de garantir l'intégrité de l'ensemble des équipements contenant la clé.
    Je crois que t'as un problème de design là. Si je suis bien ta logique, des centaines d'appareil vont posséder la même clé privée. La logique voudrais que chaque appareil aie sa propre clé, ainsi un appareil / clé compromis peux facilement être désactivé en invalidant sa clé sur le serveur.
    Je cherche simplement à empêcher qu'une suite de valeur ne soit pas facilement visible à l'intérieur du .jar, il ne me semble pas que cela soit fou.
    Non mais une obfuscation ne résistera pas à une attaque en règle par quelqu'un décidé à récupérer la clé, ca empechera seulement l'utilisateur lambda sans connaissances d'y avoir accès. Bref un protection très virtuelle.

    Sinon pour adiGuba, je cherche simplement à sécuriser la communication entre 2 équipements à l'aide d'une clé privée.
    Qu'entend tu par "sécuriser"? Empecher un equipement rogue de se connecter? Dans ce cas il faut une clé privée différente sur chaque équipement (qui peut être fournie sous forme de smart card, par exemple) et la clé publique sur l'autre, ou passer par une autorité de certification comme on le fait avec les certificats ssl.

    Si tu veux empecher l'interception de la communication, il faut alors passer aussi par l'échange d'une clé asymétrique et utiliser l'ensemble des fonctionnalité de SSL ou TLS (clé d'authentification + négociation d'une clé symétrique jetable à la connection)

  11. #11
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut
    Citation:
    Ok, et le mot de passe tu le protèges comment ? On tourne donc en rond non ?
    il n'est stocké nulle part, sa protection n'a donc pas de sens. C'est à l'utlisateur de le retenir.
    Alors on ne parle pas d'un mot de passe mais d'une clé permettant de déchiffrer la clé privée encodée...

    Je crois que t'as un problème de design là. Si je suis bien ta logique, des centaines d'appareil vont posséder la même clé privée. La logique voudrais que chaque appareil aie sa propre clé, ainsi un appareil / clé compromis peux facilement être désactivé en invalidant sa clé sur le serveur.
    Chaque équipement possèdera une clé privée diversifié à partir d'une clé maitre... mais ça n'est pas le problème, il faut quand même protégé cette clé.

    Juste pour information, je ne suis pas du tout dans une architecture client/serveur avec un réseau IP derrière. Les équipements ne sont pas connectés à un quelqueconque réseaux, il s'agit de communication point à point.
    Par sécuriser, j'entends d'une part une authentification et d'autre part cryptage des données (optionnel pour le moment).

    Un des problèmes de l'utilisation d'un algorithme asymétrique et la lourdeur des traitements (et surtout le temps). De plus j'ai du mal à imaginer comment assurer l'authentification puisque la clé publique n'importe qui peut la connaitre... Votre aide est la bienvenue sur ce point.

    Merci

    Bonne soirée

    ++

  12. #12
    Invité
    Invité(e)
    Par défaut
    Salut,

    Citation Envoyé par Harry_Tauper Voir le message
    Alors on ne parle pas d'un mot de passe mais d'une clé permettant de déchiffrer la clé privée encodée...
    Pas forcément non. Quand tu as une clef privée stockée dans un format PKCS#12, tu as bien un clef protégée par mot de passe

    Citation Envoyé par Harry_Tauper Voir le message
    Chaque équipement possèdera une clé privée diversifié à partir d'une clé maitre... mais ça n'est pas le problème, il faut quand même protégé cette clé.

    Juste pour information, je ne suis pas du tout dans une architecture client/serveur avec un réseau IP derrière. Les équipements ne sont pas connectés à un quelqueconque réseaux, il s'agit de communication point à point.
    Par sécuriser, j'entends d'une part une authentification et d'autre part cryptage des données (optionnel pour le moment).

    Un des problèmes de l'utilisation d'un algorithme asymétrique et la lourdeur des traitements (et surtout le temps). De plus j'ai du mal à imaginer comment assurer l'authentification puisque la clé publique n'importe qui peut la connaitre... Votre aide est la bienvenue sur ce point.

    Merci

    Bonne soirée

    ++
    Bon Là c'est tout l'intérêt de SSL : ça fait ce que tu veux, on sait que c'est sûr, c'est éporouvé testé, déjà été attaqué des milliers de fois. Quand tu implémentes ton propre protocole "sécurisé", il y a d'énormes chances que ce ne soit pas si sécurisé que ça mais que ça présente de grosses failles.

    Pour l'authentification des pairs, c'est simple : si c'est une authentification mutuelle chacun possède son couple clef privée/publique. Le fait que la clef publique soit publique permet justement de vérifier les signatures de l'autre composant à qui l'on parle (signatures faites grâce à la clef privée, que donc juste un des composants connait, donc émise par celui ci...). Penche toi sur le concept de PKI.

    Pour ce qui est du asymétrique, oui c'est lourd, c'est pour ça que c'est quasi exclusivement utilisé pour échanger une clef symétrique jetable (comme a dit tchize_), et SSL n'échappe pas à la règle... (crypter une clef va plus vite qu'un texte vue la taille des clefs )

    A plus

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par Harry_Tauper Voir le message

    il s'agit de communication point à point.
    Par sécuriser, j'entends d'une part une authentification et d'autre part cryptage des données (optionnel pour le moment).
    L'authentification se fait avec un clé assymétrique dans ces cas là, en général. Les deux cotés du point à point ont leur propre clé privée, ils l'utilisent. L'équipement de l'autre coté utilise la clé publique pour déchiffrer. Le fait de savoir déchiffrer authentifie, de fait, l'expéditeur puisqu'il est le seul a avoir la clé privée et donc le seul à pouvoir envoyer ce message (qui doit changer à chaque fois, bien sur)

    Un des problèmes de l'utilisation d'un algorithme asymétrique et la lourdeur des traitements (et surtout le temps).
    C'est pour ca que le protocoles type SSL/TLS n'utilisent pas la clé assymétrique pour chiffrer tout le message. Ils l'utilisent pour chiffrer un demi clé symétrique (en gros, il y a une procédure bien précise et éprouvée pour négocier les clés assymétriques). Chacun envoie sa "demi-clé" à l'autre en utilisant la clé publique du destinataire. Ainsi seul l'expéditeur et le destinataire ont les deux demi-clé. Un fois ça fait, on utilise cette clé symétrique, jetable, pour le reste de la communication.
    De plus j'ai du mal à imaginer comment assurer l'authentification puisque la clé publique n'importe qui peut la connaitre... Votre aide est la bienvenue sur ce point.
    Voir en haut, on utilise justement la clé privée pour s'authentifier et la publique, de l'autre coté, pour vérifier cette authentification.

  14. #14
    Invité
    Invité(e)
    Par défaut
    y a t-il un moyen (simple) en java pour chiffre une connexion TCP ?
    en pratique, il faut aller voir dans quelles classes ?

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par PierreD87 Voir le message
    y a t-il un moyen (simple) en java pour chiffre une connexion TCP ?
    en pratique, il faut aller voir dans quelles classes ?
    SSLSocket

  16. #16
    Invité
    Invité(e)
    Par défaut
    il faut passer par les factory ?
    parce que je me vois mal implémenter ça (abstract)...

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SSLSocketFactory.getDefault().createSocket(.....)

Discussions similaires

  1. [Image] Classe pour stocker une image JPEG ?
    Par elitost dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/01/2006, 14h34
  2. Comment stocker une référence vers un TTreeNode ds un DFM ?
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/07/2005, 13h33
  3. [toujours en galère] stocker une variable
    Par stof dans le forum MFC
    Réponses: 31
    Dernier message: 29/03/2005, 16h45
  4. [Création de compo] Stocker une TList de records dans un dfm
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 6
    Dernier message: 29/10/2004, 12h01
  5. [MySQL] Quel est le meilleur moyen de stocker une date/heure ?
    Par MiJack dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/07/2004, 13h19

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