2. Encapsulating Security Payload Packet Format (カプセル化セキュリティペイロードパケットフォーマット)
ESP ヘッダーの直前にある (外側の) プロトコルヘッダー (IPv4, IPv6, または拡張) は, その Protocol (IPv4) または Next Header (IPv6, Extension) フィールドに値 50 を含まなければなりません (IANA ウェブページ http://www.iana.org/assignments/protocol-numbers を参照)。図 1 は ESP パケットのトップレベル形式を示しています。パケットは 2 つの 4 バイトフィールド (Security Parameters Index (SPI, セキュリティパラメータインデックス) と Sequence Number (シーケンス番号)) で始まります。これらのフィールドの後には Payload Data (ペイロードデータ) が続き, これは暗号化アルゴリズムとモードの選択, および TFC パディングの使用に依存するサブ構造を持ちます。これについては後で詳しく説明します。Payload Data の後には Padding (パディング) と Pad Length (パッド長) フィールド, および Next Header (次ヘッダー) フィールドがあります。オプションの Integrity Check Value (ICV, 完全性チェック値) フィールドがパケットを完成させます。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
| Security Parameters Index (SPI) | ^Int.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| Sequence Number | |ered
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ----
| Payload Data* (variable) | | ^
~ ~ | |
| | |Conf.
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| | Padding (0-255 bytes) | |ered*
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| | Pad Length | Next Header | v v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------
| Integrity Check Value-ICV (variable) |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
図 1. ESP パケットのトップレベル形式
* Payload フィールドに暗号化同期データ, 例えば Initialization Vector (IV, 初期化ベクトル, セクション 2.3 参照) が含まれている場合, 通常それ自体は暗号化されませんが, 暗号文の一部として言及されることがよくあります。
(送信される) ESP トレーラーは Padding, Pad Length, および Next Header フィールドで構成されます。追加の暗黙的な ESP トレーラーデータ (送信されない) は, 以下に説明するように完全性計算に含まれます。
完全性サービスが選択されている場合, 完全性計算は SPI, Sequence Number, Payload Data, および ESP トレーラー (明示的および暗黙的) を含みます。
機密性サービスが選択されている場合, 暗号文は Payload Data (含まれる可能性のある暗号化同期データを除く) と (明示的な) ESP トレーラーで構成されます。
上記のように, Payload Data はサブ構造を持つ場合があります。明示的な Initialization Vector (IV) を必要とする暗号化アルゴリズム, 例えば Cipher Block Chaining (CBC, 暗号ブロック連鎖) モードは, 保護される Payload Data の前にその値を付けることがよくあります。一部のアルゴリズムモードは暗号化と完全性を単一の操作に結合します。この文書では, このようなアルゴリズムモードを "combined mode algorithms (結合モードアルゴリズム)" と呼びます。結合モードアルゴリズムに対応するには, アルゴリズムが完全性データを伝達するために使用されるペイロードサブ構造を明示的に記述する必要があります。
一部の結合モードアルゴリズムは暗号化されたデータに対してのみ完全性を提供しますが, 他のアルゴリズムは送信用に暗号化されていない追加データに対して完全性を提供できます。SPI および Sequence Number フィールドは完全性サービスの一部として完全性を必要とし, それらは暗号化されていないため, 採用される結合アルゴリズムモードのスタイルに関係なく, サービスが選択されるたびにそれらに完全性が提供されることを保証する必要があります。
任意の結合モードアルゴリズムが使用される場合, アルゴリズム自体は復号化された平文と完全性チェックの合格/不合格の指示の両方を返すことが期待されます。結合モードアルゴリズムの場合, ESP パケットの最後に通常現れる ICV (完全性が選択されている場合) を省略できます。ICV が省略され完全性が選択されている場合, パケットの完全性を検証する ICV 相当の手段を Payload Data 内にエンコードすることは結合モードアルゴリズムの責任です。
結合モードアルゴリズムが暗号化されたデータに対してのみ完全性を提供する場合, SPI および Sequence Number を Payload Data の一部として複製する必要があります。
最後に, トラフィックフロー機密性のためのパディングを Payload Data の後と ESP トレーラーの前に挿入する新しい規定が設けられています。図 2 は Payload Data のこのサブ構造を示しています。(注: この図はワイヤ上のビットを示しています。したがって, 拡張シーケンス番号が使用されている場合でも, Sequence Number の 32 ビットのみが送信されます (セクション 2.2.1 参照)。)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Security Parameters Index (SPI) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
| IV (optional) | ^ p
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | a
| Rest of Payload Data (variable) | | y
~ ~ | l
| | | o
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | a
| | TFC Padding * (optional, variable) | v d
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
| | Padding (0-255 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Pad Length | Next Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Integrity Check Value-ICV (variable) |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
図 2. Payload Data のサブ構造
* トンネルモードが使用されている場合, IPsec 実装は Payload Data の後と Padding (0-255 バイト) フィールドの前に Traffic Flow Confidentiality (TFC, トラフィックフロー機密性) パディング (セクション 2.4 参照) を追加できます。
結合アルゴリズムモードが使用されている場合, 図 1 および図 2 に示されている明示的な ICV を省略できます (以下のセクション 3.3.2.2 参照)。アルゴリズムとモードは SA が確立されるときに固定されるため, 特定の SA の ESP パケットの詳細な形式 (Payload Data サブ構造を含む) は, SA 上のすべてのトラフィックに対して固定されます。
以下の表は前述の図のフィールドを参照し, それぞれ異なる処理モデルを持ついくつかのカテゴリのアルゴリズムオプションが上記のフィールドにどのように影響するかを示しています。処理の詳細は後のセクションで説明します。
表 1. 分離された暗号化と完全性アルゴリズム
| フィールド | バイト数 | 必須 [1] | 暗号化カバー範囲 | 完全性カバー範囲 | 送信内容 |
|---|---|---|---|---|---|
| SPI | 4 | M | Y | plain | |
| Seq# (下位ビット) | 4 | M | Y | plain | |
| IV | variable | O | Y | plain | |
| IP datagram [2] | variable | M or D | Y | Y | cipher[3] |
| TFC padding [4] | variable | O | Y | Y | cipher[3] |
| Padding | 0-255 | M | Y | Y | cipher[3] |
| Pad Length | 1 | M | Y | Y | cipher[3] |
| Next Header | 1 | M | Y | Y | cipher[3] |
| Seq# (上位ビット) | 4 | if ESN [5] | Y | not xmtd | |
| ICV Padding | variable | if need | Y | not xmtd | |
| ICV | variable | M [6] | plain |
[1] M = 必須; O = オプション; D = ダミー
[2] トンネルモードの場合 -> IP データグラム; トランスポートモードの場合 -> 次ヘッダーとデータ
[3] 暗号化が選択されている場合は暗号文
[4] ペイロードがその "実際の" 長さを指定している場合にのみ使用可能
[5] セクション 2.2.1 参照
[6] 個別の完全性アルゴリズムが使用される場合は必須
表 2. 結合モードアルゴリズム
| フィールド | バイト数 | 必須 [1] | 暗号化カバー範囲 | 完全性カバー範囲 | 送信内容 |
|---|---|---|---|---|---|
| SPI | 4 | M | plain | ||
| Seq# (下位ビット) | 4 | M | plain | ||
| IV | variable | O | Y | plain | |
| IP datagram [2] | variable | M or D | Y | Y | cipher |
| TFC padding [3] | variable | O | Y | Y | cipher |
| Padding | 0-255 | M | Y | Y | cipher |
| Pad Length | 1 | M | Y | Y | cipher |
| Next Header | 1 | M | Y | Y | cipher |
| Seq# (上位ビット) | 4 | if ESN [4] | Y | [5] | |
| ICV Padding | variable | if need | Y | [5] | |
| ICV | variable | O [6] | plain |
[1] M = 必須; O = オプション; D = ダミー
[2] トンネルモードの場合 -> IP データグラム; トランスポートモードの場合 -> 次ヘッダーとデータ
[3] ペイロードがその "実際の" 長さを指定している場合にのみ使用可能
[4] セクション 2.2.1 参照
[5] アルゴリズムの選択によってこれらが送信されるかどうかが決まりますが, いずれの場合も結果は ESP には見えません
[6] アルゴリズム仕様によってこのフィールドが存在するかどうかが決まります
以下のサブセクションでは, ヘッダー形式のフィールドについて説明します。"Optional (オプション)" とは, オプションが選択されていない場合にフィールドが省略されることを意味します。つまり, 送信されるパケットにも ICV の計算用にフォーマットされるパケットにも存在しません (セクション 2.7 参照)。オプションが選択されるかどうかは Security Association (SA, セキュリティアソシエーション) 確立の一部として決定されます。したがって, 特定の SA の ESP パケットの形式は, SA の期間中固定されます。対照的に, "mandatory (必須)" フィールドはすべての SA に対して常に ESP パケット形式に存在します。
注: IPsec で使用されるすべての暗号化アルゴリズムは, 正規のネットワークバイトオーダー (RFC 791 [Pos81] の付録参照) での入力を期待し, 正規のネットワークバイトオーダーで出力を生成します。IP パケットもネットワークバイトオーダーで送信されます。
ESP にはバージョン番号が含まれていないため, 後方互換性に関する懸念がある場合は, 2 つの IPsec ピア間のシグナリングメカニズムを使用して ESP の互換バージョンを確保する (例: Internet Key Exchange (IKEv2) [Kau05]) か, 帯域外構成メカニズムを使用して対処しなければなりません。