Система управления ключами Google: дешифрование данных после ротации ключей

контекст

Я следую инструкциям GCP по хранению секретов в хранилище. KMS используется для шифрования файлов перед загрузкой в ​​Storage Bucket.

Поскольку шифрование данных происходит вне хранилища Google, я немного запутался с одним аспектом ротации ключей.

сценарий

Давайте рассмотрим конкретный сценарий:

  1. На 2017-01-01 создаю брелок и ключ A (что на самом деле A_ver1 потому что ключи версированы). Кроме того, политика ротации ключей настроена так, чтобы запускать ротацию ежегодно.
  2. 2017-01-15 я запускаю команду для шифрования some_file.txt с A_ver1: curl -s -X POST "https://cloudkms.googleapis.com/v1/projects/my-project/<...>" \ -d "{\"plaintext\":\"<...SOME_FILE_CONTENT...>\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json",
  3. Я немедленно сохраняю результат шифрования в Storage Bucket как some_file.txt.encrypted,
  4. Я ничего не делаю, и в 2018-01-01 происходит поворот ключа. Как я понимаю, A_ver1 отключается, A_ver2 генерируется и активируется. Эти два события происходят почти одновременно.
  5. На 2018-06 -01 я понимаю, что мне нужно расшифровать some_file.txt.encrypted, Я загружаю файл, затем пытаюсь запустить команду для дешифрования файла, используя A_ver2...

Вопросы

Вопрос 1: Что произойдет, когда я попытаюсь расшифровать файл с A_ver2 если он был зашифрован с более ранней версией A_ver1?

Вопрос 2: Если не удалось расшифровать, что я должен делать в первую очередь, чтобы предотвратить это?

2 ответа

Решение

В вашем сценарии описание вращения на шаге 4 не совсем верно. Когда вы поворачиваете CryptoKey, генерируется новый CryptoKeyVersion, который становится основной версией CryptoKey, но со старой версией ничего не происходит. То есть для вашего сценария A_ver1 все еще включен, но другая активная версия A_ver2 является основной версией.

Чтобы ответить на ваши вопросы,

Вопрос 1: Когда вы пытаетесь расшифровать файл, вам не нужно указывать CryptoKeyVersion, только CryptoKey; сервис подберет для вас правильную версию. Если вы попытаетесь расшифровать файл, который был зашифрован с помощью CryptoKeyVersion, который теперь отключен (или уничтожен), то вызов расшифровки завершится неудачно.

Вопрос 2: Это зависит от того, что вы оптимизируете. Если вы используете ротацию, чтобы попытаться ограничить объем данных, зашифрованных, например, какой-либо одной версией, вы можете не захотеть отключать старые версии и хранить их в течение длительного периода времени. Возможно, вы захотите отключить только ключевые версии, а не только большое количество версий. В этом случае вы можете отследить, какую версию ключа вы использовали для определенного фрагмента данных, и повторно зашифровать все затронутые данные.

Старые версии не отключаются автоматически при вращении.

Вопрос 1: Когда вы расшифровываете с определенной CryptoKey, сервер выбирает правильную версию (упомянутую в документе Расшифровать). Пока версия не отключена, она все еще может использоваться.

Вопрос 2: В вашем конкретном сценарии дешифрование не завершится неудачей из-за использования старой версии.

Ротация ключей упоминала поведение, которое вы ожидаете, и поскольку в нем отмечается, что реализация стратегии, которая перекодирует данные с новыми версиями и отключает старые, может быть сложной.

Пожалуйста, дайте мне знать, если у вас есть другие вопросы.

Другие вопросы по тегам