使用 Cloud KMS 簽署及驗證資料 (非對稱)

1. 總覽

Cloud KMS 是雲端託管型金鑰管理服務,能讓您比照內部部署方式,管理雲端服務加密編譯金鑰。包括使用各種金鑰類型和來源的加密、解密、簽署和驗證功能,包括硬體支援金鑰的 Cloud HSM。本教學課程將說明如何使用非對稱 Cloud KMS 金鑰簽署及驗證資料。

您將學到

  • 如何啟用 Cloud KMS API
  • 如何建立金鑰環
  • 如何建立用於非對稱式簽署/驗證的加密編譯金鑰

2. 設定和需求

自助式環境設定

  1. 登入 Cloud 控制台,然後建立新專案或重複使用現有專案。(如果您還沒有 Gmail 或 G Suite 帳戶,請務必建立帳戶)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

請記住專案 ID,這是所有 Google Cloud 專案的專屬名稱 (上述名稱已被使用,因此無法使用)。這個值稍後會在本程式碼研究室中稱為 PROJECT_ID

  1. 接著,您需要在 Cloud 控制台中啟用帳單功能,才能使用 Google Cloud 資源。

執行本程式碼研究室時,費用應該不會太高,請務必按照「清除」一節中的操作說明,瞭解如何關閉資源,避免產生教學課程以外的帳單費用。Google Cloud 新使用者可享有 $300 美元的免費試用期

啟動 Cloud Shell

在本程式碼研究室中,您將使用 Cloud Shell,這是在 Google Cloud 上執行的免費虛擬化環境。在 GCP 主控台中,按一下右上方工具列的 Cloud Shell 圖示:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

佈建並連線至環境的作業需要一些時間才能完成。完成後,畫面應如下所示:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提升網路效能和驗證功能。除非另有說明,否則請透過這個 Shell 執行所有指令。

3. 啟用 Cloud KMS 服務

您必須先在專案中啟用 Cloud KMS,才能使用這項服務。每項專案只需要執行這項作業一次。如要啟用 Cloud KMS 服務,請執行下列指令:

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

啟用這項功能最多需要一分鐘的時間。指令完成後會回報成功。

4. 建立 KMS 金鑰

建立 Cloud KMS 金鑰環。在 Cloud KMS 中,金鑰環是加密編譯金鑰的邏輯集合。金鑰環包含金鑰的中繼資料,例如位置。在 global 區域中建立名為 my-keyring 的金鑰環:

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

接著,請在您剛建立的金鑰環中,建立名為 my-asymmetric-signing-key 的 CryptoKey,並將用途設為 asymmetric-signing

$ gcloud kms keys create "my-asymmetric-signing-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-signing" \
    --default-algorithm "rsa-sign-pkcs1-4096-sha512"

5. 簽名資料

與加密作業不同,使用非對稱 Cloud KMS 金鑰加密的資料必須透過線上方式存取 Cloud KMS 服務才能解密。使用 gcloud 指令列工具解密檔案中的密文:

建立含有要簽署資料的檔案,然後使用 gcloud 指令列工具,透過 Cloud KMS 金鑰簽署資料:

$ echo "my-contents" > ./data.txt
$ gcloud kms asymmetric-sign \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --version "1" \
    --digest-algorithm "sha512" \
    --input-file ./data.txt \
    --signature-file ./data.txt.sig

簽章會儲存在磁碟上的 data.txt.sig 中。開啟 data.txt.sig 檔案後,您會發現其中含有奇怪的不可列印字元。這是因為結果資料採用 二進位格式

將簽章儲存在資料庫中,或將其傳送為 HTTP 要求的一部分時,您可能需要編碼資料。常見的編碼機制是 base64。

6. 驗證資料

使用非對稱金鑰時,Cloud KMS 不會直接執行驗證作業。而是提供公開金鑰存取權,您可以透過公開金鑰密碼編譯使用該公開金鑰驗證資料。使用非對稱金鑰時,驗證作業可完全離線進行,且不需要存取 Cloud KMS 或任何其他 Google Cloud API。驗證作業會使用 openssl 等密碼編譯工具,或是使用支援公開金鑰密碼編譯的程式設計語言或程式庫。

從 Cloud KMS 下載公開金鑰:

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

使用 openssl 指令列工具,驗證簽名是否與公開金鑰相符:

$ openssl dgst -sha256 \
    -verify ./key.pub \
    -signature ./data.txt.sig ./data.txt

控制台會顯示成功訊息,指出數位簽名有效。

Verified OK

7. 恭喜!

您已啟用 Cloud KMS API、建立非對稱簽署金鑰,並簽署及驗證資料!Cloud KMS 是一項強大的產品,簽署/驗證功能只是其功能的冰山一角。

清理

如果您已完成探索,請考慮刪除專案。

  • 前往 Cloud Platform Console
  • 選取要關閉的專案,然後點選頂端的「刪除」。這會排定刪除專案的時間。

瞭解詳情

授權

這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。