Нужно ли Salt and Hash случайно сгенерированный токен? - PullRequest
4 голосов
/ 19 марта 2010

Я использую библиотеку аутентификации Адама Гриффитса для CodeIgniter и настраиваю пользовательскую модель.

Я наткнулся на функцию генерации, которую он использует для генерации токенов.

Его предпочтительный подход - ссылаться на значение из random.org, но я счел это излишним. Я использую его альтернативный метод случайного генерирования строки длиной 20 символов:

$length = 20;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$token = '';    
for ($i = 0; $i < $length; $i++) {
 $token .= $characters[mt_rand(0, strlen($characters)-1)];
}

Затем он хэширует этот токен, используя соль (я прочесываю код из разных функций)

sha1($this->CI->config->item('encryption_key').$str);

Мне было интересно, есть ли какая-либо причина для запуска токена через соленый хеш?

Я читал, что просто случайное генерирование строк было наивным способом создания случайных паролей, но нужен ли sh1 хеш и соль?

Примечание: я получил мой encryption_key от https://www.grc.com/passwords.htm (63 случайных буквенно-цифровых)

Ответы [ 2 ]

6 голосов
/ 19 марта 2010

Соление хеша используется, чтобы уменьшить вероятность коллизии и гарантировать, что хеш не может быть найден в базе данных (например, this ) - если все используют md5() для хранения своих паролей, тогда файл / базу паролей можно было бы «дешифровать», посмотрев значение пароля md5.

Используя соль, в хеш добавляется неизвестный элемент, а это значит, что код генерации соли также должен быть известен, чтобы попытаться перебрать хэш. В контексте генерации случайного пароля я не вижу смысла засолять хэш, так как данные пароля в любом случае случайны.

3 голосов
/ 20 марта 2010

Основная причина засолки хеш-функций заключается в усложнении атак по словарю. А использование солей исключает обнаружение одних и тех же паролей, так как они создают один и тот же хеш.

Другое использование хеш-функций в генераторах псевдослучайных чисел - где ваш код пытается это сделать.

Истинная случайность - непростая вещь, и псевдослучайная генерация может быть сложной. Код, который вы объяснили, похоже, пытается получить «лучшую» случайность от random.org, и его резервное псевдогенерация пытается сделать правильную вещь.

...