TL

IPsec の内部構造:AH/ESP・SA・トランスポート/トンネルモード

IPsecが何をどこまで守るのかを、AH/ESPのヘッダ構造とSA・SPIの束ね方から正確に把握できます。トンネル/トランスポートの使い分けで設計ミスを防げます。

応用IPsecVPN暗号化認証セキュリティ最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.IPsecはAH(認証のみ)とESP(暗号化+認証)の2プロトコルで、保護範囲が違う。実運用はほぼESP。
  • 2.通信の保護方式は片方向のSAに束ねられ、受信側はパケット中のSPIでどのSAを使うか引く。
  • 3.トランスポートモードは元IPヘッダを残し、トンネルモードは元パケット全体を新IPヘッダで包む。

IPsec が「何を・どこまで」守るのか

IPsec(RFC 4301)は、IP 層でパケットに認証と暗号化を施す枠組みです。アプリやトランスポートを書き換えずに、IP パケット単位で保護をかけられるのが特徴で、/network/vpn/ の拠点間トンネルや、TLS が届かない L3 区間の保護に使われます。理解の鍵は 2つのプロトコル(AH/ESP) と、それを束ねる SA(Security Association) です。どのトラフィックをどう守るかは SA に集約され、パケット側はその SA を指す番号だけを運びます。

鍵交換は IPsec 本体とは別の層

本記事は保護を施す側(AH/ESP/SA)を扱います。SA に入れる鍵そのものをどう合意するかは IKE(IKEv2, RFC 7296) の役割で、別プロトコルです。IKE が DH 鍵交換と相互認証を行って SA を確立し、確立後の実データ保護を AH/ESP が担う、という分業になっています。

AH と ESP:保護範囲が違う2つのプロトコル

IPsec の保護は AH(Authentication Header)ESP(Encapsulating Security Payload) のどちらかで実現します。両者の決定的な差は「暗号化するか」と「IP ヘッダまで認証に含めるか」です。

AHはIPヘッダまで認証に含めるためNATと相性が悪く、暗号化も持たない。現在の実運用はESPに統一されている。
項目AH(プロトコル番号51)ESP(プロトコル番号50)
機密性(暗号化)なしあり(ペイロードを暗号化)
完全性・認証ありあり(ICVフィールド)
認証の対象範囲外側IPヘッダの不変部分も含むESPヘッダ以降のみ(IPヘッダは含めない)
リプレイ防止あり(シーケンス番号)あり(シーケンス番号)
NAT越え実質不可(IPヘッダを認証するため)可能(ESP-over-UDPでカプセル化)
実運用での採用ほぼ使われない事実上の標準

AH は IP ヘッダの不変フィールドまで認証範囲に含めるため、経路上で送信元 IP を書き換える /network/nat/ を通ると認証が壊れます。これが AH が廃れた最大の理由です。ESP は IP ヘッダを認証範囲に含めないため NAT と共存でき、暗号化も持つため、機密性が不要でも実務では ESP(暗号化なし=null 暗号、または認証のみの構成)を選ぶのが通例です。

ESP のパケット構造

ESP は前後を自分のフィールドで挟み込み、ペイロードを暗号化します。認証(ICV)と暗号化で 適用範囲が異なる 点が要注意です。

[ IP ヘッダ ][ ESP ヘッダ ][      暗号化される範囲      ][ ESP 認証データ(ICV) ]
              SPI(4B)        元ペイロード(またはIPパケット)
              Seq(4B)        + ESP トレーラ
                               Padding / Pad長 / Next Header

暗号化の範囲: ペイロード + ESP トレーラ
認証(ICV)の範囲: ESP ヘッダ + 暗号化範囲(SPI/Seq を含む、IPヘッダは含まない)

Next Header は暗号化された末尾(トレーラ)に置かれ、内側の中身が TCP(6) なのか、トンネルモードなら IP(4) なのかを示します。これが暗号化される側に隠れるため、トンネルモードでは内側プロトコルの種別すら外からは読めません。Padding はブロック暗号の境界合わせと、平文長を隠す目的で入ります。

暗号化と認証の順序:Encrypt-then-MAC

ESP は 暗号化してから ICV を計算 します(encrypt-then-MAC)。受信側は復号する前に ICV を検証でき、改ざんされた暗号文を復号処理にかける前に破棄できます。これにより、復号オラクル攻撃(パディングの可否で情報が漏れる類)を構造的に避けられます。AES-GCM のような AEAD を使う場合は、この暗号化と認証が1つのアルゴリズムに統合されます。

SA と SPI:保護方式の束ね方

SA(Security Association) は「この通信をどう守るか」の設定一式です。使用プロトコル(AH/ESP)、暗号・認証アルゴリズム、鍵、シーケンス番号カウンタ、モード(トランスポート/トンネル)などをひとまとめにします。重要な性質が2つあります。

  • SA は片方向。双方向通信には行き用と帰り用で 2本 の SA が要る。
  • SA は {SPI, 宛先IP, プロトコル} の3つ組 で一意に識別される。

受信側はパケットの ESP/AH ヘッダにある SPI(Security Parameter Index, 32ビット) を見て、自分の SA データベース(SADB)から該当 SA を引き当て、その鍵とアルゴリズムで処理します。SPI は受信側が SA 確立時に割り当てた「このパケットはこの設定で開けてくれ」という索引です。鍵やアルゴリズムをパケットに書く必要がないのは、SPI が SA への参照として働くからです。

受信パケット → ESPヘッダの SPI を読む
             → SADB を {SPI, dstIP, ESP} で検索
             → 一致した SA の鍵・アルゴリズムで ICV検証 → 復号
SPI は鍵ではなく索引

試験では「SPI に鍵情報が入っている」という誤解が頻出します。SPI は単なる 32 ビットの識別子で、実際の鍵やアルゴリズムは受信側の SADB 内の SA が保持します。SPI はそこを引くためのインデックスにすぎません。どのトラフィックに IPsec を適用するか(選択・バイパス・破棄)を決めるのは別の SPD(Security Policy Database) で、SPD と SADB は役割が分かれています。

トランスポートモードとトンネルモード

同じ ESP/AH でも、どこに自分のヘッダを挿入し、元の IP ヘッダをどう扱うか が2モードで異なります。

元のパケット:
  [ IP ヘッダ ][ TCP ][ データ ]

トランスポートモード(ESP):
  [ IP ヘッダ ][ ESP ][ TCP ][ データ ][ ESPトレーラ/ICV ]
   └ 元のIPヘッダを残し、その「中身」だけを保護

トンネルモード(ESP):
  [ 新IPヘッダ ][ ESP ][ IPヘッダ ][ TCP ][ データ ][ ESPトレーラ/ICV ]
   └ 元のIPパケット「丸ごと」を暗号化し、新しいIPヘッダで包む
  • トランスポートモードは元 IP ヘッダをそのまま使い、上位レイヤ(TCP/UDP のペイロード)だけを保護します。エンドツーエンド、つまりホスト自身が IPsec を終端する用途向きです。元の送信元・宛先 IP が露出するためオーバーヘッドは小さいですが、内部アドレスが見えてしまいます。
  • トンネルモードは元パケット全体(IP ヘッダ含む)を ESP のペイロードとして暗号化し、外側に 新しい IP ヘッダ を付けます。ゲートウェイ間(拠点間 VPN)の標準で、内部トポロジ(元の送信元・宛先 IP)を外から隠せます。代わりに IP ヘッダが二重になり、オーバーヘッドは増えます。

トンネルモードでは内側の IP ヘッダごと暗号化されるため、外側ヘッダの宛先は対向ゲートウェイの IP になります。経路上の機器は「2つのゲートウェイ間の ESP 通信」しか見えず、内側で誰が誰と話しているかは分かりません。これが /network/vpn/ で社内ネットを丸ごと相手拠点へ届けられる仕組みです。カプセル化の積み重なり方は /network/protocol-encapsulation/ の視点でも捉えられます。

リプレイ防止ウィンドウ

ESP/AH ヘッダの シーケンス番号(32ビット、拡張で64ビット) は、送信ごとに1ずつ増えます。受信側はこれで リプレイ(傍受したパケットの再送) を弾きますが、IP は順序保証がないため「番号が連続していること」は要求できません。そこで スライディングウィンドウ を使います。

受信済み最大シーケンス番号 = T、ウィンドウ幅 = W(例 64)
  - seq > T            : 新規。受理し、ウィンドウを前進させる
  - T-W < seq <= T     : ウィンドウ内。ビットマップで既受信かを確認し、
                         未受信なら受理、既受信なら破棄(リプレイ)
  - seq <= T-W         : 古すぎる。無条件で破棄

受信側はウィンドウ幅ぶんのビットマップを持ち、受理済みの番号に対応するビットを立てます。これで「少々の順序入れ替わりは許容しつつ、同じ番号の二度目は確実に破棄」できます。重要なのは、リプレイ防止は受信側だけの判断で完結 し、送信側が同じ SA で番号を再利用しないことが前提になる点です。

シーケンス番号の枯渇と鍵更新

シーケンス番号は SA ごとに単調増加し、ラップアラウンド(一周)させてはいけません。同じ鍵で番号が一周すると、リプレイ判定が破綻し、AES-GCM のような構成では nonce 衝突で機密性まで失われます。そのため番号が上限に近づく前に IKE で 新しい SA に鍵を更新(rekey) し、古い SA を捨てます。AEAD ではシーケンス番号が nonce の一部を兼ねるため、この管理は機密性の前提条件です。

まとめ:設計時に押さえる対応関係

IPsec を設計・トラブルシュートするときは、次の対応を押さえると迷いません。機密性が要るなら ESP、相手がゲートウェイならトンネルモード、NAT を越えるなら ESP-over-UDP、という具合に要件から一意に決まります。

要件からプロトコル・モード・カプセル化が決まる。鍵更新(rekey)まで含めて運用設計するのが実務の勘所。
要件・状況選ぶべき構成
暗号化が必要ESP(AHは暗号化を持たない)
ホスト自身が終端、内部アドレス露出可トランスポートモード
拠点間VPN、内部トポロジを隠すトンネルモード+ESP
経路上にNATがあるESP-over-UDP(NAT-T, UDP 4500)
どのSAで処理するか特定パケットのSPIでSADBを引く
再送パケットを弾くシーケンス番号+スライディングウィンドウ

鍵交換側の IKEv2 と前方秘匿性の考え方は /network/tls13-handshake-internals/ の ECDHE と通じます。AH/ESP が「守る側」、SA/SPI が「束ねる索引」、モードが「包み方」という3軸で捉えると、IPsec の挙動は一貫して説明できます。

ネットワーク Article

IPsec の内部構造:AH/ESP・SA・トランスポート/トンネルモードを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

IPsec

比較で見る軸

難易度: advanced / カテゴリ: ネットワーク / タグ数: 5

導入後に効く点

通信の保護方式は片方向のSAに束ねられ、受信側はパケット中のSPIでどのSAを使うか引く。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
ネットワーク
タグ数
5

判断チェックリスト

  • 自社の用途が「IPsec / VPN」に近いか確認する。
  • 強みである「IPsecはAH(認証のみ)とESP(暗号化+認証)の2プロトコルで、保護範囲が違う。実運用はほぼESP。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

IPsecVPN暗号化認証セキュリティIPsecVPN暗号化
参考: 公式情報