
Apache Camel을 사용한 포스트퀀텀 암호화(PQC) TLS 1.3 예제: JDK 21(BouncyCastle) 및 JDK 27(네이티브)에서 X25519MLKEM768 하이브리드 키 교환
이 저장소에는 Apache Camel을 사용하여 포스트퀀텀 암호화(PQC) TLS 1.3 핸드셰이크를 시연하는 세 가지 예제가 포함되어 있으며, X25519MLKEM768 하이브리드 키 교환을 사용합니다.
X25519MLKEM768은 기존의 X25519 타원 곡선 Diffie-Hellman과 포스트퀀텀 격자 기반 키 캡슐화 메커니즘인 ML-KEM-768(NIST FIPS 203)을 결합합니다. 두 알고리즘이 함께 실행되므로 하나가 깨지더라도 보안이 유지됩니다.
| 예제 | JDK | TLS 공급자 | 방식 |
|---|---|---|---|
pqc-ssl-context | JDK 27 | SunJSSE(JDK 네이티브) | 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 지원 제공 |
세 예제 모두 camel.ssl.* 속성만으로 구성되며, 포스트퀀텀 키 교환을 위해 X25519MLKEM768을 사용하는 자체 포함(self-contained) 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)BouncyCastle의 JSSE 공급자(BCJSSE)를 사용하여 JDK 27을 기다리지 않고 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
세 예제 모두 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 추가 |