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

長さ (バイト)

バージョン 1 1
タイプ 1 [なし]
アルゴリズム ID 2 2
メッセージ ID 16 32
AAD の長さ

2

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

2

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

AAD

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

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

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

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

暗号化されたデータキーの数 2 2
暗号化されたデータキー 変数。  暗号化されたデータキーの数とそれぞれの長さによって決まります。 変数。  暗号化されたデータキーの数とそれぞれの長さによって決まります。
コンテンツタイプ 1 1
リザーブド 4 [なし]
IV の長さ 1 [なし]
フレームの長さ 4 4
アルゴリズムスイートデータ [なし] 変数。  メッセージを生成したアルゴリズムによって決まります。
ヘッダー認証 変数。  メッセージを生成したアルゴリズムによって決まります。 変数。  メッセージを生成したアルゴリズムによって決まります。
バージョン

このメッセージ形式のバージョン。バージョンは 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) の長さ。これは、AAD を含むバイト数を指定する 16 ビットの符号なし整数として解釈される 2 バイトの値です。

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

AAD

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

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

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

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

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 つの暗号化されたデータキーが含まれています。

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

暗号化されたデータキーの構造
フィールド 長さ (バイト)
キープロバイダー ID の長さ 2
キープロバイダー ID 変数。  前の 2 バイト (キープロバイダー ID の長さ) で指定された値と同じです。
キープロバイダー情報の長さ 2
キープロバイダー情報 変数。  前の 2 バイト (キープロバイダー情報の長さ) で指定された値と同じです。
暗号化されたデータキーの長さ 2
暗号化されたデータキー 変数。  前の 2 バイト (暗号化されたデータキーの長さ) で指定された値と同じです。
キープロバイダー ID の長さ

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

キープロバイダー ID

キープロバイダー ID。これは、暗号化されたデータキーのプロバイダーを示すために使用され、拡張することを目的としています。

キープロバイダー情報の長さ

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

キープロバイダー情報

キープロバイダー情報 これはキープロバイダーによって決定されます。

AWS KMS がマスターキープロバイダーであるか、AWS KMS キーリングを使用している場合、この値には、AWS KMS key の Amazon リソースネーム (ARN) が含まれます。

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

暗号化されたデータキーの長さ。これは、暗号化されたデータキーを含むバイト数を指定する 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 バイト値によって決まります。 該当なし
認証タグ 変数。  メッセージを生成したアルゴリズムの認証タグのバイト値によって決まります。 変数。  メッセージを生成したアルゴリズムの認証タグのバイト値によって決まります。
IV

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

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

認証タグ

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

本文の構造

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

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

フレーム化されていないデータは、一意の IV と本文 AAD を含む 1 つの blob に暗号化されます。

注記

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

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

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

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

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

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

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

注記

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

暗号化されたコンテンツ

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

認証タグ

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

フレーム化されたデータ

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

注記

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

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

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

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

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

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

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

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

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

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

フレーム化された本文構造、標準フレーム
フィールド 長さ、バイト単位
シーケンス番号 4
IV 変数。  ヘッダーの IV の長さ バイトで指定された値と同じです。
暗号化されたコンテンツ 変数。  ヘッダーの フレームの長さ で指定された値と同じです。
認証タグ 変数。  ヘッダーの アルゴリズム ID で指定された、使用されているアルゴリズムによって決定されます。
シーケンス番号

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

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

IV

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

暗号化されたコンテンツ

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

認証タグ

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

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

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

シーケンス番号

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

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

IV

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

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

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

暗号化されたコンテンツ

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

認証タグ

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

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

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

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

署名