以前、AES-GCMのパフォーマンスが高いという記事を書きましたが、実際の通信速度はどれほどなのでしょうか。
今回は、AES-CBC、AES-GCM、ChaCha20-Poly1305 のそれぞれでIPsecを張った状態で、iperf3を使い測定しました。
測定対象
測定対象は以下の通りです。
OS | CPU | ネットワーク | VPNソフトウェア | |
---|---|---|---|---|
VPNサーバ | CentOS 8.2.2004 | Intel Celeron N3150 | 1000Base-T | strongSwan |
VPNクライアント | Windows 10 2004 | Intel Core i7 3930K C2 | 1000Base-T | 標準機能 |
iPhone XS iOS14.1 | Apple A12 | IEEE802.11ac 80MHz 2ストリーム 833Mbps |
標準機能 | |
iPhone 12 Pro iOS14.1 | Apple A14 |
我が家にIEEE802.11ax (Wi-Fi 6) 対応APが無いため、iPhone 12 ProもIEEE802.11acでの測定です。
測定方法
- VPNクライアントとVPNサーバでIPsecを張り、iPerf3で測定し10回の平均を取る
- 結果がばらつきやすいインターネットは使用せず、LAN内で実施
- VPNクライアントとVPNサーバは同一セグメントで、そのままではVPNトンネルを使用しないため、VPNサーバに別セグメントのループバックアドレスを設定し、そこに向けてiPerf3を実施
(VPN無しのiPerf3では物理NICとループバックで速度の差分は見られませんでした。) - TCPのMSSはどのアルゴリズムでも1334バイトとなるようnftablesで書き換える
暗号化アルゴリズムについて
AES-NI機能があるCPUでは、AES-CBCよりAES-GCMの方が速いと言われていますが、それぞれ測定を行います。
今回は、AES-NIが無いCPUにおいて、AESより速いと言われるChaCha20-Poly1305についても測定を行うことにしました。
ChaCha20-Poly1305は、Windows標準VPN機能では使えないようなので、iPhoneでのみ測定を行います。
AES-NIについて
今回使用するIntel CPUにはAES-NI機能がありますが、Apple A12、A14にもAESハードウェアアクセラレーション機能があります。
どうやらARMv8-Aアーキテクチャ以降では、AESハードウェアアクセラレーションがあるようで、iPhoneではA7 CPU(iPhone 5s、iPad Air (第1世代)、iPad mini (第2世代)、iPad mini 3)以降であれば対応しているようです。
Androidでも最近のCPUであれば、対応しているはずです。
設定内容
strongSwan
アルゴリズムの設定は以下としました。
ike=aes256gcm16-sha384-ecp384,aes256-sha256-ecp384,chacha20poly1305-sha384-ecp384! esp=aes256gcm16,aes256-sha256,chacha20poly1305!
IPsecを張ったあとに速度測定を行うので、ikeの方は通信速度には影響が無いと思われます。
espは、aes256gcm16とchacha20poly1305の認証が16バイトなので、それに合わせてAES-CBCも16バイトとなるようsha256にしました。
Windows10
Windows10はECDSAのクライアント証明書を使用します。
アルゴリズム設定はPowerShellで以下のように行いました。
AES-CBC
Set-VpnConnectionIPsecConfiguration ` -Name "VPN" ` -CipherTransformConstants AES256 ` -EncryptionMethod AES256 ` -IntegrityCheckMethod SHA256 ` -DHGroup ECP384 ` -AuthenticationTransformConstants SHA256128 ` -PfsGroup None ` -Force
AES-GCM
Set-VpnConnectionIPsecConfiguration ` -Name "VPN" ` -CipherTransformConstants GCMAES256 ` -EncryptionMethod GCMAES256 ` -IntegrityCheckMethod SHA384 ` -DHGroup ECP384 ` -AuthenticationTransformConstants GCMAES256 ` -PfsGroup None ` -Force
iPhone
iPhoneもECDSAのクライアント証明書を使用します。
p-listでの設定になりますが、アルゴリズム部分のみを以下に記載します。
その他の部分はブログに何度も記載しているため割愛します。
AES-CBC
<key>IKESecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-384</string> <key>DiffieHellmanGroup</key> <integer>20</integer> </dict> <key>ChildSecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>DiffieHellmanGroup</key> <integer>20</integer> </dict>
AES-GCM
<key>IKESecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256-GCM</string> <key>IntegrityAlgorithm</key> <string>SHA2-384</string> <key>DiffieHellmanGroup</key> <integer>20</integer> </dict> <key>ChildSecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256-GCM</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>DiffieHellmanGroup</key> <integer>20</integer> </dict>
ChaCha20-Poly1305
<key>IKESecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>ChaCha20Poly1305</string> <key>IntegrityAlgorithm</key> <string>SHA2-384</string> <key>DiffieHellmanGroup</key> <integer>20</integer> </dict> <key>ChildSecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>ChaCha20Poly1305</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>DiffieHellmanGroup</key> <integer>20</integer> </dict>
測定結果
結果を表にまとめます。
理由は分かりませんが、iPhone は上りと下りで速度が違ったため、両方載せておきます。
|
暗号化なし | AES-CBC | AES-GCM | ChaCha20-Poly1305 |
---|---|---|---|---|
Windows10 | 922 | 170 | 341 | - |
iPhone XS(下り) | 363 | 199 | 289 | 229 |
iPhone XS(上り) | 446 | 241 | 309 | 284 |
iPhone 12 Pro(下り) | 349 | 202 | 292 | 238 |
iPhone 12 Pro(上り) | 564 | 227 | 377 | 330 |
各機器でAES-GCMが一番速く、次にChaCha20-Poly1305でした。
VPNサーバのCPUにAES-NI機能が無い場合は、ChaCha20-Poly1305が良いでしょう。
またiPhone 12 ProのAES-GCMの結果が377Mbpsなので、N3150ではこの辺りが限界のようです。
インターネットの速度がそこまで出ないため、実用上は問題ありません。
メインPCのWindows10(Intel Core i7 3930K)が、iPhoneに負けるあたり、そろそろ買い替えの検討が必要かもしれません。
まとめ
IPsecの暗号化は、AES-GCMを使用するのが良いです。
VPNサーバのCPUがAES-NIに対応しておらず、AES-GCMの速度が遅い場合は、iPhone/Android向けに、ChaCha20-Poly1305も使用出来るようにしておくと良いでしょう。