
Exemplos de Criptografia Pós-Quântica (PQC) TLS 1.3 com Apache Camel usando troca de chaves híbrida X25519MLKEM768 no JDK 21 (BouncyCastle) e JDK 27 (nativo)
Este repositório contém três exemplos que demonstram handshakes TLS 1.3 de Criptografia Pós-Quântica (PQC) com Apache Camel, usando a troca de chaves híbrida X25519MLKEM768.
O X25519MLKEM768 combina o clássico Diffie-Hellman de curva elíptica X25519 com o ML-KEM-768, um mecanismo de encapsulamento de chaves pós-quântico baseado em reticulados (NIST FIPS 203). Ambos os algoritmos são executados em conjunto, de modo que a segurança é mantida mesmo que um deles seja quebrado.
| Exemplo | JDK | Provedor TLS | Abordagem |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE (nativo do JDK) | O JEP 527 adiciona grupos nomeados de PQC à pilha TLS integrada do JDK |
pqc-kem-jdk24 | JDK 24 | BouncyCastle JSSE 1.83 | BCJSSE para TLS PQC; o JDK tem primitivas ML-KEM nativas via JEP 496 |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | O BCJSSE substitui o SunJSSE para fornecer suporte a TLS PQC hoje |
Os três exemplos são configurados inteiramente por meio de propriedades camel.ssl.* e realizam um handshake TLS 1.3 autocontido usando X25519MLKEM768 para troca de chaves pós-quântica, verificado na inicialização e disponível sob demanda por meio de endpoints REST.
pqc-ssl-context)Usa o provedor SunJSSE integrado do JDK, que ganha suporte a TLS PQC por meio do JEP 527 no JDK 27.
camel.ssl.namedGroups=X25519MLKEM768,x25519camel.ssl.selfSigned=true)SSLParameters.setNamedGroups() (API padrão do JDK)pqc-kem-jdk24)Usa o provedor JSSE do BouncyCastle (BCJSSE) para levar suporte a TLS PQC ao JDK 24. Embora o JDK 24 inclua ML-KEM nativo como uma primitiva criptográfica independente (JEP 496), ele não expõe grupos nomeados de PQC em sua pilha TLS. O BCJSSE preenche essa lacuna.
camel.ssl.provider=BCJSSE e camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)/api/verify-kem demonstra a API nativa javax.crypto.KEM do JDK 24 com testes de interoperabilidade entre provedorespqc-ssl-context-jdk21)Usa o provedor JSSE do BouncyCastle (BCJSSE) para levar suporte a TLS PQC ao JDK 21, sem esperar pelo JDK 27.
camel.ssl.provider=BCJSSE e 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
Os três retornarão "pqcVerified": true quando o handshake TLS de PQC for bem-sucedido.
Se você encontrar qualquer problema ao usar o Camel ou tiver algum feedback, por favor avise-nos.
Também adoramos contribuidores, então envolva-se :-)
Os cavaleiros do Camel!
| Aspecto | JDK 27 Nativo | JDK 24 + BouncyCastle | JDK 21 + BouncyCastle |
|---|
| Requisito de JDK | JDK 27 EA | JDK 24+ | JDK 21+ |
| Provedor TLS | SunJSSE | BCJSSE 1.83 | BCJSSE 1.83 |
| Mecanismo PQC | JEP 527 (integrado) | Biblioteca TLS do BouncyCastle | Biblioteca TLS do BouncyCastle |
| ML-KEM nativo (API KEM) | Sim | Sim (JEP 496) | Não |
| Configuração | propriedades camel.ssl.* | propriedades camel.ssl.* | propriedades camel.ssl.* |
| Gerenciamento de certificados | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true |
| Porta REST | 8443 (HTTPS) | 8443 (HTTPS) | 8443 (HTTPS) |
| Dependências extras | Nenhuma (nativo do JDK) | bcprov, bctls | bcprov, bctls |
| Versão do JDK | API KEM ML-KEM | PQC em TLS | Abordagem |
|---|
| 21 | Não | Sim (via BouncyCastle) | pqc-ssl-context-jdk21 - o BCJSSE fornece suporte a TLS PQC |
| 24 | Sim (JEP 496) | Sim (via BouncyCastle) | pqc-kem-jdk24 - BCJSSE para TLS; o JDK tem primitivas ML-KEM nativas |
| 27 | Sim | Sim (nativo) | pqc-ssl-context - o JEP 527 adiciona PQC ao SunJSSE |