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

Sécurité Java Discussion :

Crypter les mots de passe utilisateurs


Sujet :

Sécurité Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Crypter les mots de passe utilisateurs
    Bonjour,

    Je me lance dans la réalisation d'une application qui s'appuie sur jdbc et une base de données mysql. Pour mes utilisateurs je souhaiterai trouvé une solution qui me permettrait d'enregistrer mes mot de passe de manière crypté.
    Seul soucis je ne sait pas quel algo de crypto utilisé ou comment l'implémenter en java.

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    Java cryptography extension contient toutes les méthodes pour chiffre. Pour l'algo, utiliser du SHA-256 (pas du SHA-1 !) ou éventuellement du md5 (considéré comme moins sur aujourd'hui mais plus répandu)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Merci je vais y jeter un coup d'oeil

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Notes que les algorithmes présentés par tchize_ ne sont pas des algos de chiffrement mais des algos de hash (ou condensat, ou empreinte numérique).

    Ils donnent en sortie une séquence de longueur fixe unique (en théorie) pour chaque mot donné en entrée.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Pourrais tu expliciter tes dires ?

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 687
    Par défaut
    Pour une explication des fonctions de hashage : http://fr.wikipedia.org/wiki/Fonction_de_hachage

    Pour faire simple si ton mot de passe est "mot de passe" et que tu le passes par l'algorythme sha-256, tu obtiens "1d894561b306ded29257d6acc1689003c4f484010c39324a08fd66c4a1068ee4", ce que l'on appelle un hash.
    Il n'y a pas de manoeuvre connue pour faire operation inverse.

    Pour vérifier le mot de passe il faudra donc que tu calcules le hash du mot de passe saisi par l'utilisateur et que tu le compare avec le hash stoqué en base.

    Normalement il ne doit pas non plus exister de méthode connue pour connaitre une chaine qui ait le même hash qu'un chaine déjà connue. Ce n'est plus le cas des algorithmes sha-1 et md5, c'est pourquoi ils sont déconseillés pour des utilisation de somme de controle.
    Ceci dit pour stoquer des mot de passe je ne voit pas vraiment ou est le problème car pour trouver un second mot de passe valable, il faudrait déjà connaitre le premier(et sa longueur dépacerai de toute façon probablement la taille limite)

  7. #7
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par Uther
    Normalement il ne doit pas non plus exister de méthode connue pour connaitre une chaine qui ait le même hash qu'un chaine déjà connue. Ce n'est plus le cas des algorithmes sha-1 et md5, c'est pourquoi ils sont déconseillés pour des utilisation de somme de controle.
    Le croyais que seul MD5 avait été cassé ?

    Ceci dit, il faut bien voir que ce cassage est un projet de recherche universitaire qui a pris des années. C'est très loin d'être à la portée du premier venu.

    Citation Envoyé par Uther
    Ceci dit pour stoquer des mot de passe je ne voit pas vraiment ou est le problème car pour trouver un second mot de passe valable, il faudrait déjà connaitre le premier(et sa longueur dépacerai de toute façon probablement la taille limite)
    J'ai rien compris

    Sinon je voulais juste dire que stocker les mots de passes en BDD tels quels c'est vraiment le minimum en terme de sécurité et c'est pas terrible. Il existe des BDD de hash qui permettent de trouver le mot en clair correspondant à tel hash.

    Donc pour une meilleure protection, cf salage.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Le croyais que seul MD5 avait été cassé ?

    Ceci dit, il faut bien voir que ce cassage est un projet de recherche universitaire qui a pris des années. C'est très loin d'être à la portée du premier venu.
    En fait, pour les mots de passe "courant", c'est à la porté du premier venu. Le md5 et tellement utilisé qu'il suffit de tapper en général le md5 dans google pour trouver une page contenant à la fois le md5 et le mot d'origine. Exemple, si mon mot de passe est "Colombie", j'obtiens "b9d86ddfc0069a6dbcaa686afd98ca56". Si je tappe ça dans google, j'obtiens http://www.xing.com/uk/directories/p...a686afd98ca56/

    Pareil, si mon mot de passe est poulet, le md5 est 5337aff4d7c42f4124010fc66bcec881, j'envoie dans google et j'ai poulet écrit partout

    D'un manière générale, les analyse et les démonstrations de collisions sont la preuve que le md5 est sensible aux attaques autres que par force brute. C'est suffisant du point de vu cryptanalyse pour rejeter l'utilisation de cet algorithme dans des domaines liés à la sécurité. Surtout que des alternative comme SHA-156 existent.

    Donc pour une meilleure protection, cf salage.
    +1

  9. #9
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 687
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Le croyais que seul MD5 avait été cassé ?
    Autant pour moi. Après vérification, il y a des doutes sur des risques de collision mais pour le moment le sha-1 n'a pas été cassé.

    Citation Envoyé par Marco46 Voir le message
    Sinon je voulais juste dire que stocker les mots de passes en BDD tels quels c'est vraiment le minimum en terme de sécurité et c'est pas terrible. Il existe des BDD de hash qui permettent de trouver le mot en clair correspondant à tel hash.

    Donc pour une meilleure protection, cf salage.
    En effet, je n'ai pas précisé car je voulais rester simple et que c'était précisé dans l'article en lien. Mais le salage apporte une sécurité supplémentaire.

    Citation Envoyé par Marco46 Voir le message
    J'ai rien compris
    Ce que je voulais dire c'est que les fonction de hashage comme md5 et sha-1 sont sensé garantir 2 choses:
    - à partir du hash, on ne sait pas recalculer la chaine d'origine.
    - on ne sait pas obtenir deux chaines d'originales différentes qui ont un hash identique (ce qu'on appelle une collision).

    On sait trouver des collisions dans le md5, mais on ne sait toujours pas revenir au résultat d'origine autrement que par des tables précalculées.

    Dans le cas particulier du stockage de mot de passe, je ne voit pas vraiment pourquoi les collisions seraient un problème.
    Par contre c'est sur que pour d'autres usages, il est clairement a bannir.

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    Citation Envoyé par Uther Voir le message
    - on ne sait pas obtenir deux chaines d'originales différentes qui ont un hash identique (ce qu'on appelle une collision).
    je me permet un bémol "pour autant que le message à hasher soit plus court que la message hashé". Pour les message plus long, la collision est inévitable (pour un hash de 160bits et un message de 170bit, il y a donc 2^10 fois plus de message possible que de hash possible).

    Dans le cas particulier du stockage de mot de passe, je ne voit pas vraiment pourquoi les collisions seraient un problème.
    C'est là que réside le problème collision dans mot de passe = plus grande facilité de construire un mot de passe (même mauvais) qui correspond hash.
    C'est d'ailleurs plus dans la possibilité d'exploiter une collision que son existence qui pose problème (formules permettant de construire un message T2 même incohérent qui aurait un hash bien précis). Bien sur dans ce dernier cas, à la place du mot de passe toto, tu te retrouvera peut-être à tapper rvzervz&ç'"ob_%hzz!é55ùrvhéç'!1vzziuy1 pour avoir le même hash

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Pour les algorithmes de cryptage on a 3DES, AES http://en.wikipedia.org/wiki/Cryptog...y_cryptography avec une clé (mot de passe) de 128 à 256bits.
    A++

  12. #12
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par hibour Voir le message
    Pour les algorithmes de cryptage on a 3DES, AES http://en.wikipedia.org/wiki/Cryptog...y_cryptography avec une clé (mot de passe) de 128 à 256bits.
    A++
    Certes mais ce n'est pas une solution appropriée à son problème. Chiffrer un mot de passe avec une clef qui n'est rien d'autre qu'un mot de passe, c'est le problème de la poule et de l'œuf. On en sort jamais.

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Certes mais ce n'est pas une solution appropriée à son problème. Chiffrer un mot de passe avec une clef qui n'est rien d'autre qu'un mot de passe, c'est le problème de la poule et de l'œuf. On en sort jamais.
    Pourquoi?

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    parce que si tu fais

    clé = motdepasseutilisateur
    donnée = motdepasseutilisateru
    crypterAvecAlogorithmeSymétriqueX(clé, donnée)

    tu va avoir plusieurs problèmes
    1) tu as une répétition (le mot de passe est utilisé à la fois comme clé et donnée), les répétitions sont une source puissante d'attaque par cryptanalyse
    2) tu n'a plus de garantie du tout quand au collision
    3) un mot de passe utilisateur c'est en général 5 à 8 chiffre. Un cryptage comme AES c'est 128bits pour la clé. En utilisant un tel cryptage, tu ouvre un faille supplémentaire puisque tu limite volontairement l'espace de clés

    La pratique veux qu'on utilise correctement un algo de hash existant et éprouvé plutot d'inventer le sien, ceci évite des erreurs dangereuses.

  15. #15
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 687
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    je me permet un bémol "pour autant que le message à hasher soit plus court que la message hashé". Pour les message plus long, la collision est inévitable (pour un hash de 160bits et un message de 170bit, il y a donc 2^10 fois plus de message possible que de hash possible).
    En effet sur les messages longs, il est évident qu'il y aura forcément des collisions possible. L'essentiel étant qu'on ne sache pas trouver un message avec un hash identique à un message donné.

    Citation Envoyé par tchize_ Voir le message
    C'est là que réside le problème collision dans mot de passe = plus grande facilité de construire un mot de passe (même mauvais) qui correspond hash.
    Je n'arrive toujours pas à voir en quoi c'est un problème pour stoker un mot de passe. Pour essayer de calculer un un mot de passe avec un hash identique, il faudrait déjà connaitre le mot de passe d'origine ...
    Et en cas d'attaque par dictionnaire ou en bruteforce, le vrai mot de passe sera de toute façon trouvé bien avant un mot de passe en collision(car il sera bien plus long et complexe).

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    effectivement, je n'ai peut etre pas tout bien lu (on parle plus d'utiliser ces technique pour fausser des signatures) de toutes façons, on recommande d'abandonner le md5 pour sha-256, pourquoi se priver .

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    On encrypte le mot de passe avec une clé fixe sauvegardée dans la base de donnée par exemple pour ne pas le mettre en clair dans le code.

  18. #18
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par hibour Voir le message
    On encrypte le mot de passe avec une clé fixe sauvegardée dans la base de donnée par exemple pour ne pas le mettre en clair dans le code.
    Donc si je comprends bien ta démarche, pour sauvegarder un mot de passe de manière sécurisée dans une base de données, tu chiffres ce mot de passe avec une clef... que tu enregistres dans la BDD ?

    Le chiffrement ne résoud rien puisque pour chiffrer il faut une clef. Comment chiffrer la clef ayant permis de chiffrer ayant permis de ... etc ... On en sort pas.

    Le seul moyen c'est de demander à chaque utilisation du soft la saisie d'un mot de passe qui servira alors de clef et là vous pouvez chiffrer un fichier de config par exemple mais ce mot de passe sera enregistré en tant que hash avec un salt.

    Sinon en dernier recours il y a le support externe pour un certificat X.509 + clef privée mais c'est de l'artillerie lourde.

  19. #19
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Par défaut
    le principe du hash c'est justement de ne jamais décrypter le mot de passe, ce qui protège les utilisateur contre le vol de ce genre d'information par un administrateur ou une personnes trouvant le moyen de voler les bases de données.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Alors tout d'abord je suis heureux de voir que mon topic crée débat et j'en apprends bcp sur le sujet grâce à vous. Je me suis lancé dans l'élaboration du code qui me permettra d'intégrer le mot de passe crypté dans ma base mais il ne ressemble pas trop à ce que je m'imaginai

    Voilà le résultat
    voilà ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    	public void userRegistration(userSubscription user)
    	{
    		MessageDigest md;
    		String algorithm="SHA-256";
    		String hash;
     
    		Date date = new Date(System.currentTimeMillis());
    		java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    		Timestamp time = new Timestamp(sqlDate.getTime());
     
    		//Password encryption
    		try 
    		{
    			md=MessageDigest.getInstance(algorithm);
    			hash=md.digest(user.getPassword().getBytes("UTF-8")).toString();
    			System.out.println("Hash : " + hash);
    		} 
    		catch (NoSuchAlgorithmException e) 
    		{
    			System.out.println("L'algo n'existe pas !!");
    			e.printStackTrace();
    		}
    		catch (UnsupportedEncodingException e) 
    		{
    			System.out.println("L'encodage n'est pas bon");
    			e.printStackTrace();
    		}
    		//userDao.insertUserAccess(user,time);
    		//userDao.insertUserInformations(user);
    	}
    Je pensais que j'allais obtenir un hash de 64 caractères

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. crypter le mot de passe Utilisateur
    Par ibrahima lamine dans le forum VB.NET
    Réponses: 6
    Dernier message: 06/03/2011, 17h37
  2. [1.x] Crypter les mot de passe avant sauvegarde
    Par Computib dans le forum Symfony
    Réponses: 6
    Dernier message: 13/07/2010, 13h04
  3. Reinitialiser les mots de passe utilisateur d'une OU
    Par alex_m94 dans le forum Windows Serveur
    Réponses: 10
    Dernier message: 28/09/2008, 21h36
  4. Comment crypter les mots de passe avec MD5 ?
    Par Fngonka dans le forum ASP.NET
    Réponses: 19
    Dernier message: 31/07/2008, 09h48
  5. comment crypter les mots de passe?
    Par JauB dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/11/2005, 16h37

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