原载于Yibite.com / Velaciela
本文作于2014年6月11日,作为工作的一部分,在作者所在公司投稿。十年过去了,公司早已不存在,但有网友还是帮助保存了本文(虽然没有署名),使得我可以找回本文,十分感谢他们的帮助。
每当谈起比特币的安全性,很多人总是会怀疑“比特币万一被破解了怎么办?”。还有人会用计算机的发展来质疑,比如万一出现了非常强大的计算机,甚至是“量子计算机”,比特币就会被一下子破解,从而变得毫无价值。对于这种质疑,比特币圈子内的朋友一般都会置之一笑,甚至去嘲笑外行人“对计算机和密码学的无知”。
其实就像人类探索自然规律的过程一样,在浩瀚的宇宙面前,我们所知甚少。更何况破解比特币私钥密码涉及密码算法和量子计算机技术,同时是数学和物理学前沿的难题。在这种问题上,现代人不理解量子计算机,就和古人不理解电灯一样正常。所以比特币密码是否会“被破解”,其实是个严肃的问题。
比特币体系的安全性,其实是个比较复杂和专业的问题。在此需要分开几个部分来讨论。比特币体系的安全性机制主要分为私钥-公钥密码组合,以及SHA256摘要运算、blockchain 块链POW机制等几部分,构成了多组不同原理、互相依托、互为制衡的多层次安全体系。
一、 私钥ECC密码体系被破解的风险
比特币的公私钥体系不同于我们看到的“比特币地址”,而是储存在用户钱包中的一个密码。
在比特币交易过程中,用户使用钱包中的“私钥”在blockchain上完成电子签名,经过 blockchain确认后交易即为有效。
而“公钥”是由“私钥”通过一个“不可逆”的数学变化得出,随后“比特币地址”再由公钥做两次“不可逆”的摘要运算得出。
三者推导关系:私钥 >> 公钥 >> 比特币地址。过程均“不可逆”。拥有私钥便拥有一切,因此必须对私钥保密,一旦私钥失窃,比特币就被人窃取了。
因此很多人认为,不可能从比特币地址反推出私钥,只要保管好私钥,比如说使用离线储存或者加密储存就可以高枕无忧了。
其实如果仔细分析,问题就出在由私钥推导公钥的“不可逆”过程上。比特币的私钥推导公钥需要用到椭圆曲线密码算法ECC,这是一种广泛应用的安全技术。这种技术建立在以下一个数学基础上:
通过私钥P求公钥Q的数学运算过程易得,反之由Q推导P的过程目前人类的数学尚未解决。
因此只要对P保密,就可以使用Q作为公钥公开,并用P给Q签名即可证明身份。
然而,并未有数学的严格证明由Q不可求P,换句话说,也可能只是目前人类的数学水平不够而已。(关于这个问题比较专业,详情请见:)http://zh.wikipedia.org/wiki/%E6%A4%AD%E5%9C%86%E6%9B%B2%E7%BA%BF%E5%AF%86%E7%A0%81%E5%AD%A6
对这个数学问题的描述是有“困难性”,而不是“不可能性”。因此这个加密的逻辑类似于RSA密码算法利用的大数进行因数分解。虽然对因数分解人类尚无什么好办法,但不代表永远没什么好方法。这种方法甚至不一定是数学手段,也可以是物理手段,如量子计算机一旦基础研究有了重大突破,完全可以有方法从Q求出P,进而破解比特币私钥系统。
因此,私钥通过椭圆曲线密码算法进行的运算并非“不可逆”,只能说“目前不可逆”。一旦基础理论有了重大突破,通过数学或物理手段有可能完成逆运算或暴力破解。所以外行人所说的“比特币私钥被破解”并非完全不可能。
由于这个原因,中本聪对比特币地址采取了更谨慎的做法,并未使用公钥或公钥的可逆变形直接作为比特币地址。虽然公钥完全可以充作比特币地址使用,但中本聪认为仍然不安全,乃至于把公钥连续做了两次SHA256和RIPEMD160摘要运算,然后得到的结果经过变换后才作为比特币地址。
二、 摘要算法的安全性
我在另一篇文章中介绍了比特币私钥的安全性是用宇宙法则维护的,穷尽太阳的能源也无法遍历私钥。这是否与我上面说的ECC算法存在隐患互相矛盾呢?
事实上,我在文中所述的内容是指由于SHA256之类的摘要算法无法完成逆运算,因此必须对2的256次方位的私钥进行穷举。而这个数字极为巨大,超过我们可见宇宙好几个数量级,所以从暴力穷举破解的角度上说,比特币的密码比宇宙还安全。
但是否可能从数学上找到对SHA256之类摘要算法的逆运算过程呢?就像我上文所说的,可能某种数学问题暂时不可解,不等于永远不可解。这就要从摘要算法的基础说起了。
摘要运算不是加密运算
摘要算法和RSA\ECC乃至AES之类的密码算法具有本质区别。严格的说,哈希(HASH)算法不是一个“加密算法”。之所以叫摘要算法,是因为HASH算法是从任意长度的输入信息中,抽取给定长度的输出。输出的内容等于是对输入内容的一个摘要。
因此,事实上对于输入长度大于输出的摘要运算,摘要过程是丢弃了大部分信息的。从逻辑上说完全不可能通过摘要值反推出原值。因为对于一个摘要值,可以有无数个原值,你怎么判断是哪一个呢?
假设我现在对一个数字取第一位和最后一位做摘要“
前后各取一位摘要(1234567890)=10
前后各取一位摘要(1xxxxxxxxx0)=10
此时,无法通过“10”还原出“1234567890”,因为中间的内容丢失了。有人说只能对中间8个数字进行穷举,从00000000穷举到99999999,但如果摘要输入不限制长度,则为:
前后各取一位摘要(123……n……90)=10 如果不知道n的位数,或者n的位数极大,则这个摘要是完全不可穷举的,更无从谈起用“10”通过数学手段反推输入值了。 在比特币私钥体系里面,私钥长度是256位,意味着如果无法反推,就必须遍历全部的256位数字,因此是不可行的。
散列碰撞不是破解
刚才上面那个首尾各取一位摘要的例子虽然解决了不可反推的问题,但没有解决“相同结果”的问题。任意两个首尾为10的数字,都可以得出同样的摘要值。这样就无法认定“10”是对应哪一个指定的输入值,这个问题就是散列碰撞。
理论上说,一个固定长度的散列输出如果对应无数个不限长度的输入,必然也会有无数个可能的输入对应。但如果输出值Y是一个很大的数字,从概率上说不太可能随机取值就刚好满足HASH(X)=Y,所以认定持有Y的人一定持有X。
假设HASH(X)=Y ; 且Y为一个256位整数,此时因由Y无法反推X,我们认为随机取一个256位整数Y,恰好使Y=HASH(X)的概率极低,在一次实验中小概率事件一般认是为不可能事件,故我们认为持有Y的人即持有X。
因此可以通过这个性质完成网站密码之类的身份认证应用。在一个典型的网站密码验证应用中,网站保存了用户密码的某个特定变换的散列值,如P=HASH(用户名+用户密码)
并给客户发送一个随机数R,要求用户将 PR的结果发还服务器。服务器在本地做PR运算,如PR(客户)=PR(服务器),就允许客户登录网站。
假定散列函数为HASH,HASH(X)=Y,可能存在HASH(X’)=HASH(X)=Y
目前所谓的碰撞MD5之类的解法,就是通过某种算法,得出一个符合HASH(X’)=Y的X’值,但这个X’值不一定等于原始输入X。
由于对于给定的散列值Y,有无数个X可以符合要求,因此一个符合要求的X’,不等于当初用来运算的那个X。因此散列碰撞只可能用来欺骗网站的登录要求(即通过碰撞得到符合要求的P值),但无法真正得到用户的密码。
假设有公钥X,SHA256(X)=Y,接着对SHA256进行碰撞,如果不限制X的取值范围,有任意SHA256(X’)=Y符合要求,但并不能保证X’就是公钥。由于X有无数个解,X恰好就等于公钥的概率大概低于你在宏观状态下以量子态隧穿过墙壁的概率……
所以在比特币的应用中,对公钥进行两次不同类型的摘要运算后得到比特币地址,从理论上是绝无可能从比特币地址反推出公钥的,更不用说反推出私钥了。而要穷举256位的私钥则要耗费巨大的能量,从物理上不可行。因此公钥到地址这一步是绝对安全的。
*准确的说,公钥推导地址的过程是 地址=ripemd160(sha256(公钥)),即第一次对公钥做SHA256摘要,再对摘要结果做RIPEMD160摘要。
顺便说一句,挖矿也是散列碰撞,只不过是在给定的取值区间内寻找符合条件的解。由于这种解可能不是唯一的,因此有时候会出现区块被拒绝,就是因为别人比你先找出来了另一个合乎要求的解。
三、 危险的公钥和找零机制
从上文可知,ECC椭圆曲线加密算法的“不可逆”是建立在“找不到数学解”,而非“数学证明无解”上。而SHA256类的散列运算是建立在摘要的基础上,而摘要丢失了信息,是不可能直接反推的。但是量子计算机是否能通过穷举解决这个问题呢?
危险的公钥
我们目前还不清楚量子计算机的实际工作原理,人类对物质的微观结构所知甚少。我们所知的宏观宇宙规律和物质在微观的量子态规律是不相容的。目前从理论上认为,量子计算机能同时完成大量计算,这种“同时”不是电子计算机的线性伪同时,而是基于微观粒子量子态的多态性的真正“同时”。
虽然目前量子计算机还存在诸多理论和实践障碍, 但是不排除人类有一天真能造出量子计算机,可以同时完成极大量的运算。或者数学技术研究领域出现重大突破,解决了ECC的数学难题。这时ECC算法就会被突破,掌握公钥就能求得私钥,从而破解比特币。
而比特币在交易时因为要对公钥签名,一旦你用一个地址进行了交易,公钥就会出现在网上。这就给了别有用心的人记录的机会,有人可能会记录所有用过的公钥,以备未来可能时进行破解。因此,这就给了比特币以一个巨大的安全隐患。
【此处应有一个比特币地址生成过程示意图,原图已丢失】
找零机制
虽然目前比特币面临的主要问题还是51%攻击、政府禁止之类的社会学问题,可比特币的作者却为比特币成功后将面临的技术难题提前做了准备——这就是找零机制。
比特币的找零机制在官方钱包是默认打开的。这个机制很简单,就是如果一次没有将一个地址内的金额全部用完,就将剩余的金额转入另一个新地址。并把这个新地址的私钥存在钱包文件里。因此官方钱包中是看不到具体的私钥的,大量的更新私钥将存在钱包文件中。
很多人说找零机制是为了制造大量的交易记录,从而保护隐私,让别人不能通过blockchain追踪交易记录。还有人觉得找零机制造成地址频繁变动,非常不利于交易,以至于大部分在线钱包和客户端钱包都关闭了找零模式,就是指定找零地址为原地址,以便让余额回到原来的地址。
甚至比特币钱包找零还会带来一些其他的问题,由于QT客户端只能存放100个私钥,如果一个钱包文件大量交易,可能会导致用户备份的钱包文件中不含有备份后生成的新找零地址。而一旦钱包丢失,备份也就无法恢复这些地址内的金额了。这种情况引起了很多人对官方钱包找零机制的抱怨。
这看上去很麻烦,还带来了一些损失,可是很多人没想到找零机制事实上避免了公钥的泄露风险。找零机制保证了存有余额的比特币地址只被使用一次。一但一个地址被用来向外转帐过一次,公钥就有暴露的风险,进而可能暴露在可能的数学和物理攻击风险下。找零机制保证了剩下的金额被送进一个公钥从未在网上出现过的新地址里。这个新地址的公钥还从未使用过,也就谈不上暴露了。由于地址是公钥经过两次SHA256和RIPEMD160计算出来的,以这个宇宙的全部能量可能都也无法穷举。
因此,找零机制虽然讨厌,但无需废除。只要平时将找零地址设置为原地址即可。一旦人类在数学和物理上取得重大突破,立即拨动开关,将找零地址设置为随机新地址。可以说,这是中本聪送给未来的一个礼物。
四、来自星星的中本聪?
如果暂时不考虑政治伦理风险和POW机制导致的社会学风险,整个比特币的安全体系就建立在ECC数字签名、SHA256摘要运算和概率论原理上。
其中摘要运算是这个系统的核心,同时负责保护ECC运算的结果——公钥,和确保挖矿不能反演结果,只能穷举给定位数的值,。同时比特币还设计了动态平衡的难度系统,以便让概率原理充分发挥作用,使取得合格随机数的概率趋近于算力分布。同时比特币使用了一个收敛的等比数列来控制发行量。如果说“数学是宇宙的语言”,比特币就是第一种用这种语言书写的货币作品。
散列过程的物理本质
“宇宙的熵在升高,有序度在降低,像平衡鹏那无边无际的黑翅膀,向存在的一切压下来,压下来。可是低熵体不一样,低熵体的熵还在降低,有序度还在上升,像漆黑海面上升起的磷火。”
而中本聪选择摘要算法作为整个系统的核心,显然是深思熟虑的结果。是因为摘要算法的特性是建立在宇宙中最强大的定律——热力学第二定律上。
摘要算法的本质是:运用计算机做功,丢弃输入中的部分或大部分信息。这个行为类似与你对一块石头做功,击破一个杯子。即便杯子的材料全部保存,要再熔铸回原样,所消耗的能量要远大于你打破杯子消耗的能量。而对长数据做HASH计算,甚至相当于把杯子完全打散成原子,并从中取几个原子,不可能根据这几个原子按原样造一个杯子。
数据的丢失本质上是秩序度的降低,因此散列运算本质上是个熵过程。计算机消耗能量摧毁了部分数据,随着这部分能量散失到环境中而无法还原。而整个比特币开采过程是个负熵过程,通过穷举散列值建立起有秩序的blockchain,代价是电能转换成矿机嗡嗡作响的风扇中排出的热量。
就像黄金无法再回到金矿石中,能量就永久凝结在这帐本代表的秩序中了。比特币的不可逆运算就是智慧生命改造自然创造文明的过程。
找零机制的深长意味
而中本聪在先后用两次摘要运算保护公钥之余,还专门设计了找零机制,就是为了预防ECC这类“理论不可逆”问题被破解。因为ECC之类的密码算法依赖的数学问题要么是“暂时不可解”,要么是需要巨大计算量,而这些在未来是完全有可能通过基础理论的发展和技术进步得以解决。
虽然科技的发展不以人的意志为转移,但不要以为ECC涉及的那些数学问题或是量子计算机的理论障碍是天堑,几十年前人类面对相对论时和一百多年前面对电灯时都抱有同样的想法。
反观人类二十世纪的发展以及近十年的信息科技的发展,可以看到,人类目前所掌握的知识可能只是海滩上的贝壳,真理的大海还没有见到。而中本聪设计比特币之初,就预留了足够的余地应对一个世纪内的技术爆炸。甚至在无法寻找完备的解决方法而不得不依赖ECC之类密码学解决方案时,竟然默认开启找零来提示这个问题。这不仅是深谋远虑,甚至可以说是苦心孤诣了。
看到这里,读者是不是甚至感到一丝恐惧?中本聪究竟是何方神圣,甚至是不是地球人,或者是不是这个时代的人?如果他只是想做个geek的玩具,甚至是恶意圈钱,完全可以用公钥直接当地址,而且也不必设计找零机制,又有谁会提出问题或者反驳他呢?而他设计的这些冗余安全机制,包括对椭圆曲线的选择时避开了美国政府可能的后门,移交权力给基金会,最后完全从人们视线中消失,让人们觉得他不像是在搞一场骗局,而是真的要完成一项到2140年的工程。
他究竟是要设计一个下个世纪的货币系统,还是在提醒各国当权者目前信用货币制度的困境,或是在为不可避免的货币灾难准备诺亚方舟?从某种意义上说,比特币甚至是一种对经济和政治的全面反思,中本聪用冰冷的数学公式提醒人们,我们的文明发展程度和社会制度已经出现了脱节,迫使我们思考自由市场经济原则是否存在,私有财产是否得到保护,甚至人是否是人,是否有权利决定自己的行为,今后我们究竟需要一种什么样的社会体系。
尾声
诚然,比特币还是一个实验,由于这样或那样的问题,它随时可能失败。但正因为如此,我们才更要更加谨慎。正如“弱小和无知都不是生存的障碍,傲慢才是”,自己“觉得”比特币体系坚不可摧,往往不是一件好事。只有正视比特币安全机制的可能弱点,设计相应的应对方案,才能保证系统的安全,而不是简单的把找零地址设到原来的地址上。同样的,比特币的问题也不止于技术,从中本聪手中接过比特币这件礼物的我们,更有理由接纳这件礼物的深层含义,那就是对问题的深入和全面思考。