1. Обзор
Cloud KMS — это облачный сервис управления ключами, позволяющий управлять криптографическими ключами для облачных сервисов так же, как и в локальной среде. Он поддерживает шифрование, расшифровку, подписание и проверку с использованием различных типов и источников ключей, включая Cloud HSM для аппаратных ключей. В этом руководстве вы узнаете, как шифровать и расшифровывать данные с помощью асимметричных ключей Cloud KMS.
Вы узнаете
- Как включить API Cloud KMS
- Как сделать брелок для ключей
- Как создать криптографический ключ для асимметричного шифрования/дешифрования
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в Cloud Console и создайте новый проект или используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)
Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .
- Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.
Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
В этом практическом задании вы будете использовать Cloud Shell — бесплатную виртуализированную среду, работающую в Google Cloud. В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:
Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть что-то подобное:
Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Если не указано иное, все команды следует выполнять из этой оболочки.
3. Включите облачную службу 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.