Post-Quantum Hybrid Key Exchange for TLS 1.3

原文はこちら。
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/

  • X25519MLKEM768X25519ML-KEM-768を用いたECDHEを組み合わせたハイブリッド方式
  • SecP256r1MLKEM768secp256r1曲線を用いたECDHEとML-KEM-768を組み合わせたハイブリッド方式
  • SecP384r1MLKEM1024secp384r1曲線を用いた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つの鍵交換キーシェア(X25519MLKEM768x25519)を提供します。ユーザーは、クライアントおよびサーバーでサポートされる鍵交換アルゴリズムのリストをカスタマイズし、サポートされているハイブリッドおよび従来の鍵交換アルゴリズムを任意に組み合わせて含めることができます。これには2つの方法があります:

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/

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください