Шифрование по схеме envelope encryption
У шифрования методом encrypt есть ограничение на максимальный размер данных для шифрования (32 КБ). Рост объема данных вызывает ряд проблем:
-
Повышение нагрузки на KMS, вызванное операциями шифрования и расшифрования.
-
Понижение эффективности шифрования и расшифрования методами encrypt и decrypt с ростом объема данных для шифрования.
Время выполнения encrypt и decrypt операций включает в себя передачу данных от клиента к KMS и обратно. С ростом объема шифруемых данных растет время на их передачу и нагрузка на сеть.
Шифрование по схеме envelope encryption осуществляется в основном на стороне клиента и помогает избежать перечисленные выше проблемы.
Описание процесса шифрования
В отличие от шифрования напрямую
, когда ключ KMS выступает в роли ключа шифрования данных, в схеме участвуют ключи двух типов:
- Ключ шифрования данных (data encryption key, DEK).
- Ключ шифрования ключа (key encryption key, KEK).
Шифрование происходит следующим образом:
-
Клиент генерирует ключ шифрования данных (DEK) и локально шифрует им данные.
Для формирования ключа с высокой энтропией рекомендуется использовать метод generateDataKey. Он генерирует ключ на основе алгоритма Fortuna, агрегирующий энтропию с различных источников (RDSEED и RDRAND, /dev/urandom, энтропия с хостов).
-
Клиент выполняет encrypt-запрос к KMS на шифрование DEK.
-
Клиент получает зашифрованный DEK.
Ключ KMS, которым выполняется шифрование DEK, выступает в данной схеме в роли ключа шифрования ключа (KEK).
-
Незашифрованный DEK уничтожается клиентом.
-
Зашифрованный DEK сохраняется клиентом рядом с шифртекстом.
При шифровании по схеме envelope encryption для локального шифрования вы можете использовать более широкий набор алгоритмов, а также шифровать данные несколькими DEK, например, для возможности произвольного доступа к шифртексту.
Описание процесса расшифрования
Расшифрование происходит следующим образом:
- Клиент читает зашифрованный DEK, сохраненный рядом с зашифрованными данными.
- Клиент выполняет decrypt-запрос к KMS на расшифрование DEK.
- Клиент получает расшифрованный DEK.
- Зашифрованные данные локально расшифровываются с помощью DEK.
- DEK уничтожается.
Особенности реализации схемы envelope encryption
Шифрование по схеме envelope encryption перекладывает часть ответственности за безопасное шифрование данных на клиента. При реализации данной схемы важно:
-
Использовать безопасные алгоритмы для локального шифрования.
-
Не сохранять ключ шифрования данных (DEK) в открытом виде.
Важно
Открытый DEK должен расшифровываться только на время шифрования или расшифрования данных и уничтожаться сразу после этого.
-
Использовать разные DEK для разных данных.
-
Генерировать новые DEK при повторном шифровании данных.
Чтобы избежать ошибок, для шифрования на стороне клиента рекомендуется использовать AWS Encryption SDK или Google Tink.