mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-25 17:32:07 +01:00
197 lines
8.0 KiB
XML
197 lines
8.0 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: b8e1b1357def73f310c9f7405035b3acc0cb1eaf 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 de mots de passe sûr</title>
|
|
<titleabbrev>Hachage de mots de passe</titleabbrev>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<qandaset>
|
|
<qandaentry xml:id="faq.passwords.hashing">
|
|
<question>
|
|
<para>
|
|
Pourquoi devrais-je hacher les mots de passe envoyés par les utilisateurs de mon application ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Le hachage de mot de passe est l'une des pratiques de sécurité les plus
|
|
basiques qui doit être effectuée. Sans cela, chaque mot de passe stocké
|
|
peut être volé si le support de stockage (typiquement une base de données)
|
|
est compromis. Ce mot de passe peut alors être immédiatement utilisé pour
|
|
accéder frauduleusement non seulement à votre application mais aussi sur
|
|
d'autres applications si l'utilisateur utilise le même mot de passe ailleurs.
|
|
</para>
|
|
<para>
|
|
En appliquant un hachage sur le mot de passe avant de le stocker, vous rendez
|
|
la tâche d'un attaquant très difficile pour connaitre le mot de passe original,
|
|
et vous avez toujours la possibilité de comparer le mot de passe hashé à une chaîne
|
|
reçue.
|
|
</para>
|
|
<para>
|
|
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 malicieux injecté dans l'application,
|
|
par exemple.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
<qandaentry xml:id="faq.passwords.fasthash">
|
|
<question>
|
|
<para>
|
|
Pourquoi les fonctions traditionnelles de hachage comme <function>md5</function> et
|
|
<function>sha1</function> sont-elles inappropriées aux mots de passe ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
C'est la raison pour laquelle de nombreux experts en sécurité considèrent ces algorithmes
|
|
comme faibles et les déconseillent fortement pour hacher un mot de passe utilisateur.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
<qandaentry xml:id="faq.passwords.bestpractice">
|
|
<question>
|
|
<para>
|
|
Alors, comment hacher mes mots de passe ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Lorsqu'on hashe 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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<!-- TODO Drop mention of crypt? -->
|
|
<para>
|
|
Une autre option est la fonction <function>crypt</function>, qui supporte
|
|
différents algorithmes de hachage. Lors de
|
|
l'utilisation de cette fonction, vous avez la garantie que l'algorithme
|
|
sélectionné est disponible, sachant que PHP contient une implémentation
|
|
native de chaque algorithme supporté, dans le cas où un ou plusieurs
|
|
algorithmes n'est pas supporté par votre système.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
Notez que si vous utilisez la fonction <function>crypt</function>
|
|
pour vérifier un mot de passe, vous devez faire attention aux attaques
|
|
de synchronisation, en utilisant une constante de temps pour la comparaison.
|
|
Ni les <link linkend="language.operators.comparison">opérateurs == et === </link>
|
|
ni la fonction <function>strcmp</function> n'effectuent de comparaisons en utilisant
|
|
des constantes de temps. Sachant que la fonction <function>password_verify</function>
|
|
le fera pour vous, vous êtes vivement encouragé à utiliser
|
|
<link linkend="book.password">l'API native de hachage de mots de passe</link>
|
|
lorsque vous le pouvez.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
<qandaentry xml:id="faq.passwords.salt">
|
|
<question>
|
|
<para>
|
|
Qu'est ce que le grain de sel ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Un grain de sel, ou "salt", en cryptographie, est appliqué durant le processus de hachage pour
|
|
éliminer la possibilité d'attaques par dictionnaires (hachages enregistrés dans
|
|
une grande liste et comparés).
|
|
</para>
|
|
<para>
|
|
En d'autres termes, un grain de sel est une petite donnée additionnelle qui
|
|
renforce significativement la puissance du hachage pour le rendre beaucoup plus
|
|
difficile à cracker. Il existe de nombreux services en ligne qui proposent de volumineux
|
|
dictionnaires de mots de passe avec leur hash. L'utilisation d'un
|
|
grain de sel rend ces dictionnaires inutiles.
|
|
</para>
|
|
<para>
|
|
<function>password_hash</function> va créer un salt aléatoire si vous n'en fournissez
|
|
pas, et c'est généralement la façon la plus sécurisée et la plus simple.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
<qandaentry xml:id="faq.password.storing-salts">
|
|
<question>
|
|
<para>
|
|
Comment stocker mes salts ?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Lors de l'utilisation de la fonction <function>password_hash</function> ou
|
|
de la fonction <function>crypt</function>, la valeur retournée inclue le salt
|
|
comme parti du hash généré. Cette valeur devrait être stockée telle quelle
|
|
dans votre base de données, sachant qu'elle inclue les informations sur
|
|
la fonction de hachage utilisée et peut donc être fournie directement à
|
|
la fonction <function>password_verify</function> ou la fonction
|
|
<function>crypt</function> lors de la vérification des mots de passe.
|
|
</para>
|
|
<para>
|
|
Le diagramme suivant montre le format d'une valeur retournée
|
|
de la fonction <function>crypt</function> ou <function>password_hash</function>.
|
|
Comme vous pouvez 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.
|
|
</para>
|
|
<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 hashé.
|
|
</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
|
|
-->
|