Использование bcrypt в App Engine кажется очень медленным при хешировании паролей. Я читал, что рекомендуемое (по крайней мере, с 2017 года) - 10 или более раундов, и оно должно основываться на времени, которое требуется для обработки шифрования / расшифровка, а не заданное количество раундов. Тем не менее, когда мы попытались установить различные значения log_round
, начинающиеся с 10, это заняло очень много времени, и мы достигли значения DeadlineExceededError
, которое возникает в GAE, если запрос занимает более 60 секунд! Мы используем класс экземпляра F1 по умолчанию, так как мы не установили его для другого класса в app.yaml.
Мы тестировали на экземплярах F2 и F4, которые действительно были более быстрыми, но в целом все еще медленными с точки зрения UX. Я думаю, что это заняло ~ 5 секунд на экземпляре F2 для 7 log_rounds! Есть ли известная проблема для этой конкретной библиотеки? passlib
лучший выбор? Или это нормальное поведение? Мы думаем, что можем что-то упустить здесь, но не уверены, что!
from pybcrypt import bcrypt
# What we use for hashing
user_pass = "secret_password"
password = bcrypt.hashpw(user_pass, bcrypt.gensalt(log_rounds = 10))
# What we use to verify correct password
if bcrypt.hashpw(password_attempt, user.hashed_password) == user.hashed_password:
#User login success
print "Logged in!"
else:
#User login failed
print "Wrong credentials!"
Некоторые из постов, через которые я прошел:
1) https://security.stackexchange.com/questions/17207/recommended-of-rounds-for-bcrypt
2) https://security.stackexchange.com/questions/3959/recommended-of-iterations-when-using-pkbdf2-sha256/3993#3993
3) Что такое соляные раунды и как соли хранятся в Bcrypt?
4) yii CPasswordHelper: hashPassword и verifyPassword