ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

rustls 后量子混合密钥交换(X25519MLKEM768)的握手性能测量与优化实践

rustls 后量子混合密钥交换(X25519MLKEM768)的握手性能测量与优化实践 网络安全密码学网络【免费下载链接】rustlsA modern TLS library in Rust项目地址https://gitcode.com/gh_mirrors/ru/rustls点击查看免费下载本文基于 rustls 官方性能报告2024-12-17整理系统测量 X25519MLKEM768 这类混合后量子密钥交换给 TLS 1.3 握手带来的额外 CPU 开销并深入讲解一项共享 X25519 setup 成本的客户端优化当同时提供 X25519 与 X25519MLKEM768 两个 key share 时只做一次 X25519 密钥生成避免浪费一半预计算。读完本文你将掌握 rustls 后量子密钥交换的基准结果、HelloRetryRequest的成因与四种规避策略以及该优化在微基准与完整握手两个层面上的量化收益并能定位到仓库中对应的实现代码。为什么需要后量子密钥交换混合算法与威胁模型随着加密相关量子计算机Cryptographically Relevant Quantum Computers可能出现的讨论升温TLS 生态正在向混合hybrid密钥交换算法迁移。混合算法的思路是把两类算法拼接在一起并将整体视为一个 TLS 级别的密钥交换算法一个已大规模部署的经典算法例如X25519RFC 7748一个后量子安全的新算法例如ML-KEMNIST FIPS 203 标准化的 ML-KEM-768两者组合后的 TLS 密钥交换算法例如X25519MLKEM768见 draft-ietf-tls-ecdhe-mlkem。rustls 当前仓库对这套设计的实现可以直接在源码中印证。在 rustls/src/crypto/kx/mod.rs 中X25519MLKEM768的NamedGroup取值为0x11ec见第 563 行并与SECP256R1MLKEM768等组合共同构成了混合密钥交换族的 code point 集合。源码中的HybridLayout结构rustls/src/crypto/kx/mod.rs#L155-L199专门描述了混合 key share 的布局经典密钥共享长度、客户端/服务器后量子密钥共享长度以及后量子元素在前还是在后——例如X25519MLKEM768的后量子元素排在第二个位置。rustls 官方文档 rustls/src/manual/defaults.rs 进一步说明了默认策略X25519MLKEM768在使用 aws-lc-rs provider 时默认就是优先级最高的密钥交换算法它虽属预标准化pre-standardization算法但已被 Chrome、Cloudflare 等广泛部署部署过程中可能出现意外连接失败如 tldr.fail 案例官方欢迎用户上报这类互操作问题其两个组成部分都经过充分审视X25519 本身就是 rustls 默认使用的经典算法ML-KEM-768 则由 NIST 在 FIPS 203 中标准化纯MLKEM768单独也可用但出于保守考量默认不启用。rustls/src/manual/features.rs 的特性清单也将Post-quantum hybrid key exchange with X25519MLKEM768列为当前支持项并注明可经CryptoProvider等公开 API 扩展或调整。首要测量后量子密钥交换的额外成本报告的第一步是量化切换到后量子密钥交换后握手性能付出了多大代价。所有测量都在项目的 amd64 基准机上完成CPU 为 Xeon E-2386G对比三方如下rustls 非后量子 X25519 密钥交换rustls 后量子 X25519MLKEM768 密钥交换OpenSSL 3.3.2 非后量子 X25519 密钥交换。后两者的测量同样基于该硬件其测量方法、复现指令与基准到底测量什么的说明来自 上一份性能报告。作为背景上一份报告rustls 0.23.15 时代的表格数据可以直观体现 rustls 相对 OpenSSL 的握手吞吐余量例如 TLS 1.3 RSA 完整握手服务器侧rustls 为 2544.31 次/秒、OpenSSL 为 1913.38 次/秒TLS 1.3 恢复握手服务器侧rustls 为 9500.11 次/秒、OpenSSL 为 4866.2 次/秒。该报告还给出了可复现的测量命令例如在 rustls 仓库根目录执行BENCH_MULTIPLIER16 setarch -R make -f admin/bench-measure.mk measure对应的 Makefile 位于仓库根目录的 admin/bench-measure.mk。测量结论客户端与服务器两侧的握手结果分别见文首的客户端对比图与下图从结果中可以读出两条关键结论X25519MLKEM768 的额外成本清晰可见对客户端和服务器都是如此后量子密钥交换并非免费rustls 的性能余量几乎可以完全吸收这笔额外成本启用后量子密钥交换的 rustls性能仍优于未启用后量子密钥交换的OpenSSL唯一的例外是**客户端恢复会话client resumption**场景。报告同时给出一个重要提醒后量子密钥交换涉及发送和接收比经典算法大得多的消息而该基准设计只覆盖CPU 成本、不含网络开销因此真实世界的性能会比这些测量结果更差。当 OpenSSL 获得后量子密钥交换支持后rustls 团队计划在这一领域做进一步的对比基准。优化共享 X25519 setup 成本测量的第二部分介绍并验证了一项已经实现的优化其名称即共享 X25519 setup 成本Sharing X25519 setup costs。背景ClientHello 密钥共享与 HelloRetryRequest在 TLS 1.3 中客户端在其第一条消息ClientHello里就启动了密钥交换。ClientHello中既包含客户端支持的算法清单也包含零个或多个预设的密钥共享key shares。服务器随后评估自己愿意使用哪些算法直接选用某个预设 key share或者回复一个HelloRetryRequest指示客户端携带一个特定的、双方都能接受的 key share 重新发送ClientHello。HelloRetryRequest代价高昂因为它给握手引入了额外的一个往返round trip同时意味着客户端为预设 key share 所做的工作全部作废。因此客户端应当尽量避免HelloRetryRequest报告总结了四条可行路径策略说明预先了解服务器偏好draft-ietf-tls-key-share-prediction 正在标准化一种带外学习机制的方案记忆服务器偏好rustls 自 2017 年加入 TLS 1.3 支持起就实现该机制频繁连接同一服务器的客户端通常可避免重复的HelloRetryRequest发送多个预设 key share直接有效但代价是浪费的计算与更大的消息体积跟随生态偏好X25519 凭借其性能与实现质量在 TLS 1.3 实现中占据压倒性首选地位三种密钥共享布局从双共享到共享 X25519纯 X25519MLKEM768 布局下客户端的 key exchange 示意如下hybrid-only 布局但在过渡期内客户端连接的服务器未必升级到了支持 X25519MLKEM768 的版本。为了避免向这类服务器发起HelloRetryRequest往返客户端需要额外再提供一个独立的 X25519 key share于是变成双共享布局hybrid-both 布局报告明确指出这种布局并不理想虽然 X25519 setup 非常快但客户端把它做了两次而且注定要丢掉其中一半——因为服务器最终只能选定一个 key share。优化后的布局则完全不同hybrid-opt 布局优化的核心思想是只生成一次 X25519 密钥对让同一个 X25519 公钥同时充当两个 key share 中的经典组件——它既是独立 X25519 key share 的公钥也是 X25519MLKEM768 key share 里的经典部分。这样无论服务器最终选择哪个 key share客户端的 X25519 私钥都能与之匹配预计算不再有必然作废的一半。该优化方案在 draft-ietf-tls-hybrid-design 第 3.2 节中有进一步描述。从源码结构看rustls/src/crypto/kx/mod.rs 中的HybridLayoutclassical_share_len、post_quantum_client_share_len、post_quantum_server_share_len、post_quantum_first四个字段正是支撑上述拼接逻辑的基础设施收到对端共享后按长度切分出经典与后量子两个分量再分别交给对应的底层算法完成密钥协商。它保证了同一个经典密钥对复用进两个共享在协议消息层面是可表达的。微基准测试构建并序列化 ClientHello为了先隔离优化本身的收益报告对构造并序列化一个ClientHello做了微基准覆盖三种场景仅包含 X25519 key share包含 X25519MLKEM768 与 X25519 两个 key share启用共享 X25519 setup 的优化包含 X25519MLKEM768 与 X25519 两个 key share不启用优化。微基准同时在两台机器上运行覆盖两大 CPU 架构amd64Xeon E-2386G与 aarch64Ampere Altra Q80-30。结果证实了两点预期优化带来小但可测量的收益two machines 上均可复现ML-KEM-768 的密钥生成成本显著高于 X25519这也是为什么省掉一次 X25519 密钥生成值得专门做一次优化。完整握手测量优化在真实场景中的收益微基准只覆盖客户端的第一个消息接下来报告把同样的三种场景放到完整客户端握手中去测量观察优化效应被其余握手计算稀释后的真实表现。该部分测量仅在 amd64 基准机上进行结论是差异可见但很小因为它被握手的其他部分稀释了。量化结果为恢复会话resumption场景约4.3%完整 RSA 握手约2.8%ECDSA 握手约2.6%。也就是说共享 X25519 setup 的优化把收益集中在客户端首条消息上在整个握手的尺度上依然能稳定带来约 3% 4% 的吞吐提升同时彻底消除了双共享布局中必然浪费一半 X25519 预计算的问题。如何在 rustls 中启用与调整后量子密钥交换作为补充背景当前仓库还展示了后量子密钥交换能力在生态中的落地方式。历史上由 rustls-post-quantum 这个独立 crate 提供 ML-KEM 密钥交换包括纯与混合两种变体但自 rustls 0.23.22 起ML-KEM 密钥交换已移入 rustls 主 crate 本身从该版本开始用户可通过 rustls 的prefer-post-quantumfeature 决定是否优先选择 ML-KEM 密钥交换而非非后量子密钥交换。该 crate 的入口实现见 rustls-post-quantum/src/lib.rs。总结这份 2024-12-17 的性能报告给出了后量子时代 TLS 握手优化的一个完整闭环先用控制变量法测出 X25519MLKEM768 相对 X25519 的额外 CPU 成本再针对过渡期必须同时提供两个 key share这一现实约束设计并实现了共享 X25519 setup优化最后分别用微基准和完整握手基准验证收益。最终数据表明即便计入后量子密钥交换的额外开销rustls 在绝大多数场景下仍能保持优于非后量子OpenSSL 的握手性能而共享 X25519 setup 的优化在完整握手上稳定带来约 2.6%4.3% 的吞吐提升。对希望在客户端侧减少HelloRetryRequest往返、平滑迁移到后量子密钥交换的开发者而言这份报告及其配套源码rustls/src/crypto/kx/mod.rs、rustls/src/manual/defaults.rs既是基准依据也是可直接落地的实现参考。赞分享网络安全密码学网络【免费下载链接】rustlsA modern TLS library in Rust项目地址https://gitcode.com/gh_mirrors/ru/rustls点击查看免费下载相关推荐GenForce模型动物园详解50预训练GAN模型一站式获取与使用GenForce模型动物园详解50预训练GAN模型一站式获取与使用 GenForce是一个高效的PyTorch深度学习生成建模库提供了丰富的预训练GAN模cryptography 项目 HPKE混合公钥加密实战指南从 Suite 组合到后量子混合 KEMcryptography 项目 HPKE混合公钥加密实战指南从 Suite 组合到后量子混合 KEM 本篇技术指南以 cryptography 仓库的 H密码学上一篇【亲测免费】 AS-Editor 开源项目使用教程下一篇【亲测免费】 开源项目Atom 文本编辑器安装与使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表