全部產品
Search
文件中心

Key Management Service:加密與簽名資料的格式

更新時間:Jul 06, 2024

瞭解加密與簽名資料的格式,可以協助您解讀加密和簽名資訊。

加密資料格式

  • 加密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)
    1AES_GCM_NOPADDING_128AESGCM12812
    2AES_GCM_NOPADDING_256AESGCM25612
    3AES_CBC_NOPADDING_128AESCBC12816
    4AES_CBC_NOPADDING_256AESCBC25616
    5AES_CBC_PKCS5_128AESCBC12816
    6AES_CBC_PKCS5_256AESCBC25616
    7AES_CTR_NOPADDING_128AESCTR12816
    8AES_CTR_NOPADDING_256AESCTR25616
    9SM4_GCM_NOPADDING_128SM4GCM12816
    10SM4_CBC_NOPADDING_128SM4CBC12816
    11SM4_CBC_PKCS5_128SM4CBC12816
    12SM4_CTR_NOPADDING_128SM4CTR12816
    說明 僅AES_GCM_NOPADDING_128、AES_GCM_NOPADDING_256和SM4_GCM_NOPADDING_128包含16位元組的認證資料。
  • 加密資料結果格式定義

    加密資料結果使用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位元組。
    • 密文長度
    • 初始向量
    • 認證資訊

簽名資料格式

加密SDK的簽名運算調用阿里雲Key Management Service的非對稱簽名介面AsymmetricSign,返回簽名值對應的位元據。