TLS 1.3 Hybrid Key Exchange (ML-KEM)
To achieve Post-Quantum Cryptography (PQC) readiness today, standard OS repositories are insufficient. The keysupport.net infrastructure bypasses legacy packages by building OpenSSL and Nginx from scratch.
The Build Process
The container executes a custom compilation script to explicitly link Nginx against a raw build of OpenSSL.
Current target versions in buildOpenSslAndNginx.sh:
- Nginx: 1.31.2
- OpenSSL: 3.6.3
/usr/bin/wget https://github.com/openssl/openssl/releases/download/openssl-3.6.3/openssl-3.6.3.tar.gz
/usr/bin/wget https://nginx.org/download/nginx-1.31.2.tar.gz
# Nginx is compiled statically against the OpenSSL 3.6.3 source
./configure --with-http_v2_module \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--with-http_ssl_module \
--with-openssl=/usr/local/src/openssl-3.6.3
This allows the Nginx reverse proxy to expose the ssl_ecdh_curve directive with ML-KEM named groups:
ssl_protocols TLSv1.3;
ssl_ecdh_curve SecP384r1MLKEM1024:SecP256r1MLKEM768:X25519MLKEM768:secp384r1;
This guarantees that any capable client connecting to the Validation Service can negotiate a hybrid classical/post-quantum secure channel.
KEM Benchmark
Performance of Key Encapsulation Mechanisms on the host infrastructure:
ML-KEM-512 0.000020s 0.000012s 0.000020s 49789.4 80116.6 49755.4
ML-KEM-768 0.000032s 0.000017s 0.000027s 31047.4 59099.9 37110.1
ML-KEM-1024 0.000048s 0.000022s 0.000035s 20656.4 44675.5 28175.4
X25519MLKEM768 0.000060s 0.000074s 0.000057s 16620.7 13576.4 17503.4
SecP256r1MLKEM768 0.000047s 0.000081s 0.000078s 21059.5 12419.3 12751.5
SecP384r1MLKEM1024 0.000776s 0.001453s 0.000765s 1289.2 688.4 1307.7
PQC Readiness Verification
To verify that your client and the server are correctly negotiating post-quantum cipher suites, we recommend the pqspy tool. pqspy is a utility for monitoring Post-Quantum Cryptography (PQC) within TLS connections.
Repository: bwesterb/pqspy