Уникальная соль на пользователя с использованием 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, он заботится о солении и сохраняет его с хэшем. Так что я пойду этим путем!
благодаря этой теме, которая привела меня к этому открытию: