# Hachage des mots de passe de manière sûre et sécurisée

Cette section explique les raisons d'utiliser des fonctions de hachage pour les mots de passe, ainsi que la façon de le faire efficacement.

1. Pourquoi devrais-je hacher les mots de passe envoyés par les utilisateurs de mon application ?
2. Pourquoi les fonctions traditionnelles de hachage comme md5 et sha1 sont-elles inappropriées aux mots de passe ?
3. Comment les mots de passe doivent-ils être hachés, si les fonctions de hachage courantes ne sont pas adaptées ?
4. Qu'est-ce que le grain de sel ?
5. Comment sont stockés les salts ?

Pourquoi devrais-je hacher les mots de passe envoyés par les utilisateurs de mon application ?

  Le hachage des mots de passe est l'une des considérations de sécurité les plus élémentaires qui doivent être prises lors de la conception de toute application ou service qui accepte des mots de passe des utilisateurs. Sans hachage, tout mot de passe stocké peut être volé si le stockage de données est compromis, et être immédiatement utilisé pour compromettre non seulement l'application ou le service, mais aussi les comptes des utilisateurs sur d'autres services, s'ils n'utilisent pas des mots de passe uniques.

  En appliquant un algorithme de hachage sur les mots de passe avant de les stocker, la découverte du mot de passe original devient improbable pour un attaquant, tout en conservant la possibilité de comparer le hachage résultant avec le mot de passe original ultérieurement.

  Il est important de noter que le hachage ne fait que protéger les mots de passe dans la base, pas leur éventuelle interception alors qu'ils sont envoyés à l'application par l'utilisateur, via du code malveillant injecté dans l'application, par exemple.

Pourquoi les fonctions traditionnelles de hachage comme md5() et sha1() sont-elles inappropriées aux mots de passe ?

  Les algorithmes de hachage comme MD5, SHA1 et SHA256 sont destinés à être rapides et efficaces. Avec les équipements informatiques modernes, il est devenu facile d'attaquer par force brute la sortie de ces algorithmes pour retrouver la chaîne originale.

  En raison de la rapidité avec laquelle un ordinateur moderne peut inverser ces algorithmes de hachage, de nombreux experts en sécurité les déconseillent fortement pour le hachage de mots de passe.

Comment les mots de passe doivent-ils être hachés, si les fonctions de hachage courantes ne sont pas adaptées ?

  Lorsqu'on hache des mots de passe, les deux considérations les plus importantes sont le temps de traitement, et le grain de sel. Plus la puissance de traitement requise est élevée, plus il faudra du temps pour casser le mot de passe en analysant sa sortie.

  PHP fournit une API native de hachage de mot de passe qui gère à la fois le hachage et la vérification de mots de passe, le tout, de manière totalement sécurisée.

  L'algorithme suggéré à utiliser pour le hachage de mots de passe est Blowfish, qui est aussi l'algorithme par défaut de l'API de hachage de mots de passe, sachant qu'il est significativement plus gourmand en calcul que MD5 ou SHA1, mais plus évolutif.

  La fonction crypt() est également disponible pour le hachage des mots de passe, mais elle n'est recommandée que pour l'interopérabilité avec d'autres systèmes. Il est plutôt fortement conseillé d'utiliser l' API native de hachage des mots de passe dès que possible.

Qu'est-ce que le grain de sel ?

  Un grain de sel, ou "salt", en cryptographie, est appliqué durant le processus de hachage pour éliminer la possibilité que le résultat puisse être recherché dans une liste de paires pré-calculées de hachages et leur entrée, connue sous le nom de "rainbow table".

  En termes plus simples, un sel est une donnée supplémentaire qui rend les hachages beaucoup plus difficiles à casser. Il existe plusieurs services en ligne qui fournissent des listes étendues de hachages pré-calculés, ainsi que l'entrée d'origine de ces hachages. L'utilisation d'un sel rend improbable ou impossible de trouver le hachage correspondant dans l'une de ces listes.

  password_hash() va créer un salt aléatoire si aucun n'est fourni, et c'est généralement la façon la plus sécurisée et la plus simple.

Comment sont stockés les salts ?

  Lors de l'utilisation de la fonction password_hash() ou de la fonction crypt(), la valeur retournée inclut le salt comme partie du hash généré. Cette valeur devrait être stockée telle quelle dans la base de données, sachant qu'elle inclut les informations sur la fonction de hachage utilisée et peut donc être fournie directement à la fonction password_verify() lors de la vérification des mots de passe.

  Avertissement

  password_verify() devrait toujours être utilisé au lieu de rehacher et comparer le résultat à un hachage stocké afin d'éviter les attaques par chronométrage.

  Le diagramme suivant montre le format d'une valeur retournée de la fonction crypt() ou password_hash(). Comme on peut le voir, tout est présent, comme toutes les informations sur l'algorithme et le salt nécessaires pour une future vérification de mots de passe.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open