Я только что посмотрел на реализацию хеширования паролей в Django и заметил , что он добавляет соль , поэтому хеш создается как sha1 (salt + пароль)
, например.
На мой взгляд, соли хороши для двух целей
Предотвращение поиска в радужных таблицах
Хорошо, добавление / добавление соли не имеет значения для радужных таблиц .
Защита от перебора и атак по словарю
Вот о чем мой вопрос. Если кто-то хочет взломать единственный пароль из украденной базы данных паролей, ему нужно попробовать множество паролей (например, словарные слова или [A-Za-z0-9] перестановки).
Предположим, мой пароль - "abcdef" , соль является «солью», и злоумышленник пробует все пароли [az] {6}.
С добавленной солью необходимо вычислить хэш («соль»)
, сохранить состояние алгоритма хеширования и затем продолжайте с этой точки для каждой перестановки. То есть для прохождения всех перестановок потребуется 26 ^ 6 операций копирования-хеш-алгоритма-структуры-состояния и 26 ^ 6 операций хеширования (перестановка [az] {6})
операций. Поскольку копирование состояния алгоритма хеширования происходит чертовски быстро, соль почти не добавляет здесь сложности, независимо от ее длины.
Но с добавленной солью злоумышленник должен вычислить хэш (перестановка [az] {6} + соль)
для каждого перестановка, приводящая к 26 ^ 10 хеш-операциям. Очевидно, что добавление солей добавляет сложности в зависимости от длины соли.
Я не верю, что это связано с историческими причинами, потому что Django довольно новый. Так какой же смысл в добавлении солей?