Использование моего собственного gensalt () - это достаточно безопасно? - PullRequest
2 голосов
/ 08 декабря 2011

Поскольку механизм bcrypt:

>>> myhash = bcrypt.hashpw('testpassword', bcrypt.gensalt(12))
>>> myhash    
'$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi'
>>> bcrypt.hashpw('testpassword', myhash)
'$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi'

Я хочу использовать его для аутентификации.Проблема в том, что я хочу сделать это из клиента, поэтому мне нужна часть salt в клиенте.

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

Это хорошее приближение к bcrypt и для моего проекта, или я ломаюмеханизм безопасности в bcrypt?

Я думаю, что если кто-то захочет расшифровать пароль, то это будет невозможно при использовании радужных таблиц, потому что он должен использовать одну для каждого пользователя.Я недостаточно опытен в вопросах безопасности, чтобы знать, будет ли это хорошо.Возможно, hashpw достаточно быстр, чтобы применить грубую силу на ПК.

1 Ответ

1 голос
/ 08 декабря 2011

Краткий ответ: Нет , то, что вы описываете, совсем не безопасно.

Прежде всего, bcrypt не является функцией шифрования, и поэтому его результаты не могут быть "расшифрованы".bcrypt - это функция дайджеста сообщений, созданная с использованием blowfish.Хэши, созданные функцией дайджеста сообщения, взломаны.

Для клиента очень проблематично пройти аутентификацию с использованием функции дайджеста сообщения.NTLM от Microsoft использует функцию аутентификации сообщений для аутентификации, и он был многократно сломан .Я думаю, что этот подход к аутентификации несовершенен и его следует избегать.

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

Создайте случайную соль, bcrypt.gensalt(12), вероятно, в порядке.Сохраните хэш и соль в вашей базе данных.Вы должны пройти аутентификацию, используя безопасный транспортный уровень.Обязательно прочитайте owasp a9 .

...