本主題說明如何設定金鑰格式,讓 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 前,先對每個非對稱金鑰執行下列指令。
使用
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 控制台中檢查錯誤,然後參閱疑難排解匯入失敗。