今回も前回に引き続いて,Internet Key Exchange(IKE)の解説です。前回は制御用チャネルであるISAKMP SAを確立するフェイズ1を説明しました。今回は実際にパケットを送るフェイズ2を説明します。
PC1からPC2へのパケットを転送するIPsecSAの提案
フェイズ1が完了すると,次は実際にPC1からPC2へのパケットを暗号化して転送するIPsecSAの確立を行うフェイズ2に進みます。IPsec1は,PC1からのパケットをIPsec化するためのIPsecSAの提案をIPsec装置2に送ります。同時に,暗号化に使用する鍵を作るための乱数も送ってしまいます(図1)。このパケットはすでに作られた ISAKMP SAを通して送られるので,暗号化されてやりとりされます。
![]() |
![]() |
IPsec SA提案の受諾
これを受信したIPsec装置2は,セキュリティ・ポリシーに照らして提案を受諾します。そして受諾した提案と,暗号化に使用する鍵を作るための乱数などを図2のようにIPsec装置1に返信します。
![]() |
![]() |
この返信もISAKMP SAによって暗号化されるため,IPsec SAの暗号化に使用する秘密対称鍵の生成は,暗号化された安全な通信路で行われます。
IKEではIPsec装置の計算量的負荷を軽減するため,交換した乱数から直接秘密対称鍵の生成を行います。結果として,もしISAKMP SAの暗号が破られてやりとりの内容を盗み見られた場合には,攻撃者にこれから生成するIPsec SAの秘密対称鍵は推定されてしまうことになります。これを防ぎたい場合は,フェイズ2においても秘密対称鍵生成にDiffie-Hellman交換を行うPerfect Forward Secrecy (PFS)という機能もサポートしています。
IPsec SA確立の通知
IPsec装置2から提案の受諾通知を受け取ったIPsec装置1はIPsec SAを確立し,図3のようにIPsec装置2にSA確立を通知するメッセージを送信します。これでフェイズ2のやりとりも完了し,制御用チャネルであるISAKMP SAと,実際にユーザー・データを暗号化してやりとりする1対(2本)のIPsec SAができあがりました。以降,PC1とPC2間の通信はIPsecにより保護されることになります。
![]() |
![]() |
PC1からPC2へのパケットのIPsec化
これでPC1からのpingパケットは,以上で作られたIPsec SAにより暗号化の上,送信されます。IPsec装置1は,IPsec装置1からIPsec装置2向きのIPsec SAにこのpingパケットをESP化して送信します。途中のルーターにとってはこのIPsecパケットはIPsec装置1からIPsec装置2へのパケットにしか見えないため,通常のIP転送が行われます。
これを受信したIPsec装置2は,IPsec装置1からIPsec装置2向けのIPsec SAを流れてきたパケットであると分かるため,このSAのパラメータ,秘密対称鍵を使用してこのパケットのIPsec化を解き,元のパケットに戻します。
元のパケットに戻ったこのpingを,IPsec2はIPパケットとして再度ルーティングします。デスティネーション・アドレスはPC2なため,IPsec装置2はこのパケットをPC2に転送します。これを受信したPC2は,通常のIPパケットがPC1から送信されたように見えるため,特別な処理をすることもなく普通にpingに対する返信を行います。
![]() |
![]() |
PC2からPC1へのパケットのIPsec化
PC2からPC1へのpingへの返信を受け取ったIPsec装置2は,図4の下側のように先ほど作ったIPsec2からIPsec1向けのIPsec SAでこの返信をIPsec化します。以上で,ついにPC1はPC2からpingの返事を受け取ることができます。
以上のようにIPsec1とIPsec2に事前にIPsec設定を行っておけば,必要に応じてIPsecのコネクションが暗号鍵ごと安全に自動生成されるわけです。これが,IKEを用いたIPsec通信の一つの典型的なシナリオです。
次回は,安全でない通信路を使用して動的に暗号鍵を生成・共有する,Diffie-Hellman交換の原理を簡単に解説します。