> Какие требования по шифрованию данных существуют (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

В современных Go-приложениях требования к шифрованию данных делятся на три уровня: при передаче (in-transit), при хранении (at-rest) и в оперативной памяти (in-use).

  1. Шифрование при передаче (TLS/HTTPS)
    В Go это реализуется через стандартный пакет crypto/tls. Обязательно использование TLS 1.2 или 1.3, отказ от устаревших шифров (например, RC4, 3DES). Пример минимальной конфигурации сервера:

    GO
    tlsConfig := &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,
    },
    }
  2. Шифрование при хранении (AES-256-GCM)
    Для данных в БД или файлах используйте симметричное шифрование с ключом, хранящимся в безопасном хранилище (например, HashiCorp Vault или AWS KMS). В Go - пакет crypto/aes и crypto/cipher:

    GO
    block, _ := aes.NewCipher(key)
    gcm, _ := cipher.NewGCM(block)
    ciphertext := gcm.Seal(nonce, nonce, plaintext, nil)

    Обязательно генерировать уникальный nonce (12 байт) для каждого шифрования.

  3. Шифрование паролей и секретов
    Пароли хэшируйте с помощью bcrypt (пакет golang.org/x/crypto/bcrypt) или Argon2id. Для API-ключей используйте HMAC-SHA256.

  4. Управление ключами
    Никогда не храните ключи в коде или репозитории. Используйте переменные окружения, защищённые vault-решениями, или встроенный пакет crypto/rand для генерации ключей.

  5. Шифрование в памяти
    Для чувствительных данных (например, токенов) используйте crypto/subtle.ConstantTimeCompare для сравнения без утечки времени, а после использования затирайте слайсы: copy(slice, make([]byte, len(slice))).

Эти требования соответствуют OWASP и PCI DSS. В Go стандартная библиотека покрывает 90% задач, но для сложных сценариев (например, шифрование больших файлов) рекомендуется github.com/google/tink/go.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью