比特币的地址生成过程分为以下几个步骤:
- 随机生成一个32字节(256bits)的私钥k
- 采用椭圆曲线算法,以私钥k为起点,将其与曲线上预定的生成点G相乘以获得曲线上的另一点,也就是相应的公钥 K
- 进一步SHA256=>RIPEMD160 得到地址原始值A: A = RIPEMD160(SHA256(K))
- 对A进行Base58Check编码,添加前置版本号后Double SHA256取最后四个字节作为校验位,最后 Base58Check(前缀 Base58Check(A) 校验)得到最终地址
整个过程中,私钥的生成空间有256bits,由私钥推出地址过程中,由于用到了RIPEMD160散列,所以生成空间共有160bits。
也就是说,去除版本号变化,某一类型的比特币地址最多有 2160个。
为什么有步骤3呢,不光增加了地址复杂度,还降低了HASH碰撞空间(从256bits降到160bits)。
所以中本聪的选择只是带来了不必要的复杂度和浪费吗?最后证明,答案是否定的。有另外一个非常好的理由去使用这个”公钥的哈希值”的地址结构:量子加密技术。量子计算机可以破解椭圆曲线数字签名算法(也就是说,给定一个公钥,量子计算机可以相当快速的找到对应的私钥),但它们不能相类似的逆转哈希算法(或者说他们可以,但是将需要花掉280个步骤来完成一个比特币地址的破解,这仍然是相当不可行的)。因此,如果你的比特币资金存放在一个你没有支出过的地址里(这意味着公钥是没有公开的),它们在量子计算机面前也就是安全的,至少在你把它们花掉之前。有理论上的途径可以让比特币完全免于量子计算机的威胁,但一个地址只是一个公钥的哈希值的事实,意味着一旦量子计算机真的出现了,在我们全面切换之前攻击者可以造成的损失要小得多。
请参考:
http://www.8btc.com/satoshis-genius-unexpected-ways-in-which-bitcoin-dodged-some-cryptographic-bullet
那么是不是我们就此可以高枕无忧了呢?
2160 的散列空间,也足够对抗HASH碰撞了。现在计算机普遍的频率为GH/s的量级,假设我们有1EH/s的算力来碰撞,有效的比特币地址为10亿个,2160/260/230=270,换算成年单位大概是1015年,假设宇宙年龄为100亿年,那么我们碰撞出一个私钥的时间为1015/1010=100000 个宇宙轮回,就是宇宙毁灭重生100,000次,我们有可能破解一个比特币私钥。
那么有人质疑比特币的安全性,我们大可以傲娇的说:”没错,比特币在数学上不是绝对安全的。但我可以保证,它比这个宇宙安全的多。你相信明天宇宙就会爆炸吗?不相信的话,就相信比特币,洗洗安心睡吧。^_^”
事实果真如此吗?
让我们看一下Large Bitcoin Collider这个项目。
该项目被称为大型比特币对撞机(LBC)。大型比特币对撞机尝试进行加密碰撞,它本质上证明了一个据称独特且随机的数字字符串可以重复。一路上爱好者们都在利用该项目的强大计算能力来尝试和破灭比特币的算法规则,最后打开其他人所拥有的比特币钱包,并有可能在里面拿走这些比特币。
是的,他们就是简单粗暴,他们试图从1穷举碰撞到2160来”打捞”比特币私钥。
我猜你肯定会说:哇咔咔,这帮傻小子,打捞到宇宙末日也不会有啥的
这个项目已经被贴上了很多标签:不可能,违法,毫无意义等等。
一些让人惊奇的事情
这个项目从2016年4月份开始运作,算力逐渐壮大到1GH/s的碰撞强度,到目前(2018-04)为止,发现了什么?
事实上他们刚刚碰撞到254级别,按照道理来说他们离发现第一个私钥还相隔了xxxxxxx个宇宙轮回,事实呢?
他们共发现了16个有效的私钥,其中有4个地址是真实有效并且有余额的,共打捞了不到1个BTC。当然,他们花费的成本可能已经远远超过了所得,但是毕竟这对人们信奉的”比特币安全牢不可破”产生重击。
他们骗人,用事先生成的地址来发送交易,然后蒙蔽世人
事实上只要在bitcointalk.org论坛上仔细追踪一下这个帖子,就会发现这个项目完全是可信的,发起人十分严谨,记录了每次碰撞成功的结果,并且时间点上并无伪造的可能
https://bitcointalk.org/index.php?topic=1573035.0
哇,比特币被攻破了,我要赶紧卖卖卖
事实上我们还是要强调比特币的设计比起这个星球上所有的银行和金融机构要安全的多,比起担心你的币,还是多担心一下你在人行总账上的资产账户吧。
那这种事情怎么解释呢?
- 不是所有人的私钥都是那么”随机”,有理由相信,早期的一些玩家或者说一些钱包生成私钥的机制并不是那么完善,他们采用的熵源不够随机,造成私钥的值太小,被碰撞机发现了
- 总有一些人们,对于随机字符有莫名的恐惧,他们采用”脑钱包”来让自己更有控制感,相信我,大部分”脑钱包”的生成密语并不是多好,可能你会拿到一个被碰撞概率大得多的私钥。那些手头有大量”社工库”的坏小子们,是无法抵挡去碰撞攻击你的私钥的诱惑的
- 也许,我是说也许。数字货币的安全性设计是如此的健壮,健壮到人们忽视了最基本的问题:历史上从来没有哪一个系统能把所有东西都暴露在外,让人们随意碰撞攻击。这种时候,安全性最薄弱的环节还是在于人们的意识
那我们要如何保护自己呢?
- 尽量采用最新的,社区公认的健壮的钱包
- 如果你要用脑钱包,确认你明白其中的风险,并且自己最好对生成的私钥做一个安全评估
- 一个地址发送一笔转账后就更换地址
一些后续
LBC这个项目遭受了很多人的误解和攻击。有的人认为这是一种偷盗行为。我得说,现有的法律在这里的确是盲点。
我在街上捡了一个钱包,大家都知道送去警局。
我在数字世界里面碰到了宇宙洪荒岁月亿万年一次的大奖,尽管这个奖励可能是从别的一个什么倒霉蛋那里拿来的,不过也没其他人知道,为什么不能看作是无主物品呢?为什么不看成是上天的眷顾呢?