6
votes

Garder les mots de passe utilisateur en sécurité en Java?

Je suis venu à un point où j'ai besoin de choisir une façon de garder les mots de passe de l'utilisateur en toute sécurité dans la base de données et de pouvoir vérifier s'ils correspondent à la signature de l'utilisateur sur le site Web.

J'utilise printemps 2.5 pour le moment, mais mettez à niveau lentement vers printemps 3 . Que voudriez-vous me suggérer de garder les mots de passe en sécurité? Je sais que cette question a été répondue dans des formes similaires ici et là, mais j'aimerais voir exactement, Réponse à jour sur la manière de faire cela, ce qui pourrait également protéger contre le piratage de mot de passe d'aujourd'hui Techniques.

Quel serait le moyen le plus approprié des mots de passe de hachage avec du sel? Je veux dire quel algorithme utilisera mieux le cas échéant? Devrais-je utiliser BCRYPT à la place et est JBCRYPT un bon livre pour cela? Y a-t-il un meilleur moyen de protéger les mots de passe? Qu'en est-il d'utiliser jasypt ? Quelles techniques utilisez-vous pour stocker les mots de passe utilisateur en toute sécurité?

EDIT: Même si je n'ai pas eu comme très intéressant et détaillant réponses je suis allé avec bcrypt / jbcrypt car il semble que le meilleur choix. N'hésitez pas à discuter.


8 commentaires

Cet article a une excellente information sur le mot de passe hachage avec un sel: owasp.org/index.php/hashing_java


Vous ne pensez pas que c'est assez obsolète si bcrypt suggère de ne pas utiliser le hachage de mot de passe avec du sel?


Je ne suis pas sûr, en regardant JBCrypt maintenant, cela n'a pas l'air très mature. Je laisse cela jusqu'à quelqu'un d'autre pour répondre.


@Richards: Non, le hachage utilisant des sels n'est pas une technique obsolète. Toute l'idée est que vous utilisez une fonction à sens unique sur le mot de passe + sel. Cela rend assez difficile de trouver le mot de passe d'origine si une fonction de hachage sécurisée est utilisée. Et ne jamais stocker les mots de passe comme texte en clair!


@netrom, eh bien oui, c'était clair que je ne dois pas les stocker comme en clair! ; P Je voudrais voir une bonne réponse avec un exemple tho. : /


@netrom, au fait, sur le mot de passe + sel - je faisais référence à cet article: Codahale.com/how-to-safely-store-a-password


@Richards: Si vous pouvez essayer beaucoup de tentatives très rapidement, vous trouverez le résultat correct à un moment donné. Mais vous avez deux facteurs; le plaintre original et le sel. Si le mot de passe est très court, une attaque peut le trouver rapidement, mais si le sel, dans ce cas, était très long, il faudrait plutôt très longtemps pour craquer. Donc non, les sels ne sont pas inutiles. De plus, l'utilisation de sels masque également les plaintes qui sont les mêmes.


@Richards: Ces fonctions décrites dans cet article ne sont pas des fonctions de hachage à usage général. Ce sont des fonctions de hachage cryptographique, voir: en.wikipedia.org/wiki/cryptography_hash_function . Comme l'article i posté ci-dessus, vous devez exécuter la fonction de hachage à plusieurs reprises (vous décidez du facteur) qui le ralentira. Votre article ne parvient pas à mentionner cela.


3 Réponses :


1
votes

Springsecurity prend en charge mot de passe coding à l'aide de hachage et de sels.


4 commentaires

Quelque chose d'autre que vous voulez dire? J'ai entendu parler de Spring Security comme nom et imaginez ce que cela fait aussi. Comme c'est bon? Avantages et inconvénients? Mal..


@Richards: C'est un cadre de sécurité Web assez bon et entièrement présent. Apache Shiro est censé être plus facile à utiliser, mais comme vous utilisez déjà le printemps, la sécurité du printemps devrait être assez bien. J'ai récemment utilisé exactement vos besoins, cela a très bien fonctionné.


Il est bon de mettre en œuvre des modèles de contrôle d'authentification / d'accès simples. Pour des modèles plus complexes, les choses peuvent être un peu difficiles en raison de la rigidité et de l'opacité du schéma de configuration «Espace de noms».


Je recommanderais Shiro pour ACLS, Spring-Security et son modèle ACL est très difficile à utiliser IMHO.



-5
votes

Vous pouvez utiliser HASH UTILISANT MD5 Code: xxx


5 commentaires

MD5 est vulnérable aux attaques de table arc-en-ciel. Voir pirate de piratage-gurus.net/2009/ 04/30 / Crack-MD5-Mot de passe-Hash-Online Pour une liste de liens vers des sites de craquage MD5.


@Richards: Il suffit d'utiliser SHA-1 , SHA-256 ou SHA-512 à la place.


@netrom: oui, mais fournissant des informations aussi affreuses ici où beaucoup d'utilisateurs peuvent vérifier cette réponse est assez stupide.


MD5 et le SHA- * ont tous le problème d'être extrêmement rapide à hacher et donc vulnérables aux attaques de dictionnaire de force brute.


@ericacm mais il faut toujours beaucoup d'efforts pour casser un hachage Sha.



9
votes

Oui, vous devez utiliser BCRYPT / JBCRYPT. BCRYPT est spécialement conçu pour être lent, il faudrait donc une quantité suffisante de temps pour craquer un mot de passe.

voir Ce blog post Sur des mesures supplémentaires que vous pouvez utiliser sur l'utilisation de BCRYPT pour hachage de mot de passe.


0 commentaires