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」の暗号化方式と認証方式だけを変更した。変更した構成プロファイルは、iOSにも利用できる。
--- 2019/9/10追記:GCM指定時に設定していた「Integirity」を未指定に変更。
(2)strongSwanの設定
GCMが選択できるように「esp=」にGCMを追加
---2019/9/10追記:GCM指定を変更
(3)計測
opensslで「Core i7-2600」の「AES-NI」が有効か確認処理速度をopensslで確認約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状況
結果
Core i5-8400の例だと「AES128CBC:1.28Gbps」「AES128GCM128: 2.59Gbps」のスループットが得られているようだが、「AES128-CBCとAES128GCM16」で、これほどの差は得られていない。ほぼ同等スループットなので、暗号化方式以外の処理が支配的で、Core i7-2600のCPU処理能力の結果であろうか。。。
--- 2019/9/10追記:GCM指定時に「Integrity」指定を削除したが、スループットに変化なし
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>
--- 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
(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 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
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」指定を削除したが、スループットに変化なし