rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

IKEv2 VPNの暗号化方式(AES-CBC/AES-GCM)とスループット

2019-09-09 10:00:00 | ネットワーク
Intel Core i7の性能を調べている時に「AES-NI(AES-New Instructions)」と言うAES暗号化処理を支援する命令セットが使用出来る事を知った(2011年発売のCore i7-2600にも装備されいた。。。)。「Using Intel® AES New Instructions and PCLMULQDQ to Significantly Improve IPSec Performance on Linux」によると「AES-GCM」で400%高速化が実現したと。

strongSwan 5.3.1(2015年6月)から「aesni plugin(provides CBC, CTR, XCBC, CMAC, CCM and GCM crypto primitives for AES-128/192/256)」が提供されていた。

macOS MojaveのIKEv2 IPsec VPN最大回線速度計測」で「aes256-cbc」のスループット688Mbps、「128aes-cbc」のスループット827Mbpsが計測された。
プラグインを確認すると「aesni」プラグインがロードされている。プラグインがロードされないように設定しても計測値が変わらない。IPSecのESPパケット暗号化は、カーネルで行われていてプラグインのロードと無関係に命令セットが使われているようだ。

「Macbook pro(macOS Mojave)」のIKEv2 VPNから「aes128-cbc」「aes256-cbc(default)」「aes128-gcm」「aes256-gcm」でスループットを計測確認してみた。

(1)macOS VPNアプリの設定
macOSのIKEv2 VPNアプリは、暗号化方式を選択できない。暗号化方式を指定して接続するには、構成プロファイル VPNペイロードで指定する必要がある。実際のプロファイルは、「Buffalo OpenWrt化WZR-HP-G300NHでIKEv2 VPN over ぷららIPv6 IPoE接続」で利用したプロファイルを基にした。「IKE」は、変更せずに「ESP」の暗号化方式と認証方式だけを変更した。
AES-128-CBC
<key>ChildSecurityAssociationParameters</key>
<dict>
	<key>DiffieHellmanGroup</key>
	<integer>14</integer>
	<key>EncryptionAlgorithm</key>
	<string>AES-128</string>
	<key>IntegrityAlgorithm</key>
	<string>SHA1-96</string>
	<key>LifeTimeInMinutes</key>
	<integer>1440</integer>
</dict>
AES-256-CBC
<key>ChildSecurityAssociationParameters</key>
<dict>
	<key>DiffieHellmanGroup</key>
	<integer>14</integer>
	<key>EncryptionAlgorithm</key>
	<string>AES-256</string>
	<key>IntegrityAlgorithm</key>
	<string>SHA2-256</string>
	<key>LifeTimeInMinutes</key>
	<integer>1440</integer>
</dict>
AES-128-GCM
<key>ChildSecurityAssociationParameters</key>
<dict>
	<key>DiffieHellmanGroup</key>
	<integer>14</integer>
	<key>EncryptionAlgorithm</key>
	<string>AES-128-GCM</string>
	<key>IntegrityAlgorithm</key>
	<string>SHA1-96</string>
	<key>LifeTimeInMinutes</key>
	<integer>1440</integer>
</dict>
AES-256-GCM
<key>ChildSecurityAssociationParameters</key>
<dict>
	<key>DiffieHellmanGroup</key>
	<integer>14</integer>
	<key>EncryptionAlgorithm</key>
	<string>AES-256-GCM</string>
	<key>IntegrityAlgorithm</key>
	<string>SHA2-256</string>
	<key>LifeTimeInMinutes</key>
	<integer>1440</integer>
</dict>
変更した構成プロファイルは、iOSにも利用できる。
--- 2019/9/10追記:GCM指定時に設定していた「Integirity」を未指定に変更。

(2)strongSwanの設定
GCMが選択できるように「esp=」にGCMを追加
/etc/ipsec.conf
conn %default                           
        keyexchange=ikev2               
        #for Windows10 IKEv2 VPN        
        ike=aes256-sha256-modp1024
        #for GCM testing
        esp=aes128gcm16-sha, aes256gcm16-sha256      
        auto=add                        
        left=%any                       
        leftauth=pubkey           
        leftsubnet=192.168.0.0/20,2409:10:XXXX:YY00::/56,2404:1a8::/32
        #for iOS VPN apli                                             
        leftsendcert=always                                           
        leftcert=debian10-pub.pem                                          
        leftid=@vpn.AAAAAAAA.mydns.jp                              
        right=%any                                                    
        rightsourceip=192.168.15.0/24,2409:10:XXXX:YY30::15:0/120     
        rightdns=192.168.11.250,2409:10:XXXX:YY20::11:250
---2019/9/10追記:GCM指定を変更

(3)計測
opensslで「Core i7-2600」の「AES-NI」が有効か確認
root@debian10:~$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       36 bits physical, 48 bits virtual
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               42
Model name:          Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
Stepping:            7
CPU MHz:             1596.243
CPU max MHz:         3800.0000
CPU min MHz:         1600.0000
BogoMIPS:            6784.69
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            8192K
NUMA node0 CPU(s):   0-7
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts
処理速度をopensslで確認
openssl speed aes-256-cbc
OpenSSL 1.1.1c  28 May 2019
built on: Thu May 30 15:27:48 2019 UTC
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256 cbc      84293.98k    89436.65k    90589.10k    91029.16k    91187.88k    91247.96k
openssl speed -evp aes-256-cbc
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256-cbc     393369.35k   491012.78k   523522.90k   532274.52k   534899.37k   535183.36k
約5.9倍の処理速度で「AES-NI」が有効であることが確認できる。

AES128CBC
/sbin/ipsec statusall 結果


iperf3スループット計測結果とmacOS cpu状況


AES256CBC
/sbin/ipsec statusall 結果


iperf3スループット計測結果とmacOS cpu状況


AES128GCM16
/sbin/ipsec statusall 結果


iperf3スループット計測結果とmacOS cpu状況


AES256GCM16
/sbin/ipsec statusall 結果


iperf3スループット計測結果とmacOS cpu状況


結果
AES128-CBC       825Mbps
AES256-CBC       682Mbps
AES128GCM16      878Mbps
AES256GCM16      824Mbps


Core i5-8400の例だと「AES128CBC:1.28Gbps」「AES128GCM128: 2.59Gbps」のスループットが得られているようだが、「AES128-CBCとAES128GCM16」で、これほどの差は得られていない。ほぼ同等スループットなので、暗号化方式以外の処理が支配的で、Core i7-2600のCPU処理能力の結果であろうか。。。

--- 2019/9/10追記:GCM指定時に「Integrity」指定を削除したが、スループットに変化なし
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする