Skip to main content

Не используйте криптографическую библиотеку Node.js для паролей, используйте Bcrypt

Объяснение в один абзац

При хранении паролей пользователей рекомендуется использовать адаптивный алгоритм хеширования, такой как bcrypt, предлагаемый bcrypt npm module, а не использовать собственный криптографический модуль Node.js. , Math.random() также никогда не следует использовать как часть генерации пароля или токена из-за его предсказуемости.

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

Пример кода

try {
// asynchronously generate a secure password using 10 hashing rounds
const hash = await bcrypt.hash('myPassword', 10);
// Store secure hash in user record

// compare a provided password input with saved hash
const match = await bcrypt.compare('somePassword', hash);
if (match) {
// Passwords match
} else {
// Passwords don't match
}
} catch {
logger.error('could not hash password.')
}

Что говорят другие блогеры

Из блога Max McCarty:

... это не просто использование правильного алгоритма хеширования. Я много говорил о том, что правильный инструмент также включает в себя необходимый компонент "время" как часть алгоритма хеширования паролей и что это значит для злоумышленника, который пытается взломать пароли с помощью грубой силы.