Oui et non, tel quel il va utiliser une rainbow table et rapidement remonter au résultat initial.
Si tu veux faire ça, la clef, c'est la LENTEUR.
Le problème c'est que SHA1, c'est l'inverse (très rapide).
Pour alourdir l'algo, habituellement ya trois pistes (que l'on utilise conjointement):
- rajouter un salt, mais les puristes te diront que ce n'est pas suffisant.
- passer plusieurs passes (10 passes c'est déjà pas mal), là la rainbow table devient quasi inutilisable, et l'algo 10x plus lent.
- changer d'algo (en gardant les 10 passes hein ), genre BCrypt te donnera une sécurité plus forte (car il est plus lent).
En gros:
Code :
- for(var i=0, l=10; i<l; ++i) {
- pass = SHA1(pass);
- }
|
Ça alourdi le traitement (10x donc), ça rend un passe type "12345" quasi inutilisable en rainbow table.
Encore une fois, ca dépend du niveau de sécu que tu es prêt à faire. Mais n'oublie jamais que le temps perdu pour un utilisateur à multi-passer ton algo, c'est autant de temps perdu pour un hacker en face pour remonter au mot initial.
Donc, ce genre de truc:
https://code.google.com/p/javascript-bcrypt/
Couplé à une boucle
Peut être un bon point de départ, mais fait attention à un point important: les nombres aléatoires en JS c'est pas ça, donc les algos de sécurité (souvent basés dessus), restent plus fragile que dans d'autres languages s'ils n'ont pas implémentés de vrais générateurs de nb aléatoires (j'ai pas regardé le code de cette bibli).
=> entre nous soit dit, si déjà tu mets 10 passes de SHA1 avec un salt, tu es au dessus de 90% des sites existant sur cette planète.
EDIT: et ccp6128 a raison, si le hacker arrive à avoir le mot de passe haché, il peut envoyer tel quel ca passera. Le seul avantage est qu'il aura du mal/ne pourra pas, connaitre le passe initial. Mais il pourra quand même se logger au compte de l'utilisateur.
Message édité par Devil'sTiger le 19-06-2014 à 22:26:50