
JDK 21(BouncyCastle)およびJDK 27(ネイティブ)上で、X25519MLKEM768ハイブリッド鍵交換を使用したApache Camelによる耐量子暗号(PQC)TLS 1.3の例
このリポジトリには、X25519MLKEM768 ハイブリッド鍵交換を使用し、Apache Camel で ポスト量子暗号 (PQC) TLS 1.3 ハンドシェイク を実演する3つの例が含まれています。
X25519MLKEM768 は、古典的なX25519楕円曲線ディフィー・ヘルマンと、ポスト量子の格子ベース鍵カプセル化メカニズムである ML-KEM-768 (NIST FIPS 203) を組み合わせたものです。両アルゴリズムが連携して動作するため、片方が破られてもセキュリティは維持されます。
| Example | JDK | TLS Provider | Approach |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE (JDK native) | JEP 527 が JDK 組み込みの TLS スタックに PQC 名前付きグループを追加 |
pqc-kem-jdk24 | JDK 24 | BouncyCastle JSSE 1.83 | PQC TLS 用の BCJSSE。JDK には JEP 496 によるネイティブの ML-KEM プリミティブが含まれる |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | BCJSSE が SunJSSE を置き換え、今すぐ PQC TLS サポートを提供 |
3つの例はすべて camel.ssl.* プロパティだけで構成され、X25519MLKEM768 を使用した自己完結型の TLS 1.3 ハンドシェイクをポスト量子鍵交換として実行します。起動時に検証され、REST エンドポイント経由でオンデマンドに利用できます。
pqc-ssl-context)JDK 27 の JEP 527 を通じて PQC TLS サポートを獲得した、JDK 組み込みの SunJSSE プロバイダーを使用します。
camel.ssl.namedGroups=X25519MLKEM768,x25519 で構成camel.ssl.selfSigned=true)SSLParameters.setNamedGroups() (標準の JDK API) で設定pqc-kem-jdk24)BouncyCastle の JSSE プロバイダー (BCJSSE) を使用して、JDK 24 に PQC TLS サポートをもたらします。JDK 24 にはスタンドアロンの暗号プリミティブとしてネイティブの ML-KEM (JEP 496) が含まれていますが、TLS スタックでは PQC 名前付きグループを公開していません。BCJSSE がそのギャップを埋めます。
camel.ssl.provider=BCJSSE と camel.ssl.namedGroups=X25519MLKEM768,secp256r1 で構成camel.ssl.selfSigned=true)/api/verify-kem エンドポイントは、クロスプロバイダー相互運用テストで JDK 24 のネイティブな javax.crypto.KEM API を実演pqc-ssl-context-jdk21)JDK 27 を待たずに、BouncyCastle の JSSE プロバイダー (BCJSSE) を使用して JDK 21 に PQC TLS サポートをもたらします。
camel.ssl.provider=BCJSSE と camel.ssl.namedGroups=X25519MLKEM768,secp256r1 で構成camel.ssl.selfSigned=true)jdk.tls.disabledAlgorithms から ECDH を削除するためのブートストラップクラスが必要cd 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
3つとも、PQC TLS ハンドシェイクが成功すると "pqcVerified": true を返します。
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 (組み込み) | BouncyCastle TLS ライブラリ | BouncyCastle TLS ライブラリ |
| ネイティブ 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 | TLS での PQC | アプローチ |
|---|
| 21 | なし | あり (BouncyCastle 経由) | pqc-ssl-context-jdk21 - BCJSSE が PQC TLS サポートを提供 |
| 24 | あり (JEP 496) | あり (BouncyCastle 経由) | pqc-kem-jdk24 - TLS 用の BCJSSE。JDK にはネイティブの ML-KEM プリミティブが含まれる |
| 27 | あり | あり (ネイティブ) | pqc-ssl-context - JEP 527 が SunJSSE に PQC を追加 |