Ответ
Хранили пароли только в хешированном виде с использованием 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 для более строгих требований безопасности