當您對對象存儲OSS進行客戶端加解密時,每個對象(Object)將使用一個數據密鑰。本文為您介紹如何對OSS對象進行客戶端加解密。
使用場景
當使用KMS托管用戶主密鑰用于客戶端數據加密時,無需向加密客戶端提供任何加密密鑰,只需在上傳對象時指定KMS用戶主密鑰資源名稱(CMK ARN)即可。
加密機制
- 獲取加密密鑰。
通過使用CMK ARN,加密SDK(Encryption SDK)首先向KMS發送一個請求,申請一個用于加密Object的數據密鑰(Data Key)。作為響應,KMS會返回一個隨機生成的數據密鑰明文(Data Key)以及一個數據密鑰密文(Encrypted Data Key)。
- 加密數據并上傳至OSS。
加密SDK接收到KMS返回的數據密鑰明文以及數據密鑰密文后,將使用數據密鑰明文進行本地加密,然后將數據密鑰密文封裝到消息頭并存儲到對象元數據,最后將加密的對象上傳到OSS。
解密機制
- 下載Object。
加密SDK從OSS服務端下載加密的Object以及作為對象元數據存儲的消息頭,并解析消息頭得到數據密鑰密文。
- 解密Object。
加密SDK從CMK ARN中解析出地域信息,將數據密鑰密文發送至對應地域的KMS服務器。作為響應,KMS將使用指定的CMK對數據密鑰密文進行解密,并且將數據密鑰明文返回給本地加密客戶端。加密SDK使用數據密鑰明文對加密后的對象進行解密,得到原始對象。
說明 使用GCM(Galois Counter Mode)模式對數據對象進行加密,解密時可以對數據進行整體解密,也可以對指定的分段數據進行解密。整體解密時會驗證數據的完整性校驗數據,校驗通過后得到解密數據,分段解密時不對數據完整性進行校驗,只對分段數據進行解密。
代碼示例
您可以通過OSSEncryption獲取SDK代碼示例。