Cryptage, hachage, salage : comment mieux protéger les données sensibles dans une BD

Quand vient le temps de protéger des informations sensibles stockées dans une base de données, comme les mots de passe, on utilisera les termes cryptage, hachage (en anglais : hash) et salage (en anglais : salt). 

Afin de comprendre comment bien protéger nos informations, voyons ce que signifient ces termes.

▼Publicité

Cryptage

Antidote définit le cryptage comme suit : « Transformation d’un message en message codé incompréhensible pour qui ne connaît pas le code, de façon à en protéger la confidentialité ou l’authenticité. ».

La particularité du cryptage, c'est que le message crypté peut être décrypté. Pour lire le message, il faut avoir la clé permettant de lui redonner sa forme originale. 

Généralement, les informations sensibles stockées dans une base de données ne peuvent pas être décryptées. Elles n'ont donc pas été cryptées. Pourtant, l'expression cryptage est tellement répandue qu'elle est généralement acceptée pour parler de la protection que l'on applique aux informations stockées dans une BD et ce, même si aucun cryptage n'est effectivement réalisé.

Hachage

Selon Antidote, le hachage est une « opération consistant à transformer un message de taille variable en un code de taille fixe en appliquant une fonction mathématique dans le but d’authentifier ou de stocker ce message ».

Autrement dit, le hachage est une technique qui transforme une chaîne à l'aide d'un algorithme mathématique. La chaîne ainsi transformée ne sera pas compréhensible. Mais contrairement à une chaîne cryptée, une chaîne ayant subi un hachage ne pourra pas être décodée.

Prenons l'exemple d'un mot de passe. Aucun programme ne devrait stocker un mot de passe en clair. La technique utilisée sera de transformer le mot de passe à l'aide d'un algorithme de hachage avant de le stocker. Lorsqu'un usager tentera de s'authentifier, le mot de passe saisi sera lui aussi transformé à l'aide du même algorithme avant d'être comparé au mot de passe stocké dans la BD.

Parmi les algorithmes de hachage les plus connus, mentionnons MD5, SHA1 et SHA256. 

Il est parfois possible d'appliquer le hachage à l'aide du système de gestion de base de données.

Parfois, c'est du côté du langage de programmation que la conversion aura lieu. Par exemple :

Le problème avec la technique du hachage, c'est qu'un pirate informatique pourrait réussir à retrouver le mot de passe original à l'aide de différentes techniques.

  • Par force brute : le pirate appliquera un algorithme de hachage à différentes combinaisons de caractères afin de comparer le résultat avec l'information stockée dans la base de données. Son travail sera facilité s'il détient un dictionnaire de mots de passe potentiels, qui contient généralement les mots du dictionnaire, des mots de passes formés à partir de différentes informations personnelles de l'usager, de même que des mots de passe souvent utilisés.
  • À l'aide d'une base de données contenant une quantité importante de mots de passe déjà transformés.On appellera cette base de données table de correspondance ou, en anglais, lookup table. Il existe sur Internet des tables de correspondance contenant des milliards d'enregistrements. Des pirates ont trouvé une façon efficace de bonifier une telle base de données en publiant des sites Web dont le but présumé est de vous indiquer la sécurité de votre mot de passe. En saisissant votre mot de passe sur de tels sites, vous ajoutez des entrées dans leur table de correspondance. Ouch !

Plus le mot de passe sera long et comprendra des caractères variés (lettres majuscules et minuscules, chiffres, caractères spéciaux), plus le travail du pirate sera long. Cependant, s'il a accès à un réseau d'ordinateurs travaillant de pair, il réussira à effectuer des milliards de comparaisons et finira tôt ou tard par trouver le mot de passe.

Salage

Saler un mot de passe consiste à lui concaténer une chaîne de caractères avant de lui appliquer un algorithme de hachage. Pour que la technique soit efficace, il faut que chaque usager ait sa propre clé de salage, que cette clé soit générée aléatoirement et qu'elle soit aussi longue que possible.

La clé de salage sera généralement stockée dans la base de données.

MySQL offre la fonction UUID() qui peut être utilisée pour générer une clé de salage. La clé générée ne sera pas complètement imprévisibles. Elle est cependant suffisamment aléatoire pour offrir le niveau de sécurité espéré.

Si vous travaillez avec MS-SQL, la fonction NEWID() est un excellent choix pour générer une clé de salage.

Processus de stockage

Voici donc le processus à suivre pour stocker un mot de passe dans la base de données. Rappel : lorsque nous parlons de cryptage du mot de passe, nous savons que le terme n'est pas exact car le mot de passe ne pourra pas être décrypté, et c'est exactement ce que nous désirons. Nous utilisons tout de même ce terme puisqu'il est si répandu.

Pour stocker un mot de passe de façon sécuritaire, nous devons :

  1. Générer une clé de salage;
  2. Bonifier le mot de passe en clair en lui concaténant la clé de salage;
  3. Appliquer l'algorithme de hachage au mot de passe bonifié;
  4. Stocker le mot de passe sécurisé et la clé de salage dans la base de données.

Processus de comparaison

Lorsqu'un usager souhaite s'authentifier, le programme doit :

  1. Récupérer la clé de salage correspondant au login de l'usager dans la base de données;
  2. Concaténer la clé de salage au mot de passe en clair;
  3. Appliquer l'algorithme de hachage au mot de passe bonifié;
  4. Comparer le résultat avec la valeur correspondant au login de l'usager dans la base de donnée.

Attention : peu importe les efforts que vous mettrez pour sécuriser les mots de passe dans votre base de données, vous resterez à la merci des pirates si vos usagers entrent leur mot de passe sur une page Web qui n'est pas sécurisée par une couche de chiffrement comme SSL (dont l'URL débute par https://). En effet, sur les sites débutant par http://, les informations transigent en clair entre le client et le serveur et les pirates pourraient renifler ces informations.

Fonctionnalités plus évoluées

Certaines architectures d'application (framework) offrent des fonctionnalités plus évoluées pour sécuriser les mots de passe. C'est le cas notamment pour ASP.NET Web forms avec Membership Provider et ASP.NET MVC avec SimpleMembership.

Si votre architecture d'application offre de telles fonctionnalités, VOUS DEVEZ LES UTILISER ! N'essayez pas de coder votre propre logique pour sécuriser vos mots de passe. Vous ne pourrez pas obtenir de résultats aussi sécuritaires.

Pour plus d'information

« 12.13 Encryption and Compression Functions ». MySQL. http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html

« 12.8.2. Fonctions de chiffrements ». MySQL. http://dev.mysql.com/doc/refman/5.0/fr/encryption-functions.html (Attention : la dernière version traduite remonte à MySQL 5.0 alors les informations y sont moins à jour que dans le lien précédent)

« Sécuriser un mot de passe en base de données ». Crazy WS. http://www.crazyws.fr/tutos/securiser-un-mot-de-passe-en-base-de-donnees-BEKIC.html

« Hachage n’est pas cryptage ! De la sécurité des données chiffrées dans les SGBDR ». Le blog de SQLpro. http://blog.developpez.com/sqlpro/p12496/langage-sql-norme/hachage-nest-pas-cryptage-de-la-securite-des-donnees-chiffrees-dans-les-sgbdr

« Add a Salt with the SQL Server HASHBYTES Function ». MS SQL tips. http://www.mssqltips.com/sqlservertip/3293/add-a-salt-with-the-sql-server-hashbytes-function/

« Salting SHA in MySQL ». One Last Bit. http://onelastbit.com/?p=138

« Safe Password Hashing  ». PHP. http://php.net/manual/en/faq.passwords.php

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories