瞭解加密與簽名資料的格式,可以協助您解讀加密和簽名資訊。
加密資料格式
- 加密SDK(Encryption SDK)加密資料結果
加密資料結果 組成部分 說明 訊息頭 版本 目前的版本值為1。 演算法 更多資訊,請參見演算法。
資料密鑰列表 資料密鑰列表由1到多個資料密鑰組成,資料密鑰分為以下兩部分:- 使用者主要金鑰資源名稱(Aliyun Resource Name ARN):格式為
acs:kms:RegionId:UserId:key/CmkId,包含地區資訊、使用者ID、使用者主要金鑰ID。 - 資料密鑰密文:資料密鑰被指定CMK的主要版本加密後的密文,調用GenerateDataKey返回的CipherBlob。
加密上下文 加密上下文資料,作為對稱式加密演算法的額外認證資料。 頭部認證初始向量 計算頭部認證資訊的初始向量值,為隨機數。 頭部認證資訊 通過GMAC計算頭部認證資訊,校正失敗時返回加密訊息格式異常。 訊息體 初始向量 初始化向量IV(initialization vector)是一個固定長度的輸入值。一般為隨機數或偽隨機數(pseudo random)。 密文 資料加密的結果。 認證資料 GCM(Galois Counter Mode)模式返回的認證資料,用於校正資料的完整性,完整性校正失敗時返回解密失敗。 訊息頭中的演算法詳情如下表所示:
演算法號 演算法資訊 演算法 工作模式 密鑰長度(bit) 初始向量長度(Byte) 1 AES_GCM_NOPADDING_128 AES GCM 128 12 2 AES_GCM_NOPADDING_256 AES GCM 256 12 3 AES_CBC_NOPADDING_128 AES CBC 128 16 4 AES_CBC_NOPADDING_256 AES CBC 256 16 5 AES_CBC_PKCS5_128 AES CBC 128 16 6 AES_CBC_PKCS5_256 AES CBC 256 16 7 AES_CTR_NOPADDING_128 AES CTR 128 16 8 AES_CTR_NOPADDING_256 AES CTR 256 16 9 SM4_GCM_NOPADDING_128 SM4 GCM 128 16 10 SM4_CBC_NOPADDING_128 SM4 CBC 128 16 11 SM4_CBC_PKCS5_128 SM4 CBC 128 16 12 SM4_CTR_NOPADDING_128 SM4 CTR 128 16 說明 僅AES_GCM_NOPADDING_128、AES_GCM_NOPADDING_256和SM4_GCM_NOPADDING_128包含16位元組的認證資料。 - 使用者主要金鑰資源名稱(Aliyun Resource Name ARN):格式為
- 加密資料結果格式定義
加密資料結果使用ASN.1進行編碼,加密資料結果格式的ASN.1定義如下:
EncryptionMessage ::== SEQUENCE { encryptionHead EncryptionHead --訊息頭 encryptionBody EncryptionBody --訊息體 } EncryptionHead ::== SEQUENCE { version INTEGER --版本 algorithm INTEGER --演算法 encryptedDataKeys SET EncryptedDataKey --資料密鑰列表 encryptionContext SET EncryptionContext --加密上下文 headerIv OCTECT STRING --頭部認證初始向量 headerAuthTag OCTECT STRING --頭部認證資訊 } EncryptionBody ::== SEQUENCE{ iv OCTECT STRING --初始向量 cipherText OCTECT STRING --密文 authTag OCTECT STRING --GCM認證資訊 } EncryptedDataKey ::== SEQUENCE { cmkArn OCTECT STRING --KMS使用者主要金鑰的ARN encryptedDataKey OCTECT STRING --資料祕密金鑰加密後的密文 } EncryptionContext ::== SEQUENCE { key OCTECT STRING value OCTECT STRING } - 加密資料結果樣本
SEQUENCE (2 elem) SEQUENCE (6 elem) INTEGER 1 // 版本 INTEGER 2 // 演算法 SET (2 elem) // 資料密鑰列表 SEQUENCE (2 elem) OCTET STRING (77 byte) acs:kms:cn-beijing:1540355698xxxxx:key/2fad5f44-9573-4f28-8956-xxxx… OCTET STRING (108 byte) 36613739356232362D626163642xxxx262642D383630612D323563313839316131663… SEQUENCE (2 elem) OCTET STRING (77 byte) acs:kms:cn-hangzhou:1540355698xxxxx:key/f6d61352-82bb-450a-b105-xxxx… OCTET STRING (108 byte) 62623630646439352D343165302xxxx237382D616233332D356262636136643633643… SET (5 elem) // 加密上下文集合 SEQUENCE (2 elem) OCTET STRING (11 byte) encryption OCTET STRING (7 byte) context SEQUENCE (2 elem) OCTET STRING (7 byte) is not OCTET STRING (6 byte) secret SEQUENCE (2 elem) OCTET STRING (9 byte) but adds OCTET STRING (15 byte) useful metadata SEQUENCE (2 elem) OCTET STRING (18 byte) that can help you OCTET STRING (17 byte) be confident that SEQUENCE (2 elem) OCTET STRING (26 byte) the data you are handling OCTET STRING (23 byte) is what you think it is OCTET STRING (12 byte) E66C1CE19C79F3FBCD62858D // 頭部認證初始向量 OCTET STRING (16 byte) CEEC46C65670E82CD78028AC0104D083 // 頭部認證資料 SEQUENCE (3 elem) // 加密訊息 OCTET STRING (12 byte) EF49E2CBB768A7AD0FB0FE20 // 初始向量 OCTET STRING (13 byte) 89A4AB43CD793F7711767C491A // 密文 OCTET STRING (16 byte) 2E93DA019B7A6507155BA3AA252750E3 // 認證資料 - 加密資料結果長度
- (108B+77B)*CMK數量說明 108B表示CMK的ARN長度為108位元組,77B表示GenerateDataKey返回的CipherBlob長度為77位元組。
- 加密上下文長度
- ASN1編碼30B說明 30B表示ASN1編碼的類型和長度為30位元組。
- 密文長度
- 初始向量
- 認證資訊
- (108B+77B)*CMK數量
簽名資料格式
加密SDK的簽名運算調用阿里雲Key Management Service的非對稱簽名介面AsymmetricSign,返回簽名值對應的位元據。