1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-23 22:52:18 +01:00
Files
archived-doc-fr/faq/passwords.xml

195 lines
7.9 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f012b2761819e0ab25ff8cf4bac6655cfbc6fcff Maintainer: itanea Status: ready -->
<!-- Reviewed: no Maintainer: itanea -->
<chapter xml:id="faq.passwords" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Hachage des mots de passe de manière sûre et sécurisée</title>
<titleabbrev>Hachage de mots de passe</titleabbrev>
<simpara>
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.
</simpara>
<qandaset>
<qandaentry xml:id="faq.passwords.hashing">
<question>
<simpara>
Pourquoi devrais-je hacher les mots de passe envoyés par les utilisateurs de mon application ?
</simpara>
</question>
<answer>
<simpara>
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.
</simpara>
<simpara>
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.
</simpara>
<simpara>
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.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.fasthash">
<question>
<simpara>
Pourquoi les fonctions traditionnelles de hachage comme <function>md5</function> et
<function>sha1</function> sont-elles inappropriées aux mots de passe ?
</simpara>
</question>
<answer>
<simpara>
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.
</simpara>
<simpara>
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.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.bestpractice">
<question>
<simpara>
Comment les mots de passe doivent-ils être hachés, si les fonctions de hachage
courantes ne sont pas adaptées ?
</simpara>
</question>
<answer>
<simpara>
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.
</simpara>
<simpara>
PHP fournit <link linkend="book.password">une API native de hachage de mot
de passe</link> qui gère à la fois le
<link linkend="function.password-hash">hachage</link> et la
<link linkend="function.password-verify">vérification de mots de passe</link>,
le tout, de manière totalement sécurisée.
</simpara>
<simpara>
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.
</simpara>
<simpara>
La fonction <function>crypt</function> 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'
<link linkend="book.password">API native de hachage des mots de passe</link>
dès que possible.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.salt">
<question>
<simpara>
Qu'est-ce que le grain de sel ?
</simpara>
</question>
<answer>
<simpara>
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".
</simpara>
<simpara>
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.
</simpara>
<simpara>
<function>password_hash</function> 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.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.password.storing-salts">
<question>
<simpara>
Comment sont stockés les salts ?
</simpara>
</question>
<answer>
<simpara>
Lors de l'utilisation de la fonction <function>password_hash</function> ou
de la fonction <function>crypt</function>, 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 <function>password_verify</function> lors de la vérification des mots de passe.
</simpara>
<warning>
<simpara>
<function>password_verify</function> devrait toujours être utilisé au lieu de
rehacher et comparer le résultat à un hachage stocké afin d'éviter
les attaques par chronométrage.
</simpara>
</warning>
<simpara>
Le diagramme suivant montre le format d'une valeur retournée
de la fonction <function>crypt</function> ou <function>password_hash</function>.
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.
</simpara>
<para>
<mediaobject>
<alt>
Les composants de la valeur retournée par la fonction password_hash et crypt :
dans l'ordre, l'algorithme choisi, les options de l'algorithme, le salt utilisé,
et le mot de passe haché.
</alt>
<imageobject>
<imagedata fileref="en/faq/figures/crypt-text-rendered.svg" width="690" depth="192" format="SVG" />
</imageobject>
</mediaobject>
</para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->