將金鑰格式化以便匯入

本主題說明如何設定金鑰格式,讓 Cloud KMS 能夠將金鑰匯入為新的金鑰版本。

密鑰內容的正確格式,視密鑰內容是要匯入至對稱金鑰還是非對稱金鑰中而定。如要進一步瞭解對稱金鑰與非對稱金鑰之間的差異,請參閱金鑰用途與演算法一文。

支援的金鑰格式

  • 用於加密的對稱式金鑰: 匯入的對稱式金鑰必須是 16 位元組 (僅限原始對稱式加密) 或 32 位元組的二進位資料,且不得編碼。 如果金鑰採用十六進位或 base64 編碼,您必須先解碼,再嘗試匯入。
  • 用於簽署的對稱金鑰 (MAC 金鑰):匯入的 HMAC 簽署金鑰長度必須等於所用加密編譯雜湊函式的輸出長度 (例如,HMAC-SHA256 金鑰長度必須為 32 位元組),且不得編碼。如果金鑰採用十六進位或 base64 編碼,您必須先解碼再嘗試匯入。
  • 用於加密或簽署的非對稱金鑰:匯入的非對稱金鑰必須採用 PKCS #8 格式,且必須採用 DER 編碼。PCKS #8 格式定義於 RFC 5208。DER 編碼定義於 國際電信聯盟 X.680。非對稱金鑰必須使用 Cloud KMS 支援的長度和演算法組合之一。

金鑰建立後,金鑰的部分內容 (例如金鑰長度) 就無法再變更。在這種情況下,金鑰無法匯入 Cloud KMS。

檢查對稱金鑰

使用 wc 指令查看對稱金鑰的長度。

wc -c /path/to/unwrapped-key
  • 您無法匯入長度為 32 以外的對稱加密金鑰。

  • 對稱簽署金鑰 (MAC 金鑰) 的長度必須與所用加密編譯雜湊函式的輸出長度相同 (例如,HMAC-SHA256 金鑰的長度必須為 32 個位元組)。

使用 file 指令查看金鑰的格式。

file /path/to/unwrapped-key
  • 如果輸出結果是 data,表示金鑰的格式正確,可以匯入。

  • 如果輸出內容是 ASCII text,請使用 cat 指令顯示檔案內容。

    • 如果是字母和數字組成的字串,且結尾為 = 符號,則可能是 Base64 編碼。使用 base64 指令 (Windows 上的 Base64.exe) 解碼。以下是 Base64 編碼金鑰的範例:

      THzArjassB+giKeNeT1Zr74OgV24t+Ep+37Ec6ojB3Y=
      
    • 如果包含一或多行十六進制數字,則可能是十六進位編碼。請使用 xxd 指令 (或 Windows 上的 Format-Hex PowerShell 指令) 進行解碼。以下是十六進位編碼金鑰的範例:

      00000000: 4c7c c0ae 36ac b01f a088 a78d 793d 59af  L|..6.......y=Y.
      00000010: be0e 815d b8b7 e129 fb7e c473 aa23 0776  ...]...).~.s.#.v
      
    • 如果包含任何其他文字,可能就不是有效的對稱金鑰。

非對稱金鑰格式設定

您可以匯入使用任何支援演算法的非對稱金鑰。實際上,要回溯判斷用於建立非對稱式金鑰的演算法並不容易。因此,建議您在嘗試將非對稱金鑰匯入 Cloud KMS 前,先對每個非對稱金鑰執行下列指令。

  1. 使用 file 指令查看金鑰的格式。

    file /path/to/unwrapped-key
    
    • 如果輸出結果是 PEM,表示金鑰採用 PEM 格式。如果是 ASCII text,則可能是 PEM 格式。無論是哪種情況,請執行下列指令,將其轉換為 PCKS#8 DER 格式:

      openssl pkcs8 -topk8 -nocrypt -inform PEM -outform DER \
          -in /path/to/asymmetric-key-pem \
          -out /path/to/formatted-key
      
    • 如果輸出結果是 data,則金鑰很可能是 DER 格式,但可能不是 PKCS #8 格式。執行下列指令,確認金鑰的格式正確無誤。如果鍵的格式已正確,這個指令就不會產生任何作用。在這種情況下,您可以使用 diff 指令驗證輸入和輸出檔案是否相同。

      openssl pkcs8 -topk8 -nocrypt -inform DER -outform DER \
          -in /path/to/asymmetric-key-der \
          -out /path/to/formatted-key
      

疑難排解

如果您執行上述指令,且認為金鑰採用適當的格式,但匯入作業仍失敗,請在 Google Cloud 控制台中檢查錯誤,然後參閱疑難排解匯入失敗

後續步驟