Соль в PBKDF2 - Питон
Я только учусь защищать пароли при разработке с использованием MySQL и Python, следуя этому руководству.
Насколько я понимаю, пароль пользователя хранится в хеше базы данных, а соль хранится по незашифрованной стороне, так что мы можем получить хешированный пароль и соль и перефразировать, используя соль, введенный пароль, а затем сравнить их.
Хотя при использовании PBKDF2 (через passlib.hash.sha256_crypt()
функция) Я не могу установить свою собственную соль, только ее размер. Так как же мне перефразировать пароль, используя одну и ту же соль, чтобы я мог сравнить оба?
1 ответ
Интерфейс Passlib Password Hash позволяет вам задать размер соли или salt
ценить себя. Из документации по pbkdf2_sha256
:
salt
(байты) Дополнительные байты соли. Если указано, длина должна быть в диапазоне 0-1024 байта. Если не указано иное, 16-байтовая соль будет генерироваться автоматически (это рекомендуется).
salt_size
(int) - Необязательное количество байтов для использования при автогенерации новых солей. По умолчанию используется 16 байтов, но может быть любое значение от 0 до 1024.
так что вы можете установить свою собственную сгенерированную соль:
>>> from passlib.hash import pbkdf2_sha256
>>> pbkdf2_sha256.encrypt("password", rounds=200000, salt=b'spamhameggs')
'$pbkdf2-sha256$200000$c3BhbWhhbWVnZ3M$WL9OLVcb3f7HqHeNT./kCJeunydLCi4JykzEuAdewcI'
Однако обратите внимание, что соль является частью возвращаемой строки. Строка содержит не только результирующий хеш, но также алгоритм, количество использованных раундов и соль, разделенную $
, Соль кодируется в модифицированной форме base64. Вы можете убедиться в этом, расшифровав строку c3BhbWhhbWVnZ3M
снова::
>>> from passlib.utils import ab64_decode
>>> ab64_decode(b'c3BhbWhhbWVnZ3M')
b'spamhameggs'
См. Раздел " Формат и алгоритм " для pbkdf2_sha256
Docs.
Поэтому, когда вы храните полную строку pbkdf2_sha256
в базе данных все, что нужно для проверки строки, прямо в значении, включая соль. Оставлять генерацию случайной соли лучше всего для этой библиотеки, так как она будет использовать безопасный метод для ее генерации.