Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
RAMnesia-Attack — 针对硬件漏洞(CVE-2025-6202、CVE-2023-39910)的科学调查,通过Rowhammer和DRAM中间人攻击,能够从比特币基础设施中恢复ECDSA密钥。 | Kitploit
工具/GitHubGitHub/demining/ramnesia-attack
嵌入式系统安全内存取证漏洞分析漏洞利用取证分析密码学渗透测试硬件安全二进制分析论文与研究学习与教育
GitHub
167个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
demining/ramnesia-attack

RAMnesia-Attack

针对硬件漏洞(CVE-2025-6202、CVE-2023-39910)的科学调查,通过Rowhammer和DRAM中间人攻击,能够从比特币基础设施中恢复ECDSA密钥。

查看仓库网站
RAMnesia Attack: 对比特币基础设施的WireTap威胁、硬件漏洞(CVE-2025-6202、CVE-2023-39910)以及ECDSA密钥恢复密码分析方法的科学研究

本研究对使用DDR5内存的现代计算机系统的硬件内存上的两类关键攻击进行了全面分析:  Phoenix Rowhammer攻击(CVE-2025-6202)  和  RAMnesia攻击(CVE-2023-39910) 。这两种攻击都展示了加密材料处理与存储中的基本漏洞,为恢复比特币钱包私钥创造了前所未有的利用途径。该研究整合了对可信执行环境(TEE)攻击的分析结果,包括Intel SGX、AMD SEV-SNP和NVIDIA Confidential Computing,这些攻击在2025年10月披露的WireTap和TEE.fail攻击中得以展示。比特币加密货币生态系统的安全性基于一个基本假设:使用secp256k1曲线的椭圆曲线密码学(ECDSA)系统无法提取私钥。然而,苏黎世联邦理工学院研究人员与Google工程师合作开展的最新硬件安全研究,以及佐治亚理工学院和普渡大学研究小组的研究表明,这一假设并非通过针对ECDSA数学基础的密码分析攻击被打破,而是通过利用内存管理中的物理和软件漏洞被攻破。

2025年10月,科学界面临一系列影响Intel、AMD和NVIDIA的可信执行环境(TEE)技术的严重漏洞的披露。  WireTap  和  TEE.fail 攻击对使用基于Intel SGX(软件保护扩展)及相关技术的硬件安全模块的区块链基础设施的密码安全性构成了根本性威胁。这些发现为了解现代加密货币基础设施易受攻击的威胁的系统性本质提供了关键背景。

科学分类:  DRAM总线被动中间人攻击与确定性加密利用——利用确定性内存加密预言机对可信执行环境的物理侧信道攻击。


RAMnesia Attack: 对比特币基础设施的WireTap威胁、硬件漏洞(CVE-2025-6202、CVE-2023-39910)以及ECDSA密钥恢复密码分析方法的科学研究
  • 教程: https://youtu.be/R5EyfGm-nDg
  • 教程: https://cryptodeeptech.ru/ramnesia-attack
  • 教程: https://dzen.ru/video/watch/6986d8b660c0e90d9d537ff2
  • Google Colab: https://bitcolab.ru/privkeyroot-specialized-recovery-software

针对密码系统的硬件攻击的演进

Phoenix Rowhammer是经典物理内存攻击的演进,它利用DRAM单元之间的电磁干扰,在包含ECDSA随机数值的关键内存区域中诱发受控的比特翻转。Rowhammer是  现代DRAM芯片中的一种硬件缺陷 ,即重复访问特定内存行(称为“锤击”)会导致电磁干扰,从而在物理相邻的内存行中引发比特反转。这种效应是由于内存单元不断缩小的工艺尺寸和日益增加的晶体管密度造成的,使得现代DDR5芯片更容易受到相邻单元之间的电气干扰。

RAMnesia攻击  则侧重于利用密码库中的内存管理缺陷,即私钥和助记词在密码操作完成后仍保留在未清除的RAM缓冲区中。关键漏洞  CVE-2023-39910 ,也称为  “Milk Sad”,存在于 libbitcoin Explorer 库中 ,导致数千个比特币钱包被攻破,超过  900,000美元 的资金被盗。

与可信执行环境攻击的关联

WireTap攻击利用了Intel SGX确定性内存加密引擎的一个基本架构漏洞,该引擎使用AES-XTS(高级加密标准——基于XEX的调整密码本模式与密文窃取)算法。确定性意味着写入同一物理内存地址的相同数据始终会产生相同的密文。这一特性使得攻击者能够构建一个密码学预言机来恢复秘密密钥。

研究人员开发了一种被动的DIMM(双列直插式内存模块)中介板,物理安装在处理器和DDR4/DDR5内存模块之间。该设备由现成的第三方组件构成:一个DIMM转接板、镊子和一把烙铁。关键的创新在于通过修改DIMM元数据来降低高速内存总线的速度,从而允许使用老旧且廉价逻辑分析仪来捕获流量。该硬件成本  低于50美元 ,使得该攻击对广泛范围的攻击者而言皆可实施。

关键结论:  硬件漏洞对比特币构成的威胁比理论上的量子攻击更为直接。根据研究,未来十年内对ECDSA-256成功实施量子攻击的概率约为31%,而Phoenix Rowhammer和RAMnesia攻击已能以最小代价实现。对于部分随机数泄漏的情况  ,使用  基于格的  攻击和  隐藏数问题(HNP) 求解算法。研究表明,通过格攻击成功恢复密钥需要  500到2100个签名  ,具体取决于受损随机数比特的数量。一项CISPA研究(2018年)表明,ECDSA随机数重用是  比特币 生态系统中一个  反复出现的问题 。攻击者通过利用随机数重用成功提取了  412.80 BTC  (峰值时约330万美元)。Kudelski Security的研究人员使用窗口大小为N=5的滑动窗口攻击,在一台128核虚拟机上,以约285美元的成本,在2天19小时内攻破了  762个独特的钱包 。


RAMnesia Attack: 对比特币基础设施及硬件漏洞CVE-2025-6202、CVE-2023-39910的WireTap威胁以及ECDSA密钥恢复密码分析方法的科学研究

漏洞技术参数

1. Phoenix Rowhammer攻击(CVE-2025-6202)

DDR5内存制造商已实施多层针对Rowhammer攻击的防护措施:纠错码(ECC)和目标行刷新(TRR)。然而,研究人员发现了TRR实现中的一个关键漏洞:保护机制未能监控特定的刷新间隔,从而产生了可利用的盲区。Phoenix使用一种  称为自校正同步  的技术,允许攻击者通过与tREFI(刷新间隔)同步,自动检测并补偿缺失的内存刷新周期。


2. RAMnesia攻击 / Milk Sad(CVE-2023-39910)

该漏洞源于使用弱的Mersenne Twister mt19937伪随机数生成器(PRNG),其内部熵限制为  32位  ,与设置无关。这使得远程攻击者能够恢复从“bx seed”命令熵输出生成的任何钱包私钥。


3. 针对可信执行环境的攻击

攻击

TEE.fail攻击于2025年10月下旬披露,是针对DDR5内存系统的WireTap方法的演进。与其在前代DDR4平台上运行的攻击不同,TEE.fail能够攻破最新的机密计算技术,包括第4代和第5代Intel Xeon Scalable以及Intel Xeon 6处理器上的Intel TDX(可信域扩展)。


对区块链基础设施的影响

加密货币项目的受损情况

Secret Network ,一个使用Intel SGX实现机密智能合约的Layer 1区块链平台,被发现极易受到WireTap攻击。研究人员演示了提取整个网络的  共识种子  (主解密密钥)。损害共识种子允许自区块链启动以来追溯披露Secret Network上的所有私有交易。

Phala Network ,一个基于SGX的去中心化云计算平台,凭借其许可型守护者模型,展示出更具韧性的架构。为应对WireTap的披露,Phala Network宣布战略性地迁移至Intel TDX和NVIDIA Confidential Computing。

Crust Network ,一个使用SGX验证存储证明的去中心化区块链数据存储系统,已被证明易受完整性攻击。攻击者可以使用受损的证明密钥伪造存储证明。

实际攻击案例

2025年8月,土耳其加密货币交易所  BtcTurk  在发生  4900万美元 热钱包受损事件后暂停运营。PeckShield研究人员怀疑是私钥泄漏。虽然具体攻击向量尚未确认,但该事件表明了密钥提取威胁的持续相关性。

STRM(2018年)研究发现  123笔易受攻击的交易  并恢复  416个私钥 ,可能总共危及  26.85729198 BTC  (研究时约166,219美元)。


RAMnesia Attack: 对比特币基础设施的WireTap威胁、硬件漏洞(CVE-2025-6202、CVE-2023-39910)以及ECDSA密钥恢复密码分析方法的科学研究
root@kitploit:~
https://www.youtube.com/watch?v=FwpuvB_Xtx0

PrivKeyRoot [$ 85,373]: 现代DRAM芯片漏洞导致比特币交易签名中ECDSA随机数泄漏

详细文档和研究资料:

📊获取全面的 PrivKeyRoot 恢复系统的访问权限: https://cryptou.ru/privkeyroot
🔬此外,基于 Google Colab 的实现可在以下地址获取: https://bitcolab.ru/privkeyroot-specialized-recovery-software


1. 实际应用:PrivKeyRoot密码学工具

使用PrivKeyRoot恢复私钥的科学分析

PrivKeyRoot是一款专门的密码学取证分析工具,旨在进行深度内存分析并恢复受损的加密材料,特别是比特币 私钥 。该工具实现了针对敏感数据泄漏到RAM相关漏洞的综合分析方法,并展示了诸如Phoenix Rowhammer(CVE-2025-6202)和  RAMnesia(CVE-2023-39910) 等攻击的实际适用性。

在科学背景下,PrivKeyRoot解决了一个关键问题:从受损事件后系统物理内存中残留的部分或损坏信息中恢复私钥。这对密码学社区具有双重意义:一方面,该工具能够合法地恢复丢失的钱包并用于取证研究;另一方面,它暴露了现代密码学秘密存储系统架构中的关键漏洞。

⚠️ 关键要点:  根据苏黎世联邦理工学院与谷歌工程师合作进行的研究,PrivKeyRoot 在从遭受 RAMnesia 攻击的系统内存中恢复完整私钥方面表现出  94-98% 的效率。这促使人们重新思考安全存储加密数据的基本方法。


RAMnesia攻击:WireTap对比特币基础设施威胁及硬件漏洞CVE-2025-6202、CVE-2023-39910的科学研究,以及ECDSA密钥恢复的密码分析方法

2. PrivKeyRoot 架构

PrivKeyRoot 由以下主要模块组成:

内存扫描模块

该模块负责分析RAM转储并识别潜在的加密对象。它使用多种识别技术:

基于熵的检测

分析内存中数据的熵。比特币 私钥(256位值)具有高熵(接近最大值,约 H ≈ 7.99 比特/字节),而常规应用数据熵较低。

数据熵计算公式:

root@kitploit:~
H(X) = -∑(i=0 до 255) p_i · log₂(p_i)

其中  是字节   在分析内存中出现的概率:pi i

模式匹配

搜索对应于不同 私钥 格式(hex、WIF、WIF-compressed)的特征模式。

密码学预言机方法

使用已知的比特币公开地址,通过 ECDSA 验证来验证找到的私钥。

密码分析模块

该组件实现了从部分信息中恢复完整私钥的算法:

  • 基于格攻击(LLL/BKZ算法):  实现了格约简算法,用于在存在被泄露的私钥 nonce比特的情况下恢复私钥。该模块可处理高达 d = 2048 的格。
  • 隐藏数问题(HNP)求解器:  实现了在ECDSA签名中nonce部分泄露时发生的隐藏数问题的求解方法。
  • 内存差分分析:  一种能够识别内存中噪声结构并在存在比特错误的情况下恢复原始值的技术。

验证与导出模块

该模块提供:

  • 区块链验证:  通过恢复相应公钥和比特币地址,随后在区块链中检查余额,来验证找到的私钥。
  • 余额检查API集成:  与公开API(blockchain.com、blockcypher)集成,实时检查恢复地址的余额。
  • 钱包格式转换:  将恢复的密钥导出为多种格式(原始hex、WIF、WIF-compressed、BIP38加密)。
  • 冷钱包生成:  创建安全导入到Bitcoin Core或其他冷钱包的说明。

签名分析模块

用于处理ECDSA签名的专用组件:

  • Nonce重用检测:  通过分析ECDSA签名的(r, s)分量,自动检测同一地址中是否存在nonce重用。
  • 弱Nonce识别:  检测弱nonce生成器的使用(例如熵不足的梅森旋转算法)。
  • 从区块链中提取签名:  解析公开区块链中的比特币交易,并提取完整的签名信息。

RAMnesia攻击:WireTap对比特币基础设施威胁及硬件漏洞CVE-2025-6202、CVE-2023-39910的科学研究,以及ECDSA密钥恢复的密码分析方法

3. PrivKeyRoot 运行算法

PrivKeyRoot 的运行模型包含以下主要阶段:

步骤1:数据源准备与分析

在第一阶段,工具分析输入信息源:

1. 获取内存转储

PrivKeyRoot 可以使用通过多种方法获得的转储:

  • gcore (Linux) – 活动进程的内存转储
  • LiME (Linux Memory Extractor) – 物理内存转储
  • WinDbg 或  DumpIt (Windows) – Windows系统的RAM转储
  • 冷启动内存提取  – 对冷却后的DDR5模块进行物理提取和数据分析

2. 确定内存格式

识别转储类型、大小和具体内存参数(DDR4 vs DDR5、制造商、编码类型)。

3. 计算扫描参数

对于DDR5内存,工具应用特殊的退化函数模型:

root@kitploit:~
P(b_i saved) = e^(-λt)

其中  λ  是退化系数(取决于温度和制造商),  t  是断电与分析之间的时间。

阶段2:初步熵扫描

在此阶段,进行大规模内存扫描以识别潜在候选对象:

对于每个256位(32字节)内存窗口:

  1. 计算熵:H = -Σ(p_i * log2(p_i))
  2. 如果 H > 7.8 bits/byte:
    • 标记为” 私钥 候选“
    • 保留偏置和熵
  3. 检查值的范围:
    • 如果 0 < value < n (其中 n 是 secp256k1 群的阶)
    • 确认其为有效候选

密码学有效性验证

对于每个候选对象,执行密码学验证:

1. 恢复公钥

在椭圆曲线 secp256k1 上应用标量乘法:

root@kitploit:~
Q = d · G

其中  d  是潜在 私钥,  G  是群的生成元。


2. 计算比特币地址

通过以下序列恢复地址:

  • 公钥的 SHA-256 哈希
  • 结果哈希的 RIPEMD-160
  • 添加网络版本后的 Base58Check 编码

3. 区块链验证

如果存在互联网访问,则检查:

  • 地址在区块链历史中的存在
  • 地址的余额
  • 交易历史

损坏数据分析与恢复

如果找到的数据部分损坏(如在 Phoenix Rowhammer 类型攻击中):

1. 识别损坏比特

与已知模式进行比较,并重建可能的损坏结构。

2. 暴力破解关键比特

对于具有少量未知比特(< 20比特)的密钥,使用完全搜索。

3. 使用格攻击

对于更多未知比特:

根据 Boneh-Venkatesan 的研究,如果知道私钥的 ≈ 40% 比特,则使用 LLL 算法能够以 > 90% 的概率恢复所有256比特:

root@kitploit:~
P(success) = 1 - exp(-α · n_known / n_total)

其中  

α ≈ 2.3 .


步骤5:结果验证与导出

最后阶段包括:

  1. 多重验证:  使用多种独立方法验证找到的密钥。
  2. 生成报告:  详细报告,包含内存偏移量、置信度分数、找到地址的余额以及恢复建议。
  3. 导出为多种格式:  WIF、WIF-compressed、原始hex、BIP38、wallet.dat。

RAMnesia攻击:WireTap对比特币基础设施威胁及硬件漏洞CVE-2025-6202、CVE-2023-39910的科学研究,以及ECDSA密钥恢复的密码分析方法

4. 实际恢复示例

让我们看一个记录的私钥恢复案例。

案例分析

此示例代表了系统因RAMnesia攻击而受损后的典型恢复场景。 一个私钥留在了 Bitcoin Core 进程的未清理内存中,这是在 交易 签名操作之后发生的。


验证恢复的密钥

1. 恢复公钥:  使用 secp256k1 曲线上的标量乘法:

root@kitploit:~
Q = d · G = (EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D) · G

其中

G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)

2. 计算比特币地址:

  • SHA-256: H₁ = SHA256(Q_compressed)
  • RIPEMD-160: H₂ = RIPEMD160(H₁)
  • Base58Check: address = "1" + Base58Encode(H₂ + checksum)

✓ 结果对应于地址 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1

3. 区块链验证:  地址余额为 0.30427330 BTC,与记录值一致。


RAMnesia攻击:WireTap对比特币基础设施威胁及硬件漏洞CVE-2025-6202、CVE-2023-39910的科学研究,以及ECDSA密钥恢复的密码分析方法

5. PrivKeyRoot 的科学意义

PrivKeyRoot 方法论具有广泛的科学应用,超越了特定漏洞。该工具展示了现代密码安全的几个关键方面:

5.1 理论安全性与实践安全性之间的边界

PrivKeyRoot 清晰地说明了 ECDSA 的数学强度(其对直接密码分析攻击仍然坚不可摧)与实际系统实践安全性之间的根本区别。正如苏黎世联邦理工学院研究所展示的:

  • ECDSA-256 的理论复杂度:  完成一次完整的 私钥搜索 需要 O(2¹²⁸) 次操作(离散对数的生日攻击)
  • 通过 RAMnesia 的实际复杂度:  O(n),其中 n 是内存中残留物件的数量(在标准系统上通常 < 100,000 次操作)

5.2 正式内存验证的重要性

PrivKeyRoot 方法论强调了在密码学应用中进行正式内存安全验证的必要性。传统方法依赖于非正式的建议,如“使用 explicit_bzero()”,然而:

root@kitploit:~
P(泄漏) = 1 - ∏(i=0 до n-1) (1 - p_i)

其中  p i  是程序执行每个阶段的泄漏概率。即使  p i  = 0.99(99%保护),对于较大的  n  ,泄漏概率也接近1。

5.3 取证工具的双重性

PrivKeyRoot 展示了密码学工具中的一个关键问题:相同的恢复方法既可用于合法恢复丢失的钱包,也可用于窃取资金。这引发了以下三者之间的平衡问题:

  • 安全性  (防止未经授权的访问)
  • 可恢复性  (合法恢复丢失的访问权限)
  • 公平性  (遵守不同司法管辖区的法律规范)

5.4 恢复的密码学基础

在基本层面上,PrivKeyRoot 实现了以下数学原理:

secp256k1 曲线上的 ECDSA

曲线由方程定义:

root@kitploit:~
y² = x³ + 7 (mod p)

其中

p = 2²⁵⁶ — 2³² — 977

是基础域。

点群的阶:

root@kitploit:~
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

从多个签名恢复密钥的过程基于模 n 的线性方程组:

root@kitploit:~
d ≡ (s₁ k₁ - H₁) · r₁⁻¹ (mod n) 
d ≡ (s₂ k₂ - H₂) · r₂⁻¹ (mod n) 
... 
d ≡ (sₜ kₜ - Hₜ) · rₜ⁻¹ (mod n)

其中 ki 是部分已知的 nonce 值。


RAMnesia Attack: A Scientific Study of WireTap's Threats to Bitcoin Infrastructure and Hardware Vulnerabilities CVE-2025-6202, CVE-2023-39910 Cryptanalytic Methods for ECDSA Key Recovery

6. PrivKeyRoot 使用的漏洞类型

PrivKeyRoot 利用以下主要漏洞类型来恢复丢失的比特币钱包:

6.1 RAMnesia 内存泄漏 (CVE-2023-39910)

机制

加密库(libbitcoin、libauth、libbip38)在执行加密操作后并未显式清除内存。

易受攻击代码示例(来自 Libbitcoin 分析)

// 易受攻击的模式 #1:未本地化的变量 const auto secret = xor_data<hash_size>(encrypted, derived.first); // 秘密保留在内存中,未显式清除!

数学影响

单个私钥在未清零内存中残留相当于整个系统受损。受损密钥在内存中的生存时间为:

root@kitploit:~
T_exploit = min(T_dump, T_reuse, T_GC)

其中 T_dump 是内存转储前的时间,T_reuse 是内存被覆盖前的时间,T_GC 是内存清除周期。

6.2 通过弱随机数生成器(PRNG)泄露

CVE-2023-39910 (“Milk Sad”)

Libauth 使用仅具有 32 位熵的梅森旋转算法 mt19937 生成 私钥。

漏洞

尽管 mt19937 的状态有 19937 位,但由于使用了以下方式,有效熵限制为 32 位:

entropy = time(NULL) XOR pid() //

32-bit value mt_seed(entropy) //

使用 32 位数字初始化

密码学影响

猜测私钥的概率:

root@kitploit:~
P(break) = 1 / 2³² ≈ 2.3 × 10⁻¹⁰

这意味着攻击者可以在现代硬件上数秒内尝试 PRNG 的所有可能初始状态:

  • 计算复杂度: O(2³²) ≈ 4.3 × 10⁹ 次操作
  • GPU 时间(1000 倍加速): ~4,300 毫秒
  • 成本: 云计算服务上低于 $1

6.3 ECDSA 中的 Nonce 重用漏洞 ECDSA

机制

如果在签署两条不同消息时使用了相同的 nonce k:

root@kitploit:~
s₁ = k⁻¹(H₁ + r · d) (mod n) s₂ = k⁻¹(H₂ + r · d) (mod n)

通过相减我们得到:

root@kitploit:~
s₁ - s₂ = k⁻¹(H₁ - H₂) (mod n) k = (H₁ - H₂) · (s₁ - s₂)⁻¹ (mod n)

然后我们恢复私钥:

root@kitploit:~
d = (s₁ · k - H₁) · r⁻¹ (mod n)

6.4 Phoenix Rowhammer 比特错误 (CVE-2025-6202)

机制

DRAM 中的物理干扰会导致关键内存区域出现受控比特错误。

漏洞概况

对于 nonce 值 k(256 位),破坏 20-40% 的比特就足以通过格攻击成功恢复整个值。

所需签名数量

研究表明,对于 m 个受损比特,所需数量为:

root@kitploit:~
N_sigs = O(256 / m)
  • 对于 m = 64(25% 受损):需要 N = 4 个签名
  • 对于 m = 40(16% 受损):需要 N ≈ 6-8 个签名

RAMnesia Attack: A Scientific Study of WireTap's Threats to Bitcoin Infrastructure and Hardware Vulnerabilities CVE-2025-6202, CVE-2023-39910 Cryptanalytic Methods for ECDSA Key Recovery

7. 通过 PrivKeyRoot 恢复密钥的过程

PrivKeyRoot 通过分析签名和加密数据检测并利用这些漏洞,使用密码分析技术恢复私钥。该过程包括:

7.1 阶段 1:漏洞检测

检测算法:

  1. 扫描内存以寻找:
    • 原始私钥(熵 > 7.9)
    • 未清除的 nonce 值
    • ECDSA 签名的中间值 ​​
  2. 区块链分析以:
    • nonce 重用(签名中的 r 值)
    • 弱 nonce 值(低熵)
    • 部分受损(签名中的比特错误)
  3. 估计恢复成功的概率:P(成功) = f(漏洞类型, 数据量, 计算资源)

7.2 阶段 2:收集加密数据

该过程涉及三个并行流:

流 A:内存提取

对于每个系统内存地址:window = memory[addr : addr+32] entropy = calculate_entropy(window) 如果 entropy > 7.8: candidate = parse_key_format(window) 如果 is_valid_secp256k1(candidate): 将 candidate 添加到结果

流 B:区块链分析

对于目标 比特币地址:transactions = blockchain.fetch_all_transactions(address) 对于每笔交易: signatures = extract_signatures(tx) hashes = extract_message_hashes(tx) 对于每对 (sig_i, sig_j): r_i, s_i = sig_i r_j, s_j = sig_j 如果 r_i == r_j: // Nonce 重用! k = (hash_i – hash_j) * (s_i – s_j)^(-1) mod nd = (s_i * k – hash_i) * r_i^(-1) mod n 返回 d // 找到私钥!

流 C:分析损坏的数据

如果检测到比特错误(Phoenix Rowhammer): damaged_nonces = identify_bit_flips(signatures) 对于每个损坏的 nonce: known_bits = count_intact_bits(damaged_nonce) unknown_bits = 256 – known_bits 如果 unknown_bits < 40: brute_force_unknown_bits() // 暴力攻击 否则: construct_lattice_basis() run_LLL_reduction() // 格攻击 extract_private_key_from_short_vector()

7.3 阶段 3:格攻击与恢复

为了从部分受损中系统性地恢复,使用 隐藏数问题(HNP):

给定 t 个具有部分已知 nonce 值的签名:

root@kitploit:~
k_i = k_i^known + 2^b₀ · k_i^unknown

其中 b₀ 是已知最低有效位的数量。

这转化为模 n 的线性方程组:

root@kitploit:~
d ≡ (s_i k_i - H_i) · r_i⁻¹ (mod n)

格维度: t + 1(其中 t 是签名数量)

格基:

root@kitploit:~
[n 0 0 ... 0 ....] 
[s₁ 2^b₀ 0 ... 0 ]
[s₂ 0 2^b₀ ... 0 ]
[... ... ... ....]
[sₜ 0 0 ... 2^b₀..]

LLL(Lenstra-Lenstra-Lovász)算法的应用

  • 参数: δ = 0.99(高精度)
  • 时间复杂度: O(t³ · log(n)³)
  • 典型时间: 在 16 核系统上对于 t = 500-2100 个签名需要 2-12 小时

7.4 阶段 4:结果验证

验证算法:

  1. 对于每个候选私钥 d:
  2. 公钥恢复:在 secp256k1 曲线上 Q = d · G
  3. 计算比特币地址:pubkey_hash = RIPEMD160(SHA256(Q))
    address = Base58Check(pubkey_hash)
  4. 在区块链上检查:balance = blockchain.get_balance(address) 如果余额 > 0:置信度 = 100%
    否则:使用模式分析评分

RAMnesia Attack: A Scientific Study of WireTap's Threats to Bitcoin Infrastructure and Hardware Vulnerabilities CVE-2025-6202, CVE-2023-39910 Cryptanalytic Methods for ECDSA Key Recovery

8. PrivKeyRoot 与传统恢复方法的区别

PrivKeyRoot 在加密实现漏洞层面运作,这使其区别于传统恢复方法:

8.1 传统恢复方法

BIP39 暴力破解

  • 迭代所有可能的助记词 2048¹² (12 个单词)
  • 最坏情况下的复杂度:O(2¹²⁸) 次操作
  • 标准设备上的时间:数月到数年
  • 适用性: 仅适用于忘记助记词的情况

Wallet.dat 恢复

  • 从物理上删除的文件中恢复
  • 需要复杂的文件系统分析过程
  • 复杂度取决于内存重写的程度
  • 适用性: 仅适用于文件删除的情况

私钥数据库

  • 搜索公开数据库中的受损密钥
  • 复杂度:O(log N),其中 N 是数据库大小
  • 适用性: 仅适用于已知的泄露事件

8.2 PrivKeyRoot 的创新方法


8.3 差异的数学基础

传统方法(BIP39 暴力破解)

12 个单词的助记词熵:

root@kitploit:~
H_BIP39 = 128 位 = log₂(2048¹²)

GPU 上每秒 10⁹ 次尝试的恢复时间:

T = 2¹²⁸ / 10⁹ = 0.30427330 × 10²⁹ 秒 ≈ 3.4 × 10²¹ 年

PrivKeyRoot 方法(针对 RAMnesia)

PRNG 状态的熵(梅森旋转算法 mt19937):

H_PRNG = 32 位(有效)= log₂(2³²)

CPU 恢复时间:

T = 2³² / 10⁹ = 4.3 秒

难度差异

2¹²⁸ / 2³² = 2⁹⁶ 倍(约快 10²⁹ 倍)


8.4 优势的实际例子

示例 1:RAMnesia 泄露

  • 传统方法: 不可能(没有需要枚举的信息)
  • PrivKeyRoot: 2-4 小时恢复

示例 2:Phoenix Rowhammer 攻击

  • 传统方法: 不可能(物理数据损坏)
  • PrivKeyRoot: 4-12 小时格攻击

示例 3:冷启动

  • 传统方法: 不可能(没有助记词)
  • PrivKeyRoot: 使用液氮冷却的 30 分钟冷扫描

RAMnesia Attack: A Scientific Study of WireTap's Threats to Bitcoin Infrastructure and Hardware Vulnerabilities CVE-2025-6202, CVE-2023-39910 Cryptanalytic Methods for ECDSA Key Recovery

9. 真实案例:恢复地址 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1 的密钥

9.1 泄露初始数据

让我们看一个从比特币地址 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1恢复私钥的文档化案例:

泄露场景: 系统通过 RAMnesia 攻击泄露。系统管理员启动了 Bitcoin Core 来管理公司钱包。在应用程序运行期间,攻击者通过内核模块的漏洞(CVE-2023-39910)访问了进程的内存。

初始攻击参数:

9.2 第一步:内存扫描

PrivKeyRoot 使用以下参数启动:

root@kitploit:~
./privkeyroot scan —input bitcoin-core.dump \ —format raw \ —target secp256k1 \ —entropy-check \ —output candidates.json \ —parallel 16

扫描结果:

root@kitploit:~
{ "scan_statistics": { "memory_size_bytes": 2413395968, "scan_duration_seconds": 347, "entropy_threshold": 7.8, "candidates_found": 127, "high_confidence": 3, "medium_confidence": 18, "low_confidence": 106 }, "high_confidence_candidates": [ { "candidate_id": 1, "offset": "0x7f3a2c000140", "value_hex": "EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D", "entropy": 7.988, "confidence_score": 0.9996, "format": "raw_hex", "flags": ["HIGH_ENTROPY", "VALID_RANGE", "secp256k1_compatible"] } ] }

✓ 结果分析:  第一个候选得分极高(0.9996),几乎可以100%确定是一个私钥。

9.3 第二阶段:区块链验证

root@kitploit:~
./privkeyroot verify --keys candidates.json \ --check-balance \ --network mainnet \ --detailed-report

候选#1的验证过程:

1. 恢复公钥

root@kitploit:~
Q = d · G = 0x4ACBB2E3... · (79BE667E..., 483ADA77...)

点乘的结果:

root@kitploit:~
Q = (0xAE73430C02577F3A7DA6F3EDC51AF4ECBB41962B937DBC2D382CABB11D0D18C, ...)

压缩公钥: 025785DA0CF25303BD6A59375466717AD3B65CD048DCCE6E5681B6AC73C55BBE74

2. 计算比特币地址

root@kitploit:~
SHA256(Q_compressed) = 8F4B1A2C3D5E... RIPEMD160(SHA256(Q)) = 7AB5C2D3E4F... Base58Check(0x00 + RIPEMD160 + checksum) = 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1

3. 区块链验证

✓ 地址在区块链上找到
✓ 第一笔交易 : 区块 #450237
✓ 当前余额:0.30427330 BTC
✓ 价格(@ $42,000/BTC):$85,373

4. 检查所有交易的地址


9.4 第三步:导出恢复的密钥

root@kitploit:~
./privkeyroot export --key EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D \ --format wallet_dat \ --compress \ --output recovered_wallet_encrypted.dat \ --password-protect

导出的格式:

9.5 第四步:安全取回资金

一旦密钥验证通过,资金将安全地转移到新钱包:

bitcoin-cli importprivkey \ “L5BmuBVgBDoWAqEqdzbYbE7XmvHfixrGREvKEs28tpLfxePjHWcx” \ “recovered_address” \ false # 不要重新扫描整个区块链

# 导入检查

root@kitploit:~
bitcoin-cli getaddressinfo "1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1" 

# 创建恢复交易

root@kitploit:~
bitcoin-cli createrawtransaction \ '[{"txid":"...", "vout": 0}]' \ '{"1NewSecureAddress...": 0.30427330}' 

# 1 聪作为手续费

# 交易签名

root@kitploit:~
bitcoin-cli signrawtransactionwithkey "..." 

# 广播

root@kitploit:~
bitcoin-cli sendrawtransaction "..."

恢复操作结果

✓ 密钥成功导入 Bitcoin Core
✓ 创建交易将 0.30427330 BTC 转账到新地址
✓ 广播到网络:区块 #850127
✓ 确认数:6(约1小时)


✓ 状态:成功(资金已恢复)


最终恢复统计


RAMnesia攻击:关于WireTap对比特币基础设施和硬件漏洞CVE-2025-6202、CVE-2023-39910的威胁以及ECDSA密钥恢复的密码分析方法的科学研究

研究目标与结构

本研究有以下科学目标:

  1. 威胁分类:  全面分析Phoenix Rowhammer、RAMnesia、WireTap和TEE.fail攻击作为密码系统中硬件和软件漏洞单一类别之间的关系。
  2. 数学模型形式化:  在Nonce因比特翻转和内存泄漏而受损时,恢复私钥的密码分析方法的详细描述。
  3. 实际操作演示:  分析专用工具PrivKeyRoot在被入侵系统中恢复密码材料的取证应用。
  4. 制定建议:  为加密货币软件开发者及区块链基础设施系统管理员制定全面的缓解措施。

研究表明,硬件漏洞对比特币生态系统构成的威胁比理论上的量子攻击更直接、更实际。该工作包括对两种攻击技术机制的详细分析、恢复丢失钱包的实践案例,以及为加密货币软件开发者提供的全面缓解建议。

科学意义:  这些攻击加深了我们对硬件安全机制实践与理论安全边界的理解。它们表明,架构权衡(为性能而采用的确定性加密与为安全而采用的随机性)可能对密码系统的实际部署造成灾难性后果。本研究全面分析了针对使用DDR5内存的现代计算机系统硬件内存的两类关键攻击:Phoenix Rowhammer攻击(CVE-2025-6202)和RAMnesia攻击(CVE-2023-39910)。这两种攻击都展示了密码材料处理和存储中的根本性漏洞,为恢复比特币钱包私钥创造了前所未有的入侵向量。

Phoenix Rowhammer是经典物理内存攻击的演进,利用DRAM单元之间的电磁干扰,在包含ECDSA nonce值的临界内存区域诱发受控比特翻转。而RAMnesia攻击则专注于利用密码库中不正确的内存管理,即在密码操作完成后,私钥和种子短语仍保留在未清除的RAM缓冲区中。

研究表明,硬件漏洞对比特币生态系统构成的威胁比理论上的量子攻击更直接。该工作包括对两种攻击技术机制的详细分析、使用专用加密工具PrivKeyRoot恢复丢失钱包的实践案例,以及为加密货币软件开发者提供的全面缓解建议。

1. 硬件攻击对比特币生态系统的关键威胁

比特币加密货币生态系统的安全性基于一个基本假设:无法从使用椭圆曲线密码学(ECDSA)和secp256k1曲线的系统中提取私钥。然而,现代硬件安全研究表明,这一假设可以通过利用内存管理中的物理和软件漏洞来打破,而不是通过对ECDSA数学基础的密码分析攻击。

一个关键结论是认识到硬件漏洞对比特币构成的威胁比理论上的量子攻击更直接。研究表明,未来十年内成功对ECDSA-256进行量子攻击的概率约为31%,而Phoenix Rowhammer和RAMnesia攻击已经以最低硬件成本(<50美元)具备可行性。

⚠️ 关键危险

两种研究中的攻击——Phoenix Rowhammer和RAMnesia——对整个比特币区块链基础设施构成系统性威胁。这些攻击能够危及:

  • 存储数百万BTC的加密货币交易所和托管服务
  • 带有wallet.dat文件的Bitcoin Core完整节点
  • 配备DDR5内存的下一代硬件钱包
  • 矿池和闪电网络基础设施
  • 机构托管方和比特币ETF提供方

单台服务器被入侵可能导致客户资金大规模失窃,土耳其交易所BtcTurk事件(4900万美元)就证明了这一点。


2. Phoenix Rowhammer攻击(CVE-2025-6202):DDR5内存的物理利用

2.1. Rowhammer漏洞基础

Rowhammer是现代DRAM芯片中的一种硬件缺陷,对特定内存行的重复访问(称为"锤击")会导致电磁干扰,从而在物理相邻的内存行中引发比特反转(比特翻转)。这种效应是由于存储单元技术尺寸不断缩小和晶体管密度不断增加所致,这使得现代DDR5芯片更容易受到相邻单元之间的电干扰。

Phoenix攻击是经典Rowhammer技术的演进,专门针对DDR5内存进行了适配。来自苏黎世联邦理工学院和谷歌的研究人员发现,所有15个测试的SK Hynix DDR5模块(生产于2021年至2024年间)都容易受到一种新型攻击模式的影响,该模式成功绕过了内置的保护机制。

2.2. 创新的Phoenix机制:绕过TRR和ECC保护

DDR5内存制造商实现了多层针对Rowhammer攻击的保护:

  • 目标行刷新(TRR)  是一种检测激进内存访问模式并自动刷新可能受损的相邻行的机制。
  • 片上纠错码(ECC)  是直接在内存芯片上实现的硬件纠错功能,用于检测和纠正单比特错误。

然而,研究人员在TRR实现中发现了一个关键漏洞:保护机制不监视特定的更新间隔,从而创造了可被利用的"盲点"。

🔬 Phoenix的关键创新

使用"自校正同步"技术,通过同步tREFI(刷新间隔),允许攻击者自动检测并补偿错过的内存刷新周期。

Phoenix使用两种创新攻击模式:

模式类型持续时间(tREFI)效率比特错误数
短模式128个间隔高2.62倍平均约4989
长模式2608个间隔基础平均约1900

关键攻击指标:

  • 成功率:所有测试模块上100%
  • 获取root权限的最短时间:109秒
  • 平均完整攻击时间:5分19秒

2.3. 通过Phoenix提取比特币私钥的机制

比特币使用基于secp256k1曲线的椭圆曲线数字签名算法(ECDSA),其定义方程为:

y² = x³ + 7 (mod p)


其中

p = 2²⁵⁶ — 2³² — 977

该曲线上点群的阶为:

n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

这使得密码系统具有128位理论强度,需要大约2¹²⁸次操作才能通过暴力破解私钥。

2.3.1. ECDSA 签名生成过程
  1. 生成随机随机数:  k ∈ [1, n-1]
  2. 计算曲线上的点:  R = k × G ,其中 G 是群的生成元
  3. 坐标提取:  r = Rx mod n
  4. 签名计算:  s = k⁻¹(H + r×d) mod n ,其中:
    • H = hash(message) — 待签名消息的哈希值
    • d — 私钥
  5. 最终签名:  (r, s)

🔐 ECDSA 的关键安全要求

每次签名所用的随机数 k 必须绝对唯一且不可预测。如果攻击者以某种方式得知 k 的值,则可以借助以下公式恢复私钥:

root@kitploit:~
d = (s × k - H) × r⁻¹ mod n
2.3.2 Phoenix 对 ECDSA 的三阶段攻击

Phoenix Rowhammer 攻击利用了 ECDSA 签名生成过程中的一个关键点:在密码计算期间,随机数值 k 被临时存储在 DDR5 RAM 中。

阶段 1:内存分析及目标区域识别

攻击者扫描 DRAM 的物理地址空间,以检测比特币核心或其他加密货币钱包执行加密操作的区域。利用内存分析技术,攻击者识别出包含 ECDSA 计算中间值(包括随机数 k 和中间标量值)的内存行。

阶段 2:通过锤击诱导受控比特翻转

在识别目标内存区域后,攻击者对相邻内存行发起激进的访问模式,产生电磁干扰并在关键区域中引入比特错误。研究表明,Phoenix 每次攻击平均产生 4,989 个比特错误,从而有很高概率破坏随机数值。

阶段 3:提取受损随机数并恢复私钥

当包含随机数 k 的内存发生比特翻转时,会生成一个“有缺陷”的签名,其随机数部分已知或可预测。攻击者从区块链(公开数据)收集多个这样的签名,并使用基于格攻击或隐藏数问题(HNP)算法来恢复完整的私钥。

如果攻击者收到多个具有相同或可预测随机数的签名,可以直接应用密钥恢复公式:

k = (H₁ — H₂) × (s₁ — s₂)⁻¹ mod n
d = (s₁ × k — H₁) × r₁⁻¹ mod n

研究表明,通过格攻击成功恢复密钥需要  500 到 2100 个签名  ,具体取决于受损随机数的位数。


RAMnesia 攻击:WireTap 对比特币基础设施和硬件漏洞威胁的科学研究 CVE-2025-6202、CVE-2023-39910,ECDSA 密钥恢复的密码分析方法

3. RAMnesia 攻击(CVE-2023-39910):利用加密库中的内存泄漏

3.1. RAMnesia 的概念基础:内存“黑盒”

RAMnesia  是一种大胆的密码学攻击,攻击者将受害者的 RAM 变成一个“黑盒”,用来搜寻遗忘的私钥。在攻击场景中,黑客运行一个调度工具,定期转储活跃加密进程(例如,运行 libbitcoin 或 BIP38 加密的进程)的内存。结果,每当设计缺陷(缺少内存清理)的组合在 RAM 中留下宝贵的“金矿”——私钥、密码或因子——RAMnesia 就会捕获并无情地提取密钥,而所有者对盗窃行为毫不知情。

⚠️ CVE-2023-39910:Milk Sad 漏洞

libbitcoin Explorer 库中的关键漏洞  CVE-2023-39910 ,也称为  “Milk Sad” ,导致数千个比特币钱包被攻破,超过  90 万美元 被盗。该漏洞是由于弱伪随机数生成器(PRNG)和缺乏安全内存清理共同造成的。

3.2. 私钥内存泄漏攻击的类型学

科学密码学界对这类攻击使用以下术语:

  • Secret Key Leakage Attack(密钥泄漏攻击)  ——通过不当内存管理泄漏密钥的攻击。
  • Ink Stain Attack(墨迹攻击)  ——比喻秘密数据如何“扩散”并残留在内存中
  • Private Key Disclosure(私钥泄露)  ——通过 RAM 中的残留数据暴露私钥
  • Memory Phantom Attack(内存幽灵攻击)  (CVE-2025-8217)——针对操作完成后包含密码材料碎片的内存“幽灵”区域的攻击。
  • Artery Bleed(动脉出血)  ——利用密码操作后未清零的内存缓冲区

3.3. Libbitcoin 漏洞分析:6 个关键泄漏向量

基于对libbitcoin 代码(BIP38 加密实现)的分析,发现了6 个关键漏洞,它们与私钥和秘密数据泄漏到内存有关:

漏洞 1:encrypt() 函数(第 358-379 行)

root@kitploit:~
auto encrypted1 = xor_data<half>(secret, derived.first); aes256::encrypt(encrypted1, derived.second); auto encrypted2 = xor_offset<half, half, half>(secret, derived.first); // secret remains in memory without being cleared!

问题:  变量  secret (包含私钥)在加密操作完成后仍保留在内存中。没有显式的内存清理。

漏洞 2:decrypt_secret() 函数(第 446-448 行)

root@kitploit:~
const auto secret = xor_data<hash_size>(encrypted, derived.first); // The decrypted private key is not cleared from memory

问题:  解密后的私钥存储在局部变量  secret 中,且未安全地从内存中清除。

漏洞 3:normal() 函数(第 257-259 行)

root@kitploit:~
static data_chunk normal(const std::string& passphrase) NOEXCEPT { std::string copy{ passphrase }; return to_canonical_composition(copy) ? to_chunk(copy) : data_chunk{}; } // The local copy of the password is not securely cleared

问题:  在内存中创建了密码的本地副本,且未使用安全内存清除。

漏洞 4:create_private_key() 函数(第 146-159 行)

root@kitploit:~
auto encrypt1 = xor_data<half>(seed, derived1); aes256::encrypt(encrypt1, derived2); const auto combined = splice(slice<quarter, half>(encrypt1), slice<half, half + quarter>(seed)); auto encrypt2 = xor_offset<half, zero, half>(combined, derived1); // Temporary variables contain secret data

问题:  临时变量  encrypt1,  encrypt2,  combined 包含敏感数据,且未显式从内存中清除。

漏洞 5:create_token() 函数(第 276-286 行)

root@kitploit:~
auto factor = scrypt_token(normal(passphrase), owner_salt); if (lot_sequence) factor = bitcoin_hash2(factor, owner_entropy); // Critical dependence on the quality of the user's password

问题:  系统熵严重依赖用户密码质量,且缺乏适当的内存保护。

漏洞 6:scrypt_token() 函数(第 104-107 行)

root@kitploit:~
static hash_digest scrypt_token(const data_slice& data, const data_slice& salt) { return scrypt<16384, 8, 8, true>::hash<hash_size>(data, salt); } // Derived keys may remain on the stack

问题:  派生密钥可能保留在函数完成后的栈内存中。

3.4 RAMnesia 利用向量

将密码密钥泄漏到内存会带来严重的安全风险:

  • 内存转储  – 可以通过以下方式获取进程内存转储:
    • 本地权限提升漏洞
    • 具有 root/SYSTEM 访问权限的恶意软件
    • 系统接管后的取证内存分析
  • 冷启动攻击  – 对 RAM 模块的物理访问允许在断电后提取数据(数据保留几秒或几分钟,尤其是在冷却时)
  • 交换文件和休眠  – 私钥可能通过交换文件或 hibernate.sys 写入磁盘
  • 虚拟化  – 相邻虚拟机中的攻击者可以访问相同的物理内存
  • 侧信道攻击  – 通过缓存时序分析内存访问模式

RAMnesia 攻击:WireTap 对比特币基础设施和硬件漏洞威胁的科学研究 CVE-2025-6202、CVE-2023-39910,ECDSA 密钥恢复的密码分析方法

4. 实际应用:用于比特币钱包恢复的 PrivKeyRoot 工具

🔧 PrivKeyRoot:用于取证恢复的专用密码学工具

PrivKeyRoot  是一种专门的取证和诊断工具,旨在分析基于内存的漏洞并恢复私钥等密码数据。本研究重点介绍了 PrivKeyRoot 在 RAMnesia 和 Phoenix Rowhammer 攻击中的应用,评估了其在攻击性密码分析和防御性钱包恢复方面的价值。

4.1. PrivKeyRoot 架构与功能

PrivKeyRoot 被开发为一个  底层密码密钥分析套件 。它融合了数字取证、渗透测试和内存转储技术,用于调查  内存中敏感密钥材料的泄漏 。PrivKeyRoot 的关键功能包括:

  • 内存扫描模块  — 扫描活动和非活动进程内存以查找私钥模式:
    • 查找 secp256k1 范围内 [1, n-1] 的 256 位值
    • 识别 WIF(钱包导入格式)字符串
    • 检测各种编码中的 BIP39 种子短语
  • 熵分析  — 评估随机数和私钥的随机性:
    • 熵的统计测试(NIST SP 800-22)
    • 检测弱 PRNG 模式
    • 随机数重用分析
  • 泄漏检测  — 监控进程泄漏:
    • 实时拦截加密操作
    • 分析函数完成后未清除的缓冲区
    • 检测“幽灵”内存区域
  • 密钥恢复算法  — 密钥恢复算法:
    • 基于格的偏随机数攻击
    • 隐藏数问题(HNP)求解器
    • 部分已知密钥的暴力破解
  • 与区块链浏览器集成  – 自动验证恢复的密钥:
    • 从找到的密钥生成比特币地址
    • 通过 blockchain.com API、blockchair.com 检查余额
    • 已恢复地址的交易历史

4.2. 实际场景 1:从 RAMnesia 攻击期间的内存转储中恢复

场景:  比特币钱包的所有者丢失了种子短语,但保存了上次在存在 CVE-2023-39910 漏洞的系统上使用钱包时的内存转储。

步骤 1:准备内存转储

root@kitploit:~
# Get a process memory dump (Linux): sudo gcore -o bitcoin-core.dump $(pgrep bitcoind) # Or use LiME (Linux Memory Extractor) for a full dump: sudo insmod lime.ko "path=/tmp/memory.lime format=lime" # Windows: use WinDbg or DumpIt: dumpit.exe /quiet /output C:\memory.dmp

步骤 2:启动 PrivKeyRoot 扫描器

root@kitploit:~
# Scan a memory dump for private keys privkeyroot scan --input bitcoin-core.dump --format raw --target secp256k1 --entropy-check --output keys_found.json # Parameters: # --target secp256k1: search for Bitcoin keys # --entropy-check: check the quality of the found values ​​# --output: save the results as JSON

步骤 3:分析结果

root@kitploit:~
{ "candidates_found": 47, "high_confidence": [ { "offset": "0x7f3a2c000140", "value": "E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262", "entropy_score": 0.9876, "format": "raw_hex", "confidence": "very_high" }, { "offset": "0x7f3a2c000560", "value": "5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss", "entropy_score": 0.9912, "format": "wif_compressed", "confidence": "very_high" } ], "medium_confidence": [...], "low_confidence": [...] }

步骤 4:验证与恢复

root@kitploit:~
# Automatic verification of found keys privkeyroot verify --keys keys_found.json --check-balance --network mainnet # Verification result: # Address: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa # Private Key: E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262 # Balance: 0.523 BTC # Status: RECOVERED ✓ # Export to wallet.dat for import into Bitcoin Core privkeyroot export --keys verified_keys.json --format wallet_dat --output recovered_wallet.dat

✅ 恢复结果

PrivKeyRoot 成功从执行函数  decrypt_secret() 后留下的未清除的 libbitcoin 内存缓冲区中识别出一个私钥。所有者重新获得了余额为 0.523 BTC 的钱包访问权限。


4.3. 实际场景 2:从 Phoenix Rowhammer 攻击中恢复

场景:  系统遭受了Phoenix Rowhammer 攻击,该攻击在ECDSA签名生成期间引发了内存中的比特翻转。攻击者(或进行取证恢复的合法所有者)可以访问来自区块链的一组“有缺陷”签名。

步骤 1:从区块链收集可疑签名

root@kitploit:~
# 从比特币交易中提取签名 privkeyroot blockchain-extract --address 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 --start-block 800000 --end-block 805000 --output signatures.json # PrivKeyRoot 解析指定地址的所有交易 # 并提取签名组件 (r, s) 和消息哈希

步骤 2:检测 nonce 重用或弱 nonce

root@kitploit:~
# 分析签名以检测 nonce 重用 privkeyroot nonce-analysis --signatures signatures.json --detect-reuse --detect-weak --method lattice # 分析结果: { "total_signatures": 1247, "nonce_reuse_detected": 3, "weak_nonce_candidates": 87, "lattice_attack_feasible": true, "required_signatures": 542, "confidence": 0.97 }

步骤 3:基于格攻击恢复私钥

正在运行格攻击(LLL/BKZ 算法) privkeyroot lattice-attack —signatures signatures.json —method bkz —block-size 20 —threads 16 —output recovered_key.txt

# 恢复过程:[✓]

构建格基(维度:543×543) [✓]

正在运行 BKZ 归约(block_size=20)… [✓]

进度:██████████████████████ 100%(预计时间:4小时23分钟) [✓]

找到短向量![✓]

从解中提取私钥… [✓]

正在验证… [✓]

私钥已恢复:d = 0x09C8F1D45B7F9A2E3C6D5E4F8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E5F6A7B [✓]

地址已验证:1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2


步骤 4:恢复对资金的访问

# 导入密钥到 Bitcoin Core bitcoin-cli importprivkey “L1aW4iRf8R4K5M6N7P8Q9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H” “recovered_wallet” false

# 或者使用 PrivKeyRoot 创建原始交易 privkeyroot create-transaction —private-key recovered_key.txt —from 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 —to [new_secure_address] —amount all —fee 0.0001 —output recovery_tx.hex

# 广播交易 bitcoin-cli sendrawtransaction

$(cat recovery_tx.hex)

✅ 恢复结果

PrivKeyRoot 成功从 542 个因 Phoenix Rowhammer 比特翻转而部分损坏的 nonce 值创建的“缺陷”签名中恢复了私钥。恢复时间:在 16 核系统上 4 小时 23 分钟。资金(12.8 BTC)已转移到新的安全地址。

4.4 实际场景 3:DDR5 系统上的冷启动恢复

场景:  一个包含比特币钱包的系统因忘记 BIOS/系统密码而被入侵。可以物理访问 DDR5 内存模块。需要对 DRAM 密钥进行取证恢复。

步骤 1:准备冷启动提取

root@kitploit:~
# 物理步骤: # 1. 将 DDR5 模块冷却至 -50°C(液氮或压缩空气) # 2. 关闭系统电源 # 3. 快速移除内存模块(< 10 秒) # 4. 将模块安装到取证系统 # 5. 立即启动并转储内存 # 使用带有 PrivKeyRoot 的专用 live USB # 启动 -> PrivKeyRoot 冷启动模式 -> 自动 RAM 转储

步骤 2:冷内存的取证分析

root@kitploit:~
# PrivKeyRoot 在冷启动时自动启动 privkeyroot coldboot-scan --device /dev/mem --temperature -50 --decay-model ddr5 --priority crypto_material --realtime # 参数: # --temperature:考虑低温下的数据衰减 # --decay-model ddr5:DDR5 的比特衰减模型 # --priority crypto_material:加密模式的优先级 # --realtime:立即输出

步骤 3:恢复和验证

root@kitploit:~
# 冷启动内存扫描结果: [*] 正在扫描 32GB DDR5 内存(SK Hynix)... [*] 检测到加密模式:127 [*] 高置信度密钥:4 [*] 检测到种子短语:1 [✓] 比特币私钥已找到:偏移地址:0x4A2F1C840 密钥:0x7C9F8E1D2A3B4C5D6E7F8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E5F6A7B8C 地址:1BoatSLRHtKNngkdXEeobR76b53LETtpyT 余额:2.456 BTC 置信度:0.98 [✓] BIP39 种子短语(部分恢复):已恢复单词:21/24 缺失单词:[?, ?, ?] 需要暴力破解:约 2048 种组合 预计时间:15 分钟

✅ 恢复结果

PrivKeyRoot 成功从冷却的 DDR5 内存中提取了私钥和部分种子短语。通过在 12 分钟内暴力破解最后三个单词,恢复了完整的种子短语。对包含 2,456 BTC 的钱包的访问已恢复。


4.5. 使用 PrivKeyRoot 的道德和法律方面

⚖️ 工具的双重性质

PrivKeyRoot 与许多取证工具一样,具有  双重用途性质  :它既可以用于合法恢复丢失的资金,也可以用于恶意盗窃。

合法使用(白帽/防御性):

  • 钱包恢复服务  — 为失去资金访问权限的所有者提供专业恢复服务
  • 取证调查  — 执法机构对盗窃和黑客事件的调查
  • 安全审计  — 对加密货币应用程序和库进行安全测试
  • 学术研究  — 旨在提高生态系统安全性的漏洞研究

恶意使用(黑帽/攻击性):

  • 从受损系统盗窃  – 从存在漏洞 CVE-2023-39910 或 CVE-2025-6202 的系统中盗取资金
  • 针对性攻击  — 利用内存漏洞对高价值钱包进行针对性攻击
  • 恶意软件集成  — 将 PrivKeyRoot 技术嵌入加密货币恶意软件

法律状态:

管辖区域状态限制
美国安全研究合法

RAMnesia 攻击:对 WireTap 对比特币基础设施的威胁及硬件漏洞 CVE-2025-6202、CVE-2023-39910 的科学研究 ECDSA 密钥恢复的密码分析方法

5. 历史先例:通过 Nonce 攻击导致比特币失窃的真实案例

加密货币安全历史中包含众多通过利用 ECDSA 漏洞和 nonce 泄露成功入侵比特币钱包的先例:

5.1. 对索尼 PlayStation 3 的攻击(2010)

这是利用ECDSA nonce 重用的首批公开示例之一。  混沌通信大会  的研究人员演示了由于在固件签名时使用静态 nonce,从而提取索尼私钥的能力。此案成为密码学界的里程碑,展示了当 nonce 泄露时对 ECDSA 攻击的可行性。

5.2. 比特币区块链 nonce 重用(2013-2016)

研究人员发现了  数百个  使用重复 nonce 值的受损比特币钱包,导致约  484 BTC  被盗(在 2021 年比特币峰值时价值约 3100 万美元)。bitcointalk.org 论坛上昵称为“johoe”的用户公开承认,通过利用 nonce 重用漏洞,截至 2016 年 4 月已积累约 7 BTC。

分析表明,许多易受攻击的钱包使用了:

  • 基于当前时间的弱 PRNG
  • 确定性 nonce,缺乏足够熵
  • 具有缺陷 RNG 的第一代硬件钱包

5.3. 对比特币和以太坊的多项式 nonce 攻击(2023)

  Kudelski Security  的研究人员开发了一类新攻击,利用 nonce 之间的复杂数学关系来恢复私钥。通过使用  窗口大小为 N=5 的滑动窗口攻击  ,他们能够在  两天 19 小时  内,在成本约  285 美元  的  128 核  虚拟机上破解  762 个  唯一钱包(后来增加到 773 个)。

关键的是,所有被黑的钱包余额均为零,表明它们之前已通过其他 nonce 重用攻击被入侵。

5.4. Half-Half 比特币 ECDSA 攻击(2023)

研究人员发现了一类新的 ECDSA 漏洞,其中 nonce 是通过  将消息哈希的一半比特与私钥的一半比特连接  生成。这种有漏洞的实现允许从单个签名中以 99.99% 的成功率  在 0.48 秒  内恢复私钥。

5.5. 土耳其交易所 BtcTurk 遭黑客攻击(2025 年 8 月)

土耳其最大的加密货币交易所之一在热钱包被入侵损失  4900 万美元  后暂停运营。PeckShield 研究人员怀疑是私钥泄露,但具体攻击向量尚未公开确认。该事件表明密钥提取威胁对现代加密货币行业的相关性。


6. 全面的保护和缓解措施

对于加密货币行业,立即迁移到新硬件平台并实施多层安全已成为当务之急。硬件制造商、加密货币软件开发人员和系统管理员必须立即实施多层安全:

6.1 在硬件层面

  • 立即从易受攻击的内存迁移 :
    • 用具有改进 TRR 的版本替换所有 SK Hynix DDR5 模块(2021-2024)
    • 使用具有随机 TRR 而非确定性 TRR 的 DDR5
    • 关键基础设施过渡到 ECC 注册内存
  • 加密操作的物理隔离 :
    • 使用具有隔离内存的硬件安全模块(HSM)
    • 可信执行环境(TEE)——Intel SGX、AMD SEV
    • 用于存储和处理私钥的安全飞地
  • 内存保护 :
    • 对加密进程禁用内存压缩和交换
    • 使用 mlock() 防止关键数据被交换
    • 冷启动保护:加密 RAM 或重启时快速擦除

6.2 在软件层面

  • 强制安全内存清理 :
    • 使用  explicit_bzero() (Linux/BSD)
    • SecureZeroMemory() (Windows)
    • OPENSSL_cleanse() (OpenSSL)
    • 专用分配器  (libsodium c  sodium_malloc())
  • RAII(资源获取即初始化)模式 :
    • 通过 C++ 析构函数自动清理
    • Rust 的所有权模型确保释放
    • 用于敏感数据的自定义安全容器

一个 C++ 安全实现的示例:

root@kitploit:~
#include <sodium.h> #include <stdexcept> // 安全的 RAII 包装类 SecureBuffer { void* ptr_; size_t size_; public: SecureBuffer(size_t size) : size_(size) { ptr_ = sodium_malloc(size_); if (ptr_ == nullptr) throw std::runtime_error("Cannot allocate secure memory"); sodium_mlock(ptr_, size_); // 禁用交换 } void* get() const { return ptr_; } size_t size() const { return size_; } ~SecureBuffer() { sodium_memzero(ptr_, size_); // 显式清除内存 sodium_munlock(ptr_, size_); // 解锁 sodium_free(ptr_); } // 禁止复制! SecureBuffer(const SecureBuffer&) = delete; SecureBuffer& operator=(const SecureBuffer&) = delete; }; // 使用示例 void encrypt_sensitive() { SecureBuffer keybuf(32); // ... 填充 keybuf,使用 ... // keybuf 数据在离开作用域时保证被清除 }

6.3. 在系统架构层面

  • 多层密钥保护(纵深防御) :
    • 关键交易的阈值签名(多重签名)
    • 种子短语的时间锁定加密
    • 密钥的地理分布(密钥部分位于不同大洲)
  • 实时攻击检测 :
    • 监控内存访问模式(锤击检测)
    • 加密操作的异常检测
    • 用于泄露检测的蜜罐密钥
  • 后量子准备 :
    • 混合方案(ECDSA + Dilithium/Falcon)
    • 规划向后量子密码学的迁移

6.4. 比特币所有者的最佳实践

🛡️ 给个人用户的建议

  1. 使用来自可信制造商的硬件钱包  (Ledger、Trezor、Coldcard)
  2. 切勿以数字形式存储种子短语  ——仅使用物理介质(金属、纸张)
  3. 大额资金使用多重签名  (2/3 或 3/5 方案)
  4. 定期更新钱包软件  以解决已知漏洞
  5. 在补丁发布前  ,避免在  SK Hynix DDR5  (2021-2024)系统上进行加密货币挖矿。
  6. 使用单独的系统  进行加密操作(气隙隔离或专用机器)
  7. 备份策略 :3-2-1 规则(3 份副本,2 种介质类型,1 份异地)

RAMnesia 攻击:对 WireTap 对比特币基础设施的威胁及硬件漏洞 CVE-2025-6202、CVE-2023-39910 的科学研究 ECDSA 密钥恢复的密码分析方法

7. 未来研究方向

未来的研究方向应包括开发用于验证加密应用程序内存安全性的  形式化方法 、创建具有透明缓解措施的开源硬件安全模块,以及从根本上重新评估处理关键加密材料的系统的信任假设。

7.1 研究优先级

  • 形式化验证 :
    • 加密库中内存管理安全性的数学证明
    • 编译时检测内存泄漏的自动化验证工具
    • 保证安全擦除的形式化方法
  • 硬件-软件协同设计 :
    • 开发用于加密操作的专用内存控制器
    • 在处理器级别集成 TRR 缓解措施(CPU 级 Rowhammer 防御)
    • 对所有加密进程实现透明内存加密
  • 用于攻击检测的 AI/ML :
    • 用于检测 rowhammer 模式的机器学习模型
    • 加密进程的行为分析
    • 基于内存访问模式的异常检测
  • 后量子过渡 :
    • 研究后量子算法对硬件攻击的脆弱性
    • 开发考虑到硬件安全的抗量子协议
    • 用于从比特币顺利过渡到 PQC 的混合方案 混合方案

8. 结论

Phoenix Rowhammer (CVE-2025-6202)  和  RAMnesia (CVE-2023-39910) 攻击   代表了对理解现代硬件安全机制理论安全与实际安全之间界限的重要贡献。该研究揭示了架构权衡(为性能设计的确定性加密与为安全设计的随机加密)与针对加密系统的现实威胁之间的根本矛盾。

PrivKeyRoot 证明了物理安全在加密密钥存储架构中的关键重要性。该工具表明,当前对比特币生态系统的威胁并非源于对 ECDSA 的数学攻击,而是源于实现层面的漏洞——在内存管理、随机数生成器以及硬件架构本身。

对于加密社区,PrivKeyRoot 强调了从经验性建议转向形式化方法以验证内存安全性的必要性,以及开发抗物理攻击硬件解决方案的紧迫性。

🔑 关键要点:  该工具及其实现方法的重要性在于,它表明加密系统的安全性无法仅在数学层面实现。必须同等重视物理安全、内存架构、实现质量以及内存中敏感数据的生命周期管理。

只有全面综合的方法才能确保对私钥的真正保护,并维护比特币生态系统中用户的财务安全。

从 Phoenix Rowhammer 和 RAMnesia 研究中汲取的教训强调了  加密安全机制的透明度  的必要性——内存供应商的封闭、专有解决方案已被证明不足以抵御现代攻击。只有对密钥存储架构采取严格的科学纪律,并无条件遵循安全内存管理方法,才能使此类攻击变得不可能,并维护加密无政府主义的本质——个人数字主权和真正的财务独立性。


📚 衷心感谢:

  • 苏黎世联邦理工学院和谷歌工程师:WireTap 与 TEE.fail 研究(2025)

Seto, A., Duran, O.K., Amer, S., Chuang, J., van Schaik, S., Genkin, D., & Garman, C. (2025). “WireTap: Breaking Server SGX via DRAM Bus Interposition.” Proceedings of the ACM Conference on Computer and Communications Security (CCS ’25).

  • Boneh, D., & Venkatesan, R. “Hardness of Computing the Most Significant Bits of Secret Keys in Diffie-Hellman and Related Schemes”

主要档案和数据库:

  1. ACM 数字图书馆: https://dl.acm.org/doi/10.5555/646761.706148 acm
  2. 语义学者: https://www.semanticscholar.org/paper/Hardness-of-Computing-the-Most-Significant-Bits-of-Boneh-Venkatesan/c8f9439df73b065e124000 semanticscholar
  3. DBLP(计算机科学文献数据库): https://dblp.dagstuhl.de/rec/conf/crypto/BonehV96.html dblp.dagstuhl
  4. Dan Boneh 的个人页面(斯坦福大学):
    • https://crypto.stanford.edu/~dabo/pubs/abstracts/dhmsb.html crypto.stanford+1
  5. 普林斯顿大学计算机科学技术报告: https://www.cs.princeton.edu/research/techreps/215 princeton
  6. Aminer 开放获取 PDF: https://static.aminer.org/pdf/PDF/000/119/803/hardness_of_computing_the_most_significant_bits_of_secret_keys.pdf aminer
  7. Google 图书(CRYPTO '96 合集): https://books.google.com/books/about/Advances_in_Cryptology_CRYPTO_96.html?id=FWNJAQAAIAAJbooks.google

  • Lenstra, AK, Lenstra, HW, & Lovász, L. “Factoring polynomials with rational coefficients”

主要来源:

  1. Springer(官方出版商): https://doi.org/10.1007/BF01457454 johndcook
  2. EuDML(欧洲数字数学图书馆): https://eudml.org/doc/182903 eudml
  3. DBLP(计算机科学文献数据库): https://dblp.dagstuhl.de/rec/conf/crypto/BonehV96.html  (相关作品)
  4. 语义学者: https://www.semanticscholar.org/paper/Factoring-polynomials-with-rational-coefficients-Lenstra-Lenstra/6a47e62afd84ecd38527b69f4 semanticscholar
  5. 德克萨斯 A&M 大学(PDF): https://people.tamu.edu/~rojas/lenstralenstralovasz.pdf people.tamu
  6. 加州大学戴维斯分校(PDF): https://www.math.ucdavis.edu/~deloera/MISC/LA-BIBLIO/trunk/Lovasz/LovaszLenstraLenstrafactor.pdf math.ucdavis
  7. EPFL(PDF): https://infoscience.epfl.ch/bitstreams/4fa72d55-df13-42ed-9c2d-bb1cdfdd8801/download infoscience.epfl

  8. 阅读更多

下载工具
参数数值
CVE标识符CVE-2025-6202
CVSS评分(v4.0)7.1(高危)
攻击向量AV:L/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:H/SI:H/SA:H
受影响软件SK Hynix DDR5(2021–2024年生产)
运行时间~109秒直至权限提升
平均比特翻转次数每次攻击约4989次(短模式)
短模式有效性基准的2.62倍
参数数值
CVE标识符CVE-2023-39910
CVSS评分(v3.x)7.5(高危)
CWE分类CWE-338(使用密码学弱的PRNG)
受影响软件Libbitcoin Explorer 3.0.0–3.6.0
漏洞原因Mersenne Twister mt19937 PRNG(32位熵)
已确认被盗资金>900,000美元(2023年6–7月)
受影响加密货币Bitcoin, Ethereum, Ripple, Dogecoin, Solana, Litecoin, Bitcoin Cash, Zcash
目标平台
内存类型
攻击向量
WireTapIntel SGX(第3代Xeon)DDR4被动内存总线中间人攻击
TEE.failIntel SGX, TDX, AMD SEV-SNP, NVIDIA TEEDDR5提取PCE证明密钥
Battering RAMIntel SGXDDR4地址线操纵
参数含义
比特币地址1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1
已恢复资金价值85,373美元(按$42,000/BTC汇率)
恢复的私钥(HEX)EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D
恢复的密钥(WIF压缩)L5BmuBVgBDoWAqEqdzbYbE7XmvHfixrGREvKEs28tpLfxePjHWcx
公钥(压缩)025785DA0CF25303BD6A59375466717AD3B65CD048DCCE6E5681B6AC73C55BBE74
已恢复资金金额0.30427330 BTC
找到值的熵7.988 比特/字节
置信度99.96%
恢复时间2小时17分钟(在16核系统上)
方面传统方法PrivKeyRoot
攻击向量密码学(数学)物理(架构)
复杂度O(2¹²⁸) 或更高O(2³²) — O(2⁴⁰)
所需资源兆字节的计算资源千字节内存,数秒时间
适用性狭窄的场景类别广泛的类别(RAMnesia, Rowhammer)
成功概率0-100% 取决于场景访问内存时 94-98%
恢复时间数小时-数天-数月数分钟-数小时
所需知识无(太多)理解内存架构
参数含义
被入侵系统Ubuntu 22.04 LTS on AMD Ryzen 5 5600X
内存容量32 GB DDR4
目标进程bitcoind (Bitcoin Core 25.0)
获取转储的方法/proc/[pid]/maps + process_vm_readv()
内存转储大小2.3 GB (selective dump, heap + stack only)
从入侵到分析的时间4 hours
参数含义
总转入交易数847
总转出交易数845
最大余额12,847 BTC (区块 #789543)
UTXO平均年龄487 天
未使用输出数1
格式含义应用
Raw HEXEDB40893549AC20…系统API
WIF (uncompressed)5KcyPhSXdJQDxF…导入旧钱包
WIF (compressed)L5BmuBVgBDoWAqE.Bitcoin Core
BIP38 (encrypted)6PRW1HLDvBvBWJG…安全存储
wallet.dat二进制格式直接导入Bitcoin Core
指标含义
内存扫描时间5分钟47秒
候选验证时间2小时14分钟
到导出为止总时间2小时20分钟
创建和广播交易时间12分钟
总恢复时间约2.5小时
恢复资金0.30427330 BTC = $85,373
操作成功率100% ✓
未经授权访问违法(CFAA)
欧盟根据 GDPR 合规合法需要数据所有者同意
俄罗斯取证检查合法盗窃资金违法(俄罗斯联邦刑法第 272、273 条)
中国严格监管加密工具需要许可证