Ce n'est juste pas la même chose. Un hachage et un chiffrement n'ont pas le même but.
Si on prend le cas d'un site web qui possède un formulaire d'inscription ouvert à tous. Généralement, l'utilisateur inscrit son mot de passe et le site stock dans la base de données un hash de ce mot de passe.
Pourquoi un hash ? Pour plusieurs raisons :
- Les hash ont une taille fixe, quelque soit la donnée d'origine.
- Le calcul d'un hash est bien plus rapide que celui d'un chiffrement.
- Le hash n'est pas réversible (enfin ... normalement)
- Du fait que le hash n'est pas réversible, le site ne connais pas le mot de passe, ce qui est un gage de protection de la vie privée.
Ensuite, quand l'utilisateur se connecte au site, il tape son mot de passe, le site calcul le hash de ce qu'il a tapé et le compare au hash qu'il a stocké.
Seulement voila, un des problème est que puisque le hash possède une taille fixe et qu'il n'est pas réversible, ca veux dire que plusieurs chaines de texte différentes peuvent avoir le même hash. Le crack d'un hash consiste du coup en une méthode qui permet d'obtenir la plus petite donnée possible qui donnera un hash souhaité.
Maintenant, si on passe au chiffrement, c'est réversible, ca veux dire que le site connais le mot de passe. La taille résultante n'est pas fixe ce qui signifie qu'il faut adapter la base de données pour stocker du texte de taille inconnue (même si on peut déterminer la taille maximale).
Quoi qu'il en soit, au moment de la connexion, soit le site chiffre le mot de passe tapé par l'utilisateur et compare les deux versions chiffrées, ce qui risque d'échouer car avec certains algorithme de chiffrement, des données entrent en compte telles que la date/l'heure/... et donc tu as le risque de ne pas tomber sur le même résultat.
Soit il décrypte le mot de passe stocké et compare les deux versions en claire.
Dans les deux cas, il faut stocker la clef de chiffrage. Soit elle est dans la base de données, unique par utilisateur, et donc la protection est totalement nulle. Soit elle est globale à tout le site, et la protection n'est guerre mieux vu que l'attaquant capable de copier la base de donnée est généralement capable d'inspecter le code et d'y trouver la clef qui lui servira alors pour toute la base. Au final, le temps qu'y passera l'attaquant sera risible.
Pour résumer, l'attaque réussit dès que l'attaquant connais toutes les données sensibles.
En utilisant un chiffrement, ta seule donnée sensible est la clef de chiffrement, c'est elle qu'il faut protéger. Et comment ? En la chiffrant également ? Ca ressemble à un serpent qui se mort la queue.
Alors qu'avec des hash, en données sensible tu as l'algo utilisé, les bidouilles de tromperies expliquées plus haut, le sel et sa position. Si les bidouilles expliquée plus haut sont appliquée de façon à faire varier la méthode pour chaque utilisateur, alors ca fait autant de nouvelles données à connaitre. Et du coup, même si techniquement parlant ce n'est pas impossible, ca va demander infiniment plus de temps à l'attaquant pour réussir son coup. Tellement plus qu'il est possible que ca en décourage plus d'un, ou qu'entre deux ton système change et les données que possède l'attaquant deviennent obsolète.
Je pense qu'une des meilleurs sécurité est la personnalisation. On le voit dans la lutte contre le spam avec les captcha. On s'aperçoit que les bots, capables d'analyser les images tordues (tellement tordues que même nous, humains, avons de plus en plus de mal à les lire), sont incapable d'analyser des captcha tout con, personnalisé comme on le voit sur certains site.
Comme par exemple des question style "Comment s'appelle ma grand-mère Lucette ?". C'est pour ca que je pense que ces petites bidouilles que j'ai expliquée plus haut ont leurs effets. C'est tellement con que personne n'y pense. C'est absolument pas dur à mettre en place. Et comme personne ne fait comme ca, alors aucun bot n'a été créé pour le casser.
Plus on s'enferme à tous faire exactement la même chose parce que "c'est la sécurité d'aujourd'hui" et plus la sécurité deviens faible car ca amène plus de monde à travailler à la casser, et le jour où il y arrivent, tout ceux qui ont utilisé cette sécurité seront exposé. Des standards de hash/chiffrement sont indispensables, mais chaque développeur devrait créer son propre petit puzzle pour les stocker, dans l'unique but d'empêcher les bots de fonctionner et donc de faire perdre énormément de temps aux attaquant. Le petit casse tête n'a pas vocation à servir de protection contre l'attaque, ca sert juste à casser l'artillerie lourde de l'attaquant. Parce que prendre d'assaut une forteresse à l'aide de catapulte et autre trébuchet, sans problème, mais y aller à pied avec sa petite épée, ben c'est pas la même chose...
Possible, j'ai pas vérifié et j'ai une fièvre de cheval aujourd'hui. Mais bon, on s'en tamponne de la taille, c'est le principe que je voulais montrer. Planquer un hash dans un chaine qui pourrait être un hash d'un autre type dans le seul but de tromper les bots et le hacker qui va surement buter dessus comme un con, le temps de comprendre qu'on se moque de lui.
@kaymak:
Ça c'est peut-être ta façon de faire, ce n'est pas celle que j'ai expliqué. Je n'ai pas parlé de sel variant par user et/ou dans le temps. Et si tu fais ainsi, il faudra bien que tu conserve le sel utilisé si tu veux t'assurer que le mot de passe fournit en login est bien le même que celui enregistré en base. Donc retour à la case départ.
Quand à bcrypt, il y a une fonction php fournie avec l'installation par défaut, présente depuis un sacré paquet d'années. Mais encore une fois, c'est du chiffrement, pas du hashage, ca peut paraître semblable, mais les applications en sont totalement différentes. Le chiffrement c'est quand on veux protéger une donner dont la valeur d'origine à une réelle importance. Alors que le hash sert de contrôle uniquement, la valeur d'origine n'a aucune importance. On s'en sert par exemple après un téléchargement, si hash est le même qu'indiqué sur le site du téléchargement, c'est qu'il n'y a pas eu de corruption pendant le transfert. Mais si les hash diffèrent, alors le hash ne te sera absolument d'aucune aide pour trouver ce qui à été corrompu et encore moins pour réparer.
Partager