AWS Encryption SDK メッセージ形式のリファレンス - AWS Encryption SDK

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

AWS Encryption SDK メッセージ形式のリファレンス

このページの情報は、 AWS Encryption SDKと互換性のある独自の暗号化ライブラリを構築するためのリファレンスです。互換性のある独自の暗号化ライブラリを構築しない場合は、この情報は必要ありません。

サポートされているプログラミング言語のいずれか AWS Encryption SDK で を使用するには、「」を参照してくださいプログラミング言語

適切な AWS Encryption SDK 実装の要素を定義する仕様については、「」のAWS Encryption SDK 「仕様」を参照してください GitHub。

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

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

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

ヘッダーの構造

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

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

注記

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

ヘッダーの構造
フィールド メッセージ形式バージョン 1

長さ (バイト)

メッセージ形式バージョン 2

長さ (バイト)

Version 1 1
Type 1 [なし]
Algorithm ID 2 2
Message ID 16 32
AAD Length

2

暗号化コンテキストが空の場合、2 バイト長フィールドの値は AAD 0 です。

2

暗号化コンテキストが空の場合、2 バイト長フィールドの値は AAD 0 です。

AAD

変数。  このフィールドの長さは、前の 2 バイト (AAD 長さフィールド) に表示されます。

暗号化コンテキストが空の場合、 ヘッダーに AADフィールドはありません。

変数。  このフィールドの長さは、前の 2 バイト (AAD 長さフィールド) に表示されます。

暗号化コンテキストが空の場合、 ヘッダーに AADフィールドはありません。

Encrypted Data Key Count 2 2
Encrypted Data Key(s) 変数。  暗号化されたデータキーの数とそれぞれの長さによって決まります。 変数。  暗号化されたデータキーの数とそれぞれの長さによって決まります。
Content Type 1 1
Reserved 4 [なし]
IV Length 1 [なし]
Frame Length 4 4
Algorithm Suite Data [なし] 変数。  メッセージを生成したアルゴリズムによって決まります。
Header Authentication 変数。  メッセージを生成したアルゴリズムによって決まります。 変数。  メッセージを生成したアルゴリズムによって決まります。
バージョン

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

タイプ

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

このフィールドは、メッセージ形式バージョン 2 では存在しません。

アルゴリズム ID

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

メッセージ ID

メッセージを識別するランダムに生成された値。メッセージ ID。

  • 暗号化されたメッセージを一意に識別します。

  • メッセージヘッダーを、メッセージ本文に弱くバインドします。

  • 複数の暗号化されたメッセージでデータキーを安全に再利用するためのメカニズムを提供します。

  • AWS Encryption SDKでのデータキーの誤った再利用や失効を防ぎます。

この値は、メッセージ形式バージョン 1 で 128 ビット、バージョン 2 では 256 ビットです。

AAD 長さ

追加の認証済みデータの長さ (AAD)。これは、 を含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイト値ですAAD。

暗号化コンテキストが空の場合、Length AAD フィールドの値は 0 です。

AAD

追加認証データ。AAD は、暗号化コンテキスト のエンコードです。キーと値のペアの配列で、各キーと値は UTF-8 でエンコードされた文字の文字列です。暗号化コンテキストは一連のバイトに変換され、AAD値に使用されます。暗号化コンテキストが空の場合、 ヘッダーに AADフィールドはありません。

署名付きのアルゴリズムを使用する場合、暗号化コンテキストにはキーと値のペア {'aws-crypto-public-key', Qtxt} が含まれている必要があります。Qtxt は、SEC1 バージョン 2.0 に従って圧縮され、base64 でエンコードされた楕円曲線ポイント Q を表します。暗号化コンテキストには追加の値を含めることができますが、構築される の最大長AADは 2^16~1 バイトです。

次の表は、 を形成するフィールドを示していますAAD。キーと値のペアは、UTF-8 文字のコードに従って、キーごとに昇順にソートされます。バイトは示されている順に追加されます。

AAD 構造
フィールド 長さ (バイト)
Key-Value Pair Count 2
Key Length 2
Key 変数。  前の 2 バイト (キーの長さ) で指定された値と同じです。
Value Length 2
Value 変数。  前の 2 バイト (値の長さ) で指定された値と同じです。
キーと値のペア数

のキーと値のペアの数AAD。これは、 のキーと値のペアの数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値ですAAD。のキーと値のペアの最大数は 2^16 - 1 AADです。

暗号化コンテキストがない場合、または暗号化コンテキストが空の場合、このフィールドは AAD構造に存在しません。

キーの長さ

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

キー

キーと値のペアのキー。これは UTF-8 でエンコードされたバイトのシーケンスです。

値の長さ

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

キーと値のペアの値。これは UTF-8 でエンコードされたバイトのシーケンスです。

暗号化されたデータキーの数

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

暗号化されたデータキー (複数可)

暗号化されたデータキーのシーケンス。シーケンスの長さは暗号化されたデータキーの数とそれぞれの長さによって決まります。シーケンスには、少なくとも 1 つの暗号化されたデータキーが含まれています。

以下の表では、暗号化された各データキーを形成するフィールドについて説明します。バイトは示されている順に追加されます。

暗号化されたデータキーの構造
フィールド 長さ (バイト)
Key Provider ID Length 2
Key Provider ID 変数。  前の 2 バイト (キープロバイダー ID の長さ) で指定された値と同じです。
Key Provider Information Length 2
Key Provider Information 変数。  前の 2 バイト (キープロバイダー情報の長さ) で指定された値と同じです。
Encrypted Data Key Length 2
Encrypted Data Key 変数。  前の 2 バイト (暗号化されたデータキーの長さ) で指定された値と同じです。
キープロバイダー 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 バイトの値です。この値はメッセージを生成したアルゴリズムの IV バイト値によって決まります。

このフィールドはメッセージ形式バージョン 2 には存在しません。バージョン 2 では、メッセージヘッダーで確定的 IV 値を使用するアルゴリズムスイートのみがサポートされます。

フレームの長さ

フレーム化されたデータの各フレームの長さ。これは、各フレームのバイト数を指定する 32 ビットの符号なし整数として解釈される 4 バイトの値です。データがフレーム化されていないとき、つまり Content Type フィールドが 1 であるとき、この値は 0 である必要があります。

注記

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

アルゴリズムスイートデータ

メッセージを生成したアルゴリズムが必要とする補足データ。長さと内容はアルゴリズムによって決定されます。その長さは 0 になる場合があります。

このフィールドは、メッセージ形式バージョン 1 では存在しません。

ヘッダー認証

ヘッダー認証は、メッセージを生成したアルゴリズムよって決まります。ヘッダー認証はヘッダー全体で計算されます。IV と認証タグで構成されています。バイトは示されている順に追加されます。

ヘッダー認証構造
フィールド バージョン 1.0 での長さ (バイト) バージョン 2.0 での長さ (バイト)
IV 変数。  メッセージを生成したアルゴリズムの IV バイト値によって決まります。 該当なし
Authentication Tag 変数。  メッセージを生成したアルゴリズムの認証タグのバイト値によって決まります。 変数。  メッセージを生成したアルゴリズムの認証タグのバイト値によって決まります。
IV

ヘッダー認証タグの計算に使用される初期化ベクトル (IV)。

このフィールドは、メッセージ形式バージョン 2 のヘッダーでは存在しません。メッセージ形式バージョン 2 では、メッセージヘッダーで確定的 IV 値を使用するアルゴリズムスイートのみがサポートされます。

認証タグ

ヘッダーの認証値。ヘッダーのコンテンツ全体を認証するために使用されます。

本文の構造

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

フレーム化されていないデータ

フレーム化されていないデータは、一意の IV と本文 AADを使用して単一の BLOB で暗号化されます。

注記

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

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

フレーム化されていない本文構造
フィールド 長さ、バイト単位
IV 変数。  ヘッダーの IV Length バイトで指定された値と同じです。
Encrypted Content Length 8
Encrypted Content 変数。  前の 8 バイト (暗号化されたコンテンツの長さ) で指定された値と同じです。
Authentication Tag 変数。  使用されたアルゴリズムの実装によって決定されます。
IV

暗号化アルゴリズム で使用する初期化ベクトル (IV)。

暗号化されたコンテンツの長さ

暗号化されたコンテンツ、または暗号化テキストの長さ。これは、暗号化されたコンテンツを含むバイト数を指定する 64 ビットの符号なし整数として解釈される 8 バイトの値です。

技術的には、最大許容値は 2^63-1、または 8 エクスビバイト (8 EiB) です。ただし、実装されたアルゴリズムによって設定されている制限が原因で、実際の最大値は 2^36-32、または 64 ギビバイト (64 GiB) です。

注記

この Java 実装では、言語の制限により、この値はSDKさらに 2^31 - 1、または 2 ギビバイト (2 GiB) に制限されます。

暗号化されたコンテンツ

暗号化アルゴリズムによって返される暗号化されたコンテンツ (暗号化テキスト)。

認証タグ

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

フレーム化されたデータ

フレーム化されたデータでは、プレーンテキストのデータはフレームと呼ばれる同じ長さのパートに分割されます。は、各フレームを一意の IV と本文 AADで個別に AWS Encryption SDK 暗号化します。

注記

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

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

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

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

フレーム化されたデータのフレームの構成は、暗号化されたコンテンツの長さによって異なります。

  • フレームの長さと同じである場合 — 暗号化されたコンテンツの長さが通常フレームの長さと同じ場合、メッセージはデータを含む通常フレームとそれに続く長さがゼロ (0) の最終フレームで構成されます。または、メッセージはデータを含む最終フレームのみで構成されます。この場合、最終フレームの長さは通常フレームと同じになります。

  • フレームの長さの倍数である場合 — 暗号化されたコンテンツの長さが通常フレームの長さの倍数である場合、メッセージはデータを含む通常フレームとそれに続く長さがゼロ (0) の最終フレームで終わります。または、メッセージはデータを含む最終フレームで終わります。この場合、最終フレームの長さは通常フレームと同じになります。

  • フレームの長さの倍数ではない場合 — 暗号化されたコンテンツの長さが通常フレームの長さの倍数ではない場合、最終フレームには残りのデータが含まれます。最終フレームの長さは通常フレームよりも短くなります。

  • フレームの長さよりも短い場合 — 暗号化されたコンテンツの長さが通常フレームの長さよりも短い場合、メッセージはすべてのデータを含む最終フレームで構成されます。最終フレームの長さは通常フレームよりも短くなります。

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

フレーム化された本文構造、標準フレーム
フィールド 長さ、バイト単位
Sequence Number 4
IV 変数。  ヘッダーの IV Length バイトで指定された値と同じです。
Encrypted Content 変数。  ヘッダーの Frame Length で指定された値と同じです。
Authentication Tag 変数。  ヘッダーの Algorithm ID で指定された、使用されているアルゴリズムによって決定されます。
シーケンス番号

フレームシーケンス番号。これはフレームの増分カウンタです。これは 32 ビットの符号なし整数として解釈される 4 バイトの値です。

フレームデータはシーケンス番号 1 で始まる必要があります。後続のフレームは、順番に並んでいなければならず、1 つ前のフレームの増分を含む必要があります。それ以外の場合、復号プロセスは停止して、エラーが表示されます。

IV

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

暗号化されたコンテンツ

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

認証タグ

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

フレーム化された本文構造、最終フレーム
フィールド 長さ、バイト単位
Sequence Number End 4
Sequence Number 4
IV 変数。  ヘッダーの IV Length バイトで指定された値と同じです。
Encrypted Content Length 4
Encrypted Content 変数。  前の 4 バイト (暗号化されたコンテンツの長さ) で指定された値と同じです。
Authentication Tag 変数。  ヘッダーの Algorithm ID で指定された、使用されているアルゴリズムによって決定されます。
シーケンス番号の終了

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

シーケンス番号

フレームシーケンス番号。これはフレームの増分カウンタです。これは 32 ビットの符号なし整数として解釈される 4 バイトの値です。

フレームデータはシーケンス番号 1 で始まる必要があります。後続のフレームは、順番に並んでいなければならず、1 つ前のフレームの増分を含む必要があります。それ以外の場合、復号プロセスは停止して、エラーが表示されます。

IV

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

暗号化されたコンテンツの長さ

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

暗号化されたコンテンツ

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

認証タグ

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

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

フッターの構造
フィールド 長さ、バイト単位
Signature Length 2
Signature 変数。  前の 2 バイト (署名の長さ) で指定された値と同じです。
署名の長さ

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

署名

署名