Workers 现已支持现代密码学算法
内容提要
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 的公钥和签名尺寸较大。