原文はこちら。
The original article was written by Jamil Nimeh (rincipal Member of Technical Staff, Oracle).
https://inside.java/2026/02/17/tls-post-quantum-hybrid-key-exchange/
JEP 527がJDK 27に組み込まれました!この機能は、TLS 1.3向けにハイブリッド鍵交換アルゴリズムを実装することで、Javaアプリケーションのセキュリティを強化します。
JEP 527: Post-Quantum Hybrid Key Exchange for TLS 1.3
https://openjdk.org/jeps/527
Hybrid key exchange in TLS 1.3
https://datatracker.ietf.org/doc/draft-ietf-tls-hybrid-design
このようなアルゴリズムは、量子耐性のあるアルゴリズムと従来のアルゴリズムを組み合わせることで、将来の量子コンピューティングによる攻撃から防御します。javax.net.sslAPIを使用するアプリケーションは、既存のコードを変更せずに、デフォルトでこれらの改良されたアルゴリズムの恩恵を受けることができます。この機能は、Javaプラットフォームにおけるポスト量子暗号への対応における次のステップとなります。早期アクセスビルドのビルド6以降には、この機能が含まれています。
OpenJDK JDK 27 Early-Access Builds
https://jdk.java.net/27/
従来の鍵交換アルゴリズムのみを使用するTLS 1.3は、Harvest now, decrypt laterという脅威に対して脆弱となる可能性があります。量子耐性のあるML-KEMと従来の楕円曲線アルゴリズムを組み合わせることで、JDKのTLS 1.3実装はこのような攻撃から保護されます。
Harvest now, decrypt later
https://en.wikipedia.org/wiki/Harvest_now%2C_decrypt_later
JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
https://openjdk.org/jeps/496
SunJSSEプロバイダにおいて、ML-KEMとECDHEを組み合わせた3つのアルゴリズムを提供しました:
Post-quantum hybrid ECDHE-MLKEM Key Agreement for TLSv1.3
https://datatracker.ietf.org/doc/draft-ietf-tls-ecdhe-mlkem/
X25519MLKEM768:X25519とML-KEM-768を用いたECDHEを組み合わせたハイブリッド方式SecP256r1MLKEM768:secp256r1曲線を用いたECDHEとML-KEM-768を組み合わせたハイブリッド方式SecP384r1MLKEM1024:secp384r1曲線を用いたECDHEとML-KEM-1024を組み合わせたハイブリッド方式
RFC 7748: Elliptic Curves for Security (X25519)
https://www.rfc-editor.org/rfc/rfc7748
Enabling and Customizing Hybrid Key Exchange Support
デフォルトでは、X25519MLKEM768が、既存の非ハイブリッド鍵交換方式とともに有効になっています。デフォルトの場合、TLSクライアントは2つの鍵交換キーシェア(X25519MLKEM768とx25519)を提供します。ユーザーは、クライアントおよびサーバーでサポートされる鍵交換アルゴリズムのリストをカスタマイズし、サポートされているハイブリッドおよび従来の鍵交換アルゴリズムを任意に組み合わせて含めることができます。これには2つの方法があります:
jdk.tls.namedGroupsシステムプロパティを設定する方法
Java Secure Socket Extension (JSSE) Reference Guide
https://docs.oracle.com/en/java/javase/25/security/java-secure-socket-extension-jsse-reference-guide.html#GUID-4A6ABFE4-6B0E-4DF2-A9E8-EEEB71935293- 以下のコードスニペットに示すように、SSLSocketインスタンスを構成する際に
SSLParameters::setNamedGroupsメソッドを呼び出す方法
SSLSocket tlsSock = (SSLSocket)(SSLContext.getDefault()
.getSocketFactory().createSocket());
SSLParameters params = tlsSock.getSSLParameters();
// Configure the socket to use two hybrid KEM schemes and
// two traditional schemes
params.setNamedGroups(new String[] {
"SecP256r1MLKEM768", "X25519MLKEM768", "secp256r1", "x25519"
});
tlsSock.setSSLParameters(params);
Next Steps
ぜひJDK 27 早期アクセスビルドをダウンロードして、この機能を試してみてください。また、security-devメーリングリスト(登録が必要です)を通じてのご意見・ご感想もお待ちしております。
OpenJDK JDK 27 Early-Access Builds
https://jdk.java.net/27/
security-dev@openjdk.org – openjdk.org
https://mail.openjdk.org/mail/lists/security-dev.openjdk.org/