Position actuelle: Accueil> Derniers articles> L'impact du nombre d'itérations dans la fonction HASH_PBKDF2 sur la sécurité

L'impact du nombre d'itérations dans la fonction HASH_PBKDF2 sur la sécurité

gitbox 2025-07-01

Dans PHP, la fonction HASH_PBKDF2 est un outil de cryptographie couramment utilisé, qui est souvent utilisé pour crypter et stocker des mots de passe. Cette fonction est basée sur l'algorithme PBKDF2 (fonction de dérivation de la clé basée sur mot de passe 2). Grâce à un hachage répété, il rend le calcul cryptographique plus complexe, améliorant ainsi la sécurité du mot de passe. Un paramètre clé de la fonction HASH_PBKDF2 est les itérations , c'est-à-dire le nombre d'itérations. Ce paramètre affecte directement la complexité de calcul du hachage du mot de passe et la sécurité globale du système.

Quel est le nombre d'itérations?

Le nombre d'itérations fait référence au nombre de fois que la fonction de hachage fonctionne sur les mêmes données. Dans l'algorithme PBKDF2, chaque itération supplémentaire, un nouveau hachage est effectué sur le mot de passe et la valeur de sel, augmentant le coût de calcul requis par l'attaquant pour forcer brute le mot de passe.

Le prototype de fonction est le suivant:

 <span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">hash_pbkdf2</span></span><span>(
    </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$algo</span></span><span>,
    </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>,
    </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$salt</span></span><span>,
    </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$iterations</span></span><span>,
    </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>,
    </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>
)
</span></span>

Parmi eux, $ iterations est le paramètre qui contrôle le nombre d'itérations de hachage.

Impact sur la sécurité

1. Augmenter les coûts de fissuration

L'effet direct de l'augmentation du nombre d'itérations est d'augmenter le coût de calcul. Pour les utilisateurs légitimes, la connexion ne peut prendre que quelques millisecondes de plus, mais lors de l'exécution d'attaques brutales à grande échelle contre les attaquants, chaque itération supplémentaire signifie plusieurs augmentations du volume de calcul. Par exemple, si 1000 itérations sont utilisées, 1000 mots de passe peuvent être essayés par seconde; S'il augmente à 100 000, vous ne pouvez essayer que 10 mots de passe par seconde, ce qui réduit considérablement l'efficacité d'attaque.

2. Imatignez les attaques accélérées matérielles

Les attaquants modernes utilisent souvent des dispositifs GPU, FPGA ou ASIC pour se fissurer en parallèle. En raison de sa structure série, PBKDF2 peut supprimer ces attaques accélérées par le matériel dans une certaine mesure. En augmentant le nombre d'itérations, les avantages de ces dispositifs peuvent être encore réduits, de sorte que même si l'attaquant a un matériel puissant, la difficulté de craquer augmentera considérablement.

3. Empêcher les attaques du dictionnaire

Les attaques du dictionnaire reposent sur les listes de hachage de mot de passe pré-calculées pour la correspondance. Étant donné que le mécanisme itératif de PBKDF2 est combiné avec l'utilisation de valeurs de sel ( $ sel ), différents résultats de hachage seront obtenus même si le même mot de passe utilise des valeurs de sel différentes. Le nombre élevé d'itérations rendra le processus de génération du dictionnaire extrêmement lent, affaiblissant davantage la faisabilité de ces attaques.

Compromis de performance et de sécurité

Bien que des itérations plus élevées apportent une plus grande sécurité, elles ne peuvent être améliorées sans limite. Chaque fois qu'un serveur traite une demande de connexion, il doit effectuer des opérations de hachage correspondantes. Un nombre trop élevé d'itérations provoquera des goulots d'étranglement évidents et deviendra même une surface d'attaque pour les attaques de déni de service. Par conséquent, il est crucial de choisir un nombre approprié d'itérations.

Selon les recommandations de OWASP (Open Web Application Security Project), le nombre recommandé d'itérations recommandées sera d'au moins 310 000 d'ici 2025. Cette valeur devrait être ajustée d'année en année avec l'avancement du matériel informatique pour maintenir un équilibre relatif avec le pouvoir informatique de l'attaquant.

Conseils pratiques

  • Utilisez le nombre minimum d'itérations actuellement recommandées par l'industrie, telles que 310 000 ou plus;

  • Évaluer régulièrement la tolérance des performances du système et affiner en fonction du matériel réel;

  • Les politiques de mot de passe doivent être utilisées en combinaison avec des politiques de hachage, telles que les exigences de mot de passe solides, l'authentification multi-facteurs, etc.;

  • Assurez-vous qu'une valeur de sel unique et suffisamment aléatoire est utilisée pour éviter les attaques de table arc-en-ciel.

Conclusion

Le nombre d'itérations dans la fonction HASH_PBKDF2 est l'un des facteurs clés pour protéger la sécurité des mots de passe. La définition de ce paramètre améliore raisonnablement non seulement considérablement la capacité du système à résister à la fissuration par force brute, mais empêche également diverses formes d'attaques cryptographiques. Lors de la conception d'un système de certification, vous devez bien comprendre et utiliser raisonnable ce paramètre afin de créer une ligne de sécurité plus forte.