mirror of
https://github.com/php/doc-fr.git
synced 2026-03-23 22:52:18 +01:00
195 lines
7.9 KiB
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
|
|
-->
|