比特币找零机制

       每当谈起比特币的安全性,很多人总是会怀疑“比特币万一被破解了怎么办?”。还有人会用计算机的发展来质疑,万一出现了非常强大的计算机,甚至是“量子计算机”,比特币就会被一下子破解,从而变得毫无价值。对于这种质疑,比特币圈子内的朋友一般都会置之一笑,甚至去嘲笑外行人“对计算机和密码学的无知”。
其实就像人类探索自然规律的过程一样,在浩瀚的宇宙面前,我们所知甚少。更何况破解比特币私钥密码涉及密码算法和量子计算机技术,同时是数学和物理学前沿的难题。在这种问题上,现代人不理解量子计算机,就和古人理解不了电灯一样正常。所以比特币密码是否会“被破解”,其实是个严肃的问题。
比特币体系的安全性,其实是个比较复杂和专业的问题。在此需要分开几个部分来讨论。比特币体系的安全性机制主要分为私钥-公钥密码组合,以及SHA256摘要运算、blockchain 块链POW机制等几部分,构成了多组不同原理、互相依托、互为制衡的多层次安全体系。
一、 私钥ECC密码体系被破解的风险
比特币的公私钥体系不同于我们看到的比特币地址,而是储存在用户钱包中的一个密码。
在比特币交易过程中,用户使用钱包中的“私钥”在blockchain上完成电子签名,经过 blockchain确认后交易即为有效。
而“公钥”是由私钥通过一个“不可逆”的数学变化得出,随后“比特币地址”再由公钥做两次“不可逆”的摘要运算得出。
三者推导关系:私钥 >> 公钥 >> 比特币地址。过程均不可逆。拥有私钥便拥有一切,因此必须对私钥保密,一旦私钥失窃,比特币就被人窃取了。
因此很多人认为,不可能从比特币地址反推出私钥,只要保管好私钥,比如说使用离线储存或者加密储存就可以高枕无忧了。
其实如果仔细分析,外行人所说的“比特币私钥被破解”并非完全不可能。问题就出在由私钥推导公钥的“不可逆”过程上。比特币的私钥推导公钥需要用到椭圆曲线密码算法ECC,这是一种广泛应用的安全技术。这种技术建立在以下一个数学基础上:
通过私钥P求公钥Q的数学运算过程易得,反之由Q推导P的过程目前人类的数学尚未解决。
因此只要对P保密,就可以使用Q作为公钥公开,并用P给Q签名即可证明身份。
然而,并未有数学的严格证明由Q不可求P,换句话说,也可能只是目前人类的数学水平不够而已。(关于这个问题比较专业,详情请见:)http://zh.wikipedia.org/wiki/椭圆曲线密码学
对这个数学问题的描述是有“困难性”,而不是“不可能性”。因此这个加密的逻辑类似于RSA密码算法利用的大数进行因数分解。虽然对因数分解人类尚无什么好办法,但不代表永远没什么好方法。这种方法甚至不一定是数学手段,也可以是物理手段,如量子计算机一旦基础研究有了重大突破,完全可以有方法从Q求出P,进而破解比特币私钥系统。
因此,私钥通过椭圆曲线密码算法进行的运算并非“不可逆”,只能说“目前不可逆”。一旦基础理论有了重大突破,通过数学或物理手段有可能完成逆运算或暴力破解。
因此中本聪对比特币地址采取了更谨慎的做法,并未使用公钥或公钥的可逆变形直接作为比特币地址。虽然公钥完全可以充作比特币地址使用,但中本聪认为仍然不安全,乃至于把公钥连续做了两次SHA256摘要运算,然后得到的结果经过变换后才作为比特币地址。
二、 SHA256摘要算法的安全性
我在另一篇文章中介绍了比特币私钥的安全性是用宇宙法则维护的,穷尽太阳的能源也无法遍历私钥。这是否与我上面说的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,要求用户将 P*R的结果发还服务器。服务器在本地做P*R运算,如PR(客户)=PR(服务器),就允许客户登录网站。
目前所谓的碰撞MD5之类的解法,就是通过某种算法快速找出对应Y的另一个解。
假定散列函数为HASH,HASH(X)=Y,可能存在HASH(X1)=HASH(X2)=Y
但由于对于给定的散列值Y,有无数个X可以符合要求,得出符合要求的X,不等于就得出了当初用来运算的那个X1或者X2。因此散列碰撞只可能用来欺骗网站的登录要求(即通过碰撞得到符合要求的P值),但无法真正得到用户的密码。
假设SHA256(公钥)=Y,接着对SHA256进行碰撞,如果不限制X的位数,有SHA256(X)=Y符合要求,但并不能保证X就是公钥。由于X有无数个解,X恰好就等于公钥的概率大概低于你在宏观状态下以量子态隧穿过墙壁的概率……
所以在比特币的应用中,对公钥进行两次SHA256摘要后得到比特币地址,从理论上是绝无可能从比特币地址反推出公钥的,更不用说反推出私钥了。而要穷举256位的私钥则要耗费巨大的能量,从物理上不可行。因此公钥到地址这一步是绝对安全的。
顺便说一句,挖矿也是散列碰撞,只不过是在给定的位数内寻找符合摘要值的解。因此有时候会出现区块被拒绝,就是因为别人比你先找出来了另一个不唯一的解。
三、 危险的公钥和找零机制
从上文可知,ECC椭圆曲线加密算法的“不可逆”是建立在“找不到数学解”,而非“数学证明无解”上。而SHA256类的散列运算是建立在摘要的基础上,而摘要丢失了信息,是不可能直接反推的。但是量子计算机是否能通过穷举解决这个问题呢?
危险的公钥
我们目前还不清楚量子计算机的实际工作原理,人类对物质的微观结构所知甚少。我们所知的宏观宇宙规律和物质在微观的量子态规律是不相容的。目前从理论上认为,量子计算机能同时完成大量计算,这种“同时”不是电子计算机的线性同时,而是基于微观粒子量子态的多态性的真正“同时”。
虽然目前量子计算机还存在诸多理论和实践障碍, 但是不排除人类有一天真能造出量子计算机,可以同时完成极大量的运算。或者数学技术研究领域出现重大突破,解决了ECC的数学难题。这时ECC算法就会被突破,掌握公钥就能求得私钥,从而破解比特币。
而比特币在交易时因为要对公钥签名,一旦你用一个地址进行了交易,公钥就会出现在网上。这就给了别有用心的人记录的可能,有人可能会记录所有用过的公钥,以备未来可能时进行破解。因此,这就给了比特币以一个巨大的安全隐患。
找零机制
虽然目前比特币面临的主要问题还是51%攻击、政府禁止之类的社会学问题,可比特币的作者却为比特币成功后将面临的技术难题提前做了准备——这就是找零机制。
比特币的找零机制在官方钱包是默认打开的。这个机制很简单,就是如果一次没有将一个地址内的金额全部用完,就将剩余的金额转入一个新地址。并把这个新地址的私钥也存在钱包文件里。因此官方钱包中是看不到具体的私钥的,大量的更新私钥将存在钱包文件中。
很多人说找零机制是为了制造大量的交易记录,从而保护隐私,让别人不能通过blockchain追踪交易记录。还有人觉得找零机制造成地址频繁变动,非常不利于交易,以至于大部分在线钱包和客户端钱包都关闭了找零模式,就是指定找零地址为发出的地址,以便让余额回到原来的地址。
可是很多人没想到找零机制事实上避免了公钥的泄露风险。
找零机制保证了存有余额的比特币地址是一次性的。一但一个私钥被使用过一次,公钥就有暴露的风险,进而可能暴露在可能的数学和物理攻击风险下。而找零机制保证了剩下的钱被送进一个从未在网上出现过的新地址里。而网上只出现过这个地址,地址是公钥经过两次SHA256计算出来的,以这个宇宙的全部能量可能都也无法反演。
因此,找零机制虽然讨厌,但无需废除。只要平时将找零地址设置为原地址即可。一旦人类在数学和物理上取得重大突破,立即拨动开关,将找零地址设置为随机新地址。可以说,这是中本聪送给未来的一个礼物。
四、来自星星的中本聪?
如果暂时不考虑政治伦理风险和POW机制导致的社会学风险,整个比特币的安全体系就建立在ECC数字签名、SHA256摘要运算和概率论原理上。
其中摘要运算是这个系统的核心,同时负责保护ECC运算的结果——公钥,和确保挖矿不能反演结果,只能穷举给定位数的值,。同时比特币还设计了动态平衡的难度系统,以便让概率原理充分发挥作用,使取得合格随机数的概率趋近于算力分布。同时比特币使用了一个收敛的等比数列来控制发行量。如果说“数学是宇宙的语言”,比特币就是第一种用这种语言书写的货币作品。
散列过程的物理本质
“宇宙的熵在升高,有序度在降低,像平衡鹏那无边无际的黑翅膀,向存在的一切压下来,压下来。可是低熵体不一样,低熵体的熵还在降低,有序度还在上升,像漆黑海面上升起的磷火。”
而中本聪选择摘要算法作为整个系统的核心,显然是深思熟虑的结果。是因为摘要算法的特性是建立在宇宙中最强大的定律——热力学第二定律上。
摘要算法的本质是:运用计算机做功,丢弃输入中的部分或大部分信息。这个行为类似与你对一块石头做功,击破一个杯子。即便杯子的材料全部保存,要再熔铸回原样,所消耗的能量要远大于你打破杯子消耗的能量。而对长数据做HASH计算,甚至相当于把杯子完全打散成原子,并从中取几个原子,不可能根据这几个原子按原样造一个杯子。

数据的丢失本质上是秩序度的降低,因此散列运算本质上是个熵过程。计算机消耗能量摧毁了部分数据,随着这部分能量散失到环境中而无法还原。而整个比特币开采过程是个负熵过程,通过穷举散列值建立起有秩序的blockchain,代价是电能转换成矿机嗡嗡作响的风扇中排出的热量。


猜你喜欢

转载自blog.csdn.net/block777/article/details/80331287