news 2026/8/23 12:21:07

Marvin攻击深度复盘:RustCrypto RSA库RUSTSEC-2023-0071漏洞与marvin-toolkit复现指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Marvin攻击深度复盘:RustCrypto RSA库RUSTSEC-2023-0071漏洞与marvin-toolkit复现指南

Marvin攻击深度复盘:RustCrypto RSA库RUSTSEC-2023-0071漏洞与marvin-toolkit复现指南

【免费下载链接】RSARSA implementation in pure Rust项目地址: https://gitcode.com/gh_mirrors/rsa1/RSA

本文围绕RustCrypto RSA 库(一个纯 Rust 实现的 RSA 公钥加密算法库)展开,完整复盘 2023 年被披露的Marvin 攻击(对应安全公告RUSTSEC-2023-0071),并手把手讲解如何使用项目内置的marvin-toolkit一键复现这次远程私钥恢复攻击。即使你是加密新手,也能看懂每一步在做什么。🔐

一、Marvin 攻击:一个"只看时间"就能偷私钥的远程攻击

Marvin 攻击(Marvin Attack)是 2023 年曝光的一类针对 RSA + PKCS#1 v1.5 填充方案的远程定时侧信道攻击。它的可怕之处在于:

要素说明
攻击者位置网络对面,无需接触服务器
攻击手段观察每次 RSA 解密操作的耗时差异
攻击目标恢复 RSA 私钥、恢复明文、伪造签名
攻击成本收集数十万至数百万次解密耗时样本

攻击原理可以概括为两步:

  1. 定时泄露:RSA 私钥运算的核心是模幂运算。如果运算时间随输入数据"波动",泄露的信息量就会累积。
  2. 填充校验放大:PKCS#1 v1.5 解密流程会先做模幂、再校验填充格式(首字节是否为 0x02 等)。校验通过与否、提前返回与否,会让"有效密文"与"无效密文"的耗时产生可统计的差别,攻击者据此逐比特逼近私钥。

RustCrypto RSA 库此前使用**随机掩蔽(RSA blinding)**来掩盖定时泄露,但研究表明这种手段在 Marvin 攻击面前并不足以完全防御,因此在 RUSTSEC-2023-0071 公告中被标记为受影响。

二、漏洞在库中的位置:从源码看解密路径

要理解漏洞,先看库内 PKCS#1 v1.5 解密的核心链路(相关源码文件):

  • src/pkcs1v15.rs:定义Pkcs1v15Encrypt填充方案,decrypt函数注释中明确写道——"是否返回错误会泄露秘密信息,若攻击者能反复触发并观察错误,就能像持有私钥一样解密和伪造签名"。
  • src/algorithms/rsa.rs:实现rsa_decryptrsa_encrypt,其中模幂运算采用非常数时间的实现,并通过可选的rng参数启用 RSA blinding。
  • src/pkcs1v15/decrypting_key.rs:面向用户的DecryptingKey解密入口。

主 README(README.md)的"Security Warning"章节也直接承认:本 crate 受到 Marvin 攻击影响,可能让网络攻击者恢复私钥,并引导读者查看官方修复进展。这正是 RUSTSEC-2023-0071 的落点。

三、marvin-toolkit 复现指南:一条命令搭建攻击实验

项目内置了marvin-toolkit/目录(含Dockerfileentrypoint.shREADME.md),把整条攻击流水线封装成了 Docker 镜像,保证结果可复现。🐳

3.1 构建镜像

cd marvin-toolkit docker build -t marvin:latest .

镜像基于 Python 3.12 + Rust 工具链,构建时会自动准备 Marvin 攻击分析所需的脚本环境(见marvin-toolkit/Dockerfile)。

3.2 运行分析

# 创建输出目录并允许容器写入 mkdir -p outputs chmod a+rw outputs # 启动攻击分析(默认 RSA-2048,重复 10 万次) docker run -d --rm \ --name marvin \ -v $(pwd)/outputs:/home/rustcrypto/marvin-toolkit/outputs \ marvin:latest

运行过程可以用docker logs -f marvin实时跟踪,结束后读取结论:

cat outputs/results/report.txt

3.3 调节两个核心参数

marvin-toolkit/entrypoint.sh支持两个命令行参数(docker run ... marvin:latest -h可查看全部帮助):

参数含义默认值可选值
-sRSA 密钥长度20481024 / 2048 / 4096
-n密文重复生成次数(越大置信度越高,耗时越长)100000任意正整数

例如用 RSA-4096 做 100 万次重复的分析:

docker run -d --rm --name marvin marvin:latest -s 4096 -n 1000000

3.4 容器内部在做什么?

entrypoint.sh把攻击拆成四个阶段,理解它就理解了 Marvin 攻击的完整闭环:

  1. 生成密钥:用 OpenSSL 生成 RSA 1024/2048/4096 私钥(PKCS#8 PEM 等格式)并自签名证书;
  2. 批量构造密文:用step2.py按 Marvin 攻击论文中的模板,生成带特殊填充结构的密文(如valid_repeated_byte_payloadzero_byte_in_padding等畸形构造);
  3. 采集解密耗时:编译 Rust 测试程序(默认使用rsa = 0.9),对每份密文执行rsa_decrypt_and_check并记录原始耗时到raw_times.csv
  4. 统计分析:用extract.py归一化耗时,再用analysis.py做统计检验,最终输出report.txt结论——能否据此恢复私钥。

分析产物(密钥、密文、报告)统一拷贝到容器的outputs目录,配合上面-v挂载即可保留到宿主机。

💡 小技巧:测试程序在容器运行时才编译,因此可以在运行时挂载自定义Cargo.toml,把分析对象换成任意版本的 RSA 库,例如:docker run -d --rm --name marvin -v $(pwd)/Cargo.toml:/home/rustcrypto/marvin-toolkit/example/rust-crypto/Cargo.toml marvin:latest

四、给开发者的防护建议

  • 优先改用 OAEP 或 PSS:库文档在src/pkcs1v15.rs顶部就明确建议——除非兼容性必须,否则不要使用 PKCS#1 v1.5。
  • 关注官方修复:跟踪CHANGELOG.md与 README 中指向的安全问题进展,及时升级版本。
  • 部署层面:对暴露 RSA 解密的服务(如 TLS 握手、API 密钥交换)增加限流、监控解密耗时异常,降低攻击者采集样本的能力。
  • 验证手段:像marvin-toolkit/这样可复现的定时分析工具,可以作为你自己加密服务上线前的"体检"手段。🩺

五、延伸阅读(项目内文件索引)

文件作用
marvin-toolkit/README.mdMarvin 攻击复现完整操作手册
marvin-toolkit/Dockerfile分析容器构建脚本
marvin-toolkit/entrypoint.sh密钥生成→密文构造→解密计时→统计分析流水线
src/pkcs1v15.rsPKCS#1 v1.5 加解密与签名实现
src/algorithms/rsa.rs底层模幂与 RSA blinding 实现
src/algorithms/pad.rs填充/去填充工具函数
README.md安全警告与漏洞说明

Marvin 攻击的意义在于:它把"侧信道"从机房内部搬到了网络对端。任何依赖 PKCS#1 v1.5 解密的系统都值得用 marvin-toolkit 跑一次自我检验——花几十分钟复现一次攻击,胜过事后被攻击一次。

如需完整代码,可克隆仓库:git clone https://gitcode.com/gh_mirrors/rsa1/RSA

【免费下载链接】RSARSA implementation in pure Rust项目地址: https://gitcode.com/gh_mirrors/rsa1/RSA

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 12:18:58

企业自主招聘系统开发:技术选型与实现详解

1. 项目背景与核心价值 这个企业自主招聘系统项目是计算机专业毕业设计的典型选题,也是当前企业数字化转型过程中的刚需解决方案。我在人力资源管理系统开发领域有过多年的实战经验,可以明确地说,一个设计良好的自主招聘系统能够将企业平均招…

作者头像 李华
网站建设 2026/8/23 12:15:47

猫抓资源嗅探完整指南:五分钟搞定网页媒体下载

猫抓资源嗅探完整指南:五分钟搞定网页媒体下载 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 看在线教程想离线保存,却找不…

作者头像 李华