hash_equals - 定时攻击安全字符串比较.我想知道什么是时间攻击安全.
我看到了hash_equals的实现
$result = 0;
for ($i = 0; $i < $len; $i++) {
$result |= (ord($known_string[$i]) ^ ord($user_string[$i]));
}
// They are only identical strings if $result is exactly 0...
return 0 === $result;
Run Code Online (Sandbox Code Playgroud)
我想知道时间比较在哪里.
geo*_*org 12
通常,字符串比较(strcmp或==)会在第一个不匹配的字符上中断,因此如果您的密码是12345并且攻击者提供9xxxx然后1xxxx,则可以测量两次比较之间的时间差并推断出第二个字符串更正确(因为第二次比较需要更多时间).hash_equals通过总是比较两个字符串的所有字符来消除这种类型的攻击,无论它们是否匹配都无关紧要.因此,越来越不正确的字符串将花费相同的时间.