Dans PHP, Hash_equals () est une fonction utilisée pour comparer en toute sécurité si deux chaînes sont égales, en particulier lorsqu'ils traitent des valeurs de hachage, ce qui peut éviter certaines vulnérabilités de sécurité courantes. Cependant, il y a une règle particulièrement à noter: hash_equals () nécessite que les deux valeurs de hachage utilisées pour la comparaison doivent être exactement la même longueur. Alors, pourquoi cette règle existe-t-elle? Quelle est la raison de la sécurité derrière cela?
hash_equals () est conçu pour résister aux attaques temporelles (attaque de synchronisation). Time Attack est une méthode d'attaque qui spécifie le contenu d'entrée en observant la différence de temps passé par un programme lors du traitement des différentes entrées. En théorie, si nous comparons deux valeurs de hachage petit à petit, lorsqu'elles sont différentes, l'opération de comparaison se terminera tôt et renvoie des résultats différents. Cela signifie que les valeurs de hachage plus longues prendront plus de temps pendant le processus de calcul, fournissant ainsi à un attaquant un signal potentiel. L'attaquant peut progressivement déduire le contenu de la valeur de hachage en analysant et en comparant le temps qu'il a pris.
Pour empêcher cette attaque, Hash_equals () utilise une stratégie de comparaison à temps constant lorsqu'elle est mise en œuvre, c'est-à-dire qu'elle vérifie toujours chaque caractère, même si le premier caractère des deux valeurs de hachage est déjà différent. Par conséquent, le temps d'exécution de l'ensemble du processus de comparaison est fixe, que la valeur de hachage soit la même. Cette comparaison de temps constante n'est fiable que si les deux valeurs de hachage sont de la même longueur. Si les longueurs des deux hachages sont différentes, le processus de comparaison sera terminé tôt, ce qui peut laisser un décalage horaire disponible pour l'attaquant et exposer des informations sensibles.
Le but de l'algorithme de hachage est de cartographier les données de toute longueur en chaînes de longueur fixe. Si les longueurs des valeurs de hachage sont incohérentes pendant la comparaison, cela signifie qu'ils proviennent de différentes données d'entrée, ou il existe des implémentations incohérentes de l'algorithme de hachage. En exigeant que la valeur de hachage soit de la même longueur, Hash_Equals () peut garantir que le même type de données est comparé pour éviter une erreur de comparaison.
Par exemple, supposons qu'une application stocke une valeur de hachage pour le mot de passe d'un utilisateur. Lors de la vérification du mot de passe, si la longueur de hachage entrante ne correspond pas à la longueur de hachage stockée, il est sûr de supposer que les deux valeurs de hachage proviennent de différentes sources. En vérifiant la durée de la valeur de hachage, hash_equals () peut éviter les erreurs inutiles pendant le processus de vérification.
La collision de hachage est lorsque deux valeurs d'entrée différentes produisent la même valeur de hachage. Bien que les algorithmes de hachage modernes (tels que le SHA-256) soient conçus pour minimiser la probabilité de collisions, ils ne peuvent pas être complètement évités. Afin de réduire davantage les vulnérabilités de sécurité, Hash_equals () oblige que la durée de la valeur de hachage est cohérente, empêchant les risques de sécurité potentiels résultant de mal juger la même valeur de hachage de différentes longueurs pendant le processus de comparaison.
Si les deux valeurs de hachage ne sont pas de la même longueur, l'attaquant peut construire la valeur d'entrée et essayer d'utiliser la vulnérabilité de collision de l'algorithme de hachage à attaquer. Par conséquent, hash_equals () ne peut garantir efficacement la sécurité des valeurs de hachage uniquement si la longueur de hachage est la même.
Pour les développeurs, lors de la mise en œuvre manuelle d'une fonction de comparaison de chaînes sécurisée, de nombreuses vulnérabilités de sécurité doivent souvent être prises en compte, telles que le débordement de tampon, les attaques temporelles, etc. Hash_equals () fournit une méthode de comparaison de hachage sûre et efficace en PHP. Les développeurs n'ont qu'à prêter attention à la valeur de hachage elle-même, sans se soucier de savoir si la comparaison sûre est correctement mise en œuvre. L'exigence de la valeur de hachage est cohérente, réduisant encore le jugement et la protection que les développeurs doivent faire et améliorer la sécurité et la maintenabilité du code.
hash_equals () exige que les longueurs de comparaison de hachage doivent être les mêmes. Cette règle est principalement basée sur de multiples considérations telles que la prévention des attaques de temps, la garantie de l'intégrité du hachage, la prévention des collisions de hachage et la simplification des décisions de sécurité des développeurs. Grâce à cette conception, PHP fournit une méthode de comparaison de hachage efficace et sécurisée pour aider les développeurs à protéger les applications contre les attaques de sécurité courantes.