#python-3.x #hash #passwords #pythonista
#python-3.x #хэш #пароли #pythonista
Вопрос:
Проблема, с которой я сталкиваюсь с bcrypt, заключается в том, что модуль не может быть импортирован в приложение Pythonista на iOS, где мне нужно запустить мой скрипт. Что еще вы бы порекомендовали, похожее на bcrypt, которое может генерировать случайную соль и имеет что-то вроде встроенной функции checkpw() для быстрой проверки соленых паролей?
Ответ №1:
Если pbkdf2 изначально доступен, я бы использовал его, прежде чем пытаться создать свой собственный bcrypt. Когда его рабочие факторы достаточно велики, это все равно надежный выбор, когда bcrypt или scrypt недоступны, и использовать его напрямую безопаснее, чем пытаться воссоздать что-то еще вручную.
Не зная больше о вашем варианте использования, общая рекомендация: используйте pbkdf2 с достаточно большим количеством раундов, чтобы примерно на полсекунды увеличить пропускную способность процессора ваших целевых устройств. Это позволяет поддерживать UX в допустимых пределах времени ожидания, обеспечивая при этом разумную устойчивость к атаке в автономном режиме.
Я бы также рекомендовал рандомизировать это количество раундов, немного превышающее диапазон (например, тысячу). Например, если вы выбрали 200 000 как имеющие приемлемую задержку в 500 мс, я бы случайным образом выбрал значение от 200 000 до 202 000 (или что-то в этом роде) — все, что необходимо для обеспечения того, чтобы у большинства пользователей были разные раунды друг от друга (при условии, что все пароли пользователей могут быть объединены в одно местоэто может быть скомпрометировано и хэши украдены). Это связано с тем, что некоторые из более новых «ассоциативных» / «корреляционных» атак хорошо работают только против большого набора хэшей, когда все факторы стоимости для этого набора хэшей одинаковы.
В долгосрочной перспективе также убедитесь, что ваш код легко принимает переменные нижний и верхний пределы для количества раундов, чтобы вы могли увеличивать количество раундов с течением времени по мере продвижения процессоров. (Вы могли бы даже пофантазировать и динамически вычислить диапазон раундов в зависимости от процессора, на котором создается пароль, чтобы он был готов к будущему без какого-либо дополнительного вмешательства.)