CRYPTER ET DÉCRYPTER UN HASH

shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014 - 20 mars 2013 à 17:27
aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014 - 15 avril 2013 à 14:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/55040-crypter-et-decrypter-un-hash

aspkiddy Messages postés 38 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 15 janvier 2014
15 avril 2013 à 14:50
Est ce que c'est la dernière version, corrigée et rectifiée ?

merci
rayman223 Messages postés 24 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 7 avril 2013
7 avril 2013 à 19:49
Pour la ligne 36 et 37 celà permet d'être sur que les séparateurs se se trouvent pas déjà dans le chaine.

Alors, je devrais faire le hash à la fin et non au début.
Rectification quant à la longueur de base 2 du hash: Étant donné que ce n'est pas le cas pour sha1 par exemple, je dirais plutôt que la longueur est exotique et aléatoire dans le cas présent.
- Les instructions lignes 36-37 n'ont aucune utilité.
- La "chaine" finale n'a pas une longueur de base 2 + on a les séparateurs et sels en clair, ce qui les rends aisément identifiables.
- Pourquoi mélanger rand() et mt_rand() ?

Bref, si je vole une table avec les passwords, je lis 3-4 lignes à la recherche d'un motif répétitif, je fais un sed pour les virer et je lance un bruteforce (ici, ce sera compliqué vu que c'est du sha512)

Non, chiffrer un hash n'a aucune utilité, surtout de cette manière.

Une façon simple de rendre un hash théoriquement incassable et sans aucun sel, c'est de hasher plusieurs fois consécutives la chaîne (2 suffira largement). On a une information en moins à stocker (le sel) et ça rends le hash théoriquement incassable.

Et parler de hash unique, c'est pareil que de dire que personne d'autre n'a le même "Prénom NOM" que moi: c'est absolument faux par nature.
Optitech Messages postés 134 Date d'inscription samedi 19 octobre 2002 Statut Membre Dernière intervention 3 janvier 2009
29 mars 2013 à 11:48
@shenron666

Pour ce qui concerne la différence entre "chiffrement" et "cryptage", je vous conseil de lire ceci : http://www.ssi.gouv.fr/IMG/pdf/RGS_B_1.pdf En page 29 de ce document il est écrit : "D'un point de vue vocabulaire, il faut noter que le seul terme admis en français est celui de chiffrement. On entend cependant souvent parler de « cryptage » qui est un anglicisme popularisé par les télécommunications, voire de « chiffrage », mais ces mots sont incorrects. L'opération inverse du chiffrement est le déchiffrement. On désigne par « décryptage », ou « décryptement », l'opération qui consiste à retrouver le clair correspondant à un chiffré donné sans connaître la clé secrète, après avoir trouvé une faille dans l'algorithme de chiffrement."

Donc par abus de langage, pour beaucoup de personne, chiffrement <=> cryptage ... donc mieux vaut parler de chiffrement.

Un hash est l'équivalent d'une empreinte digitale, d'une donnée (chaine de caractère, fichier, etc...) à partir d'un hash il n'est pas possible de reconstituer la donnée initial. On dit qu'une fonction de hash est une fonction à sens unique. Une fonction de hash sert principalement à vérifier que 2 données sont identique ou l'intégrité d'une données.
rayman223 Messages postés 24 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 7 avril 2013
26 mars 2013 à 16:28
Merci pour cette petite définition, ça ne fait jamais de mal :)
Je vais jeter un coup d'oeil.
Une idée est effectivement d'utiliser les données des utilisateurs comme sels. Cela permettrait d'avoir des sels unique.
Une autre idée serait de fixer la position du sel du milieu et ainsi ne plus avoir de séparateur. Donc le seul moyen de trouver le sel du milieu serait de connaitre cette position. Ici, effectivement, si on (un pirate) a accès à toute la base de donnée, il pourrait arriver à trouver les 2 séparateurs.

Je vais effectuer les modifications sous peu.
Oui en effet rayman223, je n'avais pas vu que tu hachais avec. Dans ce cas, c'est mieux. Regarde comme même Bcrypt, je pense que cela devrait t'interesser.

le cryptage n'existe pas.
Le chiffrement est l'action de transformer un texte en clair en texte chiffré
Le déchiffrement est l'action inverse
Le décryptage est l'action de casser un code chiffré et donc de déchiffrer sans la clé de chiffrement.
Le hashage est l'action de rendre un code incompréhensible et de façon irréversible (théoriquement).
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
26 mars 2013 à 12:11
Niveau sécurité, c'est toujours mieux que Sony :D
Plus sérieusement, l'intérêt du script de mon point de vue, c'est de monter ce qu'il est possible de faire facilement.
Ca m'a donné des idées, et utiliser des informations liées à l'utilisateur pour générer les sels serait un bon point de départ.

@era120, tu peux me donner la différence entre cryptage et chiffrement ?
pour moi :
- le hashage est une techniquement de chiffrement
- le chiffrement est irréversible (on ne peux pas faire l'opération inverse)
- le cryptage est réversible
rayman223 Messages postés 24 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 7 avril 2013
25 mars 2013 à 20:12
Bah justement, le sel de gauche et droite je suis d'accord mais le sel du milieu est tout a fait aléatoire du point de vue de la longueur ET de la position !
Et je crypte un hash puisque je sais le décrypter pour pouvoir le comparer avec un mot de passe entrée par l'utilisateur.

Maintenant, On pourrait rajouter les sel de gauche et droite avant de hasher, je vais essayer ;)
Je vais regarder ce que tu me proposes.
Bonjour rayman223,

Je ne comprends pas trop l'interêt de ton script. Niveau sécurité, ce n'est pas terrible, il suffit que l'attaquant ait plusieurs message pour qu'il devine que les sels sont fixes. De plus, sauf erreur de ma part, l'interêt du sel est de le hasher avec le password.

Je te conseille vivement de regarder bcrypt en php. Il utilise un peu ce que tu veux utiliser je pense.

Au fait, c'est 'length' et puis on dit pas cryptage mais chiffrement, d'ailleurs c'est plus hashage ici.
rayman223 Messages postés 24 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 7 avril 2013
25 mars 2013 à 11:30
Oui, mais c'est très bizarre. peut-être un problème de cache. Il est apparu après que j'ai posté le dernier.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
25 mars 2013 à 10:43
tu parles de ton message du 20/03/2013 18:30:09
celui juste au dessus du miens ? ;)
rayman223 Messages postés 24 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 7 avril 2013
25 mars 2013 à 08:46
Bizarre, mon message s'est effacé.
Pour l'exemple, j'ai remplacé le hash par du texte compréhensible. L'unique but est de montrer la structure du cryptage.
C'est plus facile a voir qu'avec un véritable hash ;)
alfrai Messages postés 69 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 23 juillet 2013
21 mars 2013 à 03:48
bonjour !
je débute en crypto. Merci pour le code.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
20 mars 2013 à 23:49
Ok je comprend mieux, merci pour tes explications.
De plus ton code est assez clair et un minimum commenté, ça aide.
rayman223 Messages postés 24 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 7 avril 2013
20 mars 2013 à 18:30
C'est juste un exemple.
Cela te permet de visualiser la structure du cryptage plus facilement qu'avec un vrai hash.
Tu dois voir cette exemple comme si "Mon super mot de passe" était un hash.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
20 mars 2013 à 18:26
je me demande s'il n'y a pas un problème avec l'exemple est visible sur http://www.blizer.net/exemple.php
vu que le hash crypté affiché est le mot de passe décoré :
SEL_DEBUTMon_super_mot_de_pasSEPARATEUR_DEBUTnwxmqSEPARATEUR_FINse_08SEL_FIN

ce qui ne semble pas être le cas dans ton code
rayman223 Messages postés 24 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 7 avril 2013
20 mars 2013 à 17:58
Le hash crypté. Comme ça, si la table est piratée, le pirate ne pourra pas trouver une chaine qui correspond au hash puisque celui-ci est modifié.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
20 mars 2013 à 17:27
J'ai du mal à comprendre, si tu avais à stocker en BDD un mot de passe, tu stockerais le hash ou le hash crypté ?
Rejoignez-nous