Соли паролей: добавление и добавление

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

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

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

    Хорошо, добавление/добавление соли действительно не влияет на таблицы радуги.

  • Усиление против грубой силы/словарных атак

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

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

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

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

Я не считаю, что это связано с историческими причинами, потому что Django является довольно новым. Итак, какой смысл в добавочных солях?

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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