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

Контекст

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

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

Сценарий

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

  1. 2017-01- 01 я создаю связку ключей и ключ A (который на самом деле является A_ver1, потому что ключи версируются). Кроме того, политика ротации ключей настроена на запуск ротации ежегодно.
  2. 15 января 2017 г. я запускаю команду, чтобы зашифровать 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. Я загружаю файл, а затем пытаюсь запустить команду, чтобы расшифровать файл с помощью _10 _...

Вопросы

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

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


person Igor Soloydenko    schedule 06.09.2017    source источник


Ответы (2)


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

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

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

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

person Maya Kaczorowski    schedule 06.09.2017
comment
Спасибо, Майя, за подробные ответы на оба вопроса. - person Igor Soloydenko; 06.09.2017

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

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

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

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

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

person butko    schedule 06.09.2017