【Rust日报】2026-10-22 有张中间证书私钥是数字 4
内容提要
eMudhra八张中间CA证书因私钥熵极低(仅3–8位)可被还原,各根程序已屏蔽并吊销;Rust生态发布rustls-webpki等修复版本。Linux 7.4将合入约1.7万行Rust代码,主要因Zerocopy升级。Google公开内部Rust风格指南,强调避免Rc/Arc、glob导入和panic。Collabora介绍Rust编写的Mali驱动Tyr已在Linux 7.3启动GPU固件。
延伸解读
低熵私钥的波及范围为何超出浏览器
文章指出,这8张中间CA证书的私钥熵仅3到8位,可被直接还原。虽然Firefox、Chrome等强制CT的浏览器在证书签发时未记录CT日志,因而当时无法被利用,但不少浏览器以外的客户端不强制CT,攻击者是否已利用尚不清楚。Filippo Valsorda认为清理规模可能超过Heartbleed,长尾涉及物联网设备、Docker容器、遗忘的Linux机器和自带根证书副本的命令行工具。
Rust生态的修复路径与依赖链
Rust侧修复集中在rustls-webpki和webpki-roots/webpki-root-certs。RUSTSEC-2026-0382公告称,受影响版本在信任锚允许时可能接受包含这些已不受信任emSign中间公钥的证书路径,0.103.16和0.104.0-alpha.8会拒绝这些公钥。rustup 1.29.2只更新这两个crate,已安装rustup的用户可执行rustup self update,普通rustup update结束时也会自动更新rustup。由于reqwest依赖这些crate,影响
Linux 7.4的Rust增量主要来自依赖升级
报道称Linux 7.4将合入约1.7万行Rust代码,但增量主要因为vendored的Zerocopy一次跳了8个版本,同时更新了内核里的其他Rust crate。评论提到,从v7.3起新增约2.9万行,合计约22万行,约占内核代码0.5%,其中约8.1万行来自vendored crate。这说明行数增长不完全等同于内核自身Rust代码的扩张,阅读时需区分第三方依赖与内核原生代码。
Google风格指南的取舍反映大规模代码库需求
Google内部Rust风格指南把格式、API设计和实现设计都纳入style,目标之一是让跨代码库的Large-Scale Changes更容易做。因此它给出与常见开源仓库不同的规则:同一个crate的源文件放在同一目录、避免glob import、避免Rc和Arc、Chromium里不用async/.await、库代码API规则强制而应用代码强建议、完全避免panic并用Result报告。这些规则服务于google3、Android、ChromeOS、Fuchsia和Chrome等场景,不一定适合所有项目。
Q&A
eMudhra 中间证书私钥泄露是怎么回事?私钥为什么能被还原?
eMudhra 有 8 张中间 CA 证书的私钥生成方式有误,熵只有 3 到 8 位,私钥整数分别是 4、56、66、115、155、156、230、237,因此任何人都可以从证书里还原私钥。这些证书创建于 2025 年 4 月,链到 Mozilla、Microsoft、Apple 和 Chrome 根程序信任的根。报告人 Wayne 在 2026 年 10 月 17 日用每张中间证书的私钥对消息做了签名并报告给各根程序团队。
这次 eMudhra 证书问题对 Rust 生态有什么影响?需要升级哪些 crate?
Rust 侧发布了修复版本。RUSTSEC-2026-0382(CVE-2026-111943)涉及 rustls-webpki,受影响版本可能接受包含这些已不受信任 emSign 中间公钥的证书路径,0.103.16 和 0.104.0-alpha.8 会拒绝这些公钥。webpki-roots / webpki-root-certs 的修复版本是 1.0.10。rustup 1.29.2 只更新 rustls-webpki 和 webpki-root-certs 来处理同一问题,可执行 rustup self update 更新。reqwest 依赖这些 crate。
Linux 7.4 合入的约 1.7 万行 Rust 代码主要来自哪里?
这次拉取请求由 Miguel Ojeda 发出,增量约 1.7 万行,主要因为 vendored 的 Zerocopy 一次跳了 8 个版本,同时更新了内核里的其他 Rust crate。Zerocopy 提供 trait 和宏,用于在原始字节序列和结构化类型之间做安全转换。此外还启用不稳定特性 proc_macro_span 以改善过程宏诊断,内核 Rust crate 新增 mem 和 ratelimit 模块,pin-init 增加元组结构体支持并允许安全创建自引用。
Google 内部 Rust 风格指南有哪些和常见开源仓库不同的规则?
指南中的 style 同时包括格式、API 设计和实现设计,适用于 google3、Android、ChromeOS、Fuchsia 和 Chrome。主要差异包括:rust_library 的源文件放在同一个目录,不用子目录组织同一个 crate;不要使用 glob import(有少数例外);避免 Rc 和 Arc;Chromium 里不要使用 async / .await,也不要通过 Rust 标准库新建线程,优先使用 sequence;不要仅仅为了组织代码而定义 trait;要完全避免 panic,即使不变量被破坏也用 Result 报告,不使用 unwrap,必须 panic 时用 expect 写明原因,不要调用 panic::catch_unwind。
Tyr 驱动在 Linux 7.3 中实现了什么功能?它依赖哪些 Rust 抽象?
Tyr 是 Arm Mali-G610 的 Linux 内核 GPU 驱动,用 Rust 移植已有的 C 驱动 Panthor,对用户空间保持透明。v7.3 合入的提交让 Tyr 可以启动 GPU 的 MCU,从而和 GPU 通信,为此需要虚拟地址空间、映射方法以及可靠配置 GPU 的 MMU。Tyr 依赖三组 Rust 抽象:DRM GEM 共享内存 helper、页表管理、GPUVM。上游 Tyr 目前大约 3700 行,其中 6 行使用 unsafe。
eMudhra 问题证书被哪些平台屏蔽和吊销?不读取吊销信息的客户端怎么办?
Firefox 和 Chrome 从 2026 年 10 月 17 日起屏蔽这些证书,Apple 设备从 10 月 19 日起,Microsoft 平台从 10 月 20 日起。CA 也已经吊销这些中间证书。许多不读取吊销信息的客户端需要软件更新。由于这些中间证书在创建时没有证书透明度日志记录,强制执行 CT 的浏览器当时无法被这种密钥用来攻击,但不少浏览器以外的客户端不强制 CT,目前不知道攻击者是否已经用这个缺陷打过这些客户端。