當用戶使用KMS管理控制臺創建自定義密鑰時,KMS系統會自動為該自定義密鑰生成密鑰材料。
當用戶希望使用自己的密鑰材料時,可通過KMS管理控制臺的“導入密鑰”功能創建密鑰材料為空的自定義密鑰,并將自己的密鑰材料導入該自定義密鑰中。
注意事項
安全性
用戶需要確保符合自己安全要求的隨機源生成密鑰材料。用戶在使用導入密鑰時,需要對自己密鑰材料的安全性負責。請保存密鑰材料的原始備份,以便在意外刪除密鑰材料時,能及時將備份的密鑰材料重新導入KMS。
可用性與持久性
在將密鑰材料導入KMS之前,用戶需要確保密鑰材料的可用性和持久性。
導入的密鑰材料與通過KMS創建密鑰時自動生成的密鑰材料的區別,如下表所示。
| 密鑰材料來源 | 區別 |
|---|---|
| 導入的密鑰 | 可以手動刪除密鑰材料,但不能刪除該自定義密鑰及其元數據。 在導入密鑰材料時,可以設置密鑰材料失效時間,密鑰材料失效后,KMS將在24小時以內自動刪除密鑰材料,但不會刪除該自定義密鑰及其元數據。建議用戶在本地密鑰管理基礎設施中安全地備份一份密鑰材料,以便密鑰材料失效或誤刪除時重新導入該密鑰材料。 |
| KMS創建的密鑰 | 不能手動刪除密鑰材料。 不能設置密鑰材料的失效時間。 |
關聯性
當用戶將密鑰材料導入自定義密鑰時,該自定義密鑰與該密鑰材料永久關聯,不能將其他密鑰材料導入該自定義密鑰中。
唯一性
當用戶使用導入的密鑰加密數據時,加密后的數據必須使用加密時采用的自定義密鑰(即自定義密鑰的元數據及密鑰材料與導入的密鑰匹配)才能解密數據,否則解密會失敗。
當用戶希望使用自己的密鑰材料,而不是KMS生成的密鑰材料時,可通過密鑰管理界面將自己的密鑰材料導入到KMS,由KMS統一管理。
說明導入的密鑰與通過密鑰管理服務創建的自定義密鑰一樣支持啟用、禁用、計劃刪除和取消刪除等操作。
用戶僅能導入256位對稱密鑰。
操作步驟
步驟 1 登錄管理控制臺。
步驟 2 單擊管理控制臺左上角
,選擇區域或項目。
步驟 3 單擊“服務列表”,選擇“安全> 數據加密服務”,默認進入“密鑰管理”界面。
步驟 4 單擊“導入密鑰”,彈出“導入密鑰”對話框。
步驟 5 在彈出的對話框中填寫密鑰參數。
- 別名:待創建密鑰的別名。
說明輸入字符支持數字、字母、“_”、“-”、“:”和“/”。
支持長度為1 ~ 255個字符。
- (可選)描述:可根據自己的需要為自定義密鑰添加描述。
- 企業項目:該參數針對企業用戶使用。
- 如果您是企業用戶,且已創建企業項目,則請從下拉列表中為密鑰選擇需要綁定的企業項目,默認項目為“default”。
- 未開通企業管理的用戶頁面則沒有“企業項目”參數項,無需進行配置。
步驟 6 (可選)用戶可根據自己的需要為自定義密鑰添加標簽,輸入“標簽鍵”和“標簽值”。
說明當用戶在創建密鑰時,沒有為該自定義密鑰添加標簽。若用戶需要為該自定義密鑰添加標簽,可單擊該自定義密鑰的別名,進入密鑰詳情頁面,單擊“標簽”,為該自定義密鑰添加標簽。
同一個自定義密鑰下,一個標簽鍵只能對應一個標簽值;不同的自定義密鑰下可以使用相同的標簽鍵。
用戶最多可以給單個自定義密鑰添加20個標簽。
當同時添加多個標簽,需要刪除其中一個待添加的標簽時,可單擊該標簽所在行的“刪除”,刪除標簽。
步驟 7 單擊“安全性與持久性”閱讀并了解導入密鑰的安全性和持久性。
步驟 8 勾選“我已經了解導入密鑰的安全性和持久性”,創建密鑰材料為空的自定義密鑰。
步驟 9 單擊“下一步”,進入“獲取包裝密鑰和導入令牌”頁面。
密鑰包裝算法說明
密鑰包裝算法 說明 設置 RSAES_OAEP_SHA_256 具有“SHA-256”哈希函數的OAEP的RSA加密算法。 請您根據自己的HSM功能選擇加密算法。
如果您的HSM支持“RSAES_OAEP_SHA_256”加密算法,推薦使用“RSAES_OAEP_SHA_256”加密密鑰材料。
如果您的HSM不支持“OAEP”選項,用戶可以使用“RSAES_PKCS1_V1_5”加密密鑰材料。
“RSAES_OAEP_SHA_1”加密算法已經不再安全,請謹慎選擇。
RSAES_OAEP_SHA_1 具有“SHA-1”哈希函數的OAEP的RSA加密算法。 SM2_ENCRYPT 國密推薦的SM2橢圓曲線公鑰密碼算法。 請在支持國密的局點使用SM2加密算法。
說明當用戶執行“導入密鑰”操作,但未成功導入密鑰材料便退出操作過程時,可在待導入密鑰材料的自定義密鑰所在行單擊“導入密鑰材料”,頁面會彈出“導入密鑰材料”對話框,用戶可繼續執行導入密鑰材料的操作。
步驟 10 獲取“包裝密鑰”和“導入令牌”,步驟詳見本節下方內容“獲取“包裝密鑰”和“導入令牌””,并加密密鑰材料,詳見本節下方內容“使用“包裝密鑰”加密密鑰材料”。
步驟 11 單擊“下一步”,進入“導入密鑰材料”頁面。
步驟 12 單擊“下一步”,進入“導入密鑰令牌”頁面。根據以下圖表設置參數。
導入密鑰令牌參數說明
| 參數 | 操作說明 |
|---|---|
| 密鑰ID | 創建密鑰時,隨機生成的密鑰ID。 |
| 密鑰導入令牌 | 選擇本章節中獲取“包裝密鑰”和“導入令牌”的方法二調用API獲取的導入令牌。 |
| 密鑰材料失效模式 | 永不失效:導入的密鑰材料永久不失效。 失效時間:用戶可指定導入的密鑰材料的失效時間,默認失效時間為24小時。密鑰材料失效后,KMS會在24小時內自動刪除密鑰材料,刪除后密鑰將無法使用,且密鑰狀態變更為“等待導入”。 |
步驟 13 單擊“確定”,頁面右上角彈出“密鑰導入成功”,則說明導入密鑰成功。
注意密鑰ID、導入的密鑰材料和導入的令牌需要全部匹配,密鑰材料才能導入成功,否則會導入失敗。
用戶可在密鑰列表中查看到導入的密鑰信息,導入密鑰的默認狀態為“啟用”。
獲取“包裝密鑰”和“導入令牌”
方法一:單擊“下載”,下載的文件為包裝密鑰
- wrappingKey_ 密鑰ID :即包裝密鑰,編碼為二進制格式,用于加密密鑰材料的包裝密鑰。
- 導入令牌:引導程序已自動傳遞導入令牌,無需下載,若中途退出引導程序,導入令牌將自動失效。
注意包裝密鑰將在24小時后失效,失效后將不能使用。如果包裝密鑰失效,請重新下載包裝密鑰。
引導程序將自動傳遞導入令牌,若創建密鑰過程中,關閉或者退出設置則導入令牌失效。重新發起導入密鑰材料操作時,導入令牌引導程序自動啟動。
方法二:通過調用API接口的方式獲取包裝密鑰和導入令牌
步驟 1 調用“get-parameters-for-import”接口,獲取包裝密鑰和導入令牌。
- public_key:調用API接口返回的base64編碼的包裝密鑰內容。
- import_token:調用API接口返回的base64編碼的導入令牌內容。
- 以獲取密鑰ID為“43f1ffd7-18fb-4568-9575-602e009b7ee8”,加密算法為“RSAES_OAEP_SHA_256”的包裝密鑰和導入令牌為例。
- 請求樣例
{
"key_id": "43f1ffd7-18fb-4568-9575-602e009b7ee8",
"wrapping_algorithm":"RSAES_OAEP_SHA_256"
}
- 響應樣例
{
"key_id": "43f1ffd7-18fb-4568-9575-602e009b7ee8",
"public_key":" public key base64 encoded data ",
"import_token":" import token base64 encoded data ",
"expiration_time":1501578672
}
步驟 2 保存包裝密鑰,包裝密鑰需要按照以下步驟轉換格式。使用轉換格式后的包裝密鑰加密的密鑰材料才能成功導入管理控制臺。
- 復制包裝密鑰“public_key”的內容,粘貼到“.txt”文件中,并保存為“PublicKey.b64”。
- 使用OpenSSL,執行以下命令,對“PublicKey.b64”文件內容進行base64轉碼,生成二進制數據,并將轉碼后的文件保存為“PublicKey.bin”。
openssl enc -d -base64 -A -in PublicKey.b64 -out PublicKey.bin
步驟 3 保存導入令牌,復制導入令牌“import_token”的內容,粘貼到“.txt”文件中,并保存為“ImportToken.b64”。
使用“包裝密鑰”加密密鑰材料
說明執行完此步驟后可獲得以下文件:
對稱密鑰場景:EncryptedKeyMaterial.bin密鑰材料
非對稱密鑰場景:EncryptedKeyMaterial.bin臨時密鑰材料和out_rsa_private_key.der私鑰密文
方法一:使用下載的包裝密鑰在自己的HSM中加密密鑰材料。
方法二:使用OpenSSL生成密鑰材料,并用下載的“包裝密鑰”對密鑰材料進行加密。
說明若用戶需要使用openssl pkeyutl命令,OpenSSL需要是1.0.2及以上版本。
步驟 1 生成密鑰材料(256位對稱密鑰),并將生成的密鑰材料以“PlaintextKeyMaterial.bin”命名保存。
配套算法為AES256對稱密鑰時,在已安裝OpenSSL工具的客戶端上,執行以下命令。
openssl rand -out PlaintextKeyMaterial.bin 32
配套算法為RSA、ECC非對稱密鑰時,在已安裝OpenSSL工具的客戶端上,執行以下命令。
- 生成16進制AES256密鑰:
openssl rand -out 0xPlaintextKeyMaterial.bin -hex 32
- 將16進制AES256密鑰轉換成二進制格式:
cat 0xPlaintextKeyMaterial.bin | xxd -r -ps > PlaintextKeyMaterial.bin
步驟 2 使用下載的“包裝密鑰”加密密鑰材料,并將加密后的密鑰材料按“EncryptedKeyMaterial.bin”命名保存。
若“包裝密鑰”由控制臺下載,以下命令中的PublicKey.bin參數請以下載的包裝密鑰名稱wrappingKey_密鑰ID進行替換。
使用下載的包裝密鑰加密生成的密鑰材料
| 包裝密鑰算法 | 加密生成的密鑰材料 |
|---|---|
| RSAES_OAEP_SHA_256 | openssl pkeyutl -inPlaintextKeyMaterial.bin -inkeyPublicKey.bin -outEncryptedKeyMaterial.bin -keyform der -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 |
| RSAES_OAEP_SHA_1 | openssl pkeyutl -inPlaintextKeyMaterial.bin -inkeyPublicKey.bin -outEncryptedKeyMaterial.bin -keyform der -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 |
| SM2_ENCRYPT | gmssl pkeyutl -encrypt -pkeyopt ec_scheme:sm2 -pkeyopt ec_encrypt_param:sm3 -inPlaintextKeyMaterial.bin -pubin -inkeyPublicKey.bin -keyform der-out EncryptedKeyMaterial.bin |
步驟 3 (可選)對于導入非對稱密鑰的場景,需要生成非對稱私鑰,并使用臨時密鑰材料(“ EncryptedKeyMaterial.bin”)對私鑰進行加密,加密后的文件作為“私鑰密文”導入。
執行以下命令(以配套算法為“RSA4096算法”為例):
- 生成私鑰
openssl genrsa -out rsa_private_key.pem 4096
- 轉換成der格式
openssl pkcs8 -topk8 -inform PEM -outform DER -in rsa_private_key.pem -out rsa_private_key.der -nocrypt
- 使用臨時密鑰材料對私鑰進行加密
openssl enc -id-aes256-wrap-pad -K $(cat 0xPlaintextKeyMaterial.bin) -iv A65959A6 -in rsa_private_key.der -out out_rsa_private_key.der
說明默認情況下,OpenSSL命令行工具中未啟用包裝密碼算法-id-aes256-wrap-pad。您可以下載并安裝最新版本的OpenSSL,然后對其進行修補,以完成導入非對稱密鑰所需的信封包裝。