研究 · 漏洞
2013年Android SecureRandom漏洞
这是我们关于“弱随机性”研究的一部分:请参阅《加密钱包中的弱随机性》概述。
2013年,Android的随机数生成器并没有达到应有的随机性——而那些依赖该生成器的比特币钱包,正是通过它们所签署的交易泄露了私钥。
这是一个具有里程碑意义的案例,展示了平台级随机性缺陷如何直接导致财务损失。2013年8月,由于Android系统中SecureRandom实现存在漏洞,原本被认为不可预测的随机值实际上并非如此,导致受影响设备上的比特币钱包泄露了密钥。本页面记录了事件经过,并解释了为何这对旧版Android钱包至今仍至关重要。
为什么签名需要随机性
每次比特币钱包进行转账时,都会使用ECDSA对交易进行签名,而每个签名都需要一个全新的、不可预测的随机数——即“nonce”(非ce),或称k值。 ECDSA 的安全性完全取决于该数值在每次签名时都是唯一的且保密的。如果在两个签名中重复使用相同的k 值,根据数学原理,任何人都能通过这两个公钥签名推算出私钥。这是密码学中“微小失误,全盘皆输”这一原则最鲜明的体现之一。
SecureRandom 漏洞
Android 应用从系统的SecureRandom 函数中获取随机数。2013 年有报道称,在某些条件下,Android 的实现并未正确设置初始化种子——这可能导致返回可预测或重复的输出结果。对于比特币钱包而言,这意味着签名中的关键k值有时会重复出现。同一钱包中两笔交易若重复使用了相同的k值,观察者便能直接从公共区块链上获取推导出私钥所需的所有信息。
影响
由于比特币交易是公开的,攻击者可以扫描区块链,寻找那些暴露身份的重复随机数,并清空受影响的钱包。许多安卓比特币钱包都受到了影响,在生态系统做出反应之前,资金已被盗走。官方回应敦促受影响的用户生成新密钥并转移其币,钱包应用也发布了修复补丁——但任何已使用重复随机数签名的交易,其密钥都已永久暴露。
识别受影响的钱包
指纹存在于链上:同一地址生成的两个或多个签名共享同一个随机数(nonce)。2013年左右的一款旧版安卓比特币钱包曾对多笔交易进行签名,这正是classic 特征。即使某个钱包表面上从未被清空,也可能曾对存在漏洞的交易进行过签名;如果该钱包仍持有资金,任何发现这一模式的人都可能获取这些资金——因此,进行风险评估是值得的,而非直接假设其安全无虞。
这对复苏意味着什么
对于所有者而言,这一漏洞是一把双刃剑。如果您的旧版 Android 钱包因重复使用非ce值而泄露了密钥,那么私钥便可从您自己的公开交易记录中推导出来——只要能提供所有权证明,这便是一种合法途径,可用于恢复您已无法访问的资金。我们将此严格视为所有者恢复:根据客户可证明其拥有的钱包的签名重建密钥,以便转移其已无法访问的资金。
更广泛的启示
Android SecureRandom 事件是一个典型的警示:钱包的安全性完全取决于其底层的随机性。该事件与 Randstorm 和 MilkSad 属于同一类问题:本应稳健的密码学因可预测或存在缺陷的随机源而遭到破坏。不同之处在于,此次故障是通过签名而非密钥生成导致密钥泄露——但其原理以及用户恢复逻辑是相同的。
如果你有一款2013年左右的安卓电子钱包
如果你在2013年左右曾将比特币存放在安卓钱包中,且至今仍保留着相关密钥或交易记录,请将该钱包视为可能已遭入侵:其中剩余的资金应转移至基于可靠随机性机制构建的钱包中。如果你已无法访问该钱包,那么“nonce”漏洞实际上可能成为你作为所有者重新获取访问权限的途径——在彻底放弃这些资金之前,值得对此进行评估。
为什么多年后这仍然很重要
人们很容易将2013年的漏洞视为陈年旧事,但比特币的永久性改变了这一局面。每一条曾被广播过的易受攻击的签名仍原封不动地保存在区块链上,因此,十年前因重复的非ce值而泄露的密钥将永远暴露——区块链不会遗忘。 这意味着那个时代的老旧安卓钱包至今仍是需要重点考虑的问题:任何仍持有余额的钱包,只要有人扫描该模式,任何人都能访问;而任何所有者已失去访问权限的钱包,都可能通过这一漏洞被恢复。永久性公开数据中的漏洞永远不会完全过时,这正是它应被收录于此类参考资料中,而非作为2013年脚注的原因。
我们的文档
KeychainX 将此作为我们关于弱随机性研究的一部分进行记录,该研究还包括Randstorm和MilkSad。比特币社区 2013 年发布的原始安全公告中已包含完整披露;我们的重点是帮助合法所有者找回受影响的钱包。如果您有一款无法再访问的旧版 Android 比特币钱包,不妨查看一下。
常见问题
我该如何判断我的签名是否重复使用了非ce?
链上数据显示,来自同一个地址的两笔交易使用了相同的nonce值。在评估过程中,我们可以检查该地址的交易记录,以确认是否存在此类模式。
2013年Android的SecureRandom漏洞是什么?
Android 系统中 SecureRandom 存在一个漏洞,会导致输出结果可预测或重复。使用该功能的比特币钱包会在不同签名中重复使用 ECDSA 随机数,这使得任何人都能从公开交易中推导出私钥。
资金是如何被盗的?
攻击者在区块链上扫描了重复使用同一nonce的签名,并据此推算出私钥,随后清空了这些钱包——所有操作均基于公开数据。
我以前用的安卓钱包会受到影响吗?
如果该地址大约创建于2013年左右且签署过多笔交易,那么这种可能性是存在的。相关风险表现为链上出现重复的签名非ce。任何剩余资金都应尽快转移。
这能帮我找回自己的钱包吗?
如果您的钱包因非ce值重复而泄露了密钥,则该密钥可从您的公开交易记录中推导出来——作为已证实的所有者,这对于您而言是一条合法的密钥恢复途径。
康复治疗需要多少钱?
按成功结果付费:仅在成功找回钱包的情况下,按找回金额的一定比例收取费用,且无需预付任何费用。