Quest-ce quun “ salt ” cryptographique?

Je « suis un débutant en cryptographie et je cherche à comprendre en termes très simples ce quest une cryptographie  » salt  » est, quand je pourrais avoir besoin de lutiliser, et pourquoi je devrais ou ne devrais pas lutiliser.

Puis-je obtenir un très simple et une explication claire (niveau débutant)?

Si vous connaissez des références sur le sujet, celles-ci seraient également utiles.

Réponse

La raison pour laquelle les sels sont utilisés est que les gens ont tendance à choisir les mêmes mots de passe, et pas du tout au hasard. De nombreux mots de passe utilisés sont des mots courts et réels, pour faciliter leur mémorisation, mais cest aussi permet une attaque.

Comme vous le savez peut-être, les mots de passe ne sont généralement pas stockés en texte clair, mais plutôt hachés. Si vous n’êtes pas sûr de l’utilité d’une fonction de hachage, veuillez tout d’abord lire.

Maintenant, ce que les attaquants peuvent faire est simplement de générer une liste de mots de passe communs et leurs hachages correspondants. Si des mots de passe courants sont utilisés, les hachages quun site a stockés avec la table révéleront les mots de passe à lattaquant.

A salt est simplement ajouté à rend une sortie de hachage de mot de passe unique même pour les utilisateurs adopter des mots de passe communs . Son but est de rendre les attaques basées sur le pré-calcul inutiles. Si votre mot de passe est stocké avec un sel unique, toute table de hachage de mot de passe pré-calculée ciblant les hachages de mot de passe non salés ou ciblant un compte avec un sel différent ne vous aidera pas à déchiffrer le mot de passe de votre compte. Un long salt généré aléatoirement (en utilisant /dev/urandom) devrait être globalement unique . Ainsi, les sels peuvent être utilisés pour fabriquer des pré -computation attaque totalement inefficace.

Le moyen le plus simple de combiner le sel et le mot de passe est de simplement les concaténer, cest-à-dire que la valeur de hachage stockée est Hash(salt||password). password password1 devient maintenant comme par magie, par exemple, 6$dK,3gCA%Jpassword1 qui est peu susceptible dêtre trouvé dans la table dun cracker de mot de passe.

Le sel peut être stocké complètement en clair dans la base de données, à côté de la valeur hachée. Une fois que lattaquant a la base de données et veut trouver les mots de passe, il doit générer la table pré-calculée pour chaque sel individuellement, une opération coûteuse.

Une autre façon de se défendre contre le craquage de mot de passe hors ligne est deffectuer étirement du mot de passe, cest-à-dire. rendre un hachage de mot de passe plus lent à calculer pour toute personne, y compris le service de connexion et les craqueurs de mots de passe. Une méthode utilisée pour étirer les mots de passe est réalisée en itérant la fonction de hachage plusieurs fois, cest-à-dire en stockant Hash(Hash(Hash(Hash…(Hash(salt||password)))…).

Une autre idée courante liée au salage est appelée un poivre . Autrement dit, une autre valeur aléatoire concaténée avec le mot de passe, de sorte que la valeur stockée soit Hash(pepper||salt||password). Le poivre nest alors pas du tout stocké . Le serveur de connexion et le cracker de mot de passe doivent forcer brutalement la valeur de poivre inconnue, ralentissant les comparaisons de hachage de mot de passe pour les deux parties.

De 2013 à 2015, un hachage de mot de passe un concours a été organisé pour rechercher un meilleur algorithme détirement des mots de passe. Le gagnant était lalgorithme Argon2 . Il est recommandé aux programmeurs dutiliser Argon2 au lieu dimplémenter leur propre algorithme .

Commentaires

  • Donc essentiellement, quand vous navez quun ou 2 mots de passe stockés dans la base de données, lutilisation de salt est effectivement inutile? Ce que je comprends, cest que cela nest utile que lorsque le nombre de mots de passe stockés dans la base de données nest pas petit.
  • @AbhinavChoudhury: Non, il se défend contre les tables arc-en-ciel – cest-à-dire les tables précalculées pour un hachage spécifique. Un exemple: prenez un mot de passe  » password1 « . Si vous ne ‘ t salt, vous ‘ d stockez HASH ( » password1 « ) dans votre base de données. Désormais, si un attaquant récupère vos enregistrements et a précalculé HASH (*) pour tous les mots de passe à 9 caractères, il peut récupérer le mot de passe. Si vous avez plutôt salé le mot de passe, HASH (‘ somesaltforyou ‘ || ‘ password1 ‘) ne sera PAS dans la table arc-en-ciel des attaquants (car ‘ a plus de 9 caractères).
  •  » Le sel peut être stocké complètement en clair dans la base de données, à côté de la valeur hachée  » – – cette partie na jamais vraiment eu de sens pour moi; Je me demandais si vous pouviez développer cela
  • Le but du sel est de sassurer que le hachage ne se trouve pas dans une table précalculée. Il doit être stocké afin de vérifier le mot de passe (sinon, il ‘ sa  » pepper « ). Le sel nest pas censé être  » secret « , uniquement pour rendre le mot de passe unique. Cela signifie bien sûr que chaque mot de passe stocké doit avoir son propre sel, unique (et aléatoire).

Réponse

Pouvez-vous maider à comprendre ce quest un «sel» cryptographique?

Dans le contexte du mot de passe création, un « sel » est une donnée (aléatoire ou non) ajoutée à une fonction de hachage afin de rendre la sortie hachée dun mot de passe plus difficile à déchiffrer.

Quand pourrais-je avoir besoin de lutiliser?

Toujours.

Pourquoi devrais-je ou ne devrais-je pas lutiliser?

Vous devez toujours utiliser une valeur salt avec vos fonctions de hachage, pour les raisons expliquées ci-dessous.

Il est généralement vrai que les gens choisissent des mots de passe faibles, et il est certainement vrai quil y a des gigaoctets de tables arc-en-ciel accessibles au public regorgeant de valeurs hachées les représentant. Ainsi, lorsque quelquun crée un compte sur votre service et sélectionne un mot de passe pour sécuriser son identité, vous pouvez généralement parier que le mot de passe choisi sera 1) commun, 2) non sécurisé et 3) disponible pour référence croisée dans les tables de recherche.

Par exemple, le mot de passe Nowayin1 lorsquil est haché via MD5 est 6f367d65bc74b88e21fb9959487ffa3a et nest évidemment pas un bon choix. Même si cela peut sembler correct (et ce nest pas le cas), le fait que le hachage MD5 du mot de passe apparaisse dans des bases de données ouvertes le rend inutile.

Mais ce nest que du MD5 128 bits. plus fort, comme SHA1 (160 bits) ou même Whirlpool (512 bits)?

Même problème.

Par exemple, P @ $$ word avec SHA1 est 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 et 1qazXSW @ hachée avec Whirlpool est 0bf7545b784665d23b9c174ca03688a405f05b048e9d6c49bfc2721a1fa872bbd6576273d002e56d7c2a9c378efe607af36eea9d708a776e6f60ecb26e081cdf .

Le problème fondamental avec tous ces mots de passe, et des milliards dautres comme eux, est le fait que leurs hachages couramment utilisés sont devenus connus de tous.

Un mot de passe change cela.

Si une valeur aléatoire (le sel) a été ajoutée au mot de passe sélectionné par lutilisateur, alors le hachage SHA1 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 ne révélerait plus comme mot de passe de lutilisateur, car la valeur de hachage dans la table arc-en-ciel ne lui correspondrait plus.

Et cela ne prendrait pas grand-chose. Une petite valeur aléatoire de 16 bits, par exemple, donnerait 65 536 variantes de chaque valeur hachée dans les tables de recherche. Ainsi, une base de données de 15 milliards dentrées aurait maintenant besoin de plus de 983 milliards de hachages pour tenir compte du sel.

Cest donc le point de saler vos hachages, de contrecarrer les tables de recherche et arc-en-ciel. Mais ne « Accrochez pas votre chapeau sur un hachage salé, car les pirates » ne perdront pas beaucoup de temps à utiliser des tables arc-en-ciel pour déterminer vos mots de passe.

Ils « utiliseront un système de cluster de 25 GPU à cinq serveurs exécutant Hashcat qui peut brûler 350 milliards de suppositions par seconde de hachage de craquage pour chaque mot de passe imaginable de huit caractères contenant des lettres majuscules et minuscules, des chiffres et des caractères spéciaux, en un peu moins six heures. (Et cétait en 2012.)

Des techniques telles que létirement des touches qui ralentissent les hachages peuvent être utilisées pour compenser la vitesse de ce matériel, rendant les attaques par dictionnaire et par force brute trop lentes pour en valoir la peine , mais le matériel est de plus en plus rapide.

MISE À JOUR 2018:

Les meilleures pratiques actuelles incluent le hachage sécurisé de vos mots de passe avec Argon2i (préférable à scrypt), une fonction mémoire très résilient aux FPGA, aux GPU à cœurs multiples et aux modules ASIC dédiés utilisés pour déchiffrer facilement les phrases de passe non étirées. Dans limplémentation PHP7 dArgon2, le sel est géré en interne pour vous.

Réponse

Je vais tenter de répondre à une partie de votre question qui a jusquà présent été négligée:

quand je pourrais avoir besoin de lutiliser et pourquoi je devrais / ne devrais pas lutiliser.

La réponse courte est que, en tant quamateur, vous ne devriez pas utiliser la cryptographie à un niveau qui nécessite de traiter directement les sels.

Par exemple, le bcrypt lalgorithme de hachage de mot de passe utilise des sels en interne. Mais il nexpose pas ce fait aux développeurs qui lutilisent – il vous suffit de transmettre le mot de passe à bcrypt (et éventuellement, un paramètre qui définit le niveau  » de leffort CPU « nécessaire pour générer le hachage) et il renvoie le hachage. Lorsque vous devez valider si un mot de passe est correct, vous transmettez bcrypt à la fois le mot de passe et le hachage généré précédemment. Il indiquera si le mot de passe était ou non celui utilisé pour générer le hachage.

Ne suivez pas les conseils donnés ici et essayez de hacher vos propres mots de passe en utilisant un sel. Il sagit dun détail dimplémentation de bas niveau, et si vous vous trouvez à travailler à un niveau où ce genre de choses est nécessaire, vous travaillez à un niveau dabstraction beaucoup trop bas. La cryptographie est très difficile à faire correctement, et Internet est absolument jonché de développeurs bien intentionnés « des schémas de hachage de mots de passe maison totalement non sécurisés.

Réponse

Citant  » Réf. examen 70-486 Développement dapplications Web ASP.NET MVC 4 (MCSD): Développement dapplications Web ASP.NET MVC 4 «  par William Penberthy, Pearson Education, 15 septembre 2013:

Le salage est un processus qui renforce le cryptage et les hachages de fichiers, ce qui les rend plus difficiles à casser. Le salage ajoute une chaîne aléatoire au début ou à la fin du texte dentrée avant le hachage ou le chiffrement de la valeur. Lorsquils tentent de casser une liste de mots de passe, par exemple, les pirates doivent tenir compte du sel ainsi que des informations de mot de passe éventuelles avant de pouvoir casser dans lapplication. Si chaque valeur salée se voit attribuer une valeur de sel différente, la possibilité de créer une table des valeurs de mot de passe potentielles pour un pa ssword-cracking programme devient peu maniable.

Réponse

Un sel est un nombre aléatoire nécessaire pour accéder aux données chiffrées, ainsi que le mot de passe.

Si un attaquant ne connaît pas le mot de passe et essaie de le deviner avec une attaque par force brute, alors chaque mot de passe quil essaie doit être essayé avec chaque valeur de sel.

Donc, pour un sel dun bit (0 ou 1), cela rend le cryptage deux fois plus difficile à casser de cette manière. Un sel de deux bits le rend quatre fois plus difficile, un sel de trois bits huit fois plus dur, etc. Vous pouvez imaginer à quel point il est difficile de déchiffrer des mots de passe avec un chiffrement utilisant un sel 32 bits!

Commentaires

  • Non. On suppose généralement que le sel est connu de lattaquant. Dans ce cas, au-delà dun certain seuil bas, le sel naméliore pas la sécurité.
  •  » Le sel est généralement considéré comme connu de lattaquant  » – > Qui assume cela?
  • @Mike: Qui? Quelquun dit  » Vous devez toujours supposer que lattaquant connaît le sel. « . Les utilisateurs de une autre page disent que  » Les sels sont publics « , et dit plus tard  » que les sels sont connus, car ‘ est lutilisation standard du mot sel.  » Un autre dit  » que le sel est de notoriété publique, ou du moins devrait être traité comme public connaissance. « .

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *