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

Python Discussion :

Chiffrement Déchiffrement string


Sujet :

Python

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Par défaut Chiffrement Déchiffrement string
    Bonjour,

    je fais un programme qui contient une fonction d'envoi de mail.
    Si le serveur SMTP demande authentification, je rentre login+mdp.
    Afin de sauvegarder cette config, je stocke login+mdp dans un fichier .ini que je gère avec ConfigObj (je sais, c'est pas secure, mais le soft n'est pas encore en prod )

    Donc ça fonctionne niquel.
    Je cherche à chiffrer/déchiffrer le mot de passe.

    Grâce à hashlib, j'arrive à le chiffrer, et dans mon .ini je vois bien une chaine de caractères, donc mon mdp est bien chiffré.

    Maintenant, mon bot d'envoi de mail a besoin de déchiffrer ce mot de passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                if auth_value == "True":
                    server.login(login_value, pass_value)
                else:
                    pass
    Car du coup, il essaie de se loger avec mon login et mon mot de passe : a543d1q5fq3f15 (au pif).
    J'ai l'impression que ce que je demande n'est pas faisable (on ne peut déchiffrer un mot de passe ?, seulement comparer deux chaines chiffrées ?)

    J'imagine que même si ce n'est pas possible, il y a une façon de contourner, je ne dois pas être le seul à vouloir stocker un mot de passe chiffré pour le réutiliser. Quelle est la bonne pratique pour chiffrer(crypter?)/stocker/Déchiffrer(Décrypter?)

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Par défaut
    Je pense avoir résolu mon problème.

    Mon principal but, n'étant pas un parano de la sécurité, était simplement de rendre le mot de passe dans mon fichier .ini illisible par un user lambda (un humain quoi ).

    En utilisant base64, j'arrive exactement à ça.
    "Crypter" (ce n'est sûrement pas le terme exact) le mot de passe dans mon fichier .ini, quelqu'un qui l'ouvre ne pourra pas utiliser le mot de passe livré comme ça.

    "Décrypter" lors de l'envoi du couple login/mdp pour m'authentifier sur mon serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    encodepwd = base64.b64encode("string")
    donne : Qzdfq5z4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decodepwd = base64.b64decode("Qzdfq5z4")
    donne : string

    Si quelqu'un à une solution plus sécurisée, je la veux bien, car j'imagine que c'est une faille énorme, je n'y connais pas grand chose en crypto, si cela en est ... En attendant je peux avancer sur mon soft.

    Merci

  3. #3
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Une fonction de hashage n’est pas la même chose qu’une fonction cryptographique.

    La première crée une sorte de "signature" correspondant aux données qui lui sont fournies, mais de façon qu’il soit impossible (normalement*!) de reconstituer les dites données à partir du hash. Cela permet par exemple à un site web de ne pas stocker un mot de passe, mais seulement sa signature. Lorsque l’utilisateur revient sur le site et s’identifie, l’appli web n’a qu’à comparer le hash du mot de passe fourni avec celui associé au compte de l’utilisateur, s’ils sont identiques, c’est que le mot de passe est le bon…

    La fonction cryptographique, elle, doit permettre la reconstitution parfaite des données, à partir du chiffre et de la clé. Le problème du base64, c’est que c’est de l’encodage, pas de la cryptographie (pas de clé), donc le premier petit malin venu le «*cassera*» sans peine… Les seuls trucs «*sûrs*», c’est pgp et compagnie (les chiffres historiques genre caesar sont crackables en quelques secondes, aujourd’hui…). Mais il faudra quand même que ton programme fournisse (et donc stocke) le mot de passe pgp… C’est le serpent qui se mord la queue (variante récursive).

    Avis qui vaut ce qu’il vaut, je n’ai rien d’un expert dans ce domaine*!

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Avis qui vaut ce qu’il vaut, je n’ai rien d’un expert dans ce domaine*!
    Menteur

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Par défaut
    Merci de ta réponse, mais je ne me sens pas de me lancer dans la crypto, j'ai un soft à finir et je vais pas me lancer dans l'étude de la crypto, même si je suis sûr que ça m'intéresserai.

    Concernant mon mot de passe en base64, effectivement, j'ai tapé décoder base64 dans google et le premier site m'a retrouvé mon mot de passe. Sécurité 0 à partir du moment ou l'user sait que c'est encodé en base64.

    Donc, avec mes maigres connaissances, et ma non-paranoïa en sécu , j'ai "créé" ma propre sécurité, en encodant avec base64, et en ajoutant à ma chaîne des caractères choisis dans une liste avec le module "Random", comme ça c'est pas possible de le décoder avec base64 :p

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Si quelqu'un à une solution plus sécurisée, je la veux bien, car j'imagine que c'est une faille énorme, je n'y connais pas grand chose en crypto, si cela en est ... En attendant je peux avancer sur mon soft.
    La sécurité est une construction de parades par rapport à des risques qu'on a +/- bien identifie. Ici, j'ai l'impression que le "risque" se résume à la crainte de se faire montrer du doigt parce que le mot de passe est écrit "en clair" dans le fichier de configuration.

    Stocker username et mot de passe "ailleurs" pourrait être une bonne idée ne serait-ce que pour écrire dans un premier temps les fonctions adhoc qui pourraient dans un premier temps se résumer à emballer de base64.b64encode / decode.

    Savoir s'il faut faire plus mérite d'être discuté ouvertement avec "le client", enfin la personne qui pourrait subir les dommages d'un "vol" ou d'une utilisation "hors contexte" du username/mot de passe.
    A défaut, ils pourraient se retourner contre vous en cas de problème et ce n'est certainement pas ce que vous souhaitez.

    Après tout dépend du contexte. Si c'est un sujet sensible, il devrait exister dans l'entreprise sinon un service au moins quelques règles de sécurité à "appliquer" pour ce cas particulier.

    Elles pourraient prescrire le stockage du fichier contenant ces informations dans un répertoire/fichier avec accès restreint, voire leur encodage avec des algos plus costauds.

    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Par défaut
    Je n'avais absolument pas pensé à l'aspect juridique de la chose, merci d'avoir aborder le sujet.

    Pour l'instant je n'ai pas de craintes, car ce n'est pas un projet que je fais dans le cadre de mon métier, mais à titre perso. Mais j'espère qu'un jour je pourrai l'utiliser en entreprise.

    Quelle librairie me conseillez vous d'utiliser pour le cryptage de texte, ou même de fichier, sachant que je développe sous Windows, pour du Windows.

    Merci encore.

    EDIT : Sinon, une question bête ... Comment font les autres ? Je pense aux logiciels de sauvegarde, qui propose de retenir le mot de passe pour se connecter à une ressource distante, ce genre de choses. Comment doit-on stocker un mot de passe ?

  8. #8
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Moi a la volee, je dirai (en suivant le modele de django).
    Chaque version de l'appli contient une "cle", genre une sorte de "uuid" (conf. google).
    Et donc, pour sauvegarder le mot de passe, on le passe par exemple a un algorithme de la famille de vigenere avec comme cle le cle propre a la version[copie] de l'appli. Les "uuid" etant plutot oriente unique (par definition), ca devrait etre pas evident de recupere.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par Kexian_ Voir le message
    Quelle librairie me conseillez vous d'utiliser pour le cryptage de texte, ou même de fichier, sachant que je développe sous Windows, pour du Windows.
    B64 est un bon début ;-)

    Toutes les biblio. ne font que transformer des "cypher" en "texte" et réciproquement. Vous n'avez qu'a mettre en œuvre de façon raisonnable.

    Ce qui n'est pas très compliqué puisqu'il y a des bibliothèques Python standard ou d'extension qui sont open source et donc viennent avec leur batterie de tests qui sont fort utiles pour les faire fonctionner.
    Note: Il est quand même préférable de rester dans le "standard" Python pour ne pas avoir à installer un truc juste pour çà.

    Voir par exemple test_rsa

    En plus du client vous risquiez il y a encore quelque temps d'être em... par la police (cut&paste: wikipedia)
    L'usage de PGP (Pretty Good Privacy), un des premiers logiciels de chiffrement disponibles sur l'Internet, a longtemps été interdit en France, car considéré jusqu'en 1996 comme une arme de guerre de deuxième catégorie. La législation française s'est ensuite assouplie, et le chiffrement symétrique avec des clés aussi grandes que 128 bits a été autorisé. Certains logiciels, comme GNU Privacy Guard, peuvent être utilisés avec n'importe quelle taille de clé symétrique. Enfin, la Loi pour la confiance dans l'économie numérique du 21 juin 2004 a totalement libéré l'utilisation des moyens de cryptologie, en revanche leur importation ou exportation est soumise à déclaration ou autorisation4.
    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Citation Envoyé par afranck64 Voir le message
    Moi a la volee, je dirai (en suivant le modele de django).
    Chaque version de l'appli contient une "cle", genre une sorte de "uuid" (conf. google).
    Et donc, pour sauvegarder le mot de passe, on le passe par exemple a un algorithme de la famille de vigenere avec comme cle le cle propre a la version[copie] de l'appli. Les "uuid" etant plutot oriente unique (par definition), ca devrait etre pas evident de recupere.
    Ca déplace le problème de sécurité sur cette clé.

    Pour sécuriser ce genre d'infos, les applis où tu n'as pas accès au source utilisent parfois (à tort ?) une fonction de cryptage/décryptage "maison" (plus parfois une clé aléatoire générée à l'install) qu'ils considèrent sûr car les utilisateurs non pas accès au source ... si un hacker veut vraiment il arrivera à retrouver la fonction de décryptage ...

    - Une bonne solution est que l'application protège les secrets avec un secret global qu'elle ne persiste pas. Au démarrage de l'application ou lors du 1er accès à un secret en lecture/écriture après le démarrage de l'application, on demande à l'utilisateur de saisir le secret (global) qui protège les datas (exemple: gnome-keyring/secure storage d'eclipse).
    - A défaut, on peut pour linux déporter le problème en restreignant les droits sur le fichier/dossier (exemple: les droits du répertoire .ssh et de son contenu sont limités à l'utilisateur sous linux)

  11. #11
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Citation Envoyé par ZZelle Voir le message
    Ca déplace le problème de sécurité sur cette clé.

    Pour sécuriser ce genre d'infos, les applis où tu n'as pas accès au source utilisent parfois (à tort ?) une fonction de cryptage/décryptage "maison" (plus parfois une clé aléatoire générée à l'install) qu'ils considèrent sûr car les utilisateurs non pas accès au source ... si un hacker veut vraiment il arrivera à retrouver la fonction de décryptage ...
    Que la fonction de decryptage soit connue, n'est pas vraiment le pire. Comme tu le dis, le soucis c'est le lieu de cette "source".
    Dans mon cas (en suivant le tendre django ), Un UUID est genere pour chaque projet lance. C'est vrai que le serveur et les est apps restant chez moi, il n'y a pas de soucis. Il pourrait donc comme tu le dis recuperer Le mot de passe de l'admin de l'appli, au premier demarrage et s'en servir pour securiser la cle. Mais cette fois, juste en utilisant du hashage et la, on rejoin ce que dit wiztricks et donc autant mieux se gere une petit biblio toute faite sur le net

    @wiztricks on pourrait me causer des broutilles pour avoir utiliser les UUID? (128 bits)
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par afranck64 Voir le message
    @wiztricks on pourrait me causer des broutilles pour avoir utiliser les UUID? (128 bits)
    Le but de ces lois était de ne pas trop compliquer le boulot de la police.
    Dans votre cas, c'est trop simple (pour la police).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Exemple de chiffrement-déchiffrement 128 bits
    Par n5Rzn1D9dC dans le forum Contribuez
    Réponses: 2
    Dernier message: 16/05/2025, 02h28
  2. Chiffrement/déchiffrement très simple
    Par OphyTe dans le forum Sécurité
    Réponses: 4
    Dernier message: 11/12/2014, 00h12
  3. [C#] Chiffrement déchiffrement (RSA)
    Par mybetacompany dans le forum Débuter
    Réponses: 3
    Dernier message: 09/01/2014, 11h58
  4. chiffrement/déchiffrement fichier exercice du tutorial
    Par ghaddou dans le forum Débuter
    Réponses: 3
    Dernier message: 01/04/2012, 14h44
  5. Chiffrement et déchiffrement asymétrique
    Par Tristan Zwingelstein dans le forum Framework .NET
    Réponses: 2
    Dernier message: 23/11/2009, 08h56

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