
Cryptographie post-quantique (PQC) : exemples TLS 1.3 avec Apache Camel utilisant l'échange de clés hybride X25519MLKEM768 sur JDK 21 (BouncyCastle) et JDK 27 (natif)
Ce dépôt contient trois exemples illustrant des négociations TLS 1.3 avec cryptographie post-quantique (PQC) avec Apache Camel, utilisant l'échange de clés hybride X25519MLKEM768.
X25519MLKEM768 combine le Diffie-Hellman sur courbe elliptique classique X25519 avec ML-KEM-768, un mécanisme d'encapsulation de clé post-quantique à base de réseaux (NIST FIPS 203). Les deux algorithmes fonctionnent ensemble, de sorte que la sécurité est maintenue même si l'un d'eux est cassé.
| Exemple | JDK | Fournisseur TLS | Approche |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE (natif JDK) | JEP 527 ajoute des groupes nommés PQC à la pile TLS intégrée du JDK |
pqc-kem-jdk24 | JDK 24 | BouncyCastle JSSE 1.83 | BCJSSE pour TLS PQC, le JDK dispose de primitives ML-KEM natives via JEP 496 |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | BCJSSE remplace SunJSSE pour assurer la prise en charge PQC TLS dès aujourd'hui |
Les trois exemples sont entièrement configurés via les propriétés camel.ssl.* et effectuent une négociation TLS 1.3 autonome utilisant X25519MLKEM768 pour l'échange de clés post-quantique, vérifiée au démarrage et disponible à la demande via des points de terminaison REST.
pqc-ssl-context)Utilise le fournisseur SunJSSE intégré au JDK, qui obtient la prise en charge TLS PQC via JEP 527 dans JDK 27.
camel.ssl.namedGroups=X25519MLKEM768,x25519camel.ssl.selfSigned=true)SSLParameters.setNamedGroups() (API JDK standard)pqc-kem-jdk24)Utilise le fournisseur JSSE de BouncyCastle (BCJSSE) pour apporter la prise en charge TLS PQC à JDK 24. Bien que JDK 24 inclue ML-KEM natif en tant que primitive cryptographique autonome (JEP 496), il n'expose pas de groupes nommés PQC dans sa pile TLS. BCJSSE comble cette lacune.
camel.ssl.provider=BCJSSE et camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)/api/verify-kem illustre l'API javax.crypto.KEM native de JDK 24 avec des tests d'interopérabilité entre fournisseurspqc-ssl-context-jdk21)Utilise le fournisseur JSSE de BouncyCastle (BCJSSE) pour apporter la prise en charge TLS PQC à JDK 21, sans attendre JDK 27.
camel.ssl.provider=BCJSSE et 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
Les trois renverront "pqcVerified": true lorsque la négociation TLS PQC aboutit.
Si vous rencontrez un problème avec Camel ou si vous avez des commentaires, n'hésitez pas à nous le faire savoir.
Nous aimons aussi les contributeurs, alors impliquez-vous :-)
Les cavaliers Camel !
| Aspect | JDK 27 natif | JDK 24 + BouncyCastle | JDK 21 + BouncyCastle |
|---|
| Prérequis JDK | JDK 27 EA | JDK 24+ | JDK 21+ |
| Fournisseur TLS | SunJSSE | BCJSSE 1.83 | BCJSSE 1.83 |
| Mécanisme PQC | JEP 527 (intégré) | Bibliothèque TLS BouncyCastle | Bibliothèque TLS BouncyCastle |
| ML-KEM natif (API KEM) | Oui | Oui (JEP 496) | Non |
| Configuration | Propriétés camel.ssl.* | Propriétés camel.ssl.* | Propriétés camel.ssl.* |
| Gestion des certificats | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true |
| Port REST | 8443 (HTTPS) | 8443 (HTTPS) | 8443 (HTTPS) |
| Dépendances supplémentaires | Aucune (JDK natif) | bcprov, bctls | bcprov, bctls |
| Version JDK | API KEM ML-KEM | PQC en TLS | Approche |
|---|
| 21 | Non | Oui (via BouncyCastle) | pqc-ssl-context-jdk21 - BCJSSE fournit la prise en charge TLS PQC |
| 24 | Oui (JEP 496) | Oui (via BouncyCastle) | pqc-kem-jdk24 - BCJSSE pour TLS, JDK dispose de primitives ML-KEM natives |
| 27 | Oui | Oui (natif) | pqc-ssl-context - JEP 527 ajoute PQC à SunJSSE |