密码恢复就像在开着一个小船,在一望无际的大海上撒网,希望网到全大海唯一的一条小鱼。。。
一、引子
“我亲戚去了,从他电脑上发现了这个比特币钱包,你帮我们恢复吧?”
“我朋友是挖矿的,是特别靠谱的人,他给我这个钱包,我花了360万买了20台高端机器来恢复,跑了半年还没跑出来,你有经验,看看是怎么回事?”
“我朋友欠钱不还,给我这个钱包抵账,能不能恢复出来?”
“我跟男朋友分手了,给我这个钱包当分手费,密码忘记了,能恢复吗?”
“这是我自己的钱包,不小心流传出去了,我有密码线索,你帮我恢复。”
做密码恢复5年,遇到过不少客户拿着公开钱包来找我们恢复,此事年年有,今年特别多。今年遇到过至少50个咨询公开钱包的,今天就来讲讲公开钱包的背后故事。
二、公开钱包难辨真假
公开钱包是指在网上公开出售的BTC/LTC/Doge wallet.dat,以及其他文件。它们让人相信:(1)出售的文件中包含被加密的私钥;(2)有密码就能解密出正确的私钥,从而转出币(3)谁都有可能恢复出密码。基于这三点,出售钱包的网站才能挣钱,才会有很多想以少博大的币友去碰碰运气。
我做这个行业必须要了解公开钱包,因而于2021年花3.5万元购买了60-70个钱包。之后我对这些钱包特征进行了一些分析,发现很难判别真假钱包,这与Wallet.dat的构造相关。
Wallet.dat是一个key-value数据库,保存着关于私钥、公钥、地址等相关的许多数据,其中最重要的是masterkey主私钥和地址私钥,masterkey是主私钥,用来解密地址私钥; 地址私钥可用来生成公钥和地址,也是最终用来签名交易和发送交易的私钥,有了这个私钥,你才能从对应的地址中转币.
为什么说没法判断钱包真假,关键在于wallet.dat很容易被修改,且无迹可寻:
1 公钥可随意写入,即使与私钥不对应,也没有办法证实;这就使得假wallet.dat跟真何以钱包一样可以同步交易、更新余额,只不过打不出币;
2 masterkey密文可随意改写或随机生成,不可能碰撞出对应的密码,即使碰撞出密码,解密文后,也可能是错的主私钥;
3地址私钥密文可随意改写或随机生成,即使masterkey被正确计算出来,但也解不开地址私钥;
三、密码恢复技术和难度
这要从加密过程说起,主私钥和地址私钥的生成过程如下:
1 主私钥生成:随机生成32字节私钥,这就是主私钥masterkey ;
2 地址私钥 :随机生成32字节地址私钥 => 用masterkey加密 => 和公钥一起保存在Wallet.dat中;
3 masterkey 加密保存:用户密码 => N 轮SHA512迭代 => 用于加密masterkey的密钥=>对masterkey进行加密=> 保存在Wallet.dat中;
从上面的过程,我们可以推导出如下解密步骤:
猜密码 => N 轮SHA512迭代 => 用于加密masterkey的密钥 => 对masterkey进行解密=> 解密不成功,继续猜密码;解密成功,用解密出来的密钥去解密地址私钥 => 解密成功转币成功,这才最终成功;如果解密不成功,则继续猜密码。
其中解密主私钥的难度在于:
1 以用户定义的密码经过N次迭代,这个N值每个钱包都不同,从几万到几十万,数值越大,恢复算力越慢,能够尝试的密码数量越少,恢复难度越大。
2 用户密码没有任何线索,密码空间极大。虽然有些公开钱包号称有线索,但这种可信度太低,造假可能性很高,且你没法判断;
3 需要以大算力来穷举密码空间,机房建设费、设备费、电费和管理费以百万、千万计,且很可能永远没有收入。有这么多钱拿去挖矿或做算力租赁,有稳定的收益岂不更好;
4 公开钱包中的公钥、地址私钥、主私钥容易被改,假的可能性很大,谁会拿大量真金白银来恢复一个很大可能是假的钱包?
四、公开钱包的结论
公开钱包说白了就是三句话:
1 你不大可能解密出主私钥;
2 即使解密出来主私钥也不大可能解密出地址私钥;
3 即使解密出地址私钥,地址私钥与公钥不大可能对应,转不出币应该是正常情况;
上文已经把公开钱包的问题分析清楚,想必有不少人已经打消了恢复公开钱包的念头。
但如果你觉得是位面之子,那不妨去试试,说不定能解密个大钱包,一朝化龙。
只是别再编个新剧本,又拿公开钱包来找我了。。。