

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Encryption SDK メッセージ形式のリファレンス
<a name="message-format"></a>


|  | 
| --- |
|  このページの情報は、 AWS Encryption SDKと互換性のある独自の暗号化ライブラリを構築するためのリファレンスです。互換性のある独自の暗号化ライブラリを構築しない場合は、この情報は必要ありません。 サポートされているプログラミング言語のいずれか AWS Encryption SDK で を使用するには、「」を参照してください[プログラミング言語](programming-languages.md)。 適切な AWS Encryption SDK 実装の要素を定義する仕様については、GitHub の[AWS Encryption SDK 「仕様](https://github.com/awslabs/aws-encryption-sdk-specification/)」を参照してください。  | 

の暗号化オペレーションは、[暗号化されたデータ (暗号文) とすべての暗号化されたデータキーを含む単一のデータ構造または暗号化されたメッセージ](concepts.md#message) AWS Encryption SDK を返します。このデータ構造を理解したり、それを読み書きするライブラリを構築するには、メッセージ形式を理解しておく必要があります。

メッセージ形式は少なくとも 2 つの部分 (*ヘッダー*と*本文*) で構成されます。場合によって、メッセージ形式は 3 番目の部分、*フッター* で構成されます。メッセージ形式は、ビッグエンディアン形式とも呼ばれる、ネットワークバイト順で順序付けられたバイトシーケンスを定義します。メッセージ形式は、ヘッダーで始まり、その後に本文、続いてフッターの順に続きます (ある場合)。

 AWS Encryption SDK によってサポートされる[アルゴリズムスイート](algorithms-reference.md)では、2 つのメッセージ形式バージョンのいずれかを使用します。[キーコミットメント](concepts.md#key-commitment)がないアルゴリズムスイートでは、メッセージ形式バージョン 1 を使用します。キーコミットメントがあるアルゴリズムスイートでは、メッセージ形式バージョン 2 を使用します。

**Topics**
+ [ヘッダーの構造](#header-structure)
+ [本文の構造](#body-structure)
+ [フッターの構造](#footer-structure)

## ヘッダーの構造
<a name="header-structure"></a>

メッセージヘッダーには、暗号化されたデータキーと、メッセージ本文の構成に関する情報が含まれています。以下の表では、メッセージ形式バージョン 1 および 2 のヘッダーを形成するフィールドについて説明します。バイトは示されている順に追加されます。

「**なし**」は、フィールドがそのバージョンのメッセージ形式に存在しないことを示します。**太字テキスト**は、各バージョンで異なる値を示します。

**注記**  
この表のすべてのデータを表示するには、水平または垂直にスクロールする必要があります。


**ヘッダーの構造**  

| フィールド | メッセージ形式バージョン 1長さ (バイト) | メッセージ形式バージョン 2長さ (バイト) | 
| --- | --- | --- | 
| [Version](#header-version) | 1 | 1 | 
| [Type](#header-type) | 1 | [なし] | 
| [Algorithm ID](#header-algorithm-id) | 2 | 2 | 
| [Message ID](#header-message-id) | 16 | 32 | 
| [AAD Length](#header-aad-length) | 2[暗号化コンテキスト](concepts.md#encryption-context)が空の場合、2 バイトの AAD の長さフィールドの値は 0 です。 | 2[暗号化コンテキスト](concepts.md#encryption-context)が空の場合、2 バイトの AAD の長さフィールドの値は 0 です。 | 
| [AAD](#header-aad) | 変数。　 このフィールドの長さは、前の 2 バイト (AAD の長さフィールド) に表示されます。 [暗号化コンテキスト](concepts.md#encryption-context)が空の場合、ヘッダーに AAD フィールドはありません。 |  変数。　 このフィールドの長さは、前の 2 バイト (AAD の長さフィールド) に表示されます。 [暗号化コンテキスト](concepts.md#encryption-context)が空の場合、ヘッダーに AAD フィールドはありません。  | 
| [Encrypted Data Key Count](#header-data-key-count) | 2 | 2 | 
| [Encrypted Data Key(s)](#header-data-keys) | 変数。　 暗号化されたデータキーの数とそれぞれの長さによって決まります。 | 変数。　 暗号化されたデータキーの数とそれぞれの長さによって決まります。 | 
| [Content Type](#header-content-type) | 1 | 1 | 
| [Reserved](#header-reserved) | 4 | [なし] | 
| [IV Length](#header-iv-length) | 1 | [なし] | 
| [Frame Length](#header-frame-length) | 4 | 4 | 
| [Algorithm Suite Data](#algorithm-suite-data) | [なし] | 変数。　 メッセージを生成した[アルゴリズム](algorithms-reference.md)によって決まります。 | 
| [Header Authentication](#header-authentication) | 変数。　 メッセージを生成した[アルゴリズム](algorithms-reference.md)によって決まります。 | 変数。　 メッセージを生成した[アルゴリズム](algorithms-reference.md)によって決まります。 | 

**バージョン**  
このメッセージ形式のバージョン。バージョンは 1 または 2 で、16 進数表記のバイト `01` または `02` としてエンコードされます。

**タイプ**  
このメッセージ形式のタイプ。タイプは構造の種類を示します。*カスタマー認証暗号化データ*として示されるタイプのみがサポートされています。そのタイプの値は 128 で、16 進数表記のバイト `80` でエンコードされます。  
このフィールドは、メッセージ形式バージョン 2 では存在しません。

**アルゴリズム ID**  
使用されるアルゴリズムの識別子。これは 16 ビットの符号なし整数として解釈される 2 バイトの値です。アルゴリズムの詳細については、「[AWS Encryption SDK アルゴリズムリファレンス](algorithms-reference.md)」を参照してください。

**メッセージ ID**  
メッセージを識別するランダムに生成された値。メッセージ ID｡  
+ 暗号化されたメッセージを一意に識別します。
+ メッセージヘッダーを、メッセージ本文に弱くバインドします。
+ 複数の暗号化されたメッセージでデータキーを安全に再利用するためのメカニズムを提供します。
+  AWS Encryption SDKでのデータキーの誤った再利用や失効を防ぎます。
この値は、メッセージ形式バージョン 1 で 128 ビット、バージョン 2 では 256 ビットです。

**AAD の長さ**  
追加認証データ (AAD) の長さ。これは、AAD を含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。  
[暗号化コンテキスト](concepts.md#encryption-context)が空の場合、AAD の長さフィールドの値は 0 です。

**AAD**  
追加認証データ。AAD は、[暗号化コンテキスト](concepts.md#encryption-context)のエンコードです。キーと値の各ペアが UTF-8 エンコード文字の文字列のキーと値のペアの配列です。暗号化コンテキストはバイトシーケンスに変換され、AAD 値に使用されます。暗号化コンテキストが空の場合、ヘッダーに AAD フィールドはありません。  
[署名付きのアルゴリズム](algorithms-reference.md)を使用する場合、暗号化コンテキストにはキーと値のペア `{'aws-crypto-public-key', Qtxt}` が含まれている必要があります。Qtxt は、[SEC 1 バージョン 2.0](http://www.secg.org/sec1-v2.pdf) に基づいて圧縮され、その後 base64 でエンコードされた楕円曲線点 Q を表します。暗号化コンテキストには、追加の値を含めることができますが、構築された AAD の最大長は 2^16 - 1 バイトです。  
以下の表では、AAD を形成するフィールドについて説明します。キーと値のペアは、UTF-8 文字コードに基づいて昇順でキーごとにソートされます。バイトは示されている順に追加されます。    
**AAD の構造**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/message-format.html)  
**キーと値のペアの数**  
AAD 内のキーと値のペアの数。これは、AAD でキーと値のペアの数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。AAD 内のキーと値のペアの最大数は 2^16 - 1 です。  
暗号化コンテキストが存在しない場合、または暗号化コンテキストが空の場合、このフィールドは AAD 構造内に存在しません。  
**キーの長さ**  
キーと値のペアのキーの長さ。これは、キーを含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。  
**キー**  
キーと値のペアのキー。UTF-8 でエンコードされたバイトのシーケンスです。  
**値の長さ**  
キーと値のペアの値の長さ。これは、値を含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。  
**値**  
キーと値のペアの値。UTF-8 でエンコードされたバイトのシーケンスです。

**暗号化されたデータキーの数**  
暗号化されたデータキーの数。これは、暗号化されたデータキーの数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。各メッセージの暗号化されたデータキーの最大数は 65,535 (2^16 - 1) です。

**暗号化されたデータキー (複数可)**  
暗号化されたデータキーのシーケンス。シーケンスの長さは暗号化されたデータキーの数とそれぞれの長さによって決まります。シーケンスには、少なくとも 1 つの暗号化されたデータキーが含まれています。  
以下の表では、暗号化された各データキーを形成するフィールドについて説明します。バイトは示されている順に追加されます。    
**暗号化されたデータキーの構造**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/message-format.html)  
**キープロバイダー ID の長さ**  
キープロバイダー ID の長さ。これは、キープロバイダー ID を含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。  
**キープロバイダー ID**  
キープロバイダー ID。これは、暗号化されたデータキーのプロバイダーを示すために使用され、拡張することを目的としています。  
**キープロバイダー情報の長さ**  
キープロバイダー情報の長さ。これは、キープロバイダー情報を含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。  
**キープロバイダー情報**  
キープロバイダー情報 これはキープロバイダーによって決定されます。  
 AWS KMS がマスターキープロバイダーであるか、 AWS KMS キーリングを使用している場合、この値には の Amazon リソースネーム (ARN) が含まれます AWS KMS key。  
**暗号化されたデータキーの長さ**  
暗号化されたデータキーの長さ。これは、暗号化されたデータキーを含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。  
**暗号化されたデータキー**  
暗号化されたデータキー これは、キープロバイダーによって暗号化されたデータ暗号化キーです。

**コンテンツタイプ**  
暗号化されたデータのタイプ (フレーム化されていないデータまたはフレーム化されたデータ)。  
可能な限り、フレーム化されたデータを使用してください。は、レガシー使用のためにのみフレーム化されていないデータ AWS Encryption SDK をサポートします。の一部の言語実装では、フレーム化されていない暗号文を生成 AWS Encryption SDK できます。サポートされているすべての言語実装では、フレーム化された暗号化テキストとフレーム化されていない暗号化文書を復号化できます。
フレーム化されたデータは同じ長さのパートに分割されます。各パートは別々に暗号化されます。フレーム化されたコンテンツはタイプ 2 で、16 進数表記のバイト `02` としてエンコードされます。  
フレーム化されていないデータは分割されず、1 つの暗号化された BLOB になります。フレーム化されていないコンテンツはタイプ 1 で、16 進数表記のバイト `01` としてエンコードされます。

**予約済み**  
予約された 4 バイトのシーケンスです。この値は、0 である必要があります。これは 16 進数でバイト `00 00 00 00` としてエンコードされます (つまり、0 と等しい 4 バイトシーケンスの 32 ビット整数値)。  
このフィールドは、メッセージ形式バージョン 2 では存在しません。

**IV の長さ**  
初期化ベクトル (IV) の長さ。これは、IV を含むバイト数を指定する 8 ビットの符号なし整数として解釈される 1 バイトの値です。この値はメッセージを生成した[アルゴリズム](algorithms-reference.md)の IV バイト値によって決まります。  
このフィールドはメッセージ形式バージョン 2 には存在しません。バージョン 2 では、メッセージヘッダーで確定的 IV 値を使用するアルゴリズムスイートのみがサポートされます。

**フレームの長さ**  
フレーム化されたデータの各フレームの長さ。これは、各フレームのバイト数を指定する 32 ビットの符号なし整数として解釈される 4 バイトの値です。データがフレーム化されていないとき、つまり `Content Type` フィールドが 1 であるとき、この値は 0 である必要があります。  
可能な限り、フレーム化されたデータを使用してください。は、レガシー使用のためにのみフレーム化されていないデータ AWS Encryption SDK をサポートします。の一部の言語実装では、フレーム化されていない暗号文を生成 AWS Encryption SDK できます。サポートされているすべての言語実装では、フレーム化された暗号化テキストとフレーム化されていない暗号化文書を復号化できます。

**アルゴリズムスイートデータ**  
メッセージを生成した[アルゴリズム](algorithms-reference.md)が必要とする補足データ。長さと内容はアルゴリズムによって決定されます。その長さは 0 になる場合があります。  
このフィールドは、メッセージ形式バージョン 1 では存在しません。

**ヘッダー認証**  
ヘッダー認証は、メッセージを生成した[アルゴリズム](algorithms-reference.md)よって決まります。ヘッダー認証はヘッダー全体で計算されます。IV と認証タグで構成されています。バイトは示されている順に追加されます。    
**ヘッダー認証構造**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/message-format.html)  
**IV**  
ヘッダー認証タグの計算に使用される初期化ベクトル (IV)。  
このフィールドは、メッセージ形式バージョン 2 のヘッダーでは存在しません。メッセージ形式バージョン 2 では、メッセージヘッダーで確定的 IV 値を使用するアルゴリズムスイートのみがサポートされます。  
**認証タグ**  
ヘッダーの認証値。ヘッダーのコンテンツ全体を認証するために使用されます。

## 本文の構造
<a name="body-structure"></a>

メッセージ本文には、*暗号化テキスト*という暗号化されたデータが含まれています。本文の構造は、コンテンツタイプ (フレーム化されていないコンテンツまたはフレーム化されたコンテンツ) によって異なります。以下のセクションでは、各コンテンツタイプのメッセージ本文の形式について説明します。メッセージ本文の構造は、メッセージ形式バージョン 1 および 2 で同じです。

**Topics**
+ [フレーム化されていないデータ](#body-no-framing)
+ [フレーム化されたデータ](#body-framing)

### フレーム化されていないデータ
<a name="body-no-framing"></a>

フレーム化されていないデータは、一意の IV と[本文 AAD](body-aad-reference.md) を含む 1 つの blob に暗号化されます。

**注記**  
可能な限り、フレーム化されたデータを使用してください。は、レガシー使用のためにのみフレーム化されていないデータ AWS Encryption SDK をサポートします。の一部の言語実装では、フレーム化されていない暗号文を生成 AWS Encryption SDK できます。サポートされているすべての言語実装では、フレーム化された暗号化テキストとフレーム化されていない暗号化文書を復号化できます。

以下の表に、フレーム化されていないデータを構成するフィールドを示します。バイトは示されている順に追加されます。


**フレーム化されていない本文構造**  

| フィールド | 長さ、バイト単位 | 
| --- | --- | 
| [IV](#body-unframed-iv) | 変数。　 ヘッダーの [IV Length](#header-iv-length) バイトで指定された値と同じです。 | 
| [Encrypted Content Length](#body-unframed-content-length) | 8 | 
| [Encrypted Content](#body-unframed-content) | 変数。　 前の 8 バイト (暗号化されたコンテンツの長さ) で指定された値と同じです。 | 
| [Authentication Tag](#body-unframed-tag) | 変数。　 使用された[アルゴリズムの実装](algorithms-reference.md)によって決定されます。 | 

**IV**  
[暗号化アルゴリズム ](algorithms-reference.md)で使用する初期化ベクトル (IV)。

**暗号化されたコンテンツの長さ**  
暗号化されたコンテンツ、または*暗号化テキスト*の長さ。これは、暗号化されたコンテンツを含むバイト数を指定する 64 ビットの符号なし整数として解釈される 8 バイトの値です。  
技術的には、最大許容値は 2^63-1、または 8 エクスビバイト (8 EiB) です。ただし、[実装されたアルゴリズム](algorithms-reference.md)によって設定されている制限が原因で、実際の最大値は 2^36-32、または 64 ギビバイト (64 GiB) です。  
この SDK の Java 実装では、言語の制限により、この値はさらに 2^31-1 または 2 ギビバイト (2 GiB) に制限されます。

**暗号化されたコンテンツ**  
[暗号化アルゴリズム](algorithms-reference.md)によって返される暗号化されたコンテンツ (暗号化テキスト)。

**認証タグ**  
本文の認証値。メッセージ本文を認証するために使用されます。

### フレーム化されたデータ
<a name="body-framing"></a>

フレーム化されたデータでは、プレーンテキストのデータは*フレーム*と呼ばれる同じ長さのパートに分割されます。は、一意の IV と[本文 AAD](body-aad-reference.md) を使用して各フレームを個別に AWS Encryption SDK 暗号化します。

**注記**  
可能な限り、フレーム化されたデータを使用してください。は、レガシー使用のためにのみフレーム化されていないデータ AWS Encryption SDK をサポートします。の一部の言語実装では、フレーム化されていない暗号文を生成 AWS Encryption SDK できます。サポートされているすべての言語実装では、フレーム化された暗号化テキストとフレーム化されていない暗号化文書を復号化できます。

 

[フレームの長さ](#header-frame-length) (フレーム内の[暗号化されたコンテンツ](#body-framed-regular-content)の長さ) はメッセージごとに異なります。フレームの最大バイト数は 2^32 - 1 です。メッセージの最大フレーム数は 2^32 - 1 です。

フレームには、*通常*と*最終*の 2 種類があります。すべてのメッセージは、最終フレームで構成するか、最終フレームを含める必要があります。

1 つのメッセージのすべての通常フレームの長さは同じになります。最終フレームの長さは異なることができます。

フレーム化されたデータのフレームの構成は、暗号化されたコンテンツの長さによって異なります。
+ **フレームの長さと同じである場合** — 暗号化されたコンテンツの長さが通常フレームの長さと同じ場合、メッセージはデータを含む通常フレームとそれに続く長さがゼロ (0) の最終フレームで構成されます。または、メッセージはデータを含む最終フレームのみで構成されます。この場合、最終フレームの長さは通常フレームと同じになります。
+ **フレームの長さの倍数である場合** — 暗号化されたコンテンツの長さが通常フレームの長さの倍数である場合、メッセージはデータを含む通常フレームとそれに続く長さがゼロ (0) の最終フレームで終わります。または、メッセージはデータを含む最終フレームで終わります。この場合、最終フレームの長さは通常フレームと同じになります。
+ **フレームの長さの倍数ではない場合** — 暗号化されたコンテンツの長さが通常フレームの長さの倍数ではない場合、最終フレームには残りのデータが含まれます。最終フレームの長さは通常フレームよりも短くなります。
+ **フレームの長さよりも短い場合** — 暗号化されたコンテンツの長さが通常フレームの長さよりも短い場合、メッセージはすべてのデータを含む最終フレームで構成されます。最終フレームの長さは通常フレームよりも短くなります。

以下の表では、フレームを形成するフィールドについて説明します。バイトは示されている順に追加されます。


**フレーム化された本文構造、標準フレーム**  

| フィールド | 長さ、バイト単位 | 
| --- | --- | 
| [Sequence Number](#body-framed-regular-sequence-number) | 4 | 
| [IV](#body-framed-regular-iv) | 変数。　 ヘッダーの [IV Length](#header-iv-length) バイトで指定された値と同じです。 | 
| [Encrypted Content](#body-framed-regular-content) | 変数。　 ヘッダーの [Frame Length](#header-frame-length) で指定された値と同じです。 | 
| [Authentication Tag](#body-framed-regular-tag) | 変数。　 ヘッダーの [Algorithm ID](#header-algorithm-id) で指定された、使用されているアルゴリズムによって決定されます。 | 

**シーケンス番号**  
フレームシーケンス番号。これはフレームの増分カウンタです。これは 32 ビットの符号なし整数として解釈される 4 バイトの値です。  
フレームデータはシーケンス番号 1 で始まる必要があります。後続のフレームは、順番に並んでいなければならず、1 つ前のフレームの増分を含む必要があります。それ以外の場合、復号プロセスは停止して、エラーが表示されます。

**IV**  
フレームの初期化ベクトル (IV)。SDK は、決定的メソッドを使用して、メッセージ内のフレームごとに異なる IV を構築します。その長さは使用される[アルゴリズムスイート](algorithms-reference.md)で指定されます。

**暗号化されたコンテンツ**  
[暗号化アルゴリズム](algorithms-reference.md)によって返されるフレームの暗号化されたコンテンツ (暗号化テキスト)。

**認証タグ**  
フレームの認証値。フレーム全体を認証するために使用されます。


**フレーム化された本文構造、最終フレーム**  

| フィールド | 長さ、バイト単位 | 
| --- | --- | 
| [Sequence Number End](#body-framed-final-sequence-number-end) | 4 | 
| [Sequence Number](#body-framed-final-sequence-number) | 4 | 
| [IV](#body-framed-final-iv) | 変数。　 ヘッダーの [IV Length](#header-iv-length) バイトで指定された値と同じです。 | 
| [Encrypted Content Length](#body-framed-final-content-length) | 4 | 
| [Encrypted Content](#body-framed-final-content) | 変数。　 前の 4 バイト (暗号化されたコンテンツの長さ) で指定された値と同じです。 | 
| [Authentication Tag](#body-framed-final-tag) | 変数。　 ヘッダーの [Algorithm ID](#header-algorithm-id) で指定された、使用されているアルゴリズムによって決定されます。 | 

**シーケンス番号の終了**  
最終フレームのインジケータです。その値は 16 進数表記の 4 バイト `FF FF FF FF` としてエンコードされます。

**シーケンス番号**  
フレームシーケンス番号。これはフレームの増分カウンタです。これは 32 ビットの符号なし整数として解釈される 4 バイトの値です。  
フレームデータはシーケンス番号 1 で始まる必要があります。後続のフレームは、順番に並んでいなければならず、1 つ前のフレームの増分を含む必要があります。それ以外の場合、復号プロセスは停止して、エラーが表示されます。

**IV**  
フレームの初期化ベクトル (IV)。SDK は、決定的メソッドを使用して、メッセージ内のフレームごとに異なる IV を構築します。IV の長さは[アルゴリズムスイート](algorithms-reference.md)によって指定されます。

**暗号化されたコンテンツの長さ**  
暗号化されたコンテンツの長さ。これは、フレームの暗号化されたコンテンツを含むバイト数を指定する 32 ビットの符号なし整数として解釈される 4 バイトの値です。

**暗号化されたコンテンツ**  
[暗号化アルゴリズム](algorithms-reference.md)によって返されるフレームの暗号化されたコンテンツ (暗号化テキスト)。

**認証タグ**  
フレームの認証値。フレーム全体を認証するために使用されます。

## フッターの構造
<a name="footer-structure"></a>

[署名付きのアルゴリズム](algorithms-reference.md)を使用する場合、メッセージ形式にはフッターが含まれます。メッセージフッターには、メッセージヘッダーおよび本文で計算された[デジタル署名](concepts.md#digital-sigs)が含まれています。以下の表では、フッターを形成するフィールドについて説明します。バイトは示されている順に追加されます。メッセージフッターの構造は、メッセージ形式バージョン 1 および 2 で同じです。


**フッターの構造**  

| フィールド | 長さ、バイト単位 | 
| --- | --- | 
| [Signature Length](#footer-signature-length) | 2 | 
| [Signature](#footer-signature) | 変数。　 前の 2 バイト (署名の長さ) で指定された値と同じです。 | 

**署名の長さ**  
署名の長さ。これは、署名を含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。

**署名**  
署名