【IPSec】IKE (メインモード)

IPsec VPN のトンネルは、IKE(Internet Key Exchange)を使って、ルータ間で動的にネゴシエートされます。IKE は ISAKMP というプロトコルの枠組みを使って、2台のピアの間で IPsec のパラメータや鍵を取り決めます。ISAKMP は UDP ポート 500 番で通信します。

IKE のやり取りは、フェーズ1とフェーズ2の2段階に分かれます。この記事では、IKEv1 のフェーズ1(メインモード)の6つのメッセージを、検証で取ったパケットキャプチャと合わせて1つずつ確認し、続くフェーズ2(クイックモード)の流れも説明します。

この記事でわかること
  1. IKE のフェーズ1とフェーズ2で、それぞれ何を決めて何ができるのか
  2. メインモードの6つのメッセージの中身(パケットキャプチャで確認)
  3. クイックモードの3つのメッセージと、IPsec SA に必要なパラメータ
  4. ISAKMP SA と IPsec SA の数とライフタイム

検証では、2台のルータ(192.168.12.1 と 192.168.12.2)の間で IPsec VPN を張りました。192.168.12.1 がネゴシエーションを始める側(イニシエータ)、192.168.12.2 が応答する側(レスポンダ)です。

イニシエータ192.168.12.1レスポンダ192.168.12.2フェーズ1(メインモード):ISAKMP SA双方向で1つ。フェーズ2のやり取りを保護するフェーズ2(クイックモード):IPsec SA方向ごとに1つずつ(合計2つ)ESP でユーザデータを暗号化して送る
図1 IKE のフェーズ1とフェーズ2でできる SA

IKEフェーズ1

IKE フェーズ1では、ルータ間で使う暗号化アルゴリズム、ハッシュアルゴリズム、認証方法などを交渉し、相手を認証したうえで、フェーズ2のやり取りを守るための安全な通り道(ISAKMP SA)を作ります。フェーズ1は、大きく分けて3つのステップで進みます。

3つのステップ

パラメータ交渉

まず、ISAKMP SA で使う次のパラメータをルータ間で交渉(ネゴシエーション)します。右の列は、今回のキャプチャで提案されていた値です。

パラメータ内容今回の値
暗号化アルゴリズムどの暗号化アルゴリズムを使うかをルータ間で合わせます。DES、3DES、AES などがあります。AES-CBC(鍵長 256)
ハッシュアルゴリズム改ざんの検知や鍵の生成に使うハッシュアルゴリズムを合わせます。SHA などがあります。SHA2-512
Diffie-Hellman グループ鍵交換に使う DH の種類と鍵長を合わせます。2048-bit MODP Group with 256-bit Prime Order Subgroup
認証方法相手が本物かを確かめる方法です。事前共有鍵(Pre-shared key)やデジタル証明書を使います。Pre-shared key
ライフタイムISAKMP SA を使い続ける時間です。Cisco ルータの既定値は 86,400 秒(24 時間)です。86400 秒
DH グループの番号

DH グループの番号は登録された順に付いたもので、番号が大きいほど強いわけではありません。たとえば、グループ 14 は 2048 ビット、グループ 22 は 1024 ビットで、番号の大きいグループ 22 のほうが弱くなります。強さは番号ではなく、種類と鍵長で判断します。

今回のキャプチャの「2048-bit MODP Group with 256-bit Prime Order Subgroup」はグループ 24 です。IKEv2 の暗号アルゴリズムの要件をまとめた RFC 8247 では、グループ 24 は「使うべきではない(SHOULD NOT)」とされています。新しく設定する場合は、グループ 14(2048 ビット)や、楕円曲線を使うグループ 19、20 を選ぶのが一般的です。

Diffie-Hellman 鍵交換

次に、交渉した DH グループを使って Diffie-Hellman 鍵交換をします。DH では、お互いが公開してよい値だけを送り合い、それぞれの手元で同じ鍵の元を計算します。鍵そのものはネットワークに流れないので、途中でやり取りを見られても鍵は作れません。DH の仕組みは Diffie-Hellman 鍵交換をイメージで解説 で詳しく説明しています。

認証

最後に、DH で作った鍵で暗号化した状態で、自分の ID(ルータの IP アドレスなど)と認証用のハッシュを送り合い、お互いを認証します。事前共有鍵の場合は、同じ事前共有鍵を知っている相手しか正しいハッシュを作れないことを利用して確かめます。

この3つのステップは、メインモードかアグレッシブモードのどちらかで行います。

モードメッセージ数特徴
メインモード6つID を暗号化してから送るので、ID が第三者に見えない(Identity Protection)。そのぶんやり取りが多い
アグレッシブモード3つ少ないやり取りで済むが、最初のメッセージで ID が暗号化されずに送られる

この記事ではメインモードについてまとめます。

メインモード

メインモードでは、ルータ間で6つのメッセージをやり取りします。奇数番目のメッセージはイニシエータから、偶数番目のメッセージはレスポンダからの返信です。

イニシエータ(.1)レスポンダ(.2)パラメータ交渉DH鍵交換認証(暗号化)HDR, SAメッセージ1:パラメータを提案HDR, SAメッセージ2:選んだパラメータを返すHDR, KE, Niメッセージ3:DH の値と NonceHDR, KE, Nrメッセージ4:DH の値と NonceHDR*, IDii, HASH_Iメッセージ5:ID と認証用のハッシュHDR*, IDir, HASH_Rメッセージ6:ID と認証用のハッシュ
図2 メインモードの6つのメッセージ(HDR* は以降が暗号化されていることを表します)
画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

メッセージ 1つ目

イニシエータがレスポンダに送る最初のメッセージです。暗号化アルゴリズム、ハッシュアルゴリズム、認証方法、DH グループ、ライフタイムの組み合わせを提案(プロポーザル)します。

ISAKMP ヘッダには、ISAKMP SA を識別するための値(Wireshark の表示では Initiator SPI と Responder SPI)が入ります。イニシエータは自分の SPI を入れますが、この時点ではレスポンダの SPI はまだわからないので、Responder SPI は 0 です。

メッセージ1(Wireshark の詳細表示)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 192.168.12.2▸ User Datagram Protocol, Src Port: 500, Dst Port: 500▾ Internet Security Association and Key Management Protocol1    Initiator SPI: 1ca67fd4c1e75a0f    Responder SPI: 0000000000000000    Next payload: Security Association (1)  ▸ Version: 1.02    Exchange type: Identity Protection (Main Mode) (2)  ▸ Flags: 0x00    Message ID: 0x00000000    Length: 168  ▾ Payload: Security Association (1)        Next payload: Vendor ID (13)        Reserved: 00        Payload length: 60        Domain of interpretation: IPSEC (1)      ▸ Situation: 00000001      ▾ Payload: Proposal (2) # 1            Next payload: NONE / No Next Payload  (0)            Reserved: 00            Payload length: 48            Proposal number: 1            Protocol ID: ISAKMP (1)            SPI Size: 0            Proposal transforms: 1          ▾ Payload: Transform (3) # 1                Next payload: NONE / No Next Payload  (0)                Reserved: 00                Payload length: 40                Transform number: 1                Transform ID: KEY_IKE (1)                Reserved: 00003              ▸ IKE Attribute (t=1,l=2): Encryption-Algorithm: AES-CBC              ▸ IKE Attribute (t=14,l=2): Key-Length: 2564              ▸ IKE Attribute (t=2,l=2): Hash-Algorithm: SHA2-5125              ▸ IKE Attribute (t=4,l=2): Group-Description: 2048-bit MODP Group with 256-bit Prime Order Subgroup6              ▸ IKE Attribute (t=3,l=2): Authentication-Method: Pre-shared key7              ▸ IKE Attribute (t=11,l=2): Life-Type: Seconds              ▸ IKE Attribute (t=12,l=4): Life-Duration: 864008  ▸ Payload: Vendor ID (13) : RFC 3947 Negotiation of NAT-Traversal in the IKE  ▸ Payload: Vendor ID (13) : draft-ietf-ipsec-nat-t-ike-07  ▸ Payload: Vendor ID (13) : draft-ietf-ipsec-nat-t-ike-03  ▸ Payload: Vendor ID (13) : draft-ietf-ipsec-nat-t-ike-02\n
図3 メッセージ1:パラメータの提案(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Initiator SPI / Responder SPIISAKMP SA を識別する値。イニシエータの値だけが入り、レスポンダの値は 0
2Identity Protection (Main Mode) (2)交換の種類がメインモードであること
3AES-CBC / Key-Length: 256暗号化アルゴリズムは AES-CBC、鍵長 256 ビット
4SHA2-512ハッシュアルゴリズム
5Group-DescriptionDH グループ(グループ 24)
6Pre-shared key認証方法は事前共有鍵
7Life-Type / Life-Durationライフタイムは秒単位で 86400 秒(24 時間)
8Vendor ID : RFC 3947 …NAT トラバーサル(RFC 3947)に対応していることを相手に伝える

メッセージ 2つ目

レスポンダは、イニシエータから提案されたパラメータの中から使うものを選び、自分の SPI を入れて返信します。ここで Initiator SPI と Responder SPI の両方がそろい、以降のメッセージはこの2つの値で同じ ISAKMP SA のやり取りだとわかるようになります。

メッセージ2(Wireshark の詳細表示)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.12.2, Dst: 192.168.12.1▸ User Datagram Protocol, Src Port: 500, Dst Port: 500▾ Internet Security Association and Key Management Protocol1    Initiator SPI: 1ca67fd4c1e75a0f    Responder SPI: e29b4a6a316db201    Next payload: Security Association (1)  ▸ Version: 1.0    Exchange type: Identity Protection (Main Mode) (2)  ▸ Flags: 0x00    Message ID: 0x00000000    Length: 108  ▾ Payload: Security Association (1)        ⋮(中略)          ▾ Payload: Transform (3) # 1                Transform ID: KEY_IKE (1)2              ▸ IKE Attribute (t=1,l=2): Encryption-Algorithm: AES-CBC              ▸ IKE Attribute (t=14,l=2): Key-Length: 256              ▸ IKE Attribute (t=2,l=2): Hash-Algorithm: SHA2-512              ▸ IKE Attribute (t=4,l=2): Group-Description: 2048-bit MODP Group with 256-bit Prime Order Subgroup              ▸ IKE Attribute (t=3,l=2): Authentication-Method: Pre-shared key              ▸ IKE Attribute (t=11,l=2): Life-Type: Seconds              ▸ IKE Attribute (t=12,l=4): Life-Duration: 86400  ▸ Payload: Vendor ID (13) : RFC 3947 Negotiation of NAT-Traversal in the IKE
図4 メッセージ2:選んだパラメータの返信(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Responder SPI: e29b4a6a316db201レスポンダの SPI が入り、2つの値がそろう
2IKE Attribute の各値レスポンダが選んだパラメータ。今回は提案が1つだけなので、メッセージ1と同じ値

メッセージ 3つ目

イニシエータは、交渉した DH グループで計算した DH の公開値(Key Exchange ペイロード)と、ナンス(Nonce、使い捨てのランダムな値)を送信します。ペイロードの構成は、次のメッセージ4と同じです。

お互いが NAT トラバーサルに対応している場合は、メッセージ3と4に NAT-D ペイロードも入ります。NAT-D は送信元・宛先の IP アドレスとポートから計算したハッシュで、受け取った側は自分で計算した値と比べて、途中に NAT があるかどうかを判断します。

メッセージ 4つ目

レスポンダも、DH の公開値とナンスを送信します。ここで、お互いが相手の DH の公開値とナンスを手に入れたので、それぞれの手元で同じ鍵を計算できます。事前共有鍵の場合は、DH の結果とナンス、事前共有鍵から、メッセージ5以降の暗号化や認証に使う鍵を作ります。

メッセージ4(Wireshark の詳細表示)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.12.2, Dst: 192.168.12.1▸ User Datagram Protocol, Src Port: 500, Dst Port: 500▾ Internet Security Association and Key Management Protocol    Initiator SPI: 1ca67fd4c1e75a0f    Responder SPI: e29b4a6a316db201    Next payload: Key Exchange (4)  ▸ Version: 1.0    Exchange type: Identity Protection (Main Mode) (2)  ▸ Flags: 0x00    Message ID: 0x00000000    Length: 5201  ▾ Payload: Key Exchange (4)        Next payload: Nonce (10)        Reserved: 00        Payload length: 260        Key Exchange Data: 01f91a7e1fb236b94f80529cea06e18a703718f912fbf08b…2  ▾ Payload: Nonce (10)        Next payload: Vendor ID (13)        Reserved: 00        Payload length: 24        Nonce DATA: e342aa0fe3d185494afce8d7b1510a82523a7f97  ▸ Payload: Vendor ID (13) : CISCO-UNITY 1.0  ▸ Payload: Vendor ID (13) : RFC 3706 DPD (Dead Peer Detection)  ▸ Payload: Vendor ID (13) : Unknown Vendor ID  ▸ Payload: Vendor ID (13) : XAUTH3  ▸ Payload: NAT-D (RFC 3947) (20)  ▸ Payload: NAT-D (RFC 3947) (20)
図5 メッセージ4:DH の公開値とナンス(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Payload: Key Exchange (4)DH の公開値。Payload length 260 はヘッダ 4 バイト+データ 256 バイト(2048 ビット)で、2048 ビットの DH グループと合う
2Payload: Nonce (10)ナンス。Payload length 24 はヘッダ 4 バイト+データ 20 バイト
3NAT-D (RFC 3947)NAT があるかを調べるためのハッシュ(2つ)

このほかの Vendor ID ペイロードは、DPD(Dead Peer Detection、RFC 3706)など、そのルータが対応している拡張機能を相手に伝えるものです。

メッセージ 5つ目

イニシエータは、メッセージ4までで作った鍵を使って、自分の ID(ルータの IP アドレスなど)と認証用のハッシュを暗号化して送信します。ヘッダの Flags で Encryption のビットが 1 になっており、中身は Encrypted Data としか表示されません。ヘッダは暗号化されないので、最初のペイロードが Identification(ID)であることは見えます。

メッセージ5(Wireshark の詳細表示)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 192.168.12.2▸ User Datagram Protocol, Src Port: 500, Dst Port: 500▾ Internet Security Association and Key Management Protocol    Initiator SPI: 1ca67fd4c1e75a0f    Responder SPI: e29b4a6a316db2011    Next payload: Identification (5)  ▸ Version: 1.0    Exchange type: Identity Protection (Main Mode) (2)2  ▾ Flags: 0x01        .... ...1 = Encryption: Encrypted        .... ..0. = Commit: No commit        .... .0.. = Authentication: No authentication    Message ID: 0x00000000    Length: 1403    Encrypted Data (112 bytes)
図6 メッセージ5:暗号化された ID と認証用のハッシュ(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Next payload: Identification (5)最初のペイロードが ID であること
2Encryption: Encryptedヘッダより後ろが暗号化されていること
3Encrypted Data (112 bytes)暗号化された ID と認証用のハッシュ

メッセージ 6つ目

レスポンダも同じように、自分の ID と認証用のハッシュを暗号化して送り返します。お互いに相手のハッシュを確認できれば認証が終わり、ISAKMP SA が確立します。ISAKMP SA は双方向で使う SA で、ルータ間に1つできます。

メッセージ6(Wireshark の詳細表示)画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.12.2, Dst: 192.168.12.1▸ User Datagram Protocol, Src Port: 500, Dst Port: 500▾ Internet Security Association and Key Management Protocol    Initiator SPI: 1ca67fd4c1e75a0f    Responder SPI: e29b4a6a316db2011    Next payload: Identification (5)  ▸ Version: 1.0    Exchange type: Identity Protection (Main Mode) (2)2  ▾ Flags: 0x01        .... ...1 = Encryption: Encrypted        .... ..0. = Commit: No commit        .... .0.. = Authentication: No authentication    Message ID: 0x00000000    Length: 1243    Encrypted Data (96 bytes)
図7 メッセージ6:レスポンダからの ID と認証用のハッシュ(実際の画面ではなく、表示内容のポイントを示したイメージです)

IKEフェーズ2

フェーズ2では、フェーズ1で確立した ISAKMP SA に守られた状態で、実際のユーザデータを保護するための鍵とパラメータを決め、IPsec SA を確立します。IKEv1 でフェーズ2を行うモードをクイックモードと呼びます。クイックモードのメッセージは、ヘッダより後ろがすべて ISAKMP SA の鍵で暗号化されています。

クイックモード

クイックモードでは、3つのメッセージをやり取りします。

イニシエータ(.1)レスポンダ(.2)ISAKMP SAで暗号化HDR*, HASH(1), SA, Ni [, KE] [, IDci, IDcr]メッセージ1:IPsec SA のパラメータを提案HDR*, HASH(2), SA, Nr [, KE] [, IDci, IDcr]メッセージ2:選んだパラメータを返すHDR*, HASH(3)メッセージ3:確認。IPsec SA ができる
図8 クイックモードの3つのメッセージ([ ] は省略できるペイロード)

メッセージ 1つ目

イニシエータは、IPsec SA に必要な次のパラメータと、ナンスを送信します。

パラメータ内容
IPsec プロトコルESP か AH か。暗号化するなら ESP を使います
カプセル化モードトンネルモードかトランスポートモードか
暗号化アルゴリズム3DES、AES など
完全性(認証)アルゴリズムHMAC-MD5、HMAC-SHA1 など。改ざんを検知するために使います
ライフタイムIPsec SA を使い続ける時間やデータ量。Cisco ルータの既定値は 3,600 秒(1 時間)と 4,608,000 KB です
Proxy ID(IDci/IDcr)どのトラフィックを暗号化するか。イニシエータ側(Local)とレスポンダ側(Remote)の2つのアドレス範囲を送ります
PFS(Perfect Forward Secrecy)

PFS を有効にすると、クイックモードのメッセージ1と2に KE ペイロードが入り、IPsec SA を作るたびに新しく DH 鍵交換をします。PFS を使わない場合、IPsec SA の鍵はフェーズ1で作った鍵の元から作られます。PFS を使う場合は、両側のルータで PFS の有無と DH グループをそろえる必要があります。

メッセージ 2つ目

レスポンダは、提案の中から選んだパラメータと、自分のナンスを返します。Proxy ID は、メッセージ1で受け取った IDci と IDcr の組をそのまま入れて返します。

Proxy ID は、両側のルータの設定が鏡写しになっている必要があります。イニシエータの Local(自分側のアドレス範囲)がレスポンダの Remote に、イニシエータの Remote がレスポンダの Local になるように設定します。ここが一致しないと、フェーズ2のネゴシエーションが失敗します。

メッセージ 3つ目

イニシエータは、確認のためのハッシュ(HASH(3))を送ります。これでクイックモードが終わり、IPsec SA が確立します。IPsec SA は片方向の SA なので、送信用と受信用で1つずつ、2台のルータ間に合計2つできます。それぞれの IPsec SA には別々の SPI が割り当てられ、ESP パケットのヘッダに入ります。

IKEv2 の場合

この記事は IKEv1 の流れです。IKEv2 にはメインモードやクイックモードはなく、IKE_SA_INIT と IKE_AUTH の4つのメッセージで、IKE SA と最初の IPsec SA(Child SA)を作ります。

まとめ

項目フェーズ1(メインモード)フェーズ2(クイックモード)
目的相手を認証し、フェーズ2を守る ISAKMP SA を作るユーザデータを守る IPsec SA を作る
メッセージ数6つ(1・2 パラメータ交渉、3・4 DH 鍵交換、5・6 認証)3つ
暗号化メッセージ5以降が暗号化されるすべて ISAKMP SA で暗号化される
主なパラメータ暗号化、ハッシュ、DH グループ、認証方法、ライフタイムESP/AH、カプセル化モード、暗号化、完全性、ライフタイム、Proxy ID、PFS
できる SAISAKMP SA(双方向で1つ)IPsec SA(片方向ずつ、合計2つ)
Cisco の既定のライフタイム86,400 秒(24 時間)3,600 秒(1 時間)/4,608,000 KB

コメント