IKEv1のpreshared-keyはどのように使われているのか

ふと、IKEv1のPreshared-key(事前共有鍵)認証で設定したキーは、ISAKMP SA作成時のパケットのどこに載っているのか気になった。(載っているもんだと思っていた。)

別件でstrongswanを使いそうな予感がしていたので、たいして書籍等調べもせず「GNS3のルータとstrongswan間でIPsec通信させて、ISAKMPのパケットを見ればわかるだろう」という安直な考えから、とりあえず両者の設定を行った。

構成

f:id:pesnia:20160924165821p:plain

strongswanはvirtualboxであげたCentos7(SrvForGNS)上にいれてある。

各種バージョン

GNS3: 1.5.2
ゲストOS: Centos7.2
strongswan: 5.5.0

設定(Cisco)

show runの抜粋。

crypto isakmp policy 10
 encr aes
 authentication pre-share
 group 5
crypto isakmp key cisco address 172.16.10.2
crypto isakmp keepalive 30 periodic

crypto ipsec transform-set TS esp-aes esp-sha-hmac
 mode tunnel

crypto map cmap 10 ipsec-isakmp
 set peer 172.16.10.2
 set transform-set TS
 match address cryptoacl

interface GigabitEthernet2/0
 ip address 192.168.1.1 255.255.255.0
 negotiation auto

interface GigabitEthernet3/0
 ip address 172.16.10.1 255.255.255.0
 negotiation auto
 crypto map cmap

ip route 192.168.2.0 255.255.255.0 172.16.10.2

ip access-list extended cryptoacl
permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255

設定(strongswan)

ipsec.conf
config setup
 

conn %default
    ikelifetime=1440m
    keylife=60m
    rekeymargin=3m

    keyingtries=1
    keyexchange=ikev1
    authby=secret

conn ciscoios
    ikelifetime=1440m
    left=172.16.10.2
    leftsubnet=192.168.2.0/24
    leftid=172.16.10.2
    leftfirewall=yes
    right=172.16.10.1
    rightsubnet=192.168.1.0/24
    rightid=172.16.10.1
    auto=add
    ike=aes128-sha1-modp1536
    esp=aes128-sha1
ipsec.secrets
172.16.10.1 172.16.10.2 : PSK "cisco"

コマンド

strongswan
ipsec start
cisco

ping契機でISAKMP SAの生成が始まる。

ping 192.168.2.1 source 192.168.1.1

結果

Wiresharkでパケットを眺めていても全然わからなかった。ものの本によるとSKEYIDという鍵がpreshared-keyから生成されているらしいけど、それがどこにあるのかもよくわからない。
まだまだ勉強が足りないようなので、まずは調べてみる。

2016.09.24 追記

ISAKMP SA生成の3番目のメッセージからパケットが一部(ID、ハッシュ値)暗号化されているようで、その暗号化にVPN機器が自身のpreshared-keyから生成した秘密鍵(SKEYID_eかな?)を使っているみたい。
で、暗号化して相手におくって、相手も同様に自身に設定してあるpreshared-keyから秘密鍵を生成し、復号化する。復号化できなければ認証失敗、ということだと予想しています。