On a previous post I’d recommended using AES-GCM on VPNs to AWS and GCP since it’s generally a more efficient algorithm that offers higher throughput. So it came as a surprised today doing some deep-diving on my Fortigate 60-E today: AES-GCM is supported for Phase 2, it is not supported in hardware on the NPU:
FGT60ETK18XXXXXX # get vpn ipsec tunnel details gateway name: 'aws1' type: route-based local-gateway: 198.51.100.78:4500 (static) remote-gateway: 3.140.149.245:4500 (static) mode: ike-v1 interface: 'wan1' (5) rx packets: 52 bytes: 6524 errors: 0 tx packets: 110 bytes: 6932 errors: 3 dpd: on-demand/negotiated idle: 20000ms retry: 3 count: 0 nat traversal mode: keep-alive RFC 3947 interval: 10 selectors name: 'aws1' auto-negotiate: disable mode: tunnel src: 0:0.0.0.0/0.0.0.0:0 dst: 0:0.0.0.0/0.0.0.0:0 SA lifetime/rekey: 3600/3289 mtu: 1438 tx-esp-seq: 2 replay: enabled qat: 0 inbound spi: 7dbc0283 enc: aes-gc 35a72036fa9a87000c90415b1863827652bf9dfd875f28a6d20fd1569e5c0099de639dcc auth: null outbound spi: ccdb6ab8 enc: aes-gc 21dd5c71a83142b0ecee1efe2c000c0dae586054160eb76df6f338d9071380b12103b0d9 auth: null NPU acceleration: none FGT60ETK18XXXXXX # get vpn ipsec stats crypto NPU Host Offloading: Encryption (encrypted/decrypted) null : 0 0 des : 0 0 3des : 0 0 aes-cbc : 833309 0 aes-gcm : 0 0 aria : 0 0 seed : 0 0 chacha20poly1305: 0 0 Integrity (generated/validated) null : 0 0 md5 : 0 0 sha1 : 803671 0 sha256 : 29540 0 sha384 : 48 0 sha512 : 50 0
Since the hardware offload isn’t occurring, the main CPU is moderately taxed when doing transfers via AES-GCM. Also, the throughput is only ~ 100 Mbps:

Reconfiguring the VPNs to AES-CBC and redoing the transfers, we get lower CPU usage and significantly higher throughput:
