[..] Sécurité, stockage des clefs?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Mareck
Niveau 1
Niveau 1
Messages : 4
Enregistré le : sam. 19 juin 2010 10:14
Status : Hors ligne

[..] Sécurité, stockage des clefs?

#1

Message par Mareck »

Bonjour,

Je fais appel à vous car j'ai besoin d'un coup de main pour le stockage des clefs. Je souhaite créer une application stockant les mots de passe et nom de compte et qui permet de les récupérer en clair, la dessus je n'ai pas de soucis j'utilise le code de Tlem que j'ai trouvé sur le forum

Code : Tout sélectionner

 #include <AES.au3>
$Key = 'abcdefghijklmnop'
$message = 'Ma chaine '

$ChaineCryptee = _AES_Encrypt($Key, $message)
MsgBox(0,"Chaine Cryptée", $ChaineCryptee)

$ChaineDecryptee = BinaryToString(_AES_Decrypt($key, $ChaineCryptee))
MsgBox(0,"Chaine Décryptée", $ChaineDecryptee)
La clef est dans le fichier .au3 que je lance. Maintenant pour mon programme, si je fais un profil autoitscript par exemple avec mon nom de compte et mon mot de passe et je de saisis la clef dans un champ, cette clef est stockée ou? Comment faire pour que la clef soit dissimulée? (au départ il n'y a aucune clef dans le au3)

Merci!
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#2

Message par ZDS »

Bonjour,

Ta question n'est pas très explicite notamment cette histoire de profil autoitscript( de quoi tu parles?). Mais sinon en ce qui concerne le pass à saisir dans un champ dans lequel tu saisis le mot de passe (dans une GUI maison?), tu peux protéger son affichage en faisant "$pass = GUICtrlCreateInput("",5,5,100,20,$ES_PASSWORD)", oublie pas le "#include <EditConstants.au3>" juste avant.
Ensuite pour cette histoire de clef stockée, elle ne l'est pas au sens propre du terme, elle sera stockée dans la variable $key comme tu l'auras implémentée et sera détruite à la fermeture du script. A ma connaissance tu as pas moyen de lire une variable d'un script depuis un autre script (c'est dailleurs pour cette raison qu'il n'y a pas de mode de débuggage sous AutoIt).
Enfin, si tu cherches à stocker la clef quelque part pour pouvoir faire de la vérification, enregistre la en dur où tu veux mais pas en clair (dis moi pas qu'c'est pô vrai ^^) en MD5 ou SHA-1/256. Voila un script que j'utilise pour encrypter/décrypter:

Code : Tout sélectionner

#include-once

#include <Crypt.au3>

#Region Encryptage/décryptage des données
Global Const $SALT_Value       = "¶" ; sert surtout pour la cohérence

Func autoencryptage($data)
    Return String(_Crypt_HashData($SALT_Value&$data,$CALG_MD5))
EndFunc

Func encryptage($data, $clef)
    Return String(_Crypt_EncryptData($SALT_Value&$data, $clef, $CALG_AES_256))
EndFunc

Func decryptage($data, $clef)
    Local $valeur = String(BinaryToString(_Crypt_DecryptData($data, $clef, $CALG_AES_256)))
    If StringLeft($valeur,1) = $SALT_Value Then Return StringTrimLeft($valeur,1)
    Return ""
EndFunc
#EndRegion
 
A bientôt!
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Mareck
Niveau 1
Niveau 1
Messages : 4
Enregistré le : sam. 19 juin 2010 10:14
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#3

Message par Mareck »

Bonjour et merci bien de cette réponse.

J'essaye de mieux expliquer:

Le but est de créer un .exe qui gère mes différents nom de compte et mot de passe dans ce que j'ai appelé des profils (Forum AutoIt, msn, priceminister, etc.) et pourquoi pas m'en servir directement pour m'authentifier...

Voila ce que j'ai pour le moment:

Code : Tout sélectionner

 GUICreate("test",400,300)
GUISetState(@SW_SHOW) 
$inputprofil = GUICtrlCreateInput ("",10,25,140,18)
$inputnom =  GUICtrlCreateInput("",10,50,140,18,$ES_PASSWORD)
$inputpwd = GUICtrlCreateInput("",10,75,140,18,$ES_PASSWORD)
$creer = GUICtrlCreateButton("Creer",10,100)
$choixprofil = GUICtrlCreateCombo("",10,125,140)
GUICtrlSetData($choixprofil,FileRead("profil.txt"))
$lire = GUICtrlCreateButton("Lire",10,150)

    While 1
        $msg = GUIGetMsg()
    Switch $msg
    Case $creer
        $Key = 'AutoItpwdmaurice'
        $message = 'Ma chaine '

        $profil = GUICtrlRead ($inputprofil)
        $nom = GUICtrlRead($inputnom)
        $pwd = GUICtrlRead($inputpwd)
        $nomaes = _AES_Encrypt($Key, $nom)
        $pwdaes = _AES_Encrypt($Key, $pwd)
        FileWrite($profil & ".txt", $nomaes & "." & $pwdaes)
        FileWrite("profil.txt","|"&$profil & ".txt")
        GUICtrlSetData($choixprofil,fileread("profil.txt"))

    Case $lire
        $Key = 'AutoItpwdmaurice'
        $decryptprofil = GUICtrlRead($choixprofil)
        $split = StringSplit(FileRead($decryptprofil),".")

        $splitnom = $split[1]
        $splitpwd = $split[2]

        $nomclair = BinaryToString(_AES_Decrypt($Key, $splitnom))
        $pwdclair = BinaryToString(_AES_Decrypt($Key, $splitpwd))
        msgbox(0,"Vos informations", "Votre nom de compte est:" & $nomclair & @CRLF & "Votre mot de passe est:"& $pwdclair)
        Case $GUI_EVENT_CLOSE 
            Exit
    EndSwitch
WEnd
Mais en écrivant ce message... Je viens de me rendre compte que ma question est totalement stupide... Et je viens de comprendre, que suis je bête... ><

La clef de chiffrement n'est évidemment pas stockée vu que je veux la rentrer à la main quand je veux déchiffrer un fichier texte...
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#4

Message par timmalos »

Je veux revenir sur ce qu'à dit ZDS, si Autoit peut communiquer avec ses variables comme tous les langages, il suffit d'utiliser ce qu'on appelle des pointeurs, c'est un autre niveau que ce que vous savez faire par contre, sauf si vous utilisez l'UDF NomadMemory renommé recemment Memory je crois, il vous permet de faire ca.

Par contre vu que ce 'nest pas l'objet de la question, c'est un peu inutile ici. Je sais pas si tu t'es mal exprimé, mais on ne crypte PAS en sha1 & md5, on hash, c'est IRREVERSIBLE, lui veut encrypter en AES ce qui est une bonne idée, il peut alors stocker simplement son mdp crypté avec FileWrite et le recuperer quand il veut.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#5

Message par ZDS »

Pour les pointeurs, oui, mais ce n'est pas une véritable variable au sens informatique, mais un lien vers une zone mémoire, nous sommes d'accord. D'où le fait qu'aucun de nous n'avait tort.

Pas contre, pour le SHA/MD5 et autre, il s'agit bel et bien d'un cryptage/chiffrement; plus spécifiquement d'un hashage ou d'un cryptage non bijectif, mais un chiffrement tout de même (faut pas croire tout ce qu'on trouve sur Wikipedia ^^). D'où l'idée de stocker la CLEF en MD5, pas les données, je m'étais bien exprimé.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Mareck
Niveau 1
Niveau 1
Messages : 4
Enregistré le : sam. 19 juin 2010 10:14
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#6

Message par Mareck »

Je ne sais pas trop si je peux, car en général c'est une question par sujet mais avant de passer en résolu... Je suis entrain de faire la même chose avec des Input pour saisir la clef manuellement... Je viens de remarquer que si j'entre moins de 16 caractères le résultat ne fonctionne pas, est ce une spécification d'AES?

Edit: Enfaite ça dépend de la clef que je rentre...Je dois avouer ne pas comprendre
Edit2: je teste avec la fonction _Crypt!
Modifié en dernier par Mareck le sam. 19 juin 2010 17:36, modifié 2 fois.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#7

Message par ZDS »

Normalement non, j'ai des pass plus court que ça en AES et ça fonctionne.
Tu as essayé avec les fonctions que je t'ai envoyé dans mon premier message? J'ai eu des soucis du même style avec _AES_Encrypt, je suis vite passé aux fonctions _Crypt de <Crypt.au3> avec AutoIt 3.3.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Mareck
Niveau 1
Niveau 1
Messages : 4
Enregistré le : sam. 19 juin 2010 10:14
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#8

Message par Mareck »

Merci voila j'utilise _Crypt et je spécifie $AES_256 et je n'ai aucun problème sur mes clefs. :D

Je vous remercie, je suis content d'avoir enfin une véritable sécurité sur des mots de passe dans mes fichiers txt. :oops:
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#9

Message par Iste »

Je confirme que le hashage n'est pas du cryptage.
Le chiffrement, parfois appelé à tort cryptage[1], est en cryptographie le procédé grâce auquel on souhaite rendre la compréhension d'un document impossible à toute personne qui n'a pas la clé de (dé)chiffrement.
(apres on peu jouer sur les mots, comme vous l'avez dit wikipedia n'est peu etre pas tres juste la dessus)

Le hash MD5 par exemple (puisque c'est celui que je connais le mieux) permet uniquement d'obtenir une sorte d'empreinte digital numérique d'une donnée.
On s'en sert souvent pour coder les mot de passe dans les bases de données car il est justement impossible d'en déduire le mot de passe d'origine, par contre on peut tres bien comparer le hash du mdp en mémoire avec le hash du mdp envoyé.

En claire, ca ne sert pas a grand chose de stoker le hash md5 de la clef de cryptage, sauf a le comparer avec le hash de la clef proposée par l'utilisateur pour lui éviter de perdre son temps a tenter de décrypter les données.. Mais on perd un peu en sécurité, car le md5 est "cassé"

Bref bien que le problème de Mareck semble résolu et qu'on lui pollu un peu son topic, j'aimerai bien entendre votre point de vu de manière plus détaillé.
Signez ici
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#10

Message par timmalos »

@ZDS, vous ecrivez "A ma connaissance tu as pas moyen de lire une variable d'un script depuis un autre script " Or si c'est possible,donc vous vous etes bien trompé, pointeur ou pas, avec n'importe quel langage que ce soit Autoit ou le C c'est la meme méthode, les pointeurs, qui sont des adresses mémoire
(Par ailleurs, le pointeur est bien une variable :
developpez.com a écrit :Un pointeur est aussi une variable, il est destiné à contenir une adresse mémoire, c'est à dire une valeur identifiant un emplacement en mémoire. Pour différencier un pointeur d'une variable ordinaire, on fait précéder son nom du signe '*' lors de sa déclaration.
forum a écrit :Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné.
)


Concernant le hachage:

De plus, comme l'indique Iste, le md5 / sha1 est bien un hachage, a la difference du cryptage, et vu la demande de Mareck ce n'est pas ca qu'il veut, il a besoin de pouvoir récupérer la mot de passe en clair après son enregistrement en dur, ce qui est impossible (theoriquement avec md5 et sha1) avec une fonction de hachage.
md5 a été cassé, et sha1 partiellement (http://www.journaldunet.com/solutions/0 ... _sha.shtml)

En gros, la seule méthode pour déchiffrer un HASH est de crypter un ensemble de chaînes de caractères. Ainsi, chaque chaîne cryptée sera comparée au HASH recherché jusqu'à trouver la correspondance. Il existe principalement 3 méthodes qui sont la comparaison par :

- Brut force, qui consiste à générer toutes les combinaisons possible d'une chaîne pour une longueur donnée. Cette méthode est très longue.

- Dictionnaire, qui consiste à utiliser les mots d'un dictionnaire. C'est beaucoup plus pertinent, mais ça demande beaucoup d'espace et de temps.

- Rainbow table, qui consiste à la recherche d'empruntes. c'est un bon compris entre le temps et l'espace, mais cela reste tout de même très long.

En gros, md5 peut etre cassé (et PAS dans tous les cas, mais la je ne tiens pas compte du brute-forcing) grace a des faiblesses dans l'algorithme, et SHA1 a suivi le meme chemin il n'y a pas très longtemps, en gros dans certaines conditions on peut relever des empreintes qui se repetent dans la chaine haché, ainsi on a des collisions qui apparaissent, ce qui permet de dehasher le mot. L'article ci-dessus explique bien la méthode.

Mais quelques soient les algorithmes, on utilise de plus en plus des attaques par dictionnaires / Bruteforcing avec l'avancée des ordinateurs et ces méthodes donnent de très bon resultats avec les mots de passes courants (Pizza, azerty,1234, bref vive le francais moyen) donc les algorithmes doivent toujours avoir une longueur d'avance, c'est le cas avec Sha1 qui est devenu Sha 512 et meme Sha 756 qui limite fortement (pour l'instant) les attaques par dictionnaire et brute-forcing ou encore RSA (C'est un chiffrement que vous connaissez car c'est l'algorithme utilisé sur vos cartes - bleues) qui est un cryptage cette fois ci basé sur les nombres premiers, ainsi on recherche sans cesse des nombres premiers les plus grands possibles tandis que les hackeurs ont toujours une heure de retard ;) (Pas toujours, CF les 'YesCard' sur google)

http://fr.wikipedia.org/wiki/YesCard
http://fr.wikipedia.org/wiki/SHA-512
http://ftp-developpez.com/nicolasj/tablehachage.pdf
http://www.autoitscript.com/forum/index ... opic=21010
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#11

Message par ZDS »

[Pas faux, faudrait séparer la discussion du topic, c'est plus trop trop en rapport ^^]

Pour les pointeurs/mémoire, je suis pas tout à fait sur de ce que j'avance donc je vous fait confiance, mais pour la différence chiffrement/hachage (qui n'en est pas une) ...

Pour le fait de ne pas considérer le hachage comme un chiffrement, c'est un peu trollesque (même de ma part). Un chiffrement se caractérise par un algorithme de codage et un algorithme de décodage. La clef n'est qu'un morceau de l'algo qui permet aux gens de parler de système symétrique ou asymétrique comme le RSA. Ça répond aux caractéristiques de toute fonction de hachage. Ne pas savoir comment décoder ne veut pas dire que ça n'est pas possible (la preuve avec les méthodes des courbes elliptiques et approximations qui ont permit de "casser" le MD5, même si ce n'est pas le cas, je reviens là dessus juste après).

Pour l'empreinte digital, oui, c'est le principe d'une fonction de hachage. Etant donné que potentiellement, deux mots différents peuvent avoir un hash égal (donc pas de bijection), c'est encore plus difficile de retrouver ses petits. Mais le hachage n'en reste pas moins un chiffrement (non bijectif), car dans ce cas sinon, _stringEncrypt($message, $message) n'en est pas un non plus, car il y a pas non plus là de clef de décodage? En fait si, mais c'est le message lui même, donc ca ne sert plus à rien de décoder puisque si on sait le décoder, on sait la clef sans message et le message sans la clef, non? ^^ le principe du MD5 bizarrement est le même...
Si en contre-exemple on évoque le fait qu'il n'y pas d'algo de déchiffrement, c'est faux, il y en a un et il en est le plus simple de tous, retourner la clef (qui est elle même le message, vous vous en rappelez?). Si en autre contre-exemple on évoque que la clef ou l'algo de chiffrement sont différents ou inconnus de la clef ou l'algo de déchiffrement, c'est justement très heureux et très bien joué car dans ce cas on parle de système asymétrique. Et en dernier contre-exemple on parle du fait qu'il n'y ait pas de clef de chiffrement pour le MD5, c'est faux (je n'arrive pas à remettre la main sur le post autoitscript.com, mais tellement vieux que je ne le retrouve plus, dès que je retrouve ça dans les archives de mes progs, je poste ça) : une chaine de longueur inimaginable sert de base à l'algorithme de passage de l'algorithme sur un message, c'est le principe même d'une clef, de paramétrer un algorithme pour qu'il fasse bien son travail. Ce n'est pas le fonctionnement premier, mais cette super-longue-clef peut être considérée comme une clef publique, et la clef privée perdue corps et bien, l'algorithme de hachage devenant de ce fait comme un égal d'un RSA paramétré dont le propriétaire de la clef privée aurait emporté son secret dans la tombe.

Donc la fonction f(x) définie sur R, qui a x associe { 1 si x est un décimal, 0 sinon } est toujours une fonction, même si elle sort de l'ordinaire, la stéganographie qui cache un mot dans une encyclopédie triée et indexée est une stéganographie, et le chiffrement qui a un mot $message le code en un mot $message sans le changer, est un chiffrement. Et donc les algos de chiffrement qui sortent de l'ordinaire n'en restent pas moins des algos de chiffrement.

Par contre, pour cette histoire de "cassage", on ne sait toujours pas casser LE MD5, tout ce qu'on a trouvé, c'est uniquement une façon plus rapide de faire du brut-force, et d'économiser des calculs inutiles en faisant de l'approximation statistique sur les valeurs potentiellement recherchées. Donc pas une véritable façon de le péter comme on le fait sur du RSA avec les méthodes mathématiques récentes de factorisation des grands nombres. Mais je suis d'accord, le fait que ça ne soit plus aussi sécurisé m'a fait abandonner son utilisation pour mes projets perso contenant des données sécurisées; un encodage en AES d'un message en donnée et en clef (un autoencryptage en somme) est suffisant, il se casse de la même manière mais ne se fait pas au même rythme pour un brut-force (plus lent de faire les calculs) ni au même rendement (apparemment la similitude des données est moindre, sans aucune preuve).

Voila, ça reste à vérifier, mais pour la sémantique, le hachage est un algorithme de chiffrement. Et ce n'est pas parce que Wikipedia dit le contraire en disant qu'on définit une porte au fait qu'il y ait une poignée, qu'il ne peut pas exister de porte sans poignée. Et pour juste en rajouter une couche sur WP, c'est une bonne idée le coup de l'encyclopédie collective, mais "C'est pas parce qu'ils ont tous tort qu'ils finiront par avoir raison" (ce n'est pas la locution d'origine, mais c'est exactement l'effet que fait WP avec le temps).

A bientôt!

PS: je ne parle pas des méthodes de cohérence des clefs, qui deviennent carrément inutiles dès qu'il s'agit de mots intelligibles (comme tu le dis, pizza ou 1234, faut les oublier), mais uniquement d'algos. Juste de brutforce ou de bijection, les deux seules façons de casser un cryptage à tous les coups.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Sécurité, stockage des clefs?

#12

Message par Tlem »

Sinon, pour faire plus simple et sans ré-inventer la roue; il y a ceci :
http://keepass.info/
Compatible avec une très grande majorité d'OS ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre