将脚本之家 设为“星标⭐”第一时间收到文章更新
来源 | xxy开源 (ID:xxyopen)
就在最近,OpenJDK 更新了 JEP 527[1] 的状态,将其标记为 Proposed to Target: JDK 27,这意味着 JDK 27 可能将率先引入对“后量子 TLS”的官方支持。
Java 的默认 TLS 通信,开始为量子计算时代做准备了。
当前互联网广泛使用的公钥密码体系(如RSA、ECDH / ECDHE)在 大规模量子计算机 面前,都存在被有效破解的理论可能。
更现实的问题是一个被称为 Harvest Now, Decrypt Later(现在收集,将来解密)的攻击模型。
攻击者今天就可以:
•大规模监听并保存加密通信•等量子计算机成熟•回头再解密历史数据
这意味着:
即便量子计算机还没出现,今天的 TLS 数据已经不安全了。
但是完全切换到新的抗量子算法风险极高,因为:
•新算法缺乏几十年的安全验证•工程实现尚不成熟•性能、互操作性仍在评估中
Java 的解决思路是 混合密钥交换(Hybrid Key Exchange)。
核心思想其实很简单:
同时使用
•一个传统算法(如 ECDHE)•一个抗量子算法(如 ML-KEM)
只要其中一个算法是安全的,整体就是安全的。
这是当前 TLS 1.3 抵御量子攻击的主流方案。
JEP 527 的目标非常明确:
为 Java 的 TLS 1.3 实现,引入后量子混合密钥交换算法,且对现有应用“零代码修改”生效。
关键点一:仅作用于 TLS 1.3
•不影响 TLS 1.2 及更早版本•不扩展到 javax.net.ssl 之外的 API•聚焦、安全、可控
关键点二:引入 3 种混合密钥交换组(Named Groups)
1. X25519MLKEM768
•ECDHE:X25519•抗量子算法:ML-KEM-768•默认首选,性能最好
2. SecP256r1MLKEM768
•ECDHE:secp256r1•抗量子算法:ML-KEM-768
3. SecP384r1MLKEM1024
•ECDHE:secp384r1•抗量子算法:ML-KEM-1024
这些名称与 IANA TLS Named Groups 完全一致。
真正重要的一点是 无需任何代码改动,在 TLS 1.3 握手阶段,JDK 27 将默认按如下顺序声明支持的密钥交换组(Named Groups):
•X25519MLKEM768,•x25519,•secp256r1,•secp384r1,•secp521r1,•x448,•ffdhe2048,•ffdhe3072,•ffdhe4096,•ffdhe6144,•ffdhe8192
也就是说:
只要你的代码没有手动限制 Named Groups,就会自动优先尝试后量子混合密钥交换。
这对现有 Java 应用来说是一个 无感升级。
如果你希望更精细地控制 TLS 使用的密钥交换方案,JDK 27 提供了两种手动配置方式。
方式一:系统属性
java -Djdk.tls.namedGroups=SecP256r1MLKEM768,X25519MLKEM768,secp256r1,x25519
方式二:代码级控制(SSLParameters)
SSLSocket tlsSock = (SSLSocket)(SSLContext.getDefault() .getSocketFactory().createSocket());SSLParameters params = tlsSock.getSSLParameters();params.setNamedGroups(new String[] { "SecP256r1MLKEM768", "X25519MLKEM768", "secp256r1", "x25519"});tlsSock.setSSLParameters(params);
值得说明的是这并不是 Java “临时起意”,Java 在过去几个版本中,已经提前铺好了路:
•Java 21(JEP 452):引入 KEM API•Java 24(JEP 496):引入 ML-KEM 算法
JEP 527 本质上是:
把已经存在的密码学能力,真正用在 TLS 上。
这是 Java 平台对 后量子密码体系 的一次系统性推进。
References
[1] JEP 527: https://openjdk.org/jeps/527