
Примеры TLS 1.3 с постквантовой криптографией (PQC) на Apache Camel с использованием гибридного обмена ключами X25519MLKEM768 на JDK 21 (BouncyCastle) и JDK 27 (нативный)
Этот репозиторий содержит три примера, демонстрирующих постквантовые (PQC) рукопожатия TLS 1.3 с Apache Camel, использующие гибридный обмен ключами X25519MLKEM768.
X25519MLKEM768 сочетает классический X25519 (эллиптическая кривая Диффи-Хеллмана) с ML-KEM-768 — постквантовым механизмом инкапсуляции ключей на основе решёток (NIST FIPS 203). Оба алгоритма работают вместе, поэтому безопасность сохраняется, даже если один из них будет взломан.
| Пример | JDK | TLS-провайдер | Подход |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE (нативный JDK) | JEP 527 добавляет PQC именованные группы во встроенный TLS-стек JDK |
pqc-kem-jdk24 | JDK 24 | BouncyCastle JSSE 1.83 | BCJSSE для PQC TLS, JDK имеет нативные примитивы ML-KEM через JEP 496 |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | BCJSSE заменяет SunJSSE, чтобы обеспечить поддержку PQC TLS уже сегодня |
Все три примера настраиваются полностью через свойства camel.ssl.* и выполняют автономное рукопожатие TLS 1.3 с использованием X25519MLKEM768 для постквантового обмена ключами; оно проверяется при запуске и доступно по запросу через REST-эндпоинты.
pqc-ssl-context)Использует встроенный провайдер JDK SunJSSE, который получает поддержку PQC TLS благодаря JEP 527 в JDK 27.
camel.ssl.namedGroups=X25519MLKEM768,x25519camel.ssl.selfSigned=true)SSLParameters.setNamedGroups() (стандартный JDK API)pqc-kem-jdk24)Использует JSSE-провайдер BouncyCastle (BCJSSE), чтобы добавить поддержку PQC TLS в JDK 24. Хотя JDK 24 включает нативный ML-KEM как отдельный криптографический примитив (JEP 496), он не предоставляет PQC именованные группы в своём TLS-стеке. BCJSSE устраняет этот пробел.
camel.ssl.provider=BCJSSE и camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)/api/verify-kem демонстрирует нативный API javax.crypto.KEM в JDK 24 с тестами совместимости между провайдерамиpqc-ssl-context-jdk21)Использует JSSE-провайдер BouncyCastle (BCJSSE), чтобы добавить поддержку PQC TLS в JDK 21, не дожидаясь JDK 27.
camel.ssl.provider=BCJSSE и camel.ssl.namedGroups=X25519MLKEM768,secp256r1camel.ssl.selfSigned=true)ECDH из 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
Во всех трёх случаях будет возвращено "pqcVerified": true, если рукопожатие PQC TLS завершилось успешно.
Если у вас возникли проблемы при использовании Camel или есть отзывы, пожалуйста, сообщите нам.
Мы также любим контрибьюторов, поэтому присоединяйтесь :-)
Всадники Camel!
| Аспект | Нативный JDK 27 | JDK 24 + BouncyCastle | JDK 21 + BouncyCastle |
|---|
| Требование к JDK | JDK 27 EA | JDK 24+ | JDK 21+ |
| TLS-провайдер | SunJSSE | BCJSSE 1.83 | BCJSSE 1.83 |
| Механизм PQC | JEP 527 (встроенный) | Библиотека TLS BouncyCastle | Библиотека TLS BouncyCastle |
| Нативный ML-KEM (KEM API) | Да | Да (JEP 496) | Нет |
| Конфигурация | свойства camel.ssl.* | свойства camel.ssl.* | свойства camel.ssl.* |
| Управление сертификатами | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true | camel.ssl.selfSigned=true |
| REST-порт | 8443 (HTTPS) | 8443 (HTTPS) | 8443 (HTTPS) |
| Дополнительные зависимости | Нет (нативный JDK) | bcprov, bctls | bcprov, bctls |
| Версия JDK | ML-KEM KEM API | PQC в TLS | Подход |
|---|
| 21 | Нет | Да (через BouncyCastle) | pqc-ssl-context-jdk21 - BCJSSE обеспечивает поддержку PQC TLS |
| 24 | Да (JEP 496) | Да (через BouncyCastle) | pqc-kem-jdk24 - BCJSSE для TLS, JDK имеет нативные примитивы ML-KEM |
| 27 | Да | Да (нативный) | pqc-ssl-context - JEP 527 добавляет PQC в SunJSSE |