
Criptografía Post-Cuántica (PQC): ejemplos de TLS 1.3 con Apache Camel usando intercambio de claves híbrido X25519MLKEM768 en JDK 21 (BouncyCastle) y JDK 27 (nativo)
Este repositorio contiene tres ejemplos que demuestran handshakes TLS 1.3 de Criptografía Post-Cuántica (PQC) con Apache Camel, utilizando el intercambio de claves híbrido X25519MLKEM768.
X25519MLKEM768 combina el clásico X25519 Diffie-Hellman de curva elíptica con ML-KEM-768, un mecanismo de encapsulación de claves post-cuántico basado en retículos (NIST FIPS 203). Ambos algoritmos se ejecutan juntos, por lo que la seguridad se mantiene incluso si uno se ve comprometido.
| Ejemplo | JDK | Proveedor TLS | Enfoque |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE (nativo del JDK) | JEP 527 añade grupos con nombre PQC a la pila TLS integrada del JDK |
pqc-kem-jdk24 | JDK 24 | BouncyCastle JSSE 1.83 | BCJSSE para TLS PQC, el JDK tiene primitivas ML-KEM nativas vía JEP 496 |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | BCJSSE reemplaza a SunJSSE para proporcionar soporte TLS PQC hoy en día |
Los tres ejemplos se configuran íntegramente a través de las propiedades camel.ssl.* y realizan un handshake TLS 1.3 autocontenido usando X25519MLKEM768 para el intercambio de claves post-cuántico, verificado al inicio y disponible bajo demanda mediante endpoints REST.
pqc-ssl-context)Usa el proveedor SunJSSE integrado del JDK, que obtiene soporte TLS PQC mediante JEP 527 en JDK 27.
camel.ssl.namedGroups=X25519MLKEM768,x25519camel.ssl.selfSigned=true)SSLParameters.setNamedGroups() (API estándar del JDK)pqc-kem-jdk24)Usa el proveedor JSSE de BouncyCastle (BCJSSE) para llevar soporte TLS PQC a JDK 24. Aunque JDK 24 incluye ML-KEM nativo como primitiva criptográfica independiente (JEP 496), no expone grupos con nombre PQC en su pila TLS. BCJSSE cubre esa brecha.
camel.ssl.provider=BCJSSE y camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)/api/verify-kem demuestra la API nativa javax.crypto.KEM de JDK 24 con pruebas de interoperabilidad entre proveedorespqc-ssl-context-jdk21)Usa el proveedor JSSE de BouncyCastle (BCJSSE) para llevar soporte TLS PQC a JDK 21, sin esperar a JDK 27.
camel.ssl.provider=BCJSSE y camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)ECDH de jdk.tls.disabledAlgorithmscd pqc-ssl-context
sdk use java 27.ea.11-open
mvn clean compile exec:exec
curl -k https://localhost:8443/api/verify-pqc
cd pqc-kem-jdk24
sdk use java 24.0.1-tem
mvn clean compile exec:exec
curl -k https://localhost:8443/api/verify-pqc
curl -k https://localhost:8443/api/verify-kem
cd pqc-ssl-context-jdk21
sdk use java 21.0.10-tem
mvn clean compile exec:exec
curl -k https://localhost:8443/api/verify-pqc
Los tres devolverán "pqcVerified": true cuando el handshake TLS PQC se complete correctamente.
Si tienes algún problema usando Camel o tienes algún comentario, por favor haznoslo saber.
También nos encantan los colaboradores, así que participa :-)
¡Los jinetes de Camel!
| Aspecto | JDK 27 nativo | JDK 24 + BouncyCastle | JDK 21 + BouncyCastle |
|---|
| Requisito de JDK | JDK 27 EA | JDK 24+ | JDK 21+ |
| Proveedor TLS | SunJSSE | BCJSSE 1.83 | BCJSSE 1.83 |
| Mecanismo PQC | JEP 527 (integrado) | Biblioteca TLS de BouncyCastle | Biblioteca TLS de BouncyCastle |
| ML-KEM nativo (API KEM) | Sí | Sí (JEP 496) | No |
| Configuración | Propiedades camel.ssl.* | Propiedades camel.ssl.* | Propiedades camel.ssl.* |
| Gestión de certificados | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true |
| Puerto REST | 8443 (HTTPS) | 8443 (HTTPS) | 8443 (HTTPS) |
| Dependencias adicionales | Ninguna (nativo del JDK) | bcprov, bctls | bcprov, bctls |
| Versión de JDK | API KEM de ML-KEM | PQC en TLS | Enfoque |
|---|
| 21 | No | Sí (vía BouncyCastle) | pqc-ssl-context-jdk21 - BCJSSE proporciona soporte TLS PQC |
| 24 | Sí (JEP 496) | Sí (vía BouncyCastle) | pqc-kem-jdk24 - BCJSSE para TLS, el JDK tiene primitivas ML-KEM nativas |
| 27 | Sí | Sí (nativo) | pqc-ssl-context - JEP 527 añade PQC a SunJSSE |