ネットワーク層で暗号化を実現するプロトコル。IPv6では実装必須。IETFが策定。
- ○それより上のすべてを透過的にセキュアにできる。
- ×専用ソフトのインストールなどが必要で、クライアント/サーバー間通信で使うのは面倒。拠点間接続向き。
機能は次の通り。
- データ暗号化
- メッセージ認証
- 安全な鍵交換
- クライアント/サーバー認証 (ただし機器のレベルでのみ。ユーザー認証といったたぐいではない。)
動作モード
トンネルモードとトランスポートモードがある。
- トンネルモード
- 元のパケット全体を暗号化したモノに、新たなIPヘッダを付けて転送する。
- VPN装置を介すような場合向け。
- トランスポートモード
- 元パケットのIPヘッダはそのままに、データ部分だけ暗号化し転送する。
- VPN装置を介さないEndToEndでのIPSec通信向け。
次の3つのプロトコルが中核をなす。
- IKE(Internet Key Exchange)
- 安全な鍵交換プロトコル。
- ESP(Encapsulating Security Payload)
- 暗号化とメッセージ認証を実現
- AH(Authentication Header)
- メッセージ認証のみ(暗号化が使えない国向け)
IKE
の2層で鍵交換を行う。手順は次の通り。
- IKEの通信で使う鍵交換。
- UDP/500を使う。開けておく必要有り。
- 1-1.暗号化アルゴリズムのネゴシエーション
- 1-2.Diffie-Hellman鍵交換方式による共通鍵の生成。
- 秘密鍵そのものではなく、乱数と秘密鍵から生成した公開情報を送受信。
- 通信内容を第三者に盗聴されても、直ちに秘密鍵を知られることはなく、安全に鍵情報を交換することができる。
- ただし、Man-in-the-middle 攻撃には弱いらしい。
- 1-2-1.両者が秘密鍵を生成
- 1-2-2.秘密鍵より一定の関数で生成した公開情報を送付。
- 1-2-3.送付された関数を一定の関数で演算→両者で同じ値となる。これを暗号用の共通鍵として用いる。
- IPSecで使う鍵交換
- 1で生成した共通鍵で暗号化通信。暗号化アルゴリズムの決定、暗号鍵の交換などIPSecによる通信に必要な各種情報がやり取りされる。(「SA(Security Association)」のネゴシエーション)
ESP
暗号化とメッセージ認証機能を提供するプロトコル。パケットを以下の通り変換してやりとりする。
- MAC(Message Authentication Code)
- メッセージ認証で使う認証情報
- シーケンス番号
- パケットのシーケンス番号。リプレイアタックの防止に使う。
- 暗号化されたデータ
- その名の通り。トンネルモードではIPヘッダも含むが、トランスポートモードではTCPヘッダから先のみ。MACでの非改ざんサポートが可能な範囲もこの部分である。(暗号化のサポート範囲もおなじ。)
- SPI(Security Pointer Index)
- 合意されたSAを示すID
- 新IPヘッダ (トンネルモードの場合)
- パケットに追加される
- IPヘッダ (トランスポートモードの場合)
- パケットに追加される
AH
メッセージ認証機能を提供するプロトコル。暗号化機能は持たない。メッセージ認証の範囲がESPと異なり、AHではAH自体を含むパケットすべてが認証対象。(ESPのトランスポートモードではIPヘッダは認証範囲に含まれない)
弱点と対策
NAT/NAPT
ESPでは、NATはいけるがNAPTは無理(ポートがTCP/UDPヘッダで認証対象であるため。)。AHはどちらも無理。
| |
NAT |
NAPT |
| ESP トンネル |
○ |
× |
| ESP トランスポート |
○ |
× |
| AH トンネル |
× |
× |
| AH トランスポート |
× |
× |
IPsecパケットをさらにUDPでトンネルして送付すると解決。(NAT トラバーサル)
動的なIPが割り振られる機器の認証
IPアドレスでの認証が一般的であるため、動的にIPアドレスが割り当てられる機器の認証には注意が必要。Pre Shared Key とかを使って認証する手がある。
参考: