Подтвердить что ты не робот

Как я могу использовать bcrypt/scrypt для appengine для Python?

Я хочу сделать систему аутентификации для своего приложения в строках SUAS, за исключением использования SHA256 для хеширования паролей, я хотел бы использовать bcrypt или scrypt. К сожалению, оба py-bcrypt и scrypt для python используют native c, который не поддерживается GAE.

Как это обойти?

4b9b3361

Ответ 1

Scrypt и BCrypt являются чрезвычайно насыщенными процессорами (по дизайну). Из-за этого я очень сомневаюсь, что реализация pure-python будет достаточно быстрой, чтобы быть безопасной, т.е. Иметь возможность хеширования, используя достаточное количество раундов в течение разумного промежутка времени.

Я лично могу подтвердить это, я пробовал писать чип-скрипт с чистым питоном, и это было слишком медленно, чтобы быть полезным. Документы для реализации bcrypt pure-python, упомянутые в другом ответе, отмечают этот точный недостаток - остерегаться использования его для реальной безопасности, его раунды должны быть слишком низкими. Единственный раз, когда такие реализации будут достаточно быстрыми, находится под pypy, и это не та ситуация, с которой вы столкнулись.


То, что вы хотите использовать, - это что-то, основанное на доступном хэш-примитиве, таком как SHA-2. Таким образом, бит тяжелого вычисления будет по-прежнему записываться на C, даже под GAE. Я бы рекомендовал что-то, основанное на PBKDF2 или SHA-512-Crypt (обратите внимание: это не просто простой хэш sha512). Безопасность алгоритмов так же хороша, но реализация на чистом питоне будет намного более эффективной, поскольку они могут использовать hashlib для тяжелого подъема.

Библиотека Passlib может быть полезна в этом случае, она содержит реализации PBKDF2 и SHA-512-Crypt в чистом питоне. (Отказ от ответственности: я являюсь автором этой библиотеки). Другая библиотека Python с поддержкой PBKDF2 - Cryptacular.