Что если мы не солим?
Вы уже понимаете, что если вы используете Password1
самостоятельно (без соли), то каждый раз, когда вы его хешируете, вы получите точноетот же результат.Теперь давайте представим, что у вас 1000 пользователей, и из этих 1000 25 используют один и тот же пароль.Эти 25 хэшей будут точно такими же .Как только злоумышленник получит доступ к вашей базе данных и обнаружит, что хэш 70ccd9007338d6d81dd3b6271621b9cf9a97ea00
преобразуется в Password1
, он получит доступ к учетным записям 25 пользователей в кратчайшие сроки.Это означает, что атака с помощью радужного стола позволит ему быстрее получить доступ к большему количеству учетных записей.
Что, если мы будем использовать соль?
Добавив соль к значению Password1
, вы получите драматическиизменить хэш.У каждого пользователя должна быть своя соль.Это означает, что даже если все 1000 ваших пользователей используют Password1
, все 1000 хешей будут совершенно разными.В реальном мире это означает, что 25 из 1000 пользователей с одинаковым точным паролем будут иметь разные хэши.Тем не менее, это также означает, что злоумышленнику придется запускать атаку по одному паролю за раз, а не просто радугу собирать хеш-коды и надеяться на лучшее.
Но почему мы храним соль?
Без соли вы не сможете воссоздать хэш, когда пользователь введет свой пароль - это означает, что пользователь никогда не сможет снова войти в систему и получить доступ к своей учетной записи.Сохраняя пароль, вы можете разрешить пользователю вводить его пароль, а затем запустить поиск по его учетной записи, добавить соль для ввода и хэшировать все;если он совпадает с хешем, хранящимся в базе данных, вы получите правильный пароль!Если вы никогда не храните эту соль, вы никогда не сможете воссоздать хеш!
Надеюсь, это объясняет немного лучше, и, как всегда, если у вас есть какие-либо комментарии, не стесняйтесь спрашивать