> Какие требования по шифрованию данных существуют (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
В современных Go-приложениях требования к шифрованию данных делятся на три уровня: при передаче (in-transit), при хранении (at-rest) и в оперативной памяти (in-use).
-
Шифрование при передаче (TLS/HTTPS)
В Go это реализуется через стандартный пакетcrypto/tls. Обязательно использование TLS 1.2 или 1.3, отказ от устаревших шифров (например, RC4, 3DES). Пример минимальной конфигурации сервера:GOtlsConfig := &tls.Config{MinVersion: tls.VersionTLS12,CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,},} -
Шифрование при хранении (AES-256-GCM)
Для данных в БД или файлах используйте симметричное шифрование с ключом, хранящимся в безопасном хранилище (например, HashiCorp Vault или AWS KMS). В Go - пакетcrypto/aesиcrypto/cipher:GOblock, _ := aes.NewCipher(key)gcm, _ := cipher.NewGCM(block)ciphertext := gcm.Seal(nonce, nonce, plaintext, nil)Обязательно генерировать уникальный nonce (12 байт) для каждого шифрования.
-
Шифрование паролей и секретов
Пароли хэшируйте с помощью bcrypt (пакетgolang.org/x/crypto/bcrypt) или Argon2id. Для API-ключей используйте HMAC-SHA256. -
Управление ключами
Никогда не храните ключи в коде или репозитории. Используйте переменные окружения, защищённые vault-решениями, или встроенный пакетcrypto/randдля генерации ключей. -
Шифрование в памяти
Для чувствительных данных (например, токенов) используйтеcrypto/subtle.ConstantTimeCompareдля сравнения без утечки времени, а после использования затирайте слайсы:copy(slice, make([]byte, len(slice))).
Эти требования соответствуют OWASP и PCI DSS. В Go стандартная библиотека покрывает 90% задач, но для сложных сценариев (например, шифрование больших файлов) рекомендуется github.com/google/tink/go.
> Похожие задачи по Go
Кто пишет миграции в проекте
Какая связь между таблицами людей и адресов в базе данных
Как подбирать тайм-ауты для backend взаимодействия, например HTTP запросов
Какие данные кэшируются и как работает кэширование
> Похожие задачи по backend
Кто пишет миграции в проекте
Какая связь между таблицами людей и адресов в базе данных
Как подбирать тайм-ауты для backend взаимодействия, например HTTP запросов
Какие данные кэшируются и как работает кэширование
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью