Post-Quantum Cryptography for Agentless VPN New
FortiOS supports Post-Quantum Cryptography (PQC) for Agentless VPN. Pure and hybrid PQC algorithms to prepare for future quantum computing threats can be selected in the CLI. Using OpenSSL library version 3.5 enables initial PQC algorithm support and establishes a foundation for broader quantum-resistant capabilities across FortiGate platforms.
In FIPS mode, Known Answer Tests (KATs) are available for PQC algorithms, including OSSL-ML-DSA-KAT_Signature, OSSL-SLH-DSA-KAT_Signature, and OSSL-ML-KEM, along with key generation and encapsulation tests. Legacy RSA encrypt/decrypt tests are not available to align with modern cryptographic standards.
Additionally, SSL VPN supports TLS group configuration in the CLI:
config vpn ssl settings
set tls-groups <groups>
end
Supported groups include traditional elliptic curves (P-256, P-384, P-521), finite field Diffie-Hellman (FFDHE2048–8192), pure PQC (ML-KEM512, ML-KEM768, ML-KEM1024), and hybrid combinations (such as P-384-MLKEM1024, X25519-MLKEM768). PQC groups are currently unavailable in FIPS-CC mode pending FIPS 140-3 approval.
Use Case 1: FIPS-CC compliance customer
Strict FIPS-CC compliance for all cryptographic operations is required in a FortiGate deployment supporting employees using Agentless VPN with only FIPS-compliant algorithms.
-
The FortiGate in FIPS-CC mode can boot up successfully with new KATs added:
[smit] Installing and loading FIPS provider: HMAC : KAT_Integrity : Pass HMAC : Module_Integrity : Pass SHA2 : KAT_Digest : Pass SHA3 : KAT_Digest : Pass AES_GCM : KAT_Cipher : Pass AES_ECB_Decrypt : KAT_Cipher : Pass TDES : KAT_Cipher : Pass RSA : KAT_Signature : Pass ECDSA : KAT_Signature : Pass ECDSA : KAT_Signature : Pass EDDSA : KAT_Signature : Pass EDDSA : KAT_Signature : Pass DSA : KAT_Signature : Pass ML-DSA : KAT_Signature : Pass SLH-DSA : KAT_Signature : Pass SLH-DSA : KAT_Signature : Pass TLS13_KDF_EXTRACT : KAT_KDF : Pass TLS13_KDF_EXPAND : KAT_KDF : Pass TLS12_PRF : KAT_KDF : Pass PBKDF2 : KAT_KDF : Pass KBKDF : KAT_KDF : Pass KBKDF_KMAC : KAT_KDF : Pass HKDF : KAT_KDF : Pass SSKDF : KAT_KDF : Pass X963KDF : KAT_KDF : Pass X942KDF : KAT_KDF : Pass HASH : DRBG : Pass CTR : DRBG : Pass HMAC : DRBG : Pass DH : KAT_KA : Pass ECDH : KAT_KA : Pass ML-KEM : KAT_AsymmetricKeyGeneration : Pass ML-DSA : KAT_AsymmetricKeyGeneration : Pass SLH-DSA : KAT_AsymmetricKeyGeneration : Pass KEM_Encap : KAT_KEM : Pass KEM_Decap : KAT_KEM : Pass KEM_Decap_Reject : KAT_KEM : Pass [smit] FIPS provider installed. System file integrity init check failed! FIPS-CC mode: Starting self-tests. Running Configuration/VPN Bypass test... passed Running AES test... passed Running SHA1-HMAC test... passed Running SHA256-HMAC test... passed Running SHA384/512-HMAC test... passed Running IKEv1-KDF test... passed Running IKEv2-KDF test... passed Running Primitive-Z test... passed Running Firmware integrity test... passed Running RBG-instantiate test... passed Running RBG-reseed test... passed Running RBG-generate test... passed Self-tests passed [ipshelper] Installing and loading FIPS provider: HMAC : KAT_Integrity : Pass HMAC : Module_Integrity : Pass SHA2 : KAT_Digest : Pass SHA3 : KAT_Digest : Pass AES_GCM : KAT_Cipher : Pass AES_ECB_Decrypt : KAT_Cipher : Pass TDES : KAT_Cipher : Pass RSA : KAT_Signature : Pass ECDSA : KAT_Signature : Pass ECDSA : KAT_Signature : Pass EDDSA : KAT_Signature : Pass EDDSA : KAT_Signature : Pass DSA : KAT_Signature : Pass ML-DSA : KAT_Signature : Pass SLH-DSA : KAT_Signature : Pass SLH-DSA : KAT_Signature : Pass TLS13_KDF_EXTRACT : KAT_KDF : Pass TLS13_KDF_EXPAND : KAT_KDF : Pass TLS12_PRF : KAT_KDF : Pass PBKDF2 : KAT_KDF : Pass KBKDF : KAT_KDF : Pass KBKDF_KMAC : KAT_KDF : Pass HKDF : KAT_KDF : Pass SSKDF : KAT_KDF : Pass X963KDF : KAT_KDF : Pass X942KDF : KAT_KDF : Pass HASH : DRBG : Pass CTR : DRBG : Pass HMAC : DRBG : Pass DH : KAT_KA : Pass ECDH : KAT_KA : Pass ML-KEM : KAT_AsymmetricKeyGeneration : Pass ML-DSA : KAT_AsymmetricKeyGeneration : Pass SLH-DSA : KAT_AsymmetricKeyGeneration : Pass KEM_Encap : KAT_KEM : Pass KEM_Decap : KAT_KEM : Pass KEM_Decap_Reject : KAT_KEM : Pass [ipshelper] FIPS provider installed.
# get sys status Version: FortiGate-121G v8.0.0,buildXXXX ... Virtual domains status: 1 in NAT mode, 0 in TP mode Virtual domain configuration: disable FIPS-CC mode: enable Current HA mode: standalone ... System time: Mon Sep 22 15:59:24 2025 Last reboot reason: warm reboot
-
TLS groups can be set when configuring Agentless VPN:
config vpn ssl settings set tls-groups P-521 P-384 FFDHE4096 FFDHE8192 end
Use Case 2: Normal mode customer testing PQC
An enterprise is testing PQC capabilities in preparation for future regulatory requirements and to evaluate quantum-resistant security options without current compliance restrictions in a FortiGate deployment supporting remote workers that use Agentless VPN.
In this example TLSv1.3 is used and the client is a Chrome web browser.
-
TLS groups can be set when configuring Agentless VPN:
config vpn ssl settings set tls-groups ML-KEM512 ML-KEM768 ML-KEM1024 X25519 P-384-MLKEM1024 P-256-MLKEM768 X25519-MLKEM768 end -
The Client Hello message shows groups supported by the Chrome browser:
Supported Groups (5 groups) Supported Group: Reserved (GREASE) (0xcaca) Supported Group: X25519MLKEM768 (0x11ec) Supported Group: x25519 (0x001d) Supported Group: secp256r1 (0x0017) Supported Group: secp384r1 (0x0018) -
The Server Hello message shows the group that the FortiGate picked:
Extension: key_share (len=1124) X25519MLKEM768 Type: key_share (51) Length: 1124 Key Share extension