IPsec

構成

IPsecは、2つのピアの間にSA (Security Association)という単方向コネクションを確立することで、ピア間にセキュアな通信を確立する（詳細後述）。なお、SAは、単方向であるため、双方向通信を行う場合には、上りと下りの2つのSAを確立する必要がある。
ピアは、ホストとセキュリティ・ゲートウェイの二種類に分類できる。前者は、個人端末やサーバのようなIP通信の端点に相当する機器である。後者は、ルータのようなIP通信の中継を担う機器である。
IPsecは、原理的にはピアがどちらのタイプであるのかを問わない。したがって、ホストからホストまでの通信全体を直接1つのSAで保護することもできるし、2つの中継地点間毎に別々のSAを確立して通信を保護するリレー形態の運用も可能である。しかし後述するように、ピアがどちらのタイプであるかによって推奨される通信モードが存在する。
IPsecの各ピアは、SPD（security policy database）、SAD（security association database）という2つのデータベースを管理する。
SPDは、IPアドレス、プロトコル(TCP/UDP/ICMP等)、TCPポートといった情報に応じて、パケットを破棄（discard）するのか、IPsecを使わずに送信（bypass IPsec）するのか、IPsecを使って送信（apply IPsec）するのかを決めるセキュリティポリシーのデータベースである。
一方、SADは、各ピアとSAを確立する際に用いるパラメータのデータベースである。

SAの確立

ピアSは、自身のSPDを参照することで、上位レイヤのプロトコルがRに送ることを要求したパケットを廃棄するのか、そのまま送るのか、それともIPsecで保護して送るのかを決定する。
IPsecで保護して送ることに決定した場合、ピアSは、SAの確立に必要なデータがすでにSADに存在するかどうかを確認する。データが揃っていれば、それらのデータをSADから読み込む。
一方、SAの確立に必要なデータがSADにすべて揃っていない場合は、SAに必要な情報を確立するプロトコルであるIKE（Internet Key Exchange）をピアRとともに実行する。2016年現在、IKEの最新版はIKEv2である。
IKEは、上述のように、SAに必要な情報を確立するプロトコルであるが、その中でメインとなるのはその名称が示す通り、ピアRとの鍵共有である。
なお、SAに必要な情報を確立するプロトコルとして、IKEの代わりにKerberized Internet Negotiation of Keys (KINK)やIPSECKEY DNS recordsを使用することもできる。

受信時の処理

ピアRは、パケットを受け取り、SADの記載に従って、パケットを破棄するか否かを決める。そして、パケットがIPsecのものであれば、パケットを復号し（暗号化されている場合）、さらにメッセージ認証の検証を行った上で、上位レイヤーのプロトコルにパケットを渡す。パケットがIPsecではなく通常のIPのものである場合、復号などの処理を施さず、直接上位レイヤーのプロトコルにパケットを渡す。

利用する暗号方式

特に断りがない限り本節の記述はRFC 7321 2.3-2.4節で要求レベルがSHOULD以上のものに基づいた。
AHのMACとしてAES-GMACがSHOULD+、AES-XCBC-MAC の出力を96ビットに切り詰めたもの（AES-XCBC-MAC-96）がSHOULDである。NULL（＝MAC無し）もMAYである。

ESPの認証暗号としてAES-GCMがSHOULD+である。Encryption-then-Mac (EtM)型の認証暗号としては、暗号部分はNULL （＝暗号化しない）とAES-CBCがMUSTであり、MAC部分はHMAC-SHA1の出力を96ビットに切り詰めたもの(HMAC-SHA1-96)がMUST、鍵長128ビットのAES-GMACがSHOULD+、AES-XCBC-MAC の出力を96ビットに切り詰めたもの（AES-XCBC-MAC-96）がSHOULDである。
ただし以上の要求レベルは過去の経緯にも基づいており、安全性や効率の観点から見た場合はAHにはAES-GMAC、ESPにはAES-GCMを推奨している(RFC 7321 4.1節、4.3節)。

IKEv1

IKEv1は Internet Key Exchange protocol version 1 の意味であり、UDPポート番号500上で通信される鍵交換プロトコルである。開発時には ISAKMP/Oakley と呼ばれた過去があり、これはISAKMP(Internet Security Association and Key Management Protocol)プロトコルの上で Oakley 鍵交換手順を実装したものという意味である。すなわち、IKEv1 は ISAKMP と必ずしも同じものではない。
IKEv1 はフェーズ1、フェーズ2と呼ばれる二段階の手順で鍵交換を行う。まずフェーズ1で IKE プロトコル同士の認証と暗号交換を行い（これをISAKMP SA交換とも呼ぶ）、フェーズ2で IPsec の適用条件と鍵情報の交換を行う（IPsec SA 交換とも呼ぶ）。
フェーズ1には Main Mode,Aggressive Mode と呼ばれる2つの手順がある。前者は ISAKMP 仕様における Identity Protection Exchange 手順の呼び名であり、後者は ISAKMP 仕様における Aggressive Exchange 手順の呼び名である。（用語定義の錯綜と難解さも IKE の理解を難しくしている理由の一つである）。
フェーズ2の通信はフェーズ1において成立した共有鍵を用いて暗号化される。フェーズ2の手順は Quick Mode と呼ばれ、これは ISAKMP にはなく IKEv1 で新たに定義されたものである。IKEv1 の規格上では New Group Mode という手順も定義されているが、実際には殆ど使われていない。
Oakley 鍵交換手順は公開鍵暗号を用いた鍵交換手順のアルゴリズムとパラメータのセットをいくつか定めたもので、アルゴリズムは大きく分けて Diffie-Hellman鍵共有 (DH-MODP) と楕円曲線暗号 (EC2N) の2種がある。鍵長は DH-MODP で768,1024,1536,2048,3072,4096,6144,8192bit、EC2N で155,188,163,283,409,571bit が定義されている。
IKE の通信を行うノードを IKE ピアと呼び、IKE 要求を発行する側をイニシエータ、受信した側をレスポンダと呼ぶ。Oakley のパラメータや IPsec SA の詳細はイニシエータ側が使用可能な組み合わせを提示し（これをプロポーザルと呼ぶ）、レスポンダ側が最も適切と判断したものを選択して合意を取るという手順を踏む。何をもって「適切」とみなすかは実装と設定に依存し、これを「ポリシー」と呼ぶ場合もあるが、狭義の意味における IPsec Security Policy とは必ずしも同じニュアンスではないので混同しないよう注意が必要である。用語の混同を避けるため、RFC 4301 においてはこれら「鍵交換時の挙動を定めるパラメータの一覧」を Peer Authorization Database (PAD) と呼んでいる。
Aggressive Mode はフェーズ1におけるプロポーザル手順の一部を削減し、パラメータの一部を決め打ちとすることで Main Mode にくらべパケット交換回数を減らし（3往復6パケット → 1.5往復3パケット）通信効率を向上している。ただし Main Mode では最後に交換される ID パケットが暗号化されるのに対し、Agressive ModeではID情報が暗号化されないまま送信されるので、盗聴によるセキュリティホールを招きかねないというリスクもある。フェーズ1にどちらのモードを用いるかはイニシエータに依存し、やはりそのネットワークにおけるポリシー (PAD) によって決定される。
IKEv1 では鍵交換と同時に相手ピアの認証を行う。認証アルゴリズムもフェーズ1において提示-合意のプロセスを踏んで実行され、認証方式には事前鍵共有方式 (PSK:Pre Shared Key)、デジタル署名方式 (Digital Signatures)、公開鍵暗号方式 (Public Key Encryption) などがある。
フェーズ2で生成される IPsec SA の鍵情報は、原則としてフェーズ1で生成された共有鍵情報から生成される。しかし複数個の IPsec SA をまとめて生成するような使用法の場合、全ての IPsec SA 情報が1つの秘密情報に依存することは好ましくない場合がある。このような場合、IKEv1 では Perfect Forward Secrecy (PFS) と呼ばれるオプション機能の利用が（通信ピア双方に実装されていれば）可能である。PFS は個々のフェーズ2交換時に新たな Oakley 鍵交換を行い、個々に異なった共有鍵を生成して IPsec SA の秘密鍵生成時に適用するものである。PFSは一般に通信秘匿性を向上させるがピアの処理負荷も向上させるため、これを適用すべきか否かもポリシー（あるいはPAD）に応じて決定すべきとされている。
なお1回のフェーズ1交換に付随するフェーズ2の回数を1回かぎりに制限することにより、結果的に全てのフェーズ2生成鍵を異なったものにすることで PFS と同等の秘匿性を得る実装もあり、これを Master PFS と呼ぶこともある。この場合、上記の「狭義のPFS」は Session PFS と呼ばれて区別される。
このように IKEv1 には数多くのモードとパラメータとオプションの組み合わせがあり、さらに多くの拡張仕様が存在する。その中には標準案として提案されたもののドラフトを通過できず、正式な RFC として記載されずに終わったものも少なくない。また IKEv1 仕様には難解で紛らわしい用語が錯綜しているため、実装系において独自の名前を与えている場合もある（例えば Microsoft Windows では IPsec におけるセレクタをフィルタと呼び、ポリシーをアクションと呼んでいる)。このため「IETF標準」であるはずの IKEv1 同士でも異機種間接続のためにはプロトコルおよび製品実装の深遠な理解が必要になってしまい、「IPsec でネットワークを組む場合は同じメーカーの同じ機器を使用することが最も確実」という慣習を生むことになってしまった。
IETF は混沌としてしまった IKEv1 の整理を諦め、IKEv2 をもって標準化の仕切り直しを図っている。

暗号化する層

IPsecはネットワーク層でセキュリティを実現するプロトコルであるため、アプリケーションなどの上位層が暗号化をサポートしていない場合でも通信全体としてのセキュリティを担保することが出来る。なおセキュリティをネットワーク層で実現しているため、アプリケーション層でセキュリティを実現しているTLSのように暗号化がどのプロトコルで行われているかをユーザーが容易に知ることはできない(TLSではwebブラウザに鍵マークが表示されるなど一見してそれが分かる表示がされる場合がある)。
PCやスマートフォンなどのコンシューマ端末でもIPsecを利用することは可能であるが、現状は専門の技術者が管理するGateway間でVPNとして利用されることが多い。IPsecをVPNで利用する場合はIPアドレスを二重に付加するトンネルモードが利用できるが、IP以外のパケットも伝達するためL2TPなどのプロトコルと併用される場合もある。

柔軟さと設定の複雑さ

IPsecはAHの認証機能、ESPの暗号機能を組み合わせて使うことができ、AH/ESPそれぞれに様々なアルゴリズムを指定することができる。この柔軟さが IPsec の利点ではあるが、設定可能な組み合わせは膨大となり、通信する二点間で全ての設定が一致していなければ通信が成立しない。多台数間のIPsec情報を手動で設定することは非常に手間がかかる上に、手動設定の場合は同じ鍵情報を長期間使い続けることになるため、セキュリティ強度の観点からも好ましくない。IPsecが上述したVPNで利用されることが多いのはこのためである。
この手間を軽減するためネットワークで自動鍵交換を行うIKEv1,IKEv2,KINK,Photurisなどのプロトコルも提案されているが、各プロトコルには互換性が無い。最も普及しているIKEv1でも動作モード、認証パラメータ、認証方式、鍵交換アルゴリズム、暗号アルゴリズム及び認証アルゴリズムなど設定項目の組み合わせは多岐に渡り、IPsecを使いこなすには総じて高度な専門知識が要求される。