更新时间:2025-09-09 15:39:00 编辑:丁丁小编
来源:点击查看
简介
定向破解私钥?没那么容易!
最近总有人问,能不能提供个地址,然后就能定向破解出对方的私钥。说实话,这事儿现在基本不可能。物理硬件的限制摆在那儿,想靠暴力破解单个地址,希望渺茫。
助记词会不会被试出来?
很多人关心助记词的安全性,担心会不会出现两个一样的助记词对应同一个地址。这种可能性确实存在,但概率极低。就算真碰上了,也能区分,到时候平台会处理。
现在应用最广的是BIP39助记词标准,它的字典里有2048个单词。常见的助记词有12个或24个单词两种形式。
12个单词的组合可能性是2048的12次方,也就是5.44乘以10的39次方;24个单词的组合可能性更是高达2048的24次方,约等于2.96乘以10的79次方!
10的79次方是什么概念?接近宇宙里所有原子的数量!所以,靠暴力破解根本不可能。就算你用超级计算机,从宇宙诞生开始不停地算,也算不出来。
BIP39规定了助记词和种子生成规则。这些单词都来自一个固定的词库,词汇生成有规矩和顺序,不是随便输入24个单词就能生成加密货币地址的。两个人选到一模一样(词汇一样+顺序一样)的24个词的概率有多大呢?可以说这几乎是不可能事件,就像在宇宙中找一颗原子一样困难。
实际上,哪怕12个词也足够安全了,只是多多益善,词汇越多,意味着种子中的熵越多,能被暴力解码的难度更大,更安全。
你可以在Ian Coleman的助记词生成网站(BIP39 - Mnemonic Code)上多生成几组词试试,感受一下。
上次有人说没详细公布算法,那这次就详细计算下碰撞成功的几率。目前碰撞空间大概在2的136次方级别。
在一台顶级的AWS GPU计算节点上,我们测试的碰撞效率是这样的:
AWS p2.8xlarge 32 vCores Xeon v4, 8x K80 GPUs (50% each) 大约8000万次/秒
就算算力达到1G级别,计算下来:
2^136 / 2^30 = 2 ^106
2的106次方级别的碰撞效率还是遥遥无期啊!
比特币地址的生成,主要花费在ECDSA、SHA256, RIPEMD这三个算法上。但用GPU计算,这三个步骤花费的时间很少。在整个碰撞过程中,大部分时间都耗费在bloomfilter上面。
bloomfilter的原理是多级HASHMAP,这已经是判断一个元素是否存在某集合的极限效率了。但比特币的地址采用base58编码,地址空间是有规律的。简单来说,就是所有比特币地址的前缀分布是有规律的,在base58的编码范围内成正态分布。而bloomfilter的HASHMAP没有这种条件优化。
所以,bloomfilter的算法可以改进,提升效率。
我们分析了截至2018-12以前的所有比特币地址,提取了所有的P2PKH地址(共377059211个地址),取其前4个字符地址前缀,执行:
sort 4prefix.addr|uniq -c|sort -nr
得到了所有地址前缀的分布列表,差不多是个正态分布。
最常用的地址前缀TOP10:
23600 1bit
23086 1btc
21895 13vs
21329 1gbx
21267 1gbt
21267 1gba
21210 1gbb
21206 1gbf
21196 1gbu
21189 1gbr
最常见的是1bit和1btc这两个前缀,各比第三名多出了10000个左右,这多出来的20000个地址应该是Geek们自己生成的虚荣地址。
所有的比特币P2PKH地址,4字母前缀共有42877种组合。
这就是我们可以优化的地方:把bloomfilter的第一级HASHMAP,采用这些前缀组合先来一把过滤,再去执行常规的Bloomfilter,碰撞效率会再提高一个数量级。
我们在自己机器上实验了一下,在GTX750Ti显卡上面,最终效率可以达到10M/s。
瓶颈现在又变成了genaddress环节,我估计在一块RX580卡上面,可以达到和AWS顶配GPU一样的效率。
不过,效率提升亿倍,也不过是2的90次方的碰撞范围,还是遥遥无期啊。
所以我们进入更深入的分析。
早期在http://bitcointalk.org论坛上,Laszlo Hanyecz曾经有过一个想法,就是随着硬件性能的发展,最终碰撞比特币私钥的收益会不会超过挖矿的收益?
中本聪当时的回答是,要达到这个碰撞算力还很远很远。
仔细分析一下:
比特币的地址生成很容易硬件化。如果用这种前缀过滤法,也不需要多少内存。所以可以近似认为:如果硬件化,比特币私钥碰撞的效率和挖矿效率是差不多的。
目前比特币全网算力在40EH左右,就是2的62次方。这相当于400万台蚂蚁S9的机器同时24X365运行!消耗的电力估计已经超过了上海市的居民用电,比特币矿机的能源消耗,完全可以说抵得上一个小型国家的能源消耗了。
如果私钥碰撞达到2的62次方级别,那么毛估估,碰撞几率就能减小到60级别了。
而且另外一个无法预测的情况就是,将来人们的安全意识加强,一般一个地址只要用过就会丢弃掉。所以最终bloomfilter的条目变化会非常频繁,还要考虑一个数量级的损耗。
目前测算,随着手续费用的提高,即使多次减半,将来挖矿的收益估计很长期稳定1-10btc/block级别。如果将来以1年时间碰撞一个私钥的概率期望测算的话,一年大概是2的30次方秒,碰撞效率要提高到2的90次方级别,所以扫U很快达到破解私钥得利 > 挖矿得利的效果。
而且,即使到了这一天,把RIPEMD替换成一种碰撞空间更大的算法就OK了。
这样看来,定性攻破某个地址的私钥的可能性还是微乎其微,不太现实。而同时随机攻破几千万有币地址的各个币种,是不是概率就增加了一个量级的单位?于是我们就开发出了超速版扫U程序,可以确保在几年内碰到一个1开头的比特币大额地址。在真正的量子计算机诞生之前,这或许是破解私钥的唯一最快方法了。