46 votes

stockage des mots de passe dans SQL Server

Quelle est la pratique recommandée pour le stockage des mots de passe des utilisateurs dans SQL Server 2008 ?

Je stocke les détails d'un utilisateur pour un intranet, et j'aimerais obtenir des conseils sur la meilleure façon de stocker les détails d'un utilisateur tels que le nom, le mot de passe et les privilèges d'accès de l'utilisateur, etc. Je pense créer une colonne nvarchar et ensuite crypter ce texte avant de l'insérer dans la table.

56voto

Elazar Leibovich Points 9396

La manière habituelle de stocker un mot de passe, est d'utiliser une fonction de hachage sur le mot de passe, mais à sel à l'avance. Il est important de "saler" le mot de passe, pour se défendre contre table arc-en-ciel attaques.

Votre tableau devrait donc ressembler à quelque chose comme ça

._______._________________.______________.
|user_id|hash             |salt          |
|-------|-----------------|--------------|
|12     |adsgasdg@g4wea...|13%!#tQ!#3t...|
|       |...              |...           |

Pour vérifier si un mot de passe donné correspond à un utilisateur, vous devez concaténer le sel au mot de passe donné, et calculer la fonction de hachage de la chaîne résultante. Si la sortie de la fonction de hachage correspond au hash il s'agit du bon mot de passe.

Il est important de comprendre cependant que l'idée du sel et du hachage a une raison spécifique : empêcher toute personne ayant accès à la base de données de connaître le mot de passe de quelqu'un (il est considéré comme un problème difficile d'inverser la sortie d'une fonction de hachage). Ainsi, par exemple, le DBA de la banque, ne serait pas en mesure de se connecter à votre compte bancaire, même s'il a accès à toutes les colonnes.

Vous devriez également envisager de l'utiliser si vous pensez que vos utilisateurs utiliseront un mot de passe sensible (par exemple le mot de passe de leur compte gmail) comme mot de passe pour votre site Web.

À mon avis, ce n'est pas toujours une fonction de sécurité qui est nécessaire. Vous devriez donc réfléchir si vous en avez besoin ou non.

Voir cet article pour un bon résumé de ce mécanisme.

Mise à jour : Il convient de mentionner que pour une sécurité supplémentaire contre les attaques ciblées visant à inverser le hachage d'un mot de passe individuel, vous devez utiliser bcrypt ce qui peut être arbitrairement difficile à calculer. (Mais à moins que vous n'ayez vraiment peur qu'un mystérieux homme en noir ne cible votre base de données spécifique, je pense que sha1 est suffisant. Je n'introduirais pas une autre dépendance pour mon projet pour cette sécurité supplémentaire. Cela dit, il n'y a aucune raison de ne pas utiliser sha1 100 fois, ce qui donnerait un effet similaire).

7voto

Brad Wilson Points 22910

Le cryptage des données sensibles est une bonne chose. Cependant, avec les mots de passe, vous ne devriez jamais avoir besoin de connaître la valeur originale, et comme tout ce qui est crypté peut également être décrypté, vous mettez ces informations en danger d'être découvertes.

Au lieu de cela, vous devriez conserver un hachage du mot de passe. Ce processus prend la valeur et génère ce qui revient à une somme de contrôle très compliquée. Compte tenu du nombre, il n'y a aucun moyen de revenir au mot de passe original, ce qui renforce la sécurité de ces informations. Pour savoir si quelqu'un vous a donné le bon mot de passe, il faut hacher la valeur qu'il vous a donnée et comparer les hachages.

La sécurité est un sujet compliqué. Même avec des hachages, vous pouvez vous retrouver avec un système présentant des failles de sécurité importantes. Obtenir l'aide d'un consultant en sécurité n'est pas une mauvaise idée si personne d'autre dans votre équipe ne possède déjà ce genre de connaissances.

3voto

kquinn Points 5788

Le serveur SQL n'a rien de spécial ; les bonnes politiques de sécurité des mots de passe sont assez uniformes.

2voto

Luke Schafer Points 6250

C'est généralement la façon de procéder.

Votre application se chargera du cryptage (et éventuellement du décryptage), la base de données se contentant de stocker le mot de passe.

Je recommande d'utiliser quelque chose de plus fort que le défacto actuel - MD5.

La plupart des développeurs .net semblent aimer utiliser TDES.

2voto

Gary.Ray Points 4042

T-Sql comprend des fonctions de cryptage - 4Guys avait une bon article sur ce sujet pour SQL Server 2005 il y a un certain temps, mais je pense que tout cela reste valable pour 2008.

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