Fortinet white logo
Fortinet white logo

Administration Guide

Post-Quantum Cryptography for Agentless VPN New

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.

  1. 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
  2. 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.

  1. 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
  2. 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)
  3. 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

Post-Quantum Cryptography for Agentless VPN New

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.

  1. 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
  2. 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.

  1. 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
  2. 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)
  3. 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