Скрыть алгоритм, итерации, соль в поле пароля в django
В таблице пользователей django пароль автоматически шифруется безопасным алгоритмом (pbkdf2_sha256) с солью и итерациями. Но я не понимаю, почему поле пароля django показывает алгоритм, итерации и соль в таком формате:
<algorithm>$<iterations>$<salt>$<hash>
Я думал, что эта информация является секретной и я хочу показать только хэш.
Я думал, что эта информация является секретной и я хочу показать только хэш.
Это секретно в том смысле, что вы не должны раскрывать это. Но поскольку пароль может быть хэширован с помощью различных алгоритмов хэширования, которые принимают различное количество итераций и различную соль, вы не можете сопоставить хэширование с паролем.
И действительно, когда Django захочет проверить, совпадает ли пароль, ему нужно будет выполнить точное одинаковое хэширование (то есть тот же алгоритм, количество итераций и соль), чтобы проверить, совпадают ли два хэша. Таким образом, Django нужна эта информация для проверки хэша.
Обратите внимание, что здесь соль каждый раз разная, поэтому при добавлении соли "пространство поиска" растет экспоненциально, и, таким образом, атаки по радужной таблице [wiki] менее успешны. Более того, пока хэширование дешево в одном направлении, но может быть определено только путем исчерпывающего поиска в другом направлении, тогда хэширование является мерой безопасности.
Если не хранить алгоритм, количество итераций и соль на пользователя, а просто хранить эти вещи в файле, то мы каждый раз используем один и тот же алгоритм с одним и тем же количеством итераций и одной и той же солью. В этом случае атака с использованием радужной таблицы может быть более эффективной. Задавая случайную соль на запись и с , мы позволяем "пространству поиска" расти экспоненциально с длиной соли.
Если алгоритм хэширования является односторонней функцией [wiki], то предоставления таких параметров, как соль, алгоритм и количество итераций будет недостаточно для вычисления функции в обратном направлении без экспоненциального поиска, который является дорогостоящим и легко выходит за рамки осуществимого с текущим уровнем технологии.