Где хранил пароли на предыдущих проектах

«Где хранил пароли на предыдущих проектах» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хранили пароли только в хешированном виде с использованием bcrypt или Argon2. Никогда не хранили в plaintext. Пример хеширования bcrypt в Go:

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

func HashPassword(password string) (string, error) {
    bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
    return string(bytes), err
}

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

Для production использовали:

  • Соль автоматически добавляется bcrypt
  • Настраивали достаточную стоимость (cost factor)
  • Рассматривали вариант перехода на Argon2 для более строгих требований безопасности