IPsec related IPv6 memo -*- mode: outline; outline-regexp: "[-\^L]+" -*- $Id: ipsec.txt,v 1.1.1.1 2001/08/30 15:43:50 mk Exp $ - SA -- system パケットを処理する際 SA と SPD を組み合わせる。 --- SAD (SA Database) SAD | +- SA1 | +- SA2 | ... --- SA (Security Assosiation) 方向性を持つ。 (送信用と受信用で別々に管理) Host A === ESP === Host B SA(in) SA(out) <- 同一の暗号化パラメータ SA(out) SA(in) <- 同一の暗号化パラメータ ---- SPI (Security Parameta Index) 32 bit 識別子(in AH/ESP ヘッダ)。 受信側が SA を識別するために必要。 (SPI により SA を探す。) 送信側はセレクタ情報で SA を選択するが、セレクタ情報の一部はトラ ンスポート層に関するものなので、受信側は全てのセレクタ情報にアク セスできない。このため、SPI が使われる。 SPI と SA の対応が1対1になるようにするドメイン(範囲)の保証は実装 まかせ。 受信側: 送信側から送られてきた SA の情報の一部として SPI を保存。 SPI/dest addr(/src addr)/protocol -> SA (一意に決められるという仮定) 送信側: セレクタで SAD を検索しその結果として SA を得る。 その SA の中に SPI が含まれている。 --- 管理 手動管理。 自動管理(IKE など)。 --- SA の生成 => SA のパラメータの折衝。 => SA を SAD に登録。 --- SA の管理 手動管理は消去しない限り存在。 --- SA の消去 SA の有効期限が切れた時(もちろん期限切れの前に再折衝できる)。 鍵によるセキュリティサービスが危険にさられた場合。 ポリシーで設定されているバイト数を越えて暗号化/復号or認証が行われ た場合。 通信相手が SA の消去を要求した場合。 --- SA のパラメータ シーケンス番号。 シーケンス番号オーバーフロー。 リプライアッタクに対する防御ウインドウ。 有効期限。 モード。 トンネルの宛先。 PMTU パラメータ。 --- セレクタ 発信元アドレス。 宛先アドレス。 名前。 プロコトル。 上位層のポート。 --- SPD (Security Polcy Databese) - AH 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | next header | payload len | reserve(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SPI | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ payload len(32bit word) : header_len -2 (see rfc2460) -- processing --- 送信 SPD のエントリの中て、AH を使用するエントリに送信パケットが一致。 => SAD を検索し対応する SA を探す。 => SA が存在しない。 => IKE が自動的に SA を生成。 シーケンス番号を0に初期化。 AHヘッダが作成される前に1増す。 SPI フィールドに SA 中の SPI の値を設定する。 next header を埋める。 payload len の計算。 認証データフィールドには0を設定。 ICV の計算(可変フィールドを0にして行う)。 パッドの埋めこみ。 (0でうめる。payload lenにカウントされなし送信しない。) => SA が存在する。 => SPD のエントリで指定されたモードで AH を使用する。 AH は必ず ESP の後で使用すること! --- 受信 IP ヘッダの宛先アドレス、プロトコル、AH ヘッダ中の SPI を使用して 送信側が使用した SA を探す。 => SA が見つからない。 廃棄。 => SA が見つかる。 => シーケンス番号のチェック(reply attack の防御)。 => ICV のチェック。 AH ヘッダの認証データフィールドの値を保存。 認証データフィールドと IP ヘッダの可変フィールドを0に設定す る。 パッドが必要なら行う(0にする)。 パッドを付加したパケット全体を認証アルゴリズムによってダイジェ ストに変換し保存していた ICV の値と比較。 => 一致しない。 廃棄。 => 一致する。 シーケンス番号の処理に用いる受信ウインドウを必要に応じて 進める。 保存しておいた値を IP ヘッダの可変フィールドに書き戻す。 - ESP 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SPI | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IV | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | PAD | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | PAD len | Next header | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -- 送信 処理 拡張ヘッダの後ろにESPヘッダが挿入する。 => transport mode の場合 => IP ヘッダのプロトコルフィールドの値を ESP ヘッダの Next header フィールドにコピー。 その他の ESP ヘッダの残りのフィールドに必要な値を設定。 SPI フィールドにはパケット処理に用いる SA の SPI の値を設定。 シーケンス番号フィールドには増分された値を設定。 パッドを挿入。 => tunnel mode の場合 => ESP ヘッダの Next header フィールドにはカプセル化するパケットに 応じて4(IPv4)/41(IPv6)を設定。 その他のフィールドは transport mode と同じ。 IP ヘッダを ESP ヘッダの前に付加。 ESP の処理を行なう自分自身のアドレスを発信元アドレスに設定し、 ESP の処理に使用する SA から取り出したアドレスを宛先アドレスに 設定する。プロコトルフィールドは 50 に設定。 => SA が指定する暗号アルゴリズムを用いて、ペイロードデータの先頭か ら Next header フィールドまでを暗号化。 => SA が指定する認証アルゴリズムを用いて、ESP ヘッダを先頭に、 暗号データ、そして ESP トレーラまでの認証データを生成。 その認証データは、ESP トレーラの認証データフィールドに設定。 => ESP ヘッダの前に付加する IP ヘッダのチェックサムを再計算。 ESP ヘッダが付加されるときにフラグメント化のチェックが行われていな いことに注意。MTUより大きければ単にフラグメントされるだけ。 -- 受信 処理 パケット処理に必要な SA があるか確認。 => ない場合 廃棄。 => ある場合 その SA を用いる。 => シーケンス番号のチェック。 => SA が指定する認証アルゴリズムに、ESP パケットから認証デー タを除いた部分と鍵が渡される。認証アルゴリズムが出力する ダイジェストと認証データが一致したらそのパケットは認証さ れる。 => 復号処理 SA が指定する暗号アルゴリズムと鍵で、ペイロードデータ の先頭から Next headerまでが復号される。 復号が成功したかは、パッドの値でチェック。 => パケットの妥当性チェック(部分的) SA が特定のモードで指定されている場合、パケットの ESP のモードをチェック。 => 異なる場合 廃棄。 => transport mode の場合 ESP ヘッダの Next header フィールドの値を IP ヘッ ダのプロトコルフィールドにコピー。 IP ヘッダのチェックサムの再計算。 => tunnel mode の場合 外側の IP ヘッダと ESP ヘッダを外す。 => SA が指定するホスト、ポート、プロトコルの条件 にパケットが一致するかチェック。 - mode -- transport mode AH 適用前 適用後 +--------------------+ +--------------------+ --- | IPv6 header | | IPv6 header | | +--------------------+ +--------------------+ | | (Ext header) | | (Ext header) | 認 +--------------------+ +--------------------+ 証 | Upper layer header | | AH | 範 +--------------------+ +--------------------+ 囲 | Data / | (Dest Op header) | | +--------------------+ +--------------------+ | | Upper layer header | | +--------------------+ | | Data / | +--------------------+ --- -- tunnel mode AH 適用前 適用後 +--------------------+ --- | IPv6 header | | +--------------------+ | | (Ext header) | | +--------------------+ 認 | AH | 証 +--------------------+ - - +--------------------+ 範 | IPv6 header | | IPv6 header | 囲 +--------------------+ +--------------------+ | | (Ext header) | | (Ext header) | | +--------------------+ +--------------------+ | | Upper layer header | | Upper layer header | | +--------------------+ +--------------------+ | | Data / | Data / | +--------------------+ - - +--------------------+ --- -- transport mode ESP 適用前 適用後 +--------------------+ +--------------------+ | IPv6 header | | IPv6 header | +--------------------+ +--------------------+ | (Ext header) | | (Ext header) | +--------------------+ +--------------------+ --- | Upper layer header | | ESP header | | +--------------------+ +--------------------+ --- | | Data / | (Dest Op header | | 認 +--------------------+ +--------------------+ 暗 証 | Upper layer header | 号 範 +--------------------+ 化 囲 | Data / 範 | +--------------------+ 囲 | | ESP trailer | | | +--------------------+ --- --- | ESP auth | +--------------------+ -- tunnel mode ESP 適用前 適用後 +--------------------+ | IPv6 header | +--------------------+ | (Ext header) | +--------------------+ --- | ESP header | | +--------------------+ - - +--------------------+ --- | | IPv6 header | | IPv6 header | | 認 +--------------------+ +--------------------+ 暗 証 | (Ext header) | | (Ext header) | 号 範 +--------------------+ +--------------------+ 化 囲 | Upper layer header | | Upper layer header | 範 | +--------------------+ +--------------------+ 囲 | | Data / | Data / | | +--------------------+ - - +--------------------+ | | | ESP trailer | | | +--------------------+ --- --- | ESP auth | +--------------------+ - IKE SA の自動生成する。 IPsec のために SA の折衝を行い、SAD に SA を登録する。 -- 複数のプロトコルからなる ISAKMP の基本部分と、Oakley のモード、SKEMEの共有と鍵の更新テクニッ クを採用。 -- ISAKMP - パケット処理 -- outbound 処理 1. look up SPD and decide to Security Policy case 1) discard case 2) bypass case 3) apply 2. in case 3 if SA exist return SA pointer else call IKE to create new SA // wait new SA fi add AH/ESP Header -- inbound 処理 1. look up SPD using selector field case 1) discard case 2) bypass case 3) apply 2. in case 3 if SA not exist discard packet else get SPI, src addr, dst addr in packet search SAD using (SPI, dst addr, protocol) // protocol is AH or ESP //use src addr instead of dst addr(implementation issue) process AH or ESP search Policy using Selector check Policy (SA's dst addr and src addr is correctly?) fi - Fragment 一般に IPsecはフラグメントの影響を受けない。 (IPsecの処理終了後にIPパケットのフラグメントが行われるため。) IPsecはパケットのフラグメント化も再構成も行なわない。 output: IP layer がフラグメント処理を行なう。 input : IP layer が再構成したパケットをIPsec layer が受けとる。 - PMTU IPsec header の付加によって PMTUの長さに影響 IPsec layer がPMTUの情報を調べる必要がある。 - ICMP tunnel の end point router で受けた icmp err message の source address check は失敗する。 transport mode SA で AH or ESP で保護された icmp err message を forward すべきでない。 host によって生成された icmp message は source address selecotrsに 対しチェックすべき。 AH or ESP で保護されていない icmp message を処理したり forward した りすることは denial of service の原因になる。 ただ、discard すると ipsec が実装されていない router からの有用な message を失うおそれもある。(i.e. PMTU) 結局は local policy issue。 - Multicast rfc2401 4.7