Нужно ли Salt and Hash случайно сгенерированный токен?

Я использую библиотеку аутентификации Адама Гриффитса для 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 хэш и соль?

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам