Почему мне не следует использовать соль шифрования, которую я ввожу сам, и использую функцию для рандомизации соли для меня?

StackOverflow https://stackoverflow.com/questions/8393169

Вопрос

Я просто набираю соль, а в документации php люди всегда используют какую-то функцию случайных величин.В чем недостаток ввода соли вместо ее создания?

Это было полезно?

Решение

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

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

  • Если вы используете одну и ту же соль для всех, то, по крайней мере, кто-то сможет выяснить, что у двух пользователей одинаковый пароль.

  • Что еще более важно, это значительно сокращает время, которое кто-то должен тратить на взлом паролей, поскольку теперь они могут проверять один и тот же хэш для всех пользователей сразу.

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

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

Другие советы

  • Зачем заставлять пользователей что-то вводить?

  • У случайно сгенерированных байтов будет гораздо больше энтропии, чем у вводимых пользователем (обычно это только буквенно-цифровой код ASCII).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top