302 votes

Où conservez-vous vos chaînes de sels ?

J'ai toujours utilisé un bon par-entrée de sel chaîne lors de hachage des mots de passe pour la base de données de stockage. Pour mes besoins, le stockage du sel dans la DB suivante pour le mot de passe haché a toujours fonctionné.

Cependant, certaines personnes recommandent que le sel être stockés séparément de la base de données. Leur argument est que si la base de données est compromise, un attaquant peut toujours construire un arc-en-ciel de la table prendre un sel de chaîne en compte afin de casser un compte à un moment. Si ce compte dispose de privilèges d'administrateur, alors il ne peut pas même besoin de craquer à tous les autres.

À partir d'un point de vue sécurité, est-il utile pour stocker des sels dans un endroit différent? Envisager une application web avec le code du serveur de base de données et sur la même machine. Si les sels sont stockées dans un fichier à plat sur cette machine, les chances sont que si la base de données est compromise, les sels de fichier sera, trop.

Existe-il des solutions recommandées pour cela?

297voto

Amber Points 159296

Le point de rainbow tables est qu'ils sont créés à l'avance et distribués en masse pour économiser du temps de calcul pour les autres - il faut autant de temps pour générer des tables arc-en-ciel à la volée comme il serait juste craquer le mot de passe+sel combinaison directement (parce qu'effectivement ce qui est fait lors de la génération des tables arc-en-pré-exécuter les calculs de brute-forcer le hash), donc l'argument qu'en connaissant le sel quelqu'un pourrait "générer une table arc-en-ciel" est fausse.

Il n'y a pas de véritable point dans le stockage des sels dans un fichier séparé aussi longtemps qu'ils sont sur une base par utilisateur - le point du sel est simplement de faire en sorte que l'un arc-en-ciel de la table ne pouvez pas casser à chaque mot de passe dans la base de données.

46voto

Ibraheem Points 497

Je vais donner un peu différente sur ce.

J'ai toujours stocker le sel mélangé avec le salé-hachage de mot de passe.

Par exemple, je vais placer la première moitié du sel avant de le salé-hachage du mot de passe, et la dernière moitié du sel après la salée hachage du mot de passe. L'application est au courant de cette conception peut donc récupérer ces données, et d'obtenir le sel et le salé-hachage de mot de passe.

Mon justification de cette approche:

Si le mot de passe/hachage de données est compromise et tombe dans les mains d'un attaquant, l'attaquant ne sais pas ce que le sel est en regardant les données. De cette façon, un attaquant est pratiquement impossible d'effectuer une attaque par force brute pour obtenir un mot de passe qui correspond au hachage, car il ne sait pas la valeur de hachage pour commencer avec, et n'a aucun moyen de savoir quelles sont les parties des données sont les parties du sel, ou de parties de l'salé-hachage de mot de passe (à moins qu'il ne sais de votre application logique d'authentification).

Si la salé-hachage de mot de passe est stocké en tant que-est, puis une attaque par force brute peut être exécuté de manière à obtenir un mot de passe que quand salées et hachées produit les mêmes données que le salé-hachage de mot de passe.

Cependant, par exemple, même si la salé-hachage de mot de passe est stocké en tant que-est, mais pré-entrée avec une seule aléatoire octet, aussi longtemps que l'attaquant est pas au courant que ce premier octet est à jeter, ce serait également augmenter la difficulté de l'attaque. Votre demande de savoir à jeter le premier octet de données utilisées pour authentifier l'utilisateur.

La conclusion de cette..

1) ne Jamais stocker les données que votre application d'authentification utilise dans sa forme exacte.

2) Si possible, gardez votre logique d'authentification secret pour plus de sécurité.

Aller une étape plus loin..

Si vous ne pouvez pas garder votre application logique d'authentification secret que beaucoup de gens savent comment vos données sont stockées dans la base de données. Et supposons que vous avez décidé de stocker le salé-hachage de mot de passe mélangé avec le sel avec un peu de sel en ajoutant le sel hachage de mot de passe, et le reste de l'ajout de sel.

Lors de la génération aléatoire de sel, vous pourriez aussi au hasard décider quelle est la proportion de votre sel que vous allez stocker avant/après le salé-hachage de mot de passe.

Par exemple, vous générez un hasard sel de 512 octets. Vous ajoutez le sel à votre mot de passe, et d'obtenir le SHA-512 hash de votre salé-mot de passe. Vous aussi générer un entier aléatoire de 200. Vous stockez ensuite les 200 premiers octets du sel, suivie par le salé-hachage de mot de passe, suivi par le reste du sel.

Lors de l'authentification d'un utilisateur de saisie mot de passe, votre application va passer au-dessus de la chaîne, et d'assumer la première 1 octet de données est la première 1 octet, le sel, suivie par le sel de hachage. Ce pass sera un échec. L'application va continuer en utilisant les 2 premiers octets des données comme les 2 premiers octets du sel, et répéter jusqu'à ce qu'un résultat positif est constaté après l'utilisation de la première tranche de 200 octets, comme les 200 premiers octets du sel. Si le mot de passe est incorrect, l'application va continuer à essayer jusqu'à ce que toutes les permutations n'en trouve aucun.

Les avantages de cette approche:

L'accroissement de la sécurité - même si votre logique d'authentification est connu, exactement la logique n'est pas connu au moment de la compilation. Il est pratiquement impossible d'effectuer une attaque par force brute, même avec la connaissance exacte de la logique. Augmentation des longueurs de sel, va augmenter la sécurité.

Les inconvénients de cette approche:

Depuis l'exacte logique est déduit au moment de l'exécution, cette approche est très gourmand en temps PROCESSEUR. Plus la longueur de la le sel, les plus gourmandes en ressources PROCESSEUR, cette approche devient.

L'authentification des mots de passe incorrects impliquera la plus élevée du PROCESSEUR. Cela peut être contre-productif aux demandes légitimes, mais augmente la sécurité contre les pirates.

Cette approche peut être mis en œuvre de diverses manières, et peut être encore plus sécurisée à l'aide de largeur variable sels et/ou salés-hachage de mots de passe.

29voto

Andrew Medico Points 11338

Souvent, ils sont ajoutés à la valeur de hachage et stockés dans le même champ.

Il n'est pas nécessaire de les stocker séparément - le point est d'utiliser un hasard de sel pour chaque mot de passe de sorte qu'un seul arc-en-ciel de la table ne peut pas être utilisé à l'encontre de votre ensemble de hachage de mots de passe. Au hasard des sels, un attaquant doit brute-force chaque hachage séparément (ou calculer un arc-en-ciel de table pour tous les sels, nettement plus de travail).

Si vous aviez plus sécurisé que l'emplacement de stockage, il serait judicieux d'enregistrer les hachages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X