Workers 现已支持现代密码学算法

💡 原文英文,约2100词,阅读约需8分钟。
📝

内容提要

Cloudflare Workers 的 Web Crypto 现已支持后量子算法,包括用于密钥封装的 ML-KEM-768/1024 和用于签名的 ML-DSA-44/65/87,并提供 encapsulateBits、getPublicKey 等辅助 API 及 JWK 导入导出。该功能需启用 webcrypto_modern_algorithms 兼容标志,基于 BoringSSL 实现,开发者无需打包额外密码库即可试验后量子协议。

🔎

延伸解读

后量子密码学在 Workers 中的定位

文章强调,此次支持并非完整的后量子迁移方案,而是提供构建模块,让开发者能在 Workers 中试验 ML-KEM 和 ML-DSA。这些算法通过 Web Crypto 原生暴露,避免了打包额外密码库的负担,但协议层(如 HPKE、JWT)仍需自行集成。开发者应将其视为验证集成的起点,而非生产就绪的迁移路径。

兼容标志与算法支持范围

所有新算法均需启用 webcrypto_modern_algorithms 兼容标志,因为规范仍在草案阶段。当前支持 ML-KEM-768/1024 和 ML-DSA-44/65/87,但 ML-KEM-512 因 BoringSSL 未暴露而不支持。文章指出,SHA-3、ChaCha20-Poly1305 等提案中的其他算法尚未实现,未来可能逐步加入。

实际应用与库集成示例

文章展示了使用 panva/jose 库签发 ML-DSA JWT,以及通过 panva/hpke 库利用 ML-KEM 进行 HPKE 加密的代码。这些库可委托运行时执行原生密码操作,减少打包体积。但库作者需检查 SubtleCrypto.supports() 以兼容不同运行时,并注意 ML-DSA 的公钥和签名尺寸显著大于 RSA 或 Ed25519。

实现细节与性能考量

该功能基于 workerd 的 Web Crypto 层,由 BoringSSL 提供底层原语,并添加了 Web 平台测试和 TypeScript 定义。文章提醒,虽然原生集成提升了性能并减少打包,但密钥、签名和密文尺寸增大的现实并未改变,在网络传输或存储时需考虑这一影响。

❓

Q&A

Cloudflare Workers 的 Web Crypto 现在支持哪些后量子算法?

支持 ML-KEM-768 和 ML-KEM-1024 用于密钥封装,以及 ML-DSA-44、ML-DSA-65 和 ML-DSA-87 用于签名。

如何在 Workers 中启用这些后量子算法?

需要在 wrangler.jsonc 中设置兼容标志 webcrypto_modern_algorithms,例如:"compatibility_flags": ["webcrypto_modern_algorithms"]。

Workers 提供了哪些辅助 API 来使用这些后量子算法?

提供了 encapsulateBits()、decapsulateBits()、encapsulateKey()、decapsulateKey()、getPublicKey()、SubtleCrypto.supports() 以及 JWK 导入导出等辅助 API。

ML-KEM 和 ML-DSA 在 Workers 中分别用于什么场景?

ML-KEM 用于密钥封装,生成共享密钥材料,常与 HPKE 等协议结合;ML-DSA 用于数字签名,类似于 Ed25519 或 ECDSA,用于签名和验证数据。

为什么 Workers 要原生支持后量子算法,而不是让开发者自己打包?

因为自行打包会增加应用体积和维护负担,且需要为所有下游库重复工作。原生支持让开发者无需打包额外密码库即可试验后量子协议,并让库可以委托运行时执行操作。

目前 Workers 对后量子算法的支持有哪些限制?

支持仍处于实验阶段,需启用兼容标志;ML-KEM-512 因 BoringSSL 未暴露而不支持;SHA-3、cSHAKE、TurboSHAKE、ChaCha20-Poly1305 和 HPKE 等算法尚未实现;ML-DSA 的公钥和签名尺寸较大。

🏷️

标签

➡️

继续阅读