このトピックでは、暗号化の出力と署名を理解するのに役立つ、暗号化されたデータと署名の形式について説明します。
暗号化データの形式
- encryption SDKのデータ暗号化出力
データ暗号化出力 コンポーネント 説明 メッセージヘッダー Version 現在のバージョンは「1」です。 アルゴリズム 詳細については、「アルゴリズム」をご参照ください。
データキー一覧 データキーリストは、少なくとも1つのデータキーを含む。 各データキーの情報は、次の部分で構成されます。- データキーの暗号化に使用されるカスタマーマスターキー (CMK) のAlibaba Cloud Resource Name (ARN) 。 ARNには、リージョンID、ユーザーID、およびCMK
IDが含まれ、
acs:kms:RegionId:UserId:key/CmkId
の形式で表示されます。 - 指定されたCMKのプライマリバージョンを使用して暗号化されたデータキーの暗号文。 暗号文は、GenerateDataKey操作によって返されるCipherBlobパラメーターの値です。
EncryptionContext 対称暗号化アルゴリズムの追加認証データとして使用される暗号化コンテキストデータ。 ヘッダー認証用の初期化ベクトル ヘッダー認証情報の計算に使用される初期化ベクトル。 値は乱数です。 ヘッダー認証情報 システムは、ガロアメッセージ認証コード (GMAC) に基づいてヘッダ認証情報を計算する。 検証に失敗すると、暗号化メッセージの形式が無効であることを示すエラーが返されます。 メッセージ本文 初期化ベクトル 初期化ベクトルは、固定長を有する入力値である。 ほとんどの場合、それは乱数または擬似乱数である。 暗号文データ データが暗号化された後に返される暗号文。 认证データ Galois/Counter Mode (GCM) が使用されている場合に返される認証データ。 認証データは、データの完全性を検証するために使用されます。 検証が失敗した場合、復号化の失敗が報告される。 次の表に、メッセージヘッダーのアルゴリズム情報を示します。
No. アルゴリズム情報 アルゴリズム 働くモード キーの長さ (ビット) 初期化ベクトルの長さ (バイト) 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 注 長さ16バイトの認証データは、AES_GCM_NOPADDING_128、AES_GCM_NOPADDING_256、およびSM4_GCM_NOPADDING_128のみに含まれます。 - データキーの暗号化に使用されるカスタマーマスターキー (CMK) のAlibaba Cloud Resource Name (ARN) 。 ARNには、リージョンID、ユーザーID、およびCMK
IDが含まれ、
- データ暗号化出力のフォーマット定义
データ暗号化出力はASN.1でエンコードされます。 次のコードは、ASN.1構文のデータ暗号化出力の形式を示しています。
EncryptionMessage ::== シーケンス { encryptionHead EncryptionHead-メッセージヘッダー encryptionBody EncryptionBody -- メッセージボディ } 暗号化ヘッド ::== シーケンス { version INTEGER -- バージョン algorithm INTEGER -- Algorithm encryptedDataKeys SET EncryptedDataKey -- データキーリスト encryptionContext SET EncryptionContext -- 暗号化コンテキスト headerIv OCTECT STRING -- ヘッダー認証用の初期化ベクトル headerAuthTag OCTECT STRING -- ヘッダー認証情報 } EncryptionBody ::== シーケンス { iv OCTECT STRING-初期化ベクトル cipherText OCTECT STRING-暗号文データ authTag OCTECT STRING -- GCM認証情報 } EncryptedDataKey ::== シーケンス { cmkArn OCTECTストリング-KMS CMKのARN encryptedDataKey OCTECT STRING -- データキーの暗号文 } EncryptionContext ::== シーケンス { キーOCTECTの糸 値OCTECTストリング }
- データ暗号化出力の例
シーケンス (2要素) シーケンス (6要素) INTEGER 1 // バージョン INTEGER 2 // アルゴリズム SET (2 elem) // データキー一覧 シーケンス (2要素) OCTETストリング (77バイト) acs:kms:cn-beijing:1540355698xxxxx:key/2fad5f44-9573-4f28-8956-xxxx… OCTETストリング (108バイト) 36613739356232362D626163642xxxx262642D383630612D323563313839316131663… シーケンス (2要素) OCTETストリング (77バイト) acs:kms:cn-hangzhou:1540355698xxxxx: キー /f6d61352-82bb-450a-b105-xxxx… OCTETストリング (108バイト) 62623630646439352D343165302xxxx237382D616233332D356262636136643633643… SET (5 elem) // EncryptionContext set シーケンス (2要素) OCTETストリング (11バイト) 暗号化 OCTET STRING (7バイト) コンテキスト シーケンス (2要素) OCTETストリング (7バイト) は OCTETストリング (6バイト) シークレット シーケンス (2要素) OCTETストリング (9バイト) が追加されます OCTET STRING (15バイト) 有用なメタデータ シーケンス (2要素) あなたを助けることができるOCTETストリング (18バイト) OCTETのひも (17バイト) はそれ確信しています シーケンス (2要素) あなたが扱っているデータOCTET STRING (26 byte) OCTETのひも (23バイト) はあなたがそれがあると思うものです OCTET STRING (12バイト) E66C1CE19C79F3FBCD62858D // ヘッダー認証用の初期化ベクトル OCTET STRING (16バイト) CEEC46C65670E82CD78028AC0104D083 // ヘッダー認証情報 SEQUENCE (3 elem) // 暗号化されたメッセージ OCTET STRING (12バイト) EF49E2CBB768A7AD0FB0FE20 // 初期化ベクトル OCTET STRING (13 byte) 89A4AB43CD793F7711767C491A // 暗号文データ OCTET STRING (16バイト) 2E93DA019B7A6507155BA3AA252750E3 // 认证データ
- データ暗号化出力の長さ
- (108バイト + 77バイト) × CMKの数
注 CMKのARNの長さは108バイトです。 GenerateDataKey操作によって返されるCipherBlobパラメーターの値は77バイトです。
- EncryptionContextの長さ
- ASN.1-エンコードされたデータの長さ: 30バイト
注 ASN.1符号化データの長さは30バイトである。
- 暗号文データの長さ
- 初期化ベクトル
- 認証情報
- (108バイト + 77バイト) × CMKの数
署名形式
暗号化SDKは、KMSの非対称性サイン操作を呼び出してデータに署名します。 この操作は、バイナリ形式の署名値を返します。