Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Key Management Service
  • Начало работы
  • Пошаговые инструкции
  • Концепции
    • Обзор
    • Ключ
    • Версия ключа
    • Шифрование
    • Шифрование по схеме envelope encryption
    • Консистентность ключей
    • Аппаратный модуль безопасности (HSM)
    • Квоты и лимиты
  • Практические руководства
  • Управление доступом
  • Правила тарификации
  • Справочник API
  • Вопросы и ответы
  • Обучающие курсы
  1. Концепции
  2. Шифрование по схеме envelope encryption

Шифрование по схеме envelope encryption

Статья создана
Yandex Cloud
  • Описание процесса шифрования
  • Описание процесса расшифровки
  • Особенности реализации схемы envelope encryption

У шифрования методом encrypt есть ограничение на максимальный размер данных для шифрования (32 КБ). Рост объема данных вызывает ряд проблем:

  • Повышение нагрузки на KMS, вызванное операциями шифрования и расшифровки.

  • Понижение эффективности шифрования и расшифровки методами encrypt и decrypt с ростом объема данных для шифрования.

    Время выполнения encrypt и decrypt операций включает в себя передачу данных от клиента к KMS и обратно. С ростом объема шифруемых данных растет время на их передачу и нагрузка на сеть.

Шифрование по схеме envelope encryption осуществляется в основном на стороне клиента и помогает избежать перечисленные выше проблемы.

Описание процесса шифрования

В отличие от шифрования напрямую, когда ключ KMS выступает в роли ключа шифрования данных, в схеме участвуют ключи двух типов:

  • Ключ шифрования данных (data encryption key, DEK).
  • Ключ шифрования ключа (key encryption key, KEK).

Шифрование происходит следующим образом:

  1. Клиент генерирует ключ шифрования данных (DEK) и локально шифрует им данные.

    Для формирования ключа с высокой энтропией рекомендуется использовать метод generateDataKey. Он генерирует ключ на основе алгоритма Fortuna, агрегирующий энтропию с различных источников (RDSEED и RDRAND, /dev/urandom, энтропия с хостов).

  2. Клиент выполняет encrypt-запрос к KMS на шифрование DEK.

  3. Клиент получает зашифрованный DEK.

    Ключ KMS, которым выполняется шифрование DEK, выступает в данной схеме в роли ключа шифрования ключа (KEK).

  4. Незашифрованный DEK уничтожается клиентом.

  5. Зашифрованный DEK сохраняется клиентом рядом с шифртекстом.

image

При шифровании по схеме envelope encryption для локального шифрования вы можете использовать более широкий набор алгоритмов, а также шифровать данные несколькими DEK, например, для возможности произвольного доступа к шифртексту.

Описание процесса расшифровки

Расшифровка происходит следующим образом:

  1. Клиент читает зашифрованный DEK, сохраненный рядом с зашифрованными данными.
  2. Клиент выполняет decrypt-запрос к KMS на расшифрование DEK.
  3. Клиент получает расшифрованный DEK.
  4. Зашифрованные данные локально расшифровываются с помощью DEK.
  5. DEK уничтожается.

Особенности реализации схемы envelope encryption

Шифрование по схеме envelope encryption перекладывает часть ответственности за безопасное шифрование данных на клиента. При реализации данной схемы важно:

  • Использовать безопасные алгоритмы для локального шифрования.

  • Не сохранять ключ шифрования данных (DEK) в открытом виде.

    Важно

    Открытый DEK должен расшифровываться только на время шифрования или расшифровки данных и уничтожаться сразу после этого.

  • Использовать разные DEK для разных данных.

  • Генерировать новые DEK при повторном шифровании данных.

Чтобы избежать ошибок, для шифрования на стороне клиента рекомендуется использовать AWS Encryption SDK или Google Tink.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Описание процесса шифрования
  • Описание процесса расшифровки
  • Особенности реализации схемы envelope encryption