Безопасная функция сравнения строк

Я только что наткнулся на этот код в библиотеке HTTP Auth Zend Framework. Кажется, он использует специальную функцию сравнения строк, чтобы сделать его более безопасным. Однако я не совсем понимаю комментарии. Кто-нибудь может объяснить, почему эта функция более безопасна, чем выполнение $a == $b?

/**
 * Securely compare two strings for equality while avoided C level memcmp()
 * optimisations capable of leaking timing information useful to an attacker
 * attempting to iteratively guess the unknown string (e.g. password) being
 * compared against.
 *
 * @param string $a
 * @param string $b
 * @return bool
 */
protected function _secureStringCompare($a, $b)
{
    if (strlen($a) !== strlen($b)) {
        return false;
    }
    $result = 0;
    for ($i = 0; $i < strlen($a); $i++) {
        $result |= ord($a[$i]) ^ ord($b[$i]);
    }
    return $result == 0;
}
24
задан laurent 14 May 2012 в 02:11
поделиться