Повышает ли безопасность хеширование случайных данных для токенов? - PullRequest
1 голос
/ 19 сентября 2011

Я использую phpass для генерации случайных солей и хэширования пароля, но мой вопрос для таких вещей, как сброс пароля, я создаю уникальный токен.Обычно я беру 16 байтов случайных данных и затем пропускаю их через хэш sha256.Это хорошая практика, или я должен просто использовать 16 байтов данных

private static function get_random_bytes($count) {
    $output = '';
    if (is_readable('/dev/urandom') &&
            ($fh = @fopen('/dev/urandom', 'rb'))) {
        $output = fread($fh, $count);
        fclose($fh);
    }

    $random_state = microtime();
    if (function_exists('getmypid'))
        $random_state .= getmypid();

    if (strlen($output) < $count) {
        $output = '';
        for ($i = 0; $i < $count; $i += 16) {
            $random_state =
                    md5(microtime() . $random_state);
            $output .=
                    pack('H*', md5($random_state));
        }
        $output = substr($output, 0, $count);
    }

    return $output;
}

Ответы [ 2 ]

3 голосов
/ 19 сентября 2011

Если случайные данные криптографически надежны, как и должно быть, то нет, вам не нужно их хэшировать.

Если ваши данные не являются криптостойкими, например, значения, полученные с помощью rand(), то хеширование может быть немного более безопасным, но выгода минимальна, и вам просто нужно использовать более сильный PRNG.

В этом случае единственный возможный недостаток безопасности - если кто-то

  1. использовал sql инъекцию для извлечения всех паролей и солей из базы данных,
  2. Нашел закономерность в поколении соли,
  3. Сделан радужный стол на основе предсказанных солей,
  4. Получить данные из вашей базы данных снова,
  5. Используйте радужную таблицу для взлома большого количества паролей из базы данных.

Так что в принципе нет, это не добавляет безопасности. Кроме того, в приведенном выше коде используется / dev / urandom, который обеспечивает очень сильную случайность, поэтому преимущество еще больше уменьшается, поскольку перечисленный выше шаг 2 более или менее невозможен. Единственными организациями, которые находятся под этим сильным огнем, являются АНБ, ЦРУ и подобные группы.

0 голосов
/ 06 августа 2015

Да, хэширование случайных данных для токенов сброса пароля абсолютно повышает безопасность.

Сценарий, в котором не хэшированные токены могут помочь взломать учетную запись:

Атакующий

  1. получает доступ для чтения к вашей базе данных,
  2. ожидает появления токена в таблице токенов сброса пароля <g>,
  3. принимает токен, связанный адрес электронной почты и URL-адрес для изготовления

    http://example.com/password_reset?t=gobble-dee-goo-token

  4. теперь можно изменить пароль для связанного адреса электронной почты.

Посредством хэширования phpass, даже если злоумышленник прочитаетдоступ к вашей БД, функция сброса пароля не может быть использована для взлома учетной записи.Это потому, что они не могут использовать хеш токена для создания URL.

...