Какие алгоритмы хеширования вы бы порекомендовали мне использовать в Python3, которые могут генерировать случайную соль, кроме bcrypt?

Проблема, с которой я столкнулся с bcrypt, заключается в том, что модуль нельзя импортировать в приложение Pythonista на iOS, где мне нужно запустить мой скрипт. Что еще вы могли бы порекомендовать, как bcrypt, который может генерировать случайную соль и имеет что-то вроде встроенной функции checkpw() для быстрой проверки соленых паролей?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если pbkdf2 изначально доступен, я бы использовал его, прежде чем пытаться свернуть свой собственный bcrypt. Когда его рабочие факторы достаточно велики, это все еще хороший выбор, когда bcrypt или scrypt недоступны, и его использование напрямую безопаснее, чем пытаться воссоздать что-то еще вручную.

Не зная больше о вашем варианте использования, общая рекомендация: используйте pbkdf2 с достаточно большим количеством раундов, чтобы занять примерно полсекунды верхней границы пропускной способности процессора ваших целевых устройств. Это удерживает UX в пределах допустимого времени ожидания, но при этом обеспечивает разумную устойчивость к атакам в автономном режиме.

Я бы также рекомендовал рандомизировать это количество раундов немного больше диапазона (например, тысячи). Например, если вы остановились на 200 000 как на приемлемой задержке в 500 мс, я бы случайным образом выбрал значение от 200 000 до 202 000 (или что-то в этом роде) — все, что необходимо для обеспечения того, чтобы у большинства пользователей были разные раунды друг от друга (при условии, что что все пароли пользователей могут быть собраны в одном месте, которое может быть скомпрометировано, а хэши украдены). Это связано с тем, что некоторые из новых «ассоциативных»/«корреляционных» атак хорошо работают только против большого набора хэшей, когда все факторы стоимости для этого набора хэшей одинаковы.

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

Другие вопросы по теме