Почему хэш (без использования соли) случайных чисел? - PullRequest
1 голос
/ 30 июля 2011

Следующий фрагмент кода в php, но я видел разработчиков других языков веб-программирования, хэш случайных чисел.

if ($loginValid=='yes') {
    $token = sha256(generateRandomNumber());
    $_SESSION["token"] = $token;
    $_SESSION["userid"] = $id;
    setcookie("authenticationtoken", $token, ...)
}

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

http://www.xorbin.com/tools/sha256-hash-calculator

В каком контексте хеширование (без использования соли) случайное число считается хорошей практикой?

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

My думаю, состоит в том, что это просто простой способ получить хеш известного размера независимо от размера, который возвращает generateRandomNumber().Очевидно, что если generateRandomNumber() имеет небольшой диапазон, это будет отражено и в количестве возвращаемых различных хешей.

1 голос
/ 30 июля 2011

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

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

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

...