gpt4 book ai didi

PHP password_verify() 和慢等于比较

转载 作者:可可西里 更新时间:2023-11-01 13:41:15 26 4
gpt4 key购买 nike

我一直在努力查找有关 password_verify() 是否使用长度常数时间比较来避免定时攻击的信息。

现在,简单的例子:

$hash = '$2y$10$HH3906lfby7HOy1N3duQh.Kju.84ct6AcMZm2p/SYZsZSXuYWvvT.';

$startTime = microtime(TRUE);
password_verify('rasmuslerdorf', $hash);
$endTime = microtime(TRUE);

$time = $endTime - $startTime;

这总是会产生略有不同的输出,根据 this article (“为什么此页面上的散列代码会在“长度恒定”时间内比较散列值?” 段落),可用于定时攻击以获取散列值。我认为这些结果看起来有点随机,但它们肯定不是恒定的。

问题是password_verify()是否使用长度常数时间比较来避免定时攻击?文档中没有关于它的信息,并且由于我的浅薄经验,我无法很好地解释函数处理时间结果。

最佳答案

答案是肯定的,它使用长度常数时间比较。

这是 php 的 password_verify 函数的摘录

    /* We're using this method instead of == in order to provide
* resistance towards timing attacks. This is a constant time
* equality check that will always check every byte of both
* values. */
for (i = 0; i < hash_len; i++) {
status |= (ret->val[i] ^ hash[i]);
}

您可以在 https://github.com/php/php-src/blob/master/ext/standard/password.c 查看完整的源代码

关于PHP password_verify() 和慢等于比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com