研究 . 概述

加密钱包中的弱随机性

在过去十年的钱包软件发展历程中,同一个错误不断重演:加密机制本身是可靠的,但其基础的随机性却存在缺陷。本文将梳理这一系列失败案例,并阐述为何对用户而言,可预测性正是恢复资产的途径。

更新于2026年7月 · KeychainX — 自2017年起提供钱包恢复服务

大多数灾难性的钱包损失并非源于加密机制的破绽,而是源于随机性的失效。钱包的安全性完全依赖于不可预测的数字,一旦这些数字被证明是可以预测的,无论算法多么强大,整个系统都会崩溃。本页面汇总了我们研究的主要案例(每个案例都有其独立的详细页面),并解释了这些案例的共同特征以及这对数据恢复意味着什么。

随机性是钱包的基础

每个钱包都始于一个秘密:私钥或种子,理想情况下应选自一个如此广阔的空间,以至于无人能够猜出或穷举。这种不可预测性完全源于随机性。如果用于生成密钥的随机性确实无法预测,那么即使面对无限的计算能力,你的钱包依然是安全的。 如果并非如此——如果所谓的“随机”数来自时钟或存在缺陷的生成器等可预测的来源——那么这个广阔的空间就会缩小为一个可搜索的狭小空间,即使世界上最强大的加密技术也无法拯救它。

随机性失效的两种情况

随机性不足会在两个不同的方面对钱包造成危害。 首先是密钥生成:如果种子或私钥是基于可预测的熵生成的,攻击者就能重生成完全相同的密钥。其次是签名:每笔交易的签名都需要一个全新的随机值(即 ECDSA 随机数),如果该值可预测或重复出现,攻击者就能直接根据区块链上的公开交易记录推算出私钥。这两者都可能导致严重后果,现实世界中也存在分别属于这两类的情况。

Randstorm — 可预测的浏览器钱包密钥

Randstorm影响了大约在 2011 年至 2015 年间使用 BitcoinJS 库在浏览器中生成的数百万个钱包,该库的SecureRandom例程收集的熵远低于预期。其结果是,密钥是从一个严重缩小的空间中生成的。这属于密钥生成故障,且波及了大量早期钱包用户。详情请参阅我们的Randstorm 研究报告

《MilkSad》——来自时钟的一粒种子,抑或更糟

MilkSad(CVE-2023-39910)影响了那些种子源自 libbitcoin-explorer 的bx seed命令的钱包,该命令使用 32 位系统时间对 Mersenne Twister 进行初始化。这导致可能的种子数量仅剩约 40 亿个——而通常实际数量远少于此,因为生成时间往往是已知的。这是又一个广泛使用的工具中出现的密钥生成缺陷。请参阅我们的MilkSad 研究报告

Android SecureRandom — 签名时泄露密钥

2013年Android SecureRandom漏洞属于classic 失败案例。Android的随机数生成器可能会返回重复的值,导致比特币钱包在不同签名中重复使用ECDSA随机数——这使得任何人都能根据两笔公开交易计算出私钥。资金因此被直接从链上转移走。请参阅我们的Android SecureRandom研究报告

Trust Wallet——现代版的重现

弱随机性不仅仅是一个历史悠久的问题。2023年,人们发现Trust Wallet浏览器扩展程序使用了一个可预测的伪随机数生成器来生成助记词,因此受影响窗口中生成的密钥可以被枚举——这与十年后Randstorm和MilkSad出现的密钥生成缺陷如出一辙。这提醒我们,每当开发者使用便捷但不符合密码学标准的随机数源时,此类漏洞就会反复出现。

2014年预售中的PRNG角度

我们自己的研究将这一模式扩展到了2014年以太坊预售生成器,该生成器在部分流程中依赖于浏览器的Math.random()函数。在 Firefox 浏览器中,一种特定的熵坍缩现象可能会将未知随机数简化为一个有界的时间戳——这为其中一部分极具价值的钱包提供了一条潜在的恢复途径。请参阅我们关于预售伪随机数生成器(PRNG)的研究

模式:可靠的加密算法,可预测的种子

在所有这些案例中,加密算法本身都没有问题。AES、ECDSA 和哈希算法从来都不是薄弱环节;薄弱环节始终在于输入——一个本应随机的值,却因源自时钟、存在缺陷的平台生成器、浏览器的怪癖,或者在需要加密函数的地方使用了非加密函数,而变得可预测。 正是认识到这一规律,才让我们能够审视一个“安全的”钱包,并提出正确的问题:不是“加密强度如何?”,而是“随机性究竟来自何处?”

为什么可预测性是一把双刃剑

以下内容对钱包所有者至关重要。正是那种让攻击者能够再生成密钥或从签名中推导出密钥的可预测性,也恰恰让我们能够为合法所有者恢复钱包。如果您的钱包是在随机性较弱的情况下创建的,且您已无法访问该钱包,那么导致其安全受到威胁的有限搜索空间,恰恰也是能够重建该钱包的原因——无论是通过遍历可枚举的种子空间,还是通过从您自己的公开交易中推导出密钥。 我们严格将此操作限定为所有者恢复,仅针对用户能证明其所有权的钱包,以归还其原本可能丢失的资金。

如何判断自己是否可能受到影响

如果您的钱包属于以下情况,则可能面临风险:在 2011–2015 年间通过浏览器创建(Randstorm);使用 libbitcoin 的bx 种子或基于该种子构建的工具生成(MilkSad);约于 2013 年通过早期 Android 比特币钱包创建(SecureRandom);在受影响的 Trust Wallet 扩展窗口中创建;或是 2014 年的以太坊预售钱包。 所有这些情况最令人不安的一点在于,这些钱包看起来完全正常——除非有人对该空间进行穷举,否则该漏洞是无法察觉的。如果您的任何一个钱包符合上述描述且仍持有资金,请将其视为存在风险并转移资金;如果您已无法访问该钱包,该漏洞也可能成为您重新获取访问权限的途径。

“优质随机性”是什么样子的

安全方面的教训始终如一:密钥和种子必须来自可靠的加密随机源,且每次签名时都必须使用唯一且不可预测的随机数(现代钱包根据 RFC 6979 标准使用确定性随机数,以彻底消除重复使用的风险)。 请在可信且最新的软件或信誉良好的硬件钱包上生成种子;警惕过时的基于浏览器的生成器和已被弃用的工具;如果钱包是使用上述列表中的任何工具生成的,请迁移到一个新生成的钱包。优质的随机性在正常工作时无迹可寻,一旦失效则后果不堪设想——这就是为什么它值得如此重视。

我们的研究

弱随机性恢复是 KeychainX 工作的核心方向之一,因为早期“丢失”的加密资产中,很大一部分实际上是弱随机性加密资产,正等待着被重建并归还给其所有者。上述每个案例都有各自的详细页面,而本概述将它们整合为一个系列。 我们会随着新案例的出现不断更新和维护这份调查报告——这种现象不会消失,因为随着每一代钱包软件的推出,人们总忍不住想要使用便捷的随机数生成方式。

常见问题

加密钱包中的“弱随机性”是什么?

这种情况是指,用于生成密钥或签署交易的随机数来自可预测的来源——例如时钟、存在缺陷的随机数生成器或非加密函数——从而将庞大的密钥空间压缩成一个可搜索的小空间。加密本身仍然是安全的;问题出在输入上。

该漏洞家族包含哪些漏洞?

Randstorm(浏览器钱包,2011–2015年)、MilkSad(libbitcoin bx 种子,CVE-2023-39910)、2013年Android系统SecureRandom漏洞、2023年Trust Wallet扩展程序问题,以及2014年以太坊预售中的伪随机数生成器(PRNG)漏洞。

“弱随机性”是否意味着我的资金已经没了?

这意味着该钱包存在风险——任何人都可能重新生成该密钥。但对于合法所有者而言,这也意味着通常可以恢复钱包,因为正是导致钱包面临风险的有限搜索空间,使得钱包能够被重建。

我该如何判断我的钱包是否使用了弱随机性?

检查其创建方式和时间:2011年至2015年期间的浏览器钱包、由bx seed生成的助记词、早期Android钱包、受影响的Trust Wallet窗口,以及2014年预售钱包,都是主要的高风险类型。钱包本身看起来很正常,因此创建历史才是关键线索。

受随机性不足影响的钱包还能恢复吗?

通常是为钱包所有者服务。只要提供钱包的创建时间和方式等详细信息(以及一个已知的地址),我们就能对缩减后的种子空间进行扫描,或根据您的公开交易记录推导出密钥。按成功计费,无需预付任何费用。

使用弱随机性生成的钱包?

如果您的钱包符合以下任一情况,且您已无法访问,那么导致丢失访问权限的那个漏洞往往也是重新获得访问权限的途径。请告诉我们该漏洞是如何以及何时产生的——我们将在24小时内给出客观评估。

联系 KeychainX →