Шифрование и дешифрование данных с помощью Cloud KMS (асимметричное)

1. Обзор

Cloud KMS — это облачная служба управления ключами, которая позволяет вам управлять криптографическими ключами для ваших облачных служб так же, как вы это делаете локально. Он включает поддержку шифрования, дешифрования, подписи и проверки с использованием различных типов ключей и источников, включая Cloud HSM для аппаратных ключей. Из этого руководства вы узнаете, как шифровать и расшифровывать данные с помощью асимметричных ключей Cloud KMS.

Ты научишься

  • Как включить Cloud KMS API
  • Как создать брелок для ключей
  • Как создать криптоключ для асимметричного шифрования/дешифрования

2. Настройка и требования

Самостоятельная настройка среды

  1. Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID .

  1. Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.

Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

В этой лаборатории кода вы будете использовать Cloud Shell , бесплатную виртуализированную среду, работающую в Google Cloud. В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Если не указано иное, запускайте все команды из этой оболочки.

3. Включите службу Cloud KMS.

Прежде чем вы сможете использовать Cloud KMS, вам необходимо сначала включить службу в своем проекте. Это необходимо сделать только один раз для каждого проекта. Чтобы включить службу Cloud KMS, выполните следующую команду:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

Включение может занять до минуты. Команда сообщит об успехе после завершения.

4. Создайте ключ KMS.

Создайте связку ключей Cloud KMS. В Cloud KMS связка ключей — это логический набор криптографических ключей. Связка ключей содержит метаданные о ключах, например их расположение. Создайте связку ключей с именем my-keyring в global регионе:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Теперь создайте криптоключ с именем my-asymmetric-encryption-key с целью asymmetric-encryption внутри только что созданного набора ключей.

$ gcloud kms keys create "my-asymmetric-encryption-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-encryption" \
    --default-algorithm "rsa-decrypt-oaep-4096-sha512"

5. Шифрование данных

При использовании асимметричных ключей Cloud KMS не выполняет шифрование. Вместо этого он обеспечивает доступ к открытому ключу, и вы шифруете данные с помощью этого открытого ключа с помощью шифрования с открытым ключом . Благодаря асимметричным ключам шифрование может выполняться полностью автономно и не требует доступа к Cloud KMS или каким-либо другим API-интерфейсам Google Cloud. Шифрование выполняется с помощью криптографического инструмента, такого как openssl или с помощью языка программирования или библиотеки, поддерживающей шифрование с открытым ключом.

Загрузите открытый ключ из Cloud KMS:

$ gcloud kms keys versions get-public-key "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --output-file ./key.pub

Создайте файл с данными для шифрования и используйте инструмент командной строки openssl для шифрования данных в файле:

$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \
    -in ./data.txt \
    -inkey ./key.pub \
    -pkeyopt "rsa_padding_mode:oaep" \
    -pkeyopt "rsa_oaep_md:sha512" \
    -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc

Зашифрованные данные (также известные как «зашифрованный текст») будут сохранены в data.txt.enc на диске. Если вы откроете файл data.txt.enc , вы заметите, что в нем есть странные непечатаемые символы. Это связано с тем, что результирующие данные имеют двоичный формат .

При хранении зашифрованного текста в базе данных или передаче его как части HTTP-запроса вам может потребоваться закодировать данные. Наиболее распространенным механизмом кодирования зашифрованного текста является base64.

Cloud KMS не сохраняет предоставленный вами открытый текст. Вам необходимо сохранить этот зашифрованный текст в безопасном месте, так как он потребуется для получения значения открытого текста.

6. Расшифровать данные

В отличие от шифрования, для расшифровки данных, зашифрованных с помощью асимметричного ключа Cloud KMS, требуется онлайн-доступ к сервису Cloud KMS. Расшифруйте зашифрованный текст из файла с помощью инструмента командной строки gcloud :

$ gcloud kms asymmetric-decrypt \


    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --version "1" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

Инструмент командной строки gcloud считывает зашифрованный текст из файла и расшифровывает его с помощью Cloud KMS. Обратите внимание, что в этом примере аргумент --plaintext-file указан как - . Это инструктирует gcloud распечатать результат на терминале.

Консоль выведет my-contents — то же значение открытого текста, что и в файле выше.

7. Поздравляем!

Вы включили API Cloud KMS, создали ключ асимметричного шифрования, а также зашифровали и расшифровали данные! Cloud KMS — мощный продукт, и шифрование/дешифрование — это лишь малая часть его возможностей.

Очистить

Если вы закончили изучение, рассмотрите возможность удаления проекта.

  • Перейдите в консоль облачной платформы.
  • Выберите проект, который хотите закрыть, затем нажмите «Удалить» вверху. Это планирует удаление проекта.

Узнать больше

Лицензия

Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.