Уникальная соль на пользователя с использованием Flask-Security

прочитав здесь немного о солении паролей, кажется, что лучше всего использовать уникальную соль для каждого пользователя. Я работаю над реализацией Flask-Security atm, и из документации, похоже, вы можете установить только глобальную соль: ie SECURITY_PASSWORD_SALT = 'thesalt'

вопрос: как можно сделать уникальную соль для каждого пароля?

спасибо!

edit: из документов по Flask-Security я нашел это, что, похоже, снова предполагает, что этот модуль использует только одну соль для всех паролей из коробки.

flask_security.utils.get_hmac(password)
    Returns a Base64 encoded HMAC+SHA512 of the password signed with the salt 
    specified by SECURITY_PASSWORD_SALT.

2 ответов


да, Flask-Security использует соли для каждого пользователя по дизайну при использовании bcrypt (и других схем, таких как des_crypt, pbkdf2_sha256, pbkdf2_sha512, sha256_crypt, sha512_crypt).

конфигурация для "SECURITY_PASSWORD_SALT" используется только для шифрования HMAC. Если вы используете bcrypt в качестве алгоритма хэширования, Flask-Security использует passlib для хэширования и генерирует случайную соль во время хэширования. Этот confustion отмечено в вопросе 268: https://github.com/mattupstate/flask-security/issues/268

Это можно проверить в коде, идя от encrypt до passlib:

flask_security/utils.py (строки 143-151, 39 и 269)

def encrypt_password(password):
   ...
   return _pwd_context.encrypt(signed)

_pwd_context = LocalProxy(lambda: _security.pwd_context)

flask_security/core.py (269, 244-251, и 18)

pwd_context=_get_pwd_context(app)

def _get_pwd_context(app):
    ...
    return CryptContext(schemes=schemes, default=pw_hash, deprecated=deprecated)

from passlib.context import CryptContext

и, наконец, от: https://pythonhosted.org/passlib/password_hash_api.html#passlib.ifc.PasswordHash.encrypt

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


оказывается, что если вы используете bcrypt, он заботится о солении и сохраняет его с хэшем. Так что я пойду этим путем!

благодаря этой теме, которая привела меня к этому открытию:

мне нужно хранить соль с bcrypt?