后量子密码迁移将给Java代码库带来多少成本?
后量子密码的过渡已经不再是一个研究课题,而变成了一系列的截止日期。NIST 在 2024 年 8 月最终确定了 ML-KEM (FIPS 203)、ML-DSA (FIPS 204) 和 SLH-DSA (FIPS 205)。NIST IR 8547 规定 RSA、ECDSA、(EC)DH 及其他算法在 2030 年后弃用,2035 年后禁止使用,其他国家的政府指南中也出现了类似的时间表。
所以目的地已经明确。对大多数 Java 团队来说,困难的问题不是迁移到什么,而是迁移的成本是多少,针对他们特定的代码库,以及昂贵的部分隐藏在哪里。这个问题一直很难回答,而且我能找到的大多数后量子迁移工具都针对 C、C++ 和 Rust,尽管大量企业级密码学运行在 JVM 上。
我构建了一个开源工具来为 Java 回答这个问题,然后我在整个生态系统中运行了它。本文介绍它发现了什么,以及它看不到什么。
从清单到工作量估算
现有的加密扫描器会告诉你代码库使用了哪些算法。这是一个必要的清单,但它不能告诉你迁移需要什么。两个代码库可能各自进行了一百次 RSA 调用,但迁移工作量可能相差一周,因为成本不在调用点。而在它们周围的代码中:为 256 字节 RSA 签名调整大小的缓冲区、方法签名类型为 RSAPublicKey 而不是 PublicKey、假定经典大小的密钥存储和线路格式。
pqc-migration-readiness (Apache-2.0) 是一个静态审计器,可读取 Java 源代码,无需构建和类路径,它做三件事:
- 检测量子脆弱的 JCA 使用:对 RSA、DSA、EC 和 Diffie-Hellman 的
Cipher、KeyPairGenerator、KeyFactory、KeyAgreement和Signature调用。 - 评分难度,同时考虑原始调用点和结构性脆弱指标:具体密钥类型耦合、固定大小缓冲区、固定 TLS 版本和持久化密钥材料。评分权重在任何工作量数据收集之前就已固定,这是本研究的关键。
- 规划:它为扫描的代码库生成有序的迁移计划,每个步骤都有工程师时间范围,并生成 JSON 和 SARIF,以便发现结果出现在 GitHub 代码扫描中。
它在中型项目上运行只需几秒钟:
它生成的 Markdown 报告的第一屏(这里是 Eclipse Californium 3.14.0)就是迁移计划:
[LOADING...]
这些构件也在 Maven Central 上,位于 io.github.arpan0995 下,因此你可以将库添加到构建中,或运行捆绑的 Maven 插件,而无需下载 jar。
在 27 个项目中的发现
我在 27 个广泛使用的开源 Java 项目的最新版本上运行了审计器(版本 1.4.0,在 JDK 21 上):安全和身份框架、Web 服务器、HTTP 客户端、消息系统和协议库。以下是按单个工程师预估工作量排名前 12 的项目;完整排名在仓库中,包括那些结果为干净的项目。
工作量列是审计器为单个工程师给出的范围,其单位随规模变化,因此请关注排序而非单位。两个模式很突出。
首先,几乎在所有地方,主要成本都是具体密钥类型耦合,而不是算法调用本身。针对 RSAPublicKey 或 ECPrivateKey 编写的方法签名、字段和强制转换中的代码,必须扩展为 PublicKey 和 PrivateKey,或一个不透明句柄,然后后量子密钥才能流经它。在成熟的库中,API 变动(而不是 getInstance 替换)才是工作量的主体。
其次,数字高通常不是指责。jjwt 显示 193 个发现,因为它是一个 JOSE 库:它本来就应该了解每种密钥类型,因此计数衡量的是新算法必须贯穿的表面,而不是草率的代码。另一方面,Apache Shiro 和 Apache PDFBox 返回干净,因为它们将非对称加密留给 JDK、Bouncy Castle 及其集成。当我发布结果时,一位 Shiro 提交者证实了这一点。
估算在何处坦诚自身局限
像这样的工具只有告诉你它没有测量什么时才有用。阅读表格时,三个限制很重要。
工作量数字是启发式的,不是经过验证的预测。 它们通过一个声明的规划时间模型随难度分数缩放。通过将分数与测量的迁移工作量关联,将它们转化为经过验证的预测,是一个开放的研究问题,这也是整个项目公开的原因。
通过配置或包装 API 选择的算法是不可见的。 扫描读取的是源代码,而不是运行时装配。从属性文件选择算法的项目,或位于框架抽象之后的项目,看起来会比实际更轻。当我发布 Quarkus 扫描时,一位 Quarkus 维护者指出,真正的工作还存在于源代码扫描永远看不到的 Vert.x、Netty 和 Elytron 调用点中。这是正确的批评,也是为什么这个数字是一个下限。
通过注册表或枚举路由的算法名称会被遗漏。 jjwt 是鲜明的例子:审计器报告其调用点为零,因为它的签名流经算法注册表,而不是字面的 getInstance("SHA256withRSA") 调用,尽管它自始至终使用 RSA 和 ECDSA。193 个发现都是结构性耦合;调用点被隐藏了。教扫描器跟踪注册表是一个已跟踪的问题。
这些都不使排名无用。它使其成为一个具有已知形状的下限,这比一个自信的单一数字要诚实得多。
在你自己的代码上运行它
尝试它的最快方式是使用 GitHub Codespace:打开仓库,开发容器会构建审计器并检出一个示例项目。然后对捆绑的研究或你自己的代码树运行扫描:
对于 CI,上传 SARIF 报告,发现结果就会在拉取请求中显示为代码扫描警报。
帮助验证它
最有用的回应是公开提出异议。如果你在你知道的代码库上运行它,而排名与现实不符,那正是项目需要的信号,并且有一个讨论线程用于扫描结果。如果你已经将 Java 系统迁移到混合或后量子算法,该工作的提交历史是真实的工作量数据,这正是将启发式转化为可测量事物的东西。
截止日期是固定的,目的地是已知的。每个 Java 团队仍然需要对未来迁移工作量的可信的基于代码库的估算,由数据支持而不是直觉。这就是这个项目试图填补的空白,而且随着更多人关注,它会更快地填补。
如果你觉得 PQC Migration Readiness 有趣,在仓库上加星可以帮助其他从事 Java PQC 迁移的人找到它 ⭐ https://github.com/Arpan0995/pqc-migration-readiness
分享此页面
- Bluesky
- Mastodon
- Hacker News
- 复制链接
- 分享...
发现错误,或有补充?在 GitHub 上编辑此页面
[LOADING...]
作者:
Arpan Sharma
Arpan Sharma 从事 JVM 的后量子密码学工作,并构建了 pqc-migration-readiness,这是一个开源审计器,用于估算后量子迁移对 Java 代码库的成本。Arpan 还为开源密码学库做出贡献,...