В библиотеке bcrypt.js параметр rounds (cost factor)
определяет вычислительную сложность алгоритма хеширования пароля.
Внутренне он задаёт количество итераций экспоненциального роста
нагрузки, что напрямую влияет на время вычисления хеша и устойчивость к
перебору.
bcrypt.js использует схему адаптивного хеширования, где увеличение
rounds на единицу удваивает вычислительную стоимость операции. Это
делает подбор пароля атакующим всё более дорогим с ростом значения
параметра.
Экспоненциальная природа
стоимости
Математическая модель bcrypt основана на следующем принципе:
2^{cost}
где cost — значение rounds.
Каждое увеличение параметра на 1 приводит к удвоению времени
вычисления хеша:
- cost = 10 → базовый уровень
- cost = 11 → ×2 времени
- cost = 12 → ×4 времени относительно 10
- cost = 13 → ×8 времени относительно 10
Это свойство делает bcrypt устойчивым к перебору даже при росте
вычислительных мощностей.
Влияние
rounds на безопасность и производительность
Параметр rounds одновременно определяет:
Уровень безопасности
- увеличение стоимости brute-force атак
- рост времени перебора каждого пароля
Производительность системы
- задержка при регистрации и входе
- нагрузка на CPU при пиковой активности
- масштабируемость auth-сервиса
Баланс между этими факторами является ключевым при выборе
значения.
Практические диапазоны
значений
В современных системах используются следующие ориентиры:
Низкий уровень (не рекомендуется для production)
- 8–9 rounds
- подходит для тестов и временных сред
- высокая уязвимость к перебору
Стандартный уровень (основной диапазон)
- 10–12 rounds
- оптимальный баланс для большинства веб-приложений
- широко используется в продакшн-средах
Повышенный уровень безопасности
- 13–14 rounds
- подходит для систем с повышенными требованиями к защите
- заметная нагрузка на сервер
Экстремальные значения
- 15+ rounds
- редко применяются из-за высокой задержки
- возможны только при специализированных требованиях
Поведение в разных
окружениях
Разработка (development)
При локальной разработке важна скорость итераций, а не стойкость к
атакам.
- 8–10 rounds
- минимизация задержек при тестировании логики
- ускорение CI/CD процессов
Тестирование и CI/CD
В автоматизированных пайплайнах критично время выполнения.
- 8–9 rounds
- стабильность выполнения тестов
- предсказуемая нагрузка
Продакшн веб-приложения
Основная область применения требует баланса.
- 10–12 rounds как стандарт
- 11 часто используется как компромисс
- 12 при повышенных требованиях безопасности
Высоконагруженные системы
Системы с большим количеством аутентификаций в секунду требуют
осторожного выбора.
- 10–11 rounds
- обязательное использование rate limiting
- асинхронная обработка хеширования
Serverless окружения
Ограничения по времени выполнения функции критичны.
- 9–11 rounds
- зависимость от лимитов платформы (AWS Lambda, Cloud Functions)
- возможные таймауты при высоких значениях
Мобильные и edge-системы
Ограниченные вычислительные ресурсы требуют снижения стоимости.
- 8–10 rounds
- минимизация энергопотребления
- сокращение задержек UX
Методика подбора
оптимального значения
Подбор rounds выполняется не теоретически, а через измерение времени
хеширования на целевой инфраструктуре.
Типичный подход:
- Измерение времени выполнения одного хеша
- Определение допустимой задержки (например, 100–500 мс)
- Подбор максимального rounds, укладывающегося в лимит
- Проверка нагрузки под concurrency
Практическая цель — удерживать время хеширования в пределах:
- 100–250 мс для интерактивных систем
- до 500 мс для менее чувствительных к задержке систем
Пример оценки времени роста
Рост времени при увеличении rounds демонстрирует экспоненциальную
зависимость:
T_{n} = T_{0} ^{(n - n_{0})}
где:
- (T_n) — время при новом значении rounds
- (T_0) — базовое время
- — текущий cost factor
Частые ошибки при выборе
rounds
Слишком низкие значения
- использование 8–9 rounds в production
- недооценка возможностей GPU/ASIC атак
Слишком высокие значения без тестов
- деградация UX из-за задержек входа
- перегруз CPU при массовых логинах
Игнорирование масштабирования
- значение выбирается без учёта роста пользователей
- отсутствие пересмотра параметра с течением времени
Отсутствие адаптации под окружения
- одинаковые rounds для dev и production
- отсутствие профилирования на реальном железе
Эволюция выбора rounds
С течением времени рекомендуемые значения смещаются вверх из-за роста
вычислительных мощностей.
- ранее: 8–10 считались нормой
- современный стандарт: 10–12
- будущая тенденция: постепенное повышение при сохранении
UX-ограничений
Адаптивный подход подразумевает регулярный пересмотр значения с
учётом изменения инфраструктуры и угроз.