Est “double hachage d'un mot de passe de moins en moins sûre juste hacher à la fois?
Est le hachage d'un mot de passe deux fois avant de le ranger plus ou moins en sécurité que juste hacher à la fois?
Quoi je parle, c'est cela:
$hashed_password = hash(hash($plaintext_password));
au lieu de seulement ceci:
$hashed_password = hash($plaintext_password);
Si elle est moins sûr, pouvez-vous fournir une bonne explication (ou un lien vers une)?
Aussi, la fonction de hachage utilisée faire une différence? Faut-il faire une différence si vous mélangez les md5 et sha1 (par exemple) au lieu de répéter la même fonction de hachage?
Note 1: Quand je dis "double hachage" je parle de hachage d'un mot de passe deux fois dans une tentative de le rendre plus lisible. Je ne parle pas de la la technique de résolution des collisions.
Note 2: je sais que j'ai besoin d'ajouter un hasard de sel pour le faire en sécurité. La question est de savoir si le hachage deux fois avec le même algorithme d'aide ou le mal du hachage.
Hash(password)
etHash(Hash(password))
sont tout aussi précaire. À la fois l'absence de la notion de Sémantique de Sécurité. Qui est, la sortie est à distinguer de façon aléatoire. Par exemple,MD5("password")
est5f4dcc3b5aa765d61d8327deb882cf99
. Je sais que c'est le hash MD5 depassword
, et il est distinguer de façon aléatoire. Au lieu de cela, vous devez utiliser un HMAC. Son abri et sa PRF.
Vous devez vous connecter pour publier un commentaire.
Le hachage d'un mot de passe une fois n'est pas sécurisée
Non, plusieurs hachages sont pas moins sûrs; ils sont une partie essentielle de mot de passe sécurisé à utiliser.
Itération, la valeur de hachage augmente le temps nécessaire pour qu'un attaquant chaque mot de passe dans la liste de leurs candidats. Vous pouvez facilement augmenter le temps qu'il faut pour attaquer un mot de passe (de quelques heures à plusieurs années.
Simple itération n'est pas assez
Simplement le chaînage de hachage de la sortie vers l'entrée n'est pas suffisant pour la sécurité. L'itération devrait avoir lieu dans le contexte d'un algorithme qui préserve l'entropie du mot de passe. Heureusement, il existe plusieurs algorithmes publiés qui ont eu assez de contrôle pour donner confiance dans leur conception.
Un bon algorithme de dérivation de clé comme PBKDF2 injecte le mot de passe à chaque tour de malaxage, d'atténuer les préoccupations concernant les collisions dans hachage de sortie. PBKDF2 peut être utilisé pour l'authentification par mot de passe comme-est. Bcrypt suit la dérivation de clé avec un cryptage étape; de cette façon, si un moyen rapide pour inverser la dérivation de clé est découvert, un attaquant doit encore achever une attaque à texte clair.
Comment casser un mot de passe
Stockés les mots de passe ont besoin de protection contre une attaque hors connexion. Si les mots de passe ne sont pas salés, ils peuvent être divisés avec une pré-calculées d'attaque par dictionnaire (par exemple, à l'aide d'un arc-en-ciel de la Table). Sinon, l'attaquant doit passer du temps à calculer une valeur de hachage pour chaque mot de passe et de voir si elle correspond au hash stocké.
Tous les mots de passe ne sont pas également probables. Les attaquants pourraient exhaustive de recherche tous les mots de passe courts, mais ils savent que leurs chances pour la force brute de succès diminuent fortement avec chaque personnage supplémentaire. Au lieu de cela, ils utilisent une liste ordonnée de mots de passe. Ils commencent avec "password123" et les progrès réalisés à moins fréquemment les mots de passe utilisés.
Disons un les attaquants liste est longue, avec 10 milliards de dollars des candidats; supposons également qu'un système de bureau peut calculer 1 million de hachages par seconde. L'attaquant peut faire un test ensemble de la liste est à moins de trois heures si une seule itération est utilisé. Mais si seulement 2000 itérations sont utilisés, que le temps s'étend à presque 8 mois. Pour vaincre un plus sophistiqué attaquant capable de télécharger un programme qui peut exploiter la puissance de leur GPU, par exemple—vous avez besoin de plus d'itérations.
Combien est assez?
Le nombre d'itérations à utiliser est un compromis entre la sécurité et de l'expérience utilisateur. Matériel spécialisé qui peut être utilisée par les pirates à bas prix, mais il peut toujours effectuer des centaines de millions d'itérations par seconde. La performance de l' de l'attaquant système détermine combien de temps il faut pour casser un mot de passe donné un certain nombre d'itérations. Mais votre demande n'est pas susceptible d'utiliser ce matériel spécialisé. Combien d'itérations que vous pouvez effectuer sans aggraver les utilisateurs dépend votre système.
Vous pouvez probablement de laisser les utilisateurs attendre un ¾ de seconde lors de l'authentification. Le profil de votre plate-forme cible, et d'utiliser autant d'itérations que vous pouvez vous permettre. Les plates-formes que j'ai testé (un utilisateur sur un appareil mobile, ou de nombreux utilisateurs sur une plate-forme de serveur) peut soutenir confortablement PBKDF2 avec entre 60 000 et 120 000 itérations, ou bcrypt avec facteur de coût de 12 ou 13 ans.
Plus de fond
Lire PKCS #5 pour des informations officielles sur le rôle du sel et des itérations dans le hachage. Même si PBKDF2 a été conçu pour générer des clés de chiffrement des mots de passe, il fonctionne bien comme un hachage de mot de passe pour l'authentification. Chaque itération de bcrypt est plus cher qu'un SHA-2 de hachage, de sorte que vous pouvez utiliser moins d'itérations, mais l'idée est la même. Bcrypt va également un peu au-delà de la plupart des PBKDF2 à base de solutions à l'aide de la dérivée de la clé de chiffrement d'un bien connu en texte brut. Le chiffré résultant est stocké le "hachage", ainsi que de certaines méta-données. Cependant, rien ne vous empêche de faire la même chose avec PBKDF2.
Voici d'autres réponses que j'ai écrit sur ce sujet:
n
n'est pas un obstacle important pour l'attaquant; ils continuent juste à l'itération jusqu'à ce qu'ils obtiennent un match. C'est comme unwhile
boucle au lieu d'unfor
boucle.À ceux qui disent que c'est sûr, ils sont corrects en général. "Double" de hachage (ou la logique de l'expansion de cette, itération d'une fonction de hachage) est absolument sûr si c'est bien fait, pour un problème spécifique.
À ceux qui disent que c'est de l'insécurité, ils sont corrects dans ce cas. Le code qui est affiché dans la question est d'insécurité. Parlons pourquoi:
Il y a deux propriétés fondamentales d'une fonction de hachage qui nous préoccupe:
Pré-Image de la Résistance Donnée par une table de hachage
$h
, il doit être difficile de trouver un message$m
tels que$h === hash($m)
Seconde Pré-Image de la Résistance - Donné un message
$m1
, il devrait être difficile de trouver un autre message$m2
tels quehash($m1) === hash($m2)
Collision Résistance - Il doit être difficile de trouver une paire de messages
($m1, $m2)
tels quehash($m1) === hash($m2)
(notez que ceci est similaire à la Seconde Pré-Image de la résistance, mais différente, en ce qu'ici, l'attaquant a le contrôle sur les deux messages)...Pour le stockage de mots de passe, tout ce qui nous préoccupe vraiment, c'est Pré-Image de la Résistance. Les deux autres serait discutable, car
$m1
est le mot de passe utilisateur, nous essayons de garder le coffre-fort. Donc, si l'attaquant a déjà, le hash n'a rien à protéger...AVERTISSEMENT
Tout ce qui suit est basé sur la prémisse que tous nous Pré-Image de la Résistance. Les deux autres propriétés fondamentales des fonctions de hachage ne peut pas (et n'est généralement pas) hold-up de la même manière. Si les conclusions de ce post sont applicable uniquement lors de l'utilisation de fonctions de hachage pour le stockage de mots de passe. Ils ne sont pas applicables en général...
Nous allons commencer
Pour les besoins de la présente discussion, nous allons inventer notre propre fonction de hachage:
Maintenant, il devrait être assez évident que cette fonction de hachage n'. C'sommes ensemble les valeurs ASCII de chaque caractère de l'entrée, et prend alors le modulo de ce résultat avec 256.
Donc, nous allons le tester:
Maintenant, nous allons voir ce qui se passe si nous courons à quelques reprises autour d'une fonction:
Que les sorties:
Grh, wow. Nous avons généré les collisions!!! Nous allons essayer de vous expliquer pourquoi:
Voici la sortie de hachage d'une chaîne de chacun et de tous les possible de hachage de sortie:
Avis, la tendance vers les numéros les plus élevés. Qui s'avère être notre deadfall. L'exécution de la valeur de hachage 4 fois ($hash = ourHash($hash)`, pour chaque élément) des vents jusqu'à nous donner:
Nous avons réduit de nous-mêmes jusqu'à 8 valeurs... C'est mauvais... Notre fonction d'origine mappé
S(∞)
surS(256)
. C'est, nous avons créé une Surjective Fonction cartographie$input
à$output
.Puisque nous avons une fonction Surjective, nous n'avons aucune garantie de la cartographie pour tout sous-ensemble de l'entrée n'aurez pas de collisions (en fait, dans la pratique, ils le feront).
C'est ce qui s'est passé ici! Notre fonction est mauvais, mais ce n'est pas pourquoi cela a fonctionné (c'est pourquoi il a travaillé si vite et si complètement).
La même chose arrive avec
MD5
. C'cartesS(∞)
surS(2^128)
. Car il n'y a aucune garantie que l'exécution deMD5(S(output))
sera Injective, ce qui signifie qu'il n'aura pas de collisions.TL/DR Section
Donc, depuis l'alimentation de la sortie arrière de
md5
directement, peut générer des collisions, chaque itération va augmenter les chances de collisions. C'est une augmentation linéaire toutefois, ce qui signifie que, bien que l'ensemble de résultats de2^128
est réduite, il n'est pas réduit significativement assez rapide pour être une faille critique.Donc,
Le plus de fois vous réitérer, la poursuite de la réduction de la va.
Le Correctif
Heureusement pour nous, il y a un trivial moyen de résoudre ce problème: Feed-back quelque chose dans les autres itérations:
Noter que les autres itérations ne sont pas 2^128 pour chaque valeur de
$input
. Ce qui signifie que nous pouvons être en mesure de générer$input
valeurs que encore entrer en collision sur la ligne (et par conséquent de régler ou de résonner au loin moins de2^128
sorties possibles). Mais le cas général pour$input
est toujours aussi forte que pour un seul tour.Attendre, était-il? Nous allons tester cela avec notre
ourHash()
fonction. Commutation de$hash = ourHash($input . $hash);
, pour 100 itérations:Il y a toujours une rude modèle là, mais note qu'il n'est plus d'un modèle que notre fonction sous-jacente (qui était déjà très faible).
Remarquer cependant que
0
et3
est devenu collisions, même si elles n'étaient pas dans le seul passage. C'est une application de ce que j'ai dit avant (que la collision de la résistance reste le même pour l'ensemble de toutes les entrées, mais de collision itinéraires peuvent s'ouvrir en raison de failles dans l'algorithme sous-jacent).TL/DR Section
Par l'alimentation de l'arrière de l'entrée dans chaque itération, nous briser efficacement toutes les collisions qui peuvent avoir eu lieu dans l'avant itération.
Par conséquent,
md5($input . md5($input));
devrait être (théoriquement au moins) aussi forte quemd5($input)
.Est-Ce Important?
Oui. C'est une des raisons qui PBKDF2 remplacé PBKDF1 dans RFC 2898. Examiner l'intérieur des boucles de deux::
PBKDF1:
Où
c
est le nombre d'itérations,P
est le Mot de passe etS
est le selPBKDF2:
Où PRF est vraiment juste un HMAC. Mais pour nos besoins ici, disons simplement que
PRF(P, S) = Hash(P || S)
(qui est, le PRF de 2 entrées est le même, grosso modo, comme hachage avec les deux concaténées). C'est très bien pas, mais pour nos fins, il est.Donc PBKDF2 maintient la collision de la résistance du sous-jacent
Hash
fonction, où PBKDF1 ne pas.Cravate-ing Tous Ensemble:
Nous savons de moyens sûrs de l'itération d'un algorithme de hachage. En fait:
Est généralement sûr.
Maintenant, pour aller dans pourquoi on aurait envie de hachage, nous allons analyser l'entropie mouvement.
Un hachage prend dans l'ensemble infini:
S(∞)
et produit une plus petite, de taille constante définieS(n)
. L'itération suivante (en supposant que l'entrée est passé dans l') cartesS(∞)
surS(n)
de nouveau:Avis que le résultat final a exactement la même quantité d'entropie que le premier. L'itération sera pas "rendre plus obscurci". L'entropie est identique. Il n'y a pas la magie de la source d'imprévisibilité (c'est un Pseudo-Aléatoire-Fonction, pas une Fonction Aléatoire).
Il y a cependant un gain pour l'itération. Il rend le processus de hachage artificiellement plus lent. Et c'est pourquoi l'itération peut être une bonne idée. En fait, c'est le principe de base de la plupart des modernes, les algorithmes de hachage de mot de passe (le fait que de faire quelque chose de plus et plus, il est plus lent).
Lent, c'est bon, parce que c'est la lutte contre la principale menace pour la sécurité: force brute. Le ralentissement de nous faire de notre algorithme de hachage, la plus difficile, les attaquants doivent travailler à l'attaque des mots de passe volés de nous. Et c'est une bonne chose!!!
$output = md5($output); // < 2^128 possibilities
--- est-il vraiment le strict<
, ou<=
?md5()
dans ce cas) pour être vraiment sûr. Mais en général, il sera<
et pas<=
... Rappelez-vous, nous parlons de la taille de l'ensemble des$output
pour tous possible$inputs
. Donc, si nous avons encore un collision, elle sera<
, donc<
est le mieux generalizer.=
(comme toutes les entrées dansS(2^128)
aurait besoin d'une carte à une seule sortie dansS(2^128)
). Mais avoir un collision signifie qu'il n'est plus Injective, et donc de l'espace de sortie par mandat devient plus petit que l'espace d'entrée (par la définition même de la fonction elle-même)...$input = MD5($input)
? Pour une itération, c'est 16^32 ~ 3e38. Si MD5 se comporte comme une fonction aléatoire puis pour 1000 itérations, il devrait être autour de 7e35.md5($input . md5($input))
cartes àS(n)
et c'est même pas théoriquement correcte. La théorie de corriger l'équation estmd5(∞ . md5($input)) = S(n)
et depuis$input
est loin de l'infini il est tout simplement aucun moyen de prouver quemd5($input . md5($input))
a plus d'entropie quemd5(md5($input))
. Les deux équations sont aussi mauvais l'un et impossible à prouver à la carte deS(n)
. J'espère vous revoir la réponse puisqu'il est hautement exercés.$hash = hash($input . $hash);
Ne serait pas de force brute d'une seule itération de la hash stocké vous donner par exemple "MyPassword5f4dcc3b5aa765d61d8327deb882cf99"? Pourquoi s'embêter à aller plus loin quand je peux lire de l'entrée d'origine à partir du préfixe de la chaîne? Vous avez besoin d'utiliser autre chose que de l'entrée d'origine ou de l'ensemble de l'exercice est futile.Oui, re-hachage réduit l'espace de recherche, mais non, il n'a pas d'importance - la réduction effective est insignifiant.
Re-hachage augmente le temps nécessaire à la force brute, mais de le faire que deux fois est également sous-optimale.
Ce que vous voulez vraiment est de hacher le mot de passe avec PBKDF2 - une méthode qui a prouvé à l'aide d'un hachage sécurisé avec le sel et les itérations. Découvrez cette SORTE de réponse.
MODIFIER: j'ai presque oublié - NE PAS UTILISER MD5!!!! l'Utilisation moderne de hachage cryptographique, comme le SHA-2 de la famille (SHA-256, SHA-384 et SHA-512).
Oui - il réduit le nombre de peut-être des chaînes de caractères qui correspondent à la chaîne.
Comme vous l'avez déjà mentionné, salé hachages sont beaucoup mieux.
Un article ici: http://websecurity.ro/blog/2007/11/02/md5md5-vs-md5/, tente une preuve pourquoi il est équivalent, mais je ne suis pas sûr qu'avec la logique. En partie, ils supposent qu'il n'y a pas de logiciel d'analyse de md5(md5(texte)), mais, évidemment, il est assez trivial pour produire de l'arc-en-ciel tables.
Je suis toujours coller de ma réponse qu'il y a de plus petit nombre de md5(md5(texte)) type de hachages que md5(texte) de tables de hachage, ce qui augmente les chances de collision (même si encore peu de probabilité) et la réduction de l'espace de recherche.
La plupart des réponses sont par des gens sans un arrière-plan dans la cryptographie ou de sécurité. Et ils ont tort. Utilisation d'un sel, si possible unique pour chaque enregistrement. MD5/SHA/etc sont trop rapides, à l'opposé de ce que vous voulez. PBKDF2 et bcrypt sont plus lentes (qui est bon) mais peut être vaincu avec Asic/FPGA/Gpu (très afordable de nos jours). Ainsi, un mémoire-dur algorithme est nécessaire: entrez scrypt.
Voici un profane explication de sels et de la vitesse (mais pas sur la mémoire-dur algorithmes).
Je viens de regarder à ce à partir d'un point de vue pratique. Qu'est-ce que le pirate après? Pourquoi, la combinaison de caractères qui, lorsqu'il est mis en travers de la fonction de hachage, génère le désiré de hachage.
Vous êtes seulement à la sauvegarde de la dernière de hachage, par conséquent, le hacker n'a qu'à bruteforce un hachage. En supposant que vous avez à peu près la même probabilité de tomber sur le désiré de hachage avec chaque bruteforce étape, le nombre de hachages n'est pas pertinent. Vous pourriez faire un million de hachage itérations, et il ne serait pas augmenter ou réduire la sécurité d'un bit, car, à la fin de la ligne, il n'y a toujours qu'un seul de hachage à rompre, et les chances de rupture sont les mêmes que tout hachage.
Peut-être que les précédentes affiches pense que l'entrée est pertinent; il ne l'est pas. Aussi longtemps que ce que vous mettez dans la fonction de hachage génère le désiré de hachage, il va passer à travers, d'entrée correcte ou incorrecte d'entrée.
Maintenant, tables arc-en-ciel sont une autre histoire. Depuis une rainbow table transporte uniquement des crus des mots de passe, le hachage deux fois peut être une bonne mesure de sécurité, car un arc-en-ciel de la table qui contient tous les hash de tous les hash serait trop grande.
Bien sûr, je ne suis qu'en considérant l'exemple l'OP donné, où c'est juste du texte brut mot de passe haché. Si vous incluez le nom d'utilisateur ou un sel dans la table de hachage, c'est une autre histoire; de hachage deux fois, c'est tout à fait inutile, puisque l'arc-en-ciel de la table, ce serait déjà trop grande pour être pratique et contenir le droit de hachage.
De toute façon, pas un expert en sécurité ici, mais c'est juste ce que j'ai compris de mon expérience.
De ce que j'ai lu, c'est peut être recommandé de re-hachage du mot de passe des centaines ou des milliers de fois.
L'idée est que si vous pouvez lui faire prendre plus de temps pour encoder le mot de passe, c'est plus de travail pour un attaquant d'exécuter à travers de nombreux essais pour deviner le mot de passe. Qui semble être à l'avantage de re-hachage-non pas qu'il est plus cryptographique sécurisé, mais il prend simplement plus de temps pour générer une attaque par dictionnaire.
Bien sûr ordinateurs plus rapides de tous les temps, cet avantage diminue avec le temps (ou vous oblige à augmenter les itérations).
Personnellement, je ne voudrais pas ennuyer avec plusieurs hashses, mais je m'assurerais de également de hachage le nom d'utilisateur (ou un autre champ d'ID Utilisateur) et le mot de passe si deux utilisateurs avec le même mot de passe ne finirez pas avec le même hash. Aussi, je serais probablement jeter des autres constantes de chaîne dans la chaîne d'entrée trop pour faire bonne mesure.
md5()
sont de l'ordre de 180 milliards de dollars par seconde, même la sécurité de votre environnement 9 caractère de mot de passe va tomber dans environ 20 jours (différents cas, de chiffres et de symboles, à 50% de chance de frapper à elle). La raison de ne pas utiliser "les noms d'utilisateur", c'est qu'un autre site peut être aussi bien, et puis un attaquant pourrait amortir l'attaque contre les deux hachages dans le même temps (en supposant que vous utilisez un autre passe sur chaque site)... Aléatoire FTW"xxx"
pièce est unique, il va de feuille. Et oui, MD5 est rapide, mais la question était sur simple vs double hachage et rien que cela ne change pas l'ordre de grandeur de calcul nécessaire, à la différence par exemple bonne clé d'étirement.Nous supposons que vous utilisez l'algorithme de hachage: calculer rot13, prendre la première à 10 caractères. Si vous n'avez que deux fois (ou même 2000 fois) il est possible de faire une fonction qui est plus rapide, mais qui donne le même résultat (à savoir il suffit de prendre les 10 premiers caractères).
De même, il peut être possible de faire un rapide fonction qui donne le même résultat que plusieurs reprises d'une fonction de hachage. Donc, votre choix de la fonction de hachage est très important: comme le rot13 exemple, il n'est pas donné qui se répète de hachage permettront d'améliorer la sécurité. Si il n'y a pas de recherche en disant que l'algorithme est conçu pour les utiliser, alors il est plus sûr de supposer qu'il ne sera pas vous donner une protection supplémentaire.
Qui a dit: Pour tous, mais le plus simple des fonctions de hachage, il sera plus susceptible de prendre la cryptographie experts pour calculer la plus rapide des fonctions, donc si vous êtes à la protection contre les attaquants qui n'ont pas accès à la cryptographie les experts, il est probablement plus sûr dans la pratique à l'utilisation répétée fonction de hachage.
En général, il n'apporte aucune sécurité supplémentaire à double hachage ou double chiffrer quelque chose. Si vous pouvez rompre le hachage une fois, vous pouvez le casser à nouveau. Il ne fait généralement pas mal de sécurité pour ce faire, cependant.
Dans votre exemple de l'utilisation de MD5, comme vous le savez probablement il y a quelques problèmes de collision. "Double Hachage" n'a pas vraiment d'aider à protéger contre ce, depuis la même collisions produira toujours le même hash, que vous pouvez ensuite MD5 de nouveau pour obtenir le second hachage.
Ce n'protéger contre les attaques par dictionnaire, comme ceux de "renverser le MD5-bases de données", mais le fait de saler.
Sur une tangente, Double cryptage quelque chose n'assure pas une sécurité supplémentaire, car il n'est de se traduire par une clé qui est une combinaison de deux touches réellement utilisée. Donc, l'effort de trouver la "clé" n'est pas doublé parce que les deux touches ne sont pas réellement besoin d'être trouvé. Ce n'est pas vrai pour le hachage, parce que le résultat de la table de hachage n'est généralement pas de la même longueur que l'entrée d'origine.
Que plusieurs réponses dans cet article suggèrent, il ya certains cas où il peut améliore la sécurité et d'autres où elle vraiment ça fait mal. Il y a une meilleure solution qui vous permettra certainement d'améliorer la sécurité. Au lieu de doubler le nombre de fois où vous calculer le hachage, le double de la taille de votre sel, ou le double du nombre de bits utilisés int, la valeur de hachage, ou faire les deux! Au lieu de SHA-245, sauter jusqu'à SHA-512.
Double hachage fait sens pour moi que si je le hachage du mot de passe sur le client, puis enregistrez le hachage (avec du sel) de hachage sur le serveur.
De cette façon, même si quelqu'un a piraté son chemin dans le serveur (ce qui en ignorant les consignes de sécurité SSL fournit), il ne peut toujours pas obtenir de l'effacer les mots de passe.
Oui, il va avoir les données nécessaires à la brèche dans le système, mais il ne serait pas en mesure d'utiliser les données de compromis à l'extérieur des comptes de l'utilisateur. Et les gens sont connus pour utiliser le même mot de passe pour presque rien.
La seule manière qu'il pourrait obtenir à l'effacer les mots de passe est d'installer un keygen sur le client - et ce n'est pas votre problème.
Donc en bref:
L'inquiétude à propos de la réduction de l'espace de recherche est mathématiquement correct, bien que l'espace de recherche reste suffisamment grand que pour toutes fins pratiques (en supposant que vous utilisez sels), à 2^128. Cependant, puisque nous parlons des mots de passe, le nombre de possibilités de 16 chaînes de caractères (alphanumériques, casquettes question, un peu de symboles jetés dans) est d'environ 2^98, selon mon dos de l'enveloppe des calculs. Donc, la perception de la diminution de l'espace de recherche n'est pas vraiment pertinent.
A côté de cela, il n'y a vraiment aucune différence, numériquement parlant.
Bien qu'il y est un crypto primitif appelé un "hash de la chaîne", une technique qui vous permet de faire des trucs cool, comme la divulgation d'une clé de signature après avoir été utilisé, sans sacrifier l'intégrité de ce système, étant donné peu de temps de synchronisation, ce qui vous permet à proprement contourner le problème initial de la distribution des clés. Fondamentalement, vous précalculer un grand nombre de tables de hachage de hachages - h(h(h(h....(h(k))...))) , utilisez la n-ième valeur de signe, après un intervalle défini, vous envoyez la clé et de le signer à l'aide de la clé (n-1). Le recepients pouvez maintenant vérifier que vous avez envoyé à tous les messages précédents, et personne ne peut le faux votre signature, étant donné que la période pour laquelle elle est valable a passé.
Re-hachage des centaines de milliers de fois, comme la Loi l'indique est juste un gaspillage de votre cpu.. utiliser une clé plus longue si vous êtes préoccupé par les gens de rupture de 128 bits.
Double hachage est moche parce qu'il est plus que probable que l'attaquant a construit un tableau à venir avec la plupart des tables de hachage. Mieux, c'est le sel de votre hache, et mélanger les hachages ensemble. Il y a aussi de nouveaux schémas de "signer" les hachages (essentiellement le salage), mais de manière plus sécurisée.
Oui.
Absolument ne pas utiliser plusieurs itérations d'un classique de fonction de hachage, comme
md5(md5(md5(password)))
. Au meilleur vous obtiendrez une augmentation marginale de la sécurité (un schéma comme cette offre guère de protection contre un GPU attaque; il suffit de pipeline.) Au pire, vous réduisez votre hash de l'espace (et donc la sécurité) à chaque itération que vous ajoutez. En matière de sécurité, il est sage de supposer le pire.Ne utiliser un mot de passe a été conçu par une autorité cryptographe pour être efficace, un hachage de mot de passe, et résistant à la fois à la force brute et de l'espace-temps des attaques. Ces inclure bcrypt, scrypt, et dans certaines situations PBKDF2. La glibc SHA-256-en fonction de hachage est également acceptable.
Je vais aller sur une branche et dire que c'est plus sûr, dans certaines circonstances, à ne pas downvote moi encore si!
Mathématique /cryptographiques majeures point de vue, c'est moins sûr, pour des raisons que je suis sûr que quelqu'un va vous donner des explications plus claires que j'ai pu.
Cependant, il existe de grandes bases de données de hachage MD5, qui sont plus susceptibles de contenir le "texte" mot de passe que le MD5 de il. Par double hachage vous êtes à la réduction de l'efficacité de ces bases de données.
Bien sûr, si vous utilisez un sel puis cet avantage (désavantage?) s'en va.