
أمثلة على التشفير ما بعد الكمي (PQC) مع TLS 1.3 باستخدام Apache Camel وتبادل المفاتيح الهجين X25519MLKEM768 على JDK 21 (BouncyCastle) وJDK 27 (أصلي)
يحتوي هذا المستودع على ثلاثة أمثلة توضح عمليات مصافحة TLS 1.3 بالتشفير ما بعد الكم (PQC) مع Apache Camel، باستخدام تبادل المفاتيح الهجين X25519MLKEM768.
يجمع X25519MLKEM768 بين خوارزمية X25519 الكلاسيكية لتبادل مفاتيح Diffie-Hellman على المنحنيات الإهليلجية و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 لـ TLS ما بعد الكم، مع بدائيات ML-KEM أصلية في JDK عبر JEP 496 |
pqc-ssl-context-jdk21 | JDK 21 | BouncyCastle JSSE 1.83 | يستبدل BCJSSE مزود SunJSSE لتوفير دعم TLS ما بعد الكم اليوم |
تم ضبط الأمثلة الثلاثة بالكامل عبر خصائص camel.ssl.* وتنفذ مصافحة TLS 1.3 قائمة بذاتها باستخدام X25519MLKEM768 لتبادل المفاتيح ما بعد الكم، مع التحقق منها عند بدء التشغيل وإتاحتها عند الطلب عبر نقاط نهاية REST.
pqc-ssl-context)يستخدم مزود SunJSSE المدمج في JDK، الذي يكتسب دعم TLS ما بعد الكم عبر JEP 527 في JDK 27.
camel.ssl.namedGroups=X25519MLKEM768,x25519camel.ssl.selfSigned=true)SSLParameters.setNamedGroups() (واجهة برمجة JDK قياسية)pqc-kem-jdk24)يستخدم مزود JSSE الخاص بـ BouncyCastle (BCJSSE) لجلب دعم 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 واجهة برمجة javax.crypto.KEM الأصلية في JDK 24 مع اختبارات التوافق البيني بين المزوداتpqc-ssl-context-jdk21)يستخدم مزود JSSE الخاص بـ BouncyCastle (BCJSSE) لجلب دعم 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 عند نجاح مصافحة 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 أصلي (API KEM) | نعم | نعم (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 | API KEM الخاص بـ ML-KEM | PQC في TLS | النهج |
|---|
| 21 | لا | نعم (عبر BouncyCastle) | pqc-ssl-context-jdk21 - يوفر BCJSSE دعم TLS ما بعد الكم |
| 24 | نعم (JEP 496) | نعم (عبر BouncyCastle) | pqc-kem-jdk24 - BCJSSE لـ TLS، مع بدائيات ML-KEM أصلية في JDK |
| 27 | نعم | نعم (أصلي) | pqc-ssl-context - يضيف JEP 527 دعم PQC إلى SunJSSE |