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

 C++ Discussion :

Quelle est la meilleur façon de gérer un mot de passe avec une bdd


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut Quelle est la meilleur façon de gérer un mot de passe avec une bdd
    Bonjour à tous.

    J'ai un soucis sur la meilleur façon de faire pour l'utilisation d'un mot de passe dans une base de données. Ce mot de passe sert pour la connexion à un serveur smtp
    Actuellement, j'ai une base de données qui comprend une table avec un champ password. La valeur est crypté suivant SHA1 de mysql (Update mytable set password=SHA1(mytext) where login='mylogin').

    J'ai un programme en C++ qui lit ce champs. Comment je peut le decrypter ?
    A-t-il une autre façon de faire ?

    Je vous remercie de votre aide.
    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    On ne décrypte pas un mot de passe, jamais ! Simplement parce qu'un mot de passe ne devrait pas être chiffré mais haché. Il n'y a donc pas de clef de chiffrement, mais seulement des méthodes de brute force pour trouver une collision (2 messages qui produise la même empreinte).

    Pour comparer 2 mots de passe, il faut comparer les 2 valeurs hachées.

    Sinon, Sha1 et dépassé ; oriente-toi vers sha3, au pire sha2 ou mieux encore des algorithmes de chiffrement symétrique comme Blowfish.

  3. #3
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Oui je le comprend bien.
    Alors comment puis je faire pour me connecter à mon serveur si je n'ai pas le mot de passe en clair ?

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par Masmeta Voir le message
    La valeur est crypté suivant SHA1 (...) Comment je peut le decrypter ?
    SHA1 est une fonction de hachage, c'est à dire qui produit une empreinte (ou "hash") qui a justement les particularités de ne pas pouvoir être inversée et d'être unique pour un mot de passe donné
    l'avantage c'est que si un pirate parvient à voler la base de données il ne peut justement pas récupérer les mots de passe en les déchiffrant simplement

    donc le principe c'est que quand l'utilisateur rentre son mot de passe, le programme crée un hash SHA1 avec le mot de passe et compare le hash avec celui qui est dans la base, et si il correspond on est sûr que le mot de passe entré était le bon vu qu'il n'y a que le bon mot de passe qui peut donner le bon hash

    Citation Envoyé par jo_link_noir Voir le message
    Sinon, Sha1 et dépassé ; oriente-toi vers sha3, au pire sha2 ou mieux encore des algorithmes de chiffrement symétrique comme Blowfish.
    c'est un vrai mauvais conseil ça, pourtant tu l'as fait remarquer juste avant, on ne chiffre pas un mot de passe en base on le hash, Blowfish est une fonction de chiffrement, il vaut encore mieux stocker les mots de passe en SHA1 qu'en Blowfish, si l'attaquant arrive à casser 1 mot de passe (et donc à trouver la clé de chiffrement, sur un mot de passe faible par exemple, dans l'intégralité d'une base de données ça doit pouvoir se trouver) tous les mots de passe sont compromis, tandis qu'exploiter les collisions sur SHA1 reste encore très complexe techniquement
    mais d'accord avec le fait que SHA1 n'est plus considéré comme sûr pour autant, privilégier SHA512 autant que possible

  5. #5
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Merci pour ses explications.
    J'utilise SHA512 pour permettre la connexion de l'ihm web avec la base de données. Sur le principe, je suis tout a fait d'accord.
    Mon souci est que j'ai une partie de configuration pour permettre de me connecter à un serveur smtp. J'ai donc le couple login - mot de passe.

    Mon application est une application en ligne de commande pour une automatisation de tâche. Il n'y a aucun ihm.
    Ce couple je le lis avec mon application c++ pour me permettre de me connecter au serveur smtp. Pour l'instant je ne voie que la solution de l'encrypt-decrypt.
    Y a t il d'autre solution ?

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    @BufferBob: Effectivement, je me contredis à propos du chiffrement :/. Il me semble quand même que trouver la clef pour Blowfish passe par une méthode de brute force, donc potentiellement long et ne compromet pas l'ensemble de la bdd avec des salts aléatoires. D'ailleurs, blowfish fait partie des algos proposé par la fonction crypt.

    Pour en revenir à la question initiale, ne faut-il pas utiliser des algos genre AES et déchiffrer avec le mot de passe utilisateur haché ? C'est plus une proposition qu'une réelle solution, je suis intéressé par la problématique.

  7. #7
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par jo_link_noir Voir le message
    Il me semble quand même que trouver la clef pour Blowfish passe par une méthode de brute force, donc potentiellement long et ne compromet pas l'ensemble de la bdd avec des salts aléatoires.
    prenons un cas concret, si l'utilisateur a choisi mettons "love" comme mot de passe et que "love" est le premier mot de passe du dictionnaire de l'attaquant ça prendra quelques millièmes de secondes pour trouver la clé (le temps de chiffrer 1 mot de passe et le comparer), clé qui sera valide pour tous les autres mots de passe ensuite, et les salts ne serviront plus à rien

    Citation Envoyé par jo_link_noir Voir le message
    D'ailleurs, blowfish fait partie des algos proposé par la fonction crypt.
    ok oui, en fait c'est l'algo bcrypt qui est utilisé, et est basé sur Blowfish, mais ça n'est pas tout à fait pareil et c'est une implémentation spécifique (idem pour les hash DES-based historiques)

    Citation Envoyé par jo_link_noir Voir le message
    Pour en revenir à la question initiale, ne faut-il pas utiliser des algos genre AES et déchiffrer avec le mot de passe utilisateur haché ?
    hum.. je vois pas trop dans quel sens tu tournes ça, mais bon dans l'absolu si y'a vraiment pas d'autre moyen ben chiffrer en symétrique... et advienne que pourra, la feature primant souvent sur la sécurité

    Citation Envoyé par Masmeta Voir le message
    Mon souci est que j'ai une partie de configuration pour permettre de me connecter à un serveur smtp. J'ai donc le couple login - mot de passe.
    (...)
    Ce couple je le lis avec mon application c++ pour me permettre de me connecter au serveur smtp.
    à vrai dire je comprends pas ce dont tu parles, une "partie de configuration pour permettre de se connecter"
    au minimum j'ai du mal à comprendre l'enchainement des opérations, notamment la question du timing, pourquoi une application externe/en C++ a besoin d'aller après coup, lorsque l'utilisateur n'est plus connecté se connecter sur un smtp, manifestement externe lui aussi
    quand l'utilisateur se connecte (ou s'enregistre) tu disposes à cet instant t de son login/mdp, tu ne pourrais pas en profiter pour effectuer toutes les tâches d'un coup par exemple ?

  8. #8
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Un AES peut très bien faire l’affaire pour chiffrer de manière réversible le mot de passe. Le problème est alors la sécurité de la clé. En effet, si la clé est compromise, l’ensemble des mots de passe sont compromis.

    Une solution peut être d’utiliser une clé par utilisateur, et de protéger cette clé par une passphrase spécifique à l’utilisateur. Typiquement, si tu as déjà dans ton application un login / mdp spécifique à l’utilisateur, c’est éventuellement possible. Évidemment, si c’est une tâche de back-end, elle n’aura pas le mdp utilisateur et donc ce n’est pas possible de procéder ainsi.

    Idéalement, la clé de chiffrement et les données chiffrées devraient résider sur des serveurs différents (pour compliquer la tâche d’un attaquant).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/10/2008, 21h29
  2. Réponses: 10
    Dernier message: 25/09/2008, 08h49
  3. Réponses: 16
    Dernier message: 18/08/2008, 18h29
  4. Quelle est la meilleure façon de lisser un signal?
    Par regress dans le forum Traitement du signal
    Réponses: 16
    Dernier message: 06/02/2008, 12h36
  5. Réponses: 3
    Dernier message: 09/05/2006, 15h16

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