0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cisco IOS XE 26.1.1 で IKEv2/IPsec の PQC対応が来た: ML-KEM と proposal の挙動を確認

0
Last updated at Posted at 2026-04-25

Cisco IOS XE 26.1.1 で IKEv2/IPsec の PQC対応が来た: ML-KEM と proposal の挙動を確認

Cisco IOS XE 26.1.1 から、Cisco Secure Router 8000 シリーズで ML-KEM を使った hybrid 鍵交換による IKEv2/IPsec がサポートされました。

PQC といえば、やはり本命は IKEv2/IPsec だと感じている方が多いのではないでしょうか。前回は SSH 側の話だったので、少し肩透かしに感じた方もいたかもしれません。

お待たせしました。今回は待望の IKEv2 での ML-KEM 対応です。

今回は手元のDMVPN検証ログを見ながら、実際に何が変わったのか、どこに注意が必要かを整理してみます。
また、strongSwan との異機種間 VTI IPsec 検証もできたので、その内容もお届けします。
 
前回の SSH 側の話はこちらです。

先に結論

  • Cisco IOS XE 26.1.1 から、Cisco Secure Router 8000 シリーズで ML-KEM を使った hybrid IKEv2/IPsec がサポートされる
  • 26.1.1 へアップグレードすると、crypto ikev2 proposal default には自動的に PQC の設定項目が追加される
  • 一方で、crypto ikev2 proposal IKEPROPOSAL のように個別に作成済みの proposal には、自動では PQC 設定は入らない
  • そのため、既存の DMVPN / FlexVPN が自動的に PQC 化されるとは限らない
  • ISR1100 などの旧シリーズでは、SSH の ML-KEM はサポートされるが、ML-KEM を使った IKEv2 はサポートされない
  • なお、PPK は別機能であり、ML-KEM IKEv2 のサポート有無とは分けて考える必要がある(詳しくは後述)

今回うれしいポイント

やはり大きいのは、PQC の話が SSH だけでなく、ようやく IKEv2/IPsec に入ってきたことです。

拠点間 VPN、DMVPN、FlexVPN のようなユースケースを考えると、実運用でよりインパクトが大きいのはむしろこちらです。
そういう意味でも、今回の 26.1.1 での対応は「ついに来た」という印象が強いアップデートかと思います。

26.1.1 では、SD-WAN (controller mode) での IKEv2 (ML-KEM) サポートは含まれておらず、今後の対応予定です。
また ML-DSA-87 のようなPQC署名やPQCセキュアブートも含まれておらず、これも今後の対応予定です。

実際の確認ログ

まず、ルータは IOS XE 26.1.1 に上がっています。
今回は Cisco Secure Router C8235-G2 を利用しています。

Router#show version
Cisco IOS XE Software, Version 26.01.01
Cisco IOS Software [IOSXE], c8kg2be Software (ARMV8EL_LINUX_IOSD-UNIVERSALK9-M), Version 26.01.1, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2026 by Cisco Systems, Inc.
Compiled Tue 07-Apr-26 18:26 by mcpre

Router#show install summary
[ Chassis 1/R0 provisioned software ]
---------------------------
Type  Version
---------------------------
SR    26.01.01.0.340

26.1.1 へのアップグレード後、crypto ikev2 proposal default にだけ次の行が追加されていました。

crypto ikev2 proposal default
 pqc mlkem768 mlkem1024 optional
 encryption aes-cbc-256 aes-cbc-128
 integrity sha256 sha384 sha512
 group 19 20 21 14

つまり、crypto ikev2 proposal default には ML-KEM の設定、つまり、pqc mlkem768 mlkem1024 optional が自動的に追加されます。

一方で、個別に作成していた proposal はそのままでした。

crypto ikev2 proposal PROPOSAL
 encryption aes-cbc-256 aes-cbc-128
 integrity sha256 sha384 sha512
 group 19 20 21 14

Configuration mode では、以下のような設定が可能です。

Router(config)#crypto ikev2 proposal PROPOSAL
Router(config-ikev2-proposal)#pqc mlkem768 ?
  mlkem1024  ML-KEM-1024
  mlkem512   ML-KEM-512
  optional   PQC Key Exchange is optional
  <cr>       <cr>

ここが今回のいちばん大事なポイントです。

optional を付けると、ML-KEM 未対応の対向先であっても従来方式での IKEv2 鍵交換を許容します。
逆に optional を外すと、ML-KEM を使った IKEv2 鍵交換を必須にします。

何が重要か

crypto ikev2 proposal default に PQC 設定が入ったからといって、既存の IKEv2/IPsec 全部が自動的に ML-KEM 化されるわけではありません。

実際のトンネルで参照している proposal が default なら、その恩恵を受ける可能性があります。
しかし、DMVPN や FlexVPN で IKEPROPOSAL のような個別 proposal を使っている場合、その proposal に PQC 設定が入っていなければ、PQC Key Exchange: none のままです。

つまり、運用上は次のように考える必要があります。

  1. Cisco Secure Router を 26.1.1 にアップグレードする
  2. show crypto ikev2 proposal で、どの proposal に PQC が入っているか確認する
  3. 実際に使っている IKEv2 policy / profile / tunnel がどの proposal を参照しているか確認する
  4. 個別 proposal を使っている場合は、必要に応じて明示的に PQC 設定を追加する
  5. IKEv2 initiator が ML-KEM を optional で提案した場合でも、IKEv2 responder 側に設定が入っていなければ ML-KEM のネゴシエーションは成立しない

crypto ikev2 proposal default を使う場合、アップグレード手順や対向側の設定状況によっては、後述の通り接続影響が出ます。
その意味でも、crypto ikev2 proposal default の利用は避け、明示的な proposal を指定した方が安全そうです。

show コマンドでの見え方

show crypto ikev2 sa detailed

以下のコマンドにより、ML-KEM を使った IKEv2 SA が成立していることを確認できます。

Router#show crypto ikev2 sa detailed
 IPv4 Crypto IKEv2  SA

Tunnel-id Local                 Remote                fvrf/ivrf            Status
1         198.51.100.10/500     203.0.113.10/500      none/none            READY
      Encr: AES-CBC, keysize: 256, PRF: SHA256, Hash: SHA256, DH Grp:19, Auth sign: PSK, Auth verify: PSK
      PQC Key Exchange: ML-KEM-768
      Life/Active Time: 86400/2138 sec
      CE id: 0, Session-id: 2
      Local spi: 136C9DB85C7A2CAF       Remote spi: 23A2FFDA654BC774
      Status Description: Negotiation done
      Local id: 198.51.100.10
      Remote id: 203.0.113.10
      Local req msg id:  3              Remote req msg id:  0
      Local next msg id: 3              Remote next msg id: 0
      Local req queued:  3              Remote req queued:  0
      Local window:      20             Remote window:      20
      DPD configured for 30 seconds, retry 5
      Fragmentation not  configured.
      Quantum-safe Encryption using PQC: ML-KEM-768
      Dynamic Route Update: enabled
      Extended Authentication not configured.
      NAT-T is not detected
      Cisco Trust Security SGT is disabled
      Initiator of SA : Yes
      PEER TYPE: IOS-XE

 IPv6 Crypto IKEv2  SA

この出力では、PQC Key Exchange: ML-KEM-768Quantum-safe Encryption using PQC: ML-KEM-768 が見えているので、ML-KEM を使った IKEv2 が成立していることが分かります。

show crypto ipsec sa detail

ちなみに IPsec そのものは AES-GCM 256 のままで、見た目には大きく変わりません。

Router#show crypto ipsec sa detail

interface: Tunnel4
    Crypto map tag: Tunnel4-head-0, local addr 198.51.100.10

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (198.51.100.10/255.255.255.255/47/0)
   remote ident (addr/mask/prot/port): (203.0.113.10/255.255.255.255/47/0)
   current_peer 203.0.113.10 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 3, #pkts encrypt: 3, #pkts digest: 3
    #pkts decaps: 2, #pkts decrypt: 2, #pkts verify: 2
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #pkts no sa (send) 0, #pkts invalid sa (rcv) 0
    #pkts encaps failed (send) 0, #pkts decaps failed (rcv) 0
    #pkts invalid prot (recv) 0, #pkts verify failed: 0
    #pkts invalid identity (recv) 0, #pkts invalid len (rcv) 0
    #pkts replay rollover (send): 0, #pkts replay rollover (rcv) 0
    ##pkts replay failed (rcv): 0
    #pkts tagged (send): 0, #pkts untagged (rcv): 0
    #pkts not tagged (send): 0, #pkts not untagged (rcv): 0
    #pkts internal err (send): 0, #pkts internal err (recv) 0

     local crypto endpt.: 198.51.100.10, remote crypto endpt.: 203.0.113.10
     plaintext mtu 1426, path mtu 1460, ip mtu 1460, ip mtu idb Tunnel0
     current outbound spi: 0x1A39FCB0(440007856)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0x150166A3(352413347)
        transform: esp-gcm 256 ,
        in use settings ={Transport, }
        conn id: 2022, flow_id: ESG:22, sibling_flags FFFFFFFF80004008, crypto map: Tunnel4-head-0, initiator : True
        sa timing: remaining key lifetime (sec): 3593
        Kilobyte Volume Rekey has been disabled
        IV size: 8 bytes
        replay detection support: Y  replay window size: 1024
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x1A39FCB0(440007856)
        transform: esp-gcm 256 ,
        in use settings ={Transport, }
        conn id: 2021, flow_id: ESG:21, sibling_flags FFFFFFFF80004008, crypto map: Tunnel4-head-0, initiator : True
        sa timing: remaining key lifetime (sec): 3593
        Kilobyte Volume Rekey has been disabled
        IV size: 8 bytes
        replay detection support: Y  replay window size: 1024
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:

ここで見えている transform: esp-gcm 256 は、IPsec の暗号スイート自体が急に別物になるわけではないことを示しています。
今回の主題はあくまで IKEv2 の鍵交換側に ML-KEM が入る、という点です。
なお、AES-GCM 自体は NIST で標準化された利用実績のある方式であり、CNSA 2.0 の文脈でも IPsec では AES-256-GCM が用いられます。Cisco IOS でも C800 シリーズのころからサポートされている方式であり、利用実績のある組み合わせだと言えます。

show dmvpn

とくに違いは認められません

Router#show dmvpn
Legend: Attrb --> S - Static, D - Dynamic, I - Incomplete
	N - NATed, L - Local, X - No Socket
	T1 - Route Installed, T2 - Nexthop-override, B - BGP
	C - CTS Capable, I2 - Temporary
	# Ent --> Number of NHRP entries with same NBMA peer
	NHS Status: E --> Expecting Replies, R --> Responding, W --> Waiting
	UpDn Time --> Up or Down Time for a Tunnel
==========================================================================

Interface: Tunnel4, IPv4 NHRP Details
Type:Spoke, NHRP Peers:1,

 # Ent  Peer NBMA Addr Peer Tunnel Add State  UpDn Tm Attrb
 ----- --------------- --------------- ----- -------- -----
     1 203.0.113.10        192.0.2.2      UP 00:23:06     S

Interface: Tunnel6, IPv4 NHRP Details
Type:Spoke, NHRP Peers:3,

 # Ent  Peer NBMA Addr Peer Tunnel Add State  UpDn Tm Attrb
 ----- --------------- --------------- ----- -------- -----
     1 2001:db8:200::10
                           192.0.2.12     UP 01:26:27     S
     2 2001:db8:200::11
                          192.0.2.21     UP 01:25:35   DT1
                          192.0.2.21     UP 01:25:35   DT2
     2 2001:db8:200::12
                          192.0.2.22     UP 01:24:48   DT1
                          192.0.2.22     UP 01:24:48   DT2

Cisco C8235-G2 によるスループット試験の結果

あわせて、Cisco C8235-G2 ルータ同士を OCN のフレッツ 光クロス回線で接続し、iperf3 によるスループット確認も実施しました。

今回の試験では、PC 側インタフェースが 1Gbps までしか出せないため、そこで頭打ちになります。つまり、この結果はルータの限界というより、試験系のインタフェース上限に張り付いていると見るのが自然です。

実際の iperf3 は、10並列で以下のような結果でした。

$ iperf3-darwin -c 192.0.2.32 -P 10
[SUM]   0.00-10.00  sec  1.07 GBytes   922 Mbits/sec  1566             sender
[SUM]   0.00-10.01  sec  1.07 GBytes   919 Mbits/sec                  receiver

各秒のスループットもおおむね 911 - 929 Mbit/sec で推移しており、1GbE 環境としてはかなりきれいにラインレート近くまで出ています。

さらに、試験中の QFP 利用率を見ると、1分平均でも余力がかなり残っています。

Router#show platform hardware qfp active datapath utilization
  CPP 0: Subdev 0            5 secs        1 min        5 min       60 min
Input:  Priority (pps)            0            0            0            0
                 (bps)            0            0            0            0
    Non-Priority (pps)       134318       140706        37470         3250
                 (bps)   1053053488   1089261656    292495856     24973112
           Total (pps)       134318       140706        37470         3250
                 (bps)   1053053488   1089261656    292495856     24973112
Output: Priority (pps)            0            0            0            0
                 (bps)            0          120          128          128
    Non-Priority (pps)       131991       140521        37467         3248
                 (bps)    989160328   1040896624    280383920     23958128
           Total (pps)       131991       140521        37467         3248
                 (bps)    989160328   1040896744    280384048     23958256
Processing: Load (pct)           19           19            6            1

Crypto/IO
        RX: Load (pct)            0            0            0            0
        TX: Load (pct)           12           10            4            2
            Idle (pct)           88           89           95           97

このとおり、1分平均で見ても

  • Processing: Load (pct) 19
  • Crypto/IO TX: Load (pct) 10

にとどまっており、1GbEとはいえ、1分程度の継続試験でも datapath / crypto には十分な余力があり、少なくとも今回の条件では、PQC の導入による暗号処理負荷の増大は顕著ではないことが分かります。

アップグレードの順序に関する気付きと考察

ここは実運用で特に気を付けたいポイントでした。

今回の検証では、26.1.1 に上げた側で crypto ikev2 proposal default を使っている状態のまま、対向の DMVPN hub がまだ 17.18.2 のケースを確認しています。

その状態では、26.1.1 側からの IKEv2 が上がらず、hub 側では次のようなエラーが出ました。

*Apr 22 10:17:14.462: IKEv2-ERROR:Failed to parse the packet: The peer's proposal is invalid
*Apr 22 10:17:27.425: IKEv2-ERROR:(SESSION ID = 21,SA ID = 3):% IKEv2 profile not found
*Apr 22 10:17:27.425: IKEv2-ERROR:(SESSION ID = 21,SA ID = 3):Received Policies: : Failed to find a matching policyESP: Proposal 1:  ENCRYPTION: AES-GCM-128 SEQUENCE: Don't use ESN
*Apr 22 10:19:24.513: IKEv2-ERROR:(SESSION ID = 32,SA ID = 3):: Failed to find a matching policy
*Apr 22 10:19:24.513: IKEv2-ERROR:(SESSION ID = 32,SA ID = 3):Initial exchange failed: Initial exchange failed

別のログでは、hub 側が受信した IKE proposal と、期待している proposal の差分も見えていました。

*Apr 22 10:19:24.512: IKEv2-ERROR:(SESSION ID = 32,SA ID = 3):Received Policies: : Failed to find a matching policyProposal 1:  ENCRYPTION: AES-CBC-256 ENCRYPTION: AES-CBC-128 ENCRYPTION: 3DES ENCRYPTION: DES PRF: SHA1 PRF: MD5 INTEGRITY: SHA96 INTEGRITY: MD596 DH GROUP: DH_GROUP_1024_MODP/Group 2 DH GROUP: DH_GROUP_1536_MODP/Group 5 DH GROUP: DH_GROUP_2048_MODP/Group 14
*Apr 22 10:19:24.513: IKEv2-ERROR:(SESSION ID = 32,SA ID = 3):Expected Policies: : Failed to find a matching policyProposal 1:  ENCRYPTION: AES-CBC-256 ENCRYPTION: AES-CBC-128 PRF: SHA256 PRF: SHA384 PRF: SHA512 INTEGRITY: SHA256 INTEGRITY: SHA384 INTEGRITY: SHA512 DH GROUP: DH_GROUP_256_ECP/Group 19 DH GROUP: DH_GROUP_384_ECP/Group 20 DH GROUP: DH_GROUP_521_ECP/Group 21 DH GROUP: DH_GROUP_2048_MODP/Group 14

このときの問題点は、26.1.1 では crypto ikev2 proposal default に自動で PQC 関連の設定が入り、17.18.2 側はその proposal を正常に扱えない、という点です。
今回のログから、pqcにoptional が付いていても、対向先が旧バージョンである場合、fail-back の成否以前に、旧バージョン側が proposal 自体を正常に解釈できず、ネゴシエーションそのものが成立しません。

特に DMVPN では、Spoke 側が initiator になって hub 側へ張りに行く場面が多いため、

  1. Spoke を先に 26.1.1 に上げる
  2. しかも crypto ikev2 proposal default をそのまま使う

という条件が重なると、旧バージョンの hub 側で IKEv2 が不成立になります。

このケースの整理

  • 26.1.1 では crypto ikev2 proposal default に ML-KEM の設定が自動追加される
  • custom proposal には自動追加されない
  • mixed-version 期間に crypto ikev2 proposal default を使っていると、旧バージョン peer 側で proposal mismatch が発生する
  • 今回の実ログでも、hub 側で The peer's proposal is invalidFailed to find a matching policy が出ていた

つまり、crypto ikev2 proposal default の自動更新は便利ですが、事前にアップグレードプランを検討する事が重要になります。

回避策

実運用で取りやすい回避策は、次のどちらかです。

1. DMVPN hub (responder) から先にバージョンアップする

crypto ikev2 proposal default を使い続ける前提での現実的な workaround だと考えています。

旧バージョンの spoke から新バージョンの hub へは、従来 proposal のまま接続できる一方で、新バージョンの spoke から旧バージョンの hub へは crypto ikev2 proposal default の差分により IKEv2 のネゴシエーションに失敗していることが確認できました。

そのため crypto ikev2 proposal default を使っている DMVPN/FlexVPN/Static IPsec では、

  1. hub を 26.1.1 へ先行アップグレード
  2. その後 spoke を順次アップグレード

の順序にする必要があります。

2. crypto ikev2 proposal default を使わず、明示的な proposal を使う

こちらはより確実な方法です。

たとえば、mixed-version 期間は従来方式だけを含む proposal を明示的に使い、全 peer のバージョンが揃った後で pqc mlkem768 optional などを追加する方が、挙動を管理しやすくなります。

つまり、crypto ikev2 proposal default の自動更新に期待するよりも、

  • どの proposal を使うか
  • その proposal に PQC を入れるか
  • どの順序で peer を上げるか

を明示的に設計した方が、アップグレード時の事故を減らしやすいということです。

strongSwan との異機種間 VTI IPsec 検証

また今回の検証では、Cisco 側を Cisco Secure Router 8000 シリーズ (IOS XE 26.1.1)、Linux 側を Debian 13 + strongSwan 6.0.5 として、異機種間で static な route-based IPsec を張ってみました。

Cisco IOS XE 側は static VTI、Debian 側は xfrm interface ベースで構成しています。Debian では distribution 標準の strongSwan では ML-KEM が使えなかったため、upstream の strongSwan 6.0.5.deb 化して導入しました。

Cisco IOS XE 側設定

今回の Cisco IOS XE 側設定は以下のとおりです。
pqc mlkem768 optional が設定されていることが確認できるかと思います。

crypto ikev2 proposal VTI-PROP
 pqc mlkem768 optional
 encryption aes-cbc-256
 integrity sha256
 group 19
! 
crypto ikev2 policy VTI-POL
 proposal VTI-PROP
! 
crypto ikev2 keyring VTI-KR
 peer DEBIAN
  address 198.51.100.172
  pre-shared-key 0 example-pre-shared-key
!
crypto ikev2 profile VTI-PROFILE
 match identity remote address 198.51.100.172 255.255.255.255
 identity local address 203.0.113.14
 dpd 30 5 on-demand
 authentication remote pre-share
 authentication local pre-share
 keyring local VTI-KR
!
crypto ipsec transform-set VTI-TS esp-gcm 256
 mode tunnel
!
crypto ipsec profile VTI-IPSEC
 set transform-set VTI-TS
 set ikev2-profile VTI-PROFILE

トンネルインタフェース側は、例えば次のようなイメージです。

interface Tunnel100
 ip address 169.254.100.1 255.255.255.252
 tunnel source Tunnel0
 tunnel destination 198.51.100.172
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile VTI-IPSEC

Debian / strongSwan 側設定

Debian 側では swanctl.conf ベースで構成しています。PQC ありの最終形では、proposal を次のようにしました。ここで ke1_none は、追加鍵交換が利用できない場合に追加鍵交換なしでも成立できるようにする指定です。

今回の build でポイントだったのは、Debian 標準パッケージの strongSwan では ML_KEM_768 が使えなかったため、upstream の strongSwan 6.0.5 をビルドして .deb 化したことです。
特に OpenSSL backend で ML-KEM を有効化するために --enable-ml を入れ、systemd 管理で使うため --enable-systemd、不要な legacy 管理インタフェースを避けるため --disable-stroke を付けています。最終的には swanctl --list-algsML_KEM_768[openssl]ML_KEM_1024[openssl] が見えることを確認しました。

ビルド方針

./configure \
  --prefix=/usr \
  --sysconfdir=/etc \
  --enable-systemd \
  --disable-stroke \
  --enable-ml

設定

connections {
  cisco-vti {
    version = 2
    local_addrs  = 198.51.100.172
    remote_addrs = 203.0.113.14

    proposals = aes256-sha256-prfsha256-ecp256-ke1_mlkem768-ke1_none
    encap = no
    fragmentation = yes
    dpd_delay = 30s

    local {
      auth = psk
      id = 198.51.100.172
    }
    remote {
      auth = psk
      id = 203.0.113.14
    }

    children {
      routed {
        mode = tunnel
        local_ts  = 0.0.0.0/0
        remote_ts = 0.0.0.0/0
        esp_proposals = aes256gcm16
        start_action = trap
        dpd_action = restart
        if_id_in  = 42
        if_id_out = 42
      }
    }
  }
}

secrets {
  ike-psk {
    id-1 = 198.51.100.172
    id-2 = 203.0.113.14
    secret = "example-pre-shared-key"
  }
}

インタフェース側は xfrm interface を使って、次のように 169.254.100.2/30 を持たせています。

ip link add ipsec0 type xfrm dev eth0 if_id 42
ip addr add 169.254.100.2 peer 169.254.100.1 dev ipsec0
ip link set ipsec0 up

show コマンドの流れ

まず Debian 側では、ML-KEM が有効になっているかを確認します。

swanctl --list-algs | egrep 'ML_KEM|ECP_256'
swanctl --list-sas
ip -brief addr show ipsec0

例えば、アルゴリズム一覧では次のような出力が見えます。

ML_KEM_768[openssl]
ML_KEM_1024[openssl]
ECP_256[openssl]

SA が上がると、strongSwan 側では ECP_256/KE1_ML_KEM_768TUNNEL が確認できます。

selected proposal: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256/KE1_ML_KEM_768
CHILD_SA routed{1} established with SPIs ..., TUNNEL

Cisco 側では、次の順で追うのが分かりやすいです。

show crypto ikev2 sa detailed
show crypto session remote 198.51.100.172 detail
ping 169.254.100.2 source 169.254.100.1 repeat 3

今回の検証では、最終的に Cisco 側でも ML-KEM-768 を使った IKEv2 SA が確認できています。

Router#show crypto ikev2 sa detailed
 IPv4 Crypto IKEv2  SA

Tunnel-id Local                 Remote                fvrf/ivrf            Status
2         203.0.113.14/500     198.51.100.172/500   none/none            READY
      Encr: AES-CBC, keysize: 256, PRF: SHA256, Hash: SHA256, DH Grp:19, Auth sign: PSK, Auth verify: PSK
      PQC Key Exchange: ML-KEM-768
      Quantum-safe Encryption using PQC: ML-KEM-768
      NAT-T is not detected

疎通確認も最終的には成功しました。

Router#ping 169.254.100.2 source 169.254.100.1 repeat 3
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 169.254.100.2, timeout is 2 seconds:
Packet sent with a source address of 169.254.100.1
!!!
Success rate is 100 percent (3/3), round-trip min/avg/max = 8/8/8 ms

今回の検証では、最終的に UDP/500ESP を用いる通常の IKEv2/IPsec として安定して動作しました。strongSwan 側でも CHILD_SATUNNEL として入り、Cisco 側でも NAT-T is not detected が確認できています。

FRR による BGP over IPsec

あわせて、Debian 側に FRR を導入し、BGP over IPsec も確認しました。

隣接は、IPsec 上のトンネルアドレスである 169.254.100.1169.254.100.2 の間で張っています。BGP セッション自体は問題なく成立し、Debian 側では対向からの prefix を受信できることも確認できました。

strongswan# show ip bgp
BGP table version is 13, local router ID is 198.51.100.172, vrf id 0
Default local pref 100, local AS 65001

     Network          Next Hop            Metric LocPrf Weight Path
 *>  198.18.4.0/24    169.254.100.1                          0 65000 ?
 *>  198.18.0.0/15    169.254.100.1                          0 65000 i
 *>  198.19.120.0/30  169.254.100.1            0             0 65000 i
 *>  198.19.124.0/30  169.254.100.1            0             0 65000 i
     192.0.2.0/24     0.0.0.0                  0         32768 i
 *>  198.51.100.0/24  169.254.100.1                          0 65000 i
 *>  203.0.113.0/24   169.254.100.1                          0 65000 i
 *>  203.0.113.64/27  169.254.100.1                          0 65000 i
 *>  198.51.100.128/25 169.254.100.1                         0 65000 ?
 *>  198.51.100.192/26 169.254.100.1                         0 65000 ?
 *>  203.0.113.128/26 169.254.100.1                          0 65000 i
 *>  203.0.113.192/27 169.254.100.1                          0 65000 i
 *>  198.51.100.64/26 169.254.100.1                          0 65000 i
 *>  198.51.100.96/27 169.254.100.1                          0 65000 i

このとおり、IKEv2/IPsec の上に FRR を載せて BGP の経路交換まで確認できています。

ただし今回は lab 構成の都合で、この先の経路を有効化するとルーティングループになるため、BGP over IPsec は経路受信の確認までで止めています。少なくとも、ML-KEM-768 を使った IKEv2/IPsec の上で BGP セッションと経路交換が成立するところまでは確認できました。

Cisco Secure Router 8000 シリーズ と 旧シリーズとの違い

ここも少しややこしいポイントです。

Cisco Secure Router 8000 シリーズでは、26.1.1 から ML-KEM を使った hybrid IKEv2/IPsec がサポートされます。 一方で、

ISR1100 や Catalyst 8000シリーズルータ、 Catalyst 8000V ルータなどの Cisco Secure Router シリーズ以前の機種では、SSH の ML-KEM は利用可能なものの、ML-KEM を使った IKEv2 は利用できません。

たとえば、C8000V実機では以下になります

router(config)#crypto ikev2 proposal C8000V
router(config-ikev2-proposal)#pqc mlkem768 optional
 Warning!! IKEv2 PQC is not supported on this platform.

このように Warning!! IKEv2 PQC is not supported on this platform. と表示され、設定が適用されません。

このあたりは「PQC に対応しているか」を一言で言ってしまうと誤解しやすい部分です。

  • SSH での ML-KEM 対応
  • IKEv2/IPsec での ML-KEM hybrid 対応
  • PPK のサポート

これらは別々に見る必要があります。

特に IKEv2 で言うと、PPK がサポートされていても、それは ML-KEM hybrid 鍵交換のサポートとは別です。
ちなみに 17.11 以降で ISR1000 シリーズをはじめ多くの機種でサポートされている PPK であれば、以下のような見え方になります。

Tunnel-id    fvrf/ivrf              Status
4          none/none             READY
Local  2001:db8:100::10/500
Remote 2001:db8:200::10/500
      Encr: AES-CBC, keysize: 256, PRF: SHA256, Hash: SHA256, DH Grp:19, Auth sign: PSK, Auth verify: PSK, QR
      Life/Active Time: 86400/2102 sec
      CE id: 0, Session-id: 1
      Local spi: C7BC734A85DAA0A6       Remote spi: E12D023D21BA9B79
      Status Description: Negotiation done
      Local id: 2001:db8:100::10
      Remote id: 2001:db8:200::10
      Local req msg id:  0              Remote req msg id:  0
      Local next msg id: 0              Remote next msg id: 0
      Local req queued:  0              Remote req queued:  0
      Local window:      20             Remote window:      20
      DPD configured for 30 seconds, retry 5
      Fragmentation not  configured.
      Dynamic Route Update: enabled
      Extended Authentication not configured.
      NAT-T is not detected
      Cisco Trust Security SGT is disabled
      Initiator of SA : Yes
      Quantum-safe Encryption using Manual PPK
      PEER TYPE: IOS-XE

こちらは Quantum-safe Encryption using Manual PPK および Auth verify: PSK, QR と表示されており、PPK であることが分かります。

まとめ

Cisco IOS XE 26.1.1 で、Cisco Secure Router 8000 シリーズに待望の ML-KEM hybrid IKEv2/IPsec が入ってきたのは、PQC 対応としてかなり大きな前進です。

  • Cisco Secure Router 8000 シリーズで ML-KEM hybrid IKEv2/IPsec の設定が確認できた
  • 今回の対応により、RFC 9370 で標準化された IKEv2 の multiple key exchange の流れに沿って、ML-KEM を追加鍵交換として利用できるようになった
  • Cisco IOS XE機種同士だけではなく、異機種 (strongSwan)との接続も確認できた

PQC といえばやはり IKEv2/IPsec、という目線で見ていた方にとっては、今回はかなりうれしいアップデートだと思います。
その一方で、crypto ikev2 proposal は crypto ikev2 proposal default だけ見て安心せず、実際に使っている proposal と tunnel の関連まで追うのが大事です。

特に注意が必要なことは、26.1.1 へのアップグレードで crypto ikev2 proposal default には ML-KEM の設定が自動で反映され、custom proposal には反映されません。
この挙動は、実機で show crypto ikev2 proposalshow crypto ikev2 sa detailed を見ないと気づきにくいところですし、アップグレードの順序を誤ると IKEv2 の接続に失敗するため、重要なポイントになります。

前回の SSH 側の PQC については、こちらもあわせてどうぞ。

関連リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?