Pourquoi ne pas utiliser MD5 pour le hachage de mot de passe?

J'ai un ami qui est un white hat hacker. Il dit que le md5 n'est pas vraiment mauvais, et c'est vraiment sécurisé, seulement si nous l'utilisons correctement.

Je crois qu'il est à droite. Que je sache, il y a 3 façons de se débarrasser de hachages:

  1. À l'aide de tables arc-en-ciel (Qui peut être obtenu par une longue/aléatoire sel)
  2. Collision (Qui peut être évité par plusieurs sels ou des hachages - comme dans l'exemple ci-dessous)
  3. Temps de génération (Qui n'est pas très important si l'on utilise un assez long sel de la valeur pour chaque utilisateur, autant que je sache)

Moi et mon ami crois que Blowfish n'est pas vraiment besoin, il peut aussi être dangereux car il peut ralentir le processus de validation de mot de passe et il peut être utilisé avec des attaques DDOS à briser serveur, même avec moins de attak-ressources.

Donc, je veux vous assurer que c'est la suite de l'algorithme de vraiment sécurisé ou pas? Et, est-il une raison d'y aller avec Blowfish algorithme de hachage ou pas?

//return a 256 bit salt + 128 bit md5 binary hash value
function hash(password, salt=null)
{
    salt = (salt != null) ? salt : Random256BitBinaryValueGenerator();
    //What about using another user-specified parameter, like email address as salt?

    return salt + md5(salt + password) + md5(password + salt);

    //Or just use a non-cryptographic hash algorithm like crc32 to prevent collisions:
    //return salt + md5(salt + password) + crc32(salt + password);

    //Or even use two different salts:
    //return salt + md5(salt + password) + md5('C' + salt + password);
}

//check password
function check(password, hash_value)
{
    return hash(password, substring(hash_value, 0, 32)) == hash_value;
}
MD5 est connu pour ne pas être résistant à la collision depuis 1996, etconsidéré du point de vue cryptographique cassé et inutilisable" quoi de plus avez-vous besoin? Pourquoi serait-on insister à l'aide d'un morceau de crypto quand SHA2 est facilement disponible?
Je sais que SHA2 est sécurisé, ou Blowfish est encore plus sûr, mais je veux savoir la vraie raison pour aller avec ces algorithmes plus récents, je veux dire, si nous pouvons faire md5 sûr, pourquoi aller avec un autre algorithme? Selon le lien suivant, la probabilité de seulement deux hachages accidentellement en collision est (1/2)^128, donc md5(s+p) + md5(p+s) la probabilité de collision est (1/2)^256, ce qui est très sécuritaire, à mon avis, même pour la sécurité des applications exigeantes lorsqu'il est combiné avec un nombre aléatoire de sel. stackoverflow.com/questions/201705/...
Aussi, comme je le sais, car de longueur fixe de hashs sorties, il n'est pas exempt de collision algorithme de là-bas, donc, si nous n'avons pas trouver toutes les collisions dans sha2 pourtant, cela ne signifie pas que sha2 est sûr (ce qui n'est pas parce que ce que j'ai dit). Alors, pourquoi aller avec sha2 lorsque nous pouvons obtenir md5? (Si c'est possible?)
Ce que vous voulez est bcrypt, pas blowfish.
bcrypt est basé sur blowfish.

OriginalL'auteur Masoud | 2015-05-28