Соли пароля: добавление или добавление - PullRequest
10 голосов
/ 13 ноября 2010

Я только что посмотрел на реализацию хеширования пароля в Django и заметил , что он добавляет соль , поэтому хеш создается, например, как sha1(salt + password).

На мой взгляд, соли хороши для двух целей

  1. Предотвращение поиска радужных таблиц

    Хорошо, добавление / добавление соли не имеет большого значения для радужных столов.

  2. Защита от атак методом перебора / словаря

    Вот о чем мой вопрос. Если кто-то хочет атаковать один пароль из базы данных украденных паролей, ему нужно попробовать много паролей (например, словарные слова или [A-Za-z0 -9] перестановок).

    Давайте предположим, что мой пароль - "abcdef", соль - "соль", и злоумышленник пробует все [a-z] {6} пароли.

    С предварительно добавленной солью необходимо вычислить hash("salt"), сохранить состояние алгоритма хеширования и затем переходить от этой точки к каждой перестановке. То есть для прохождения всех перестановок потребуется 26 ^ 6 операций copy-hash-алгоритма-state-struct и 26 ^ 6 hash(permutation of [a-z]{6}) операций. Поскольку копирование состояния алгоритма хеширования происходит очень быстро, соль вряд ли добавляет здесь никакой сложности, независимо от того, как долго это происходит.

    Но с добавленной солью злоумышленник должен вычислить hash(permutation of [a-z]{6} + salt) для каждой перестановки, что приведет к 26 ^ 10 хэш-операциям. Очевидно, что добавление солей добавляет сложность в зависимости от длины соли.

Я не верю, что это по историческим причинам, потому что Джанго довольно нов. Так какой смысл в добавлении солей?

Ответы [ 3 ]

10 голосов
/ 13 ноября 2010

Ни того, ни другого, используйте стандартную функцию вывода ключа , например PBKDF2 . Никогда не сверните свой собственный крипто. Слишком легко ошибиться. PBKDF2 использует много итераций для защиты от грубой силы, что является гораздо большим улучшением, чем простое упорядочение.

И ваш трюк, предварительно вычисляющий внутреннее состояние хеш-функции после обработки соли, вероятно, не так легко осуществить, если длина соли не соответствует длине блока нижележащего блочного шифра. 1007 *

1 голос
/ 18 ноября 2010

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

Но если соль добавлена, злоумышленник может создатьбаза данных для словаря паролей и дополнительно вычисляет только хэш соли.Учитывая, что соль обычно короче пароля (например, 4 символа соли и 8 символов пароля), атака будет быстрее.

0 голосов
/ 13 ноября 2010

Вы делаете правильное замечание, конечно; но на самом деле, если вы хотите увеличить время, необходимое для вычисления хеша, просто используйте более длинный хеш. SHA256 вместо SHA1, например.

...