Sobes.tech
Назад к вопросам
Middle+
10

Как безопасно хранить пароли пользователей в базе данных информационной системы с локальной аутентификацией?

Компании, где спрашивали
СовкомбанкСовкомбанк

Ответ от нейросети

sobes.tech AI

Для безопасного хранения паролей пользователей в базе данных необходимо использовать криптографически стойкие хеш-функции с солью и адаптивным фактором сложности (например, Argon2, bcrypt или PBKDF2). Пароли не должны храниться в открытом виде или с простым хешем (например, MD5, SHA1).

Основные рекомендации:

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

Пример на псевдокоде с bcrypt:

import "golang.org/x/crypto/bcrypt"

func HashPassword(password string) ([]byte, error) {
    // bcrypt сам генерирует соль и включает её в хеш
    return bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
}

func CheckPasswordHash(password string, hash []byte) bool {
    err := bcrypt.CompareHashAndPassword(hash, []byte(password))
    return err == nil
}

Таким образом, даже при компрометации базы данных, восстановить исходные пароли крайне сложно.