18500080688
您的当前位置:主页 > 成长分享 > >

长文解惑区块链与比特币(三)

时间:2018-05-16

(书接上文)
这么牛的算法,就是声名远播的“椭圆曲线算法”,简称为ECC算法。
它是在1985年由两位美国人尼尔·库伯利兹(Neal Koblitz)和维克托·米勒(Victor Miller)分别独立提出的。在密码学中的广泛使用,也就是最近十多年的时间,数学家真的很厉害。
有了这个算法,就能确保去中心化的记账系统中,每条交易记录的真实性。我们来演示一下比特币的去中心化记账系统如何利用SHA和ECC算法确保账本的完整性和真实性(以下是简化后的原理说明,真实过程还要复杂很多,但原理不变)。
需要记账的原始交易信息:A支付5元钱给B(以下简称“原文”)。
第一步:利用SHA将原文生成数字指纹:
f7bb29badf05d41e60b1036d749f134a901c7a97daef7a1fe4e1e14471bd4833
第二步:随机生成一个私钥,它的格式与指纹是完全一样的,例如:
18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
第三步:利用ECC将第一步得到的数字指纹通过私钥加密,得到密文:
869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078
第四步:根据私钥生成一个公钥:
600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408
第五步:将原文、密文和公钥广播到整个比特币网络中。信息发送步骤到此结束,以下是信息接收步骤。
第六步:接收方利用ECC将密文通过公钥解密,得到指纹1。
第七步:利用SHA将原文生成数字指纹,得到指纹2。
第八步:比对指纹1是否等于指纹2。
第九步:如果相等,则确认该条信息是合法交易信息,添加到自己的账本中。如果不相等,则抛弃该信息。至此全部结束。在真实的比特币网络中,交易双方都是完全匿名的,交易者A或者B都是账号(有些文章中称“地址”,含义一样),账号背后的主人信息是没有任何记录的,可以是一条狗,也可以是一个人工智能,而账号则是根据公钥,通过一定的算法生成的。
一个私钥几乎可以生成无数个不同的对应公钥,也就意味着可以生成几乎无数个不同的对应账号。谁掌握了私钥,谁就是账号的主人。
在比特币网络中,私钥是动用账号中比特币的唯一凭证,如果你的私钥被盗,你就永远失去了它,打官司也要不回来,因为没有任何方式可以证明他的私钥是从你这里偷走的。
比特币原理深入
区块链技术
到此为止,我们去中心化账本的理想只实现了一半,并没完全实现,为什么呢?因为还有两个重大的问题没有解决。
第一个问题:账本同步问题。比特币网络中有那么多台电脑,一条交易信息发送出来的时候,当然不可能所有的电脑都开机,必然有一些处于离线状态,开了电脑也未必开着比特币客户端,所以总有一些电脑无法立刻收到这条信息。这样就会导致不同电脑上的记录不同步,到底以谁的电脑记录为准呢?
第二个问题:如何防止同一个比特币被重复使用?假如有一个黑客,他只有一个比特币,但是他却同时把这个比特币付给A和B(虽然理论上无法真正同时,但可以做到间隔时间极短),于是就会在网络上广播两条信息,一条是支付给A的信息,一条是支付给B的信息,因为网速的关系,必然有的电脑先收到信息1,有的电脑先收到信息2,这就产生了矛盾,如何确定哪一条信息是有效的呢?
为解决上面这两个难题,区块链技术横空出世。
中本聪的论文真正在全世界掀起大风大浪,不是因为上一节介绍的比特币基本工作原理——数字指纹和非对称加密都是成熟的技术,真正让他一战成名的是区块链技术。但请记住:比特币不是区块链,它只是区块链技术的一个具体应用。
到底什么是区块链?它怎样巧妙地解决了账本同步和信息不重复的问题呢?
中本聪的总体思路是这样的:比特币网络中的所有电脑都只认可唯一的一个账本,任何一台电脑在接入比特币网络时,首先要同步这个唯一的账本,任何一台电脑想要往这个账本上写入新的信息,必须完成一套繁琐的“手续”,这套手续复杂到几乎不太可能被同时完成两次,即便真的发生了巧合,被同时完成了两次甚至多次,也有一个规则可以判定哪条信息是合法的,哪条信息该被抛弃。
让我一步步为你揭开区块链技术的面纱。
为什么要叫“区块链”?因为中本聪把这个账本设计成了由一个个“信息包”首尾相连而成的长链,每一个信息包被称为一个“区块”,这些区块每一个都有唯一的编号——在比特币系统中,编号被称为高度(height),这些编号就是自然数1、2、3、4……一直往下排,不允许跳跃,也不允许中断和重复。
下面讲解区块的具体规则。
第一个区块当然是由区块链的发明人中本聪亲自创建的,那是北京时间2009年1月4日,在芬兰赫尔辛基的一台小型服务器上,第一个区块诞生了,这也被称作“创世区块”(genesis block)。在这个区块上,包含的主要信息是:
区块高度:0
The Times 03/Jan/2009 Chancellor on brinkof second bailout for banks
(译文:《泰晤士报》2009年1月3日头版文章标题:财政大臣面临第二次为银行提供紧急救助的窘境)
“某账号”获得50比特币奖励
中间那段话是中本聪刻在第一个区块上的纪念,从第二个区块开始,以后每个区块就必须严格按照比特币系统的规则来创建了。区块的规则有(至少包含以下信息):
前一个区块的数字指纹
+
固定信息
+
收到的交易记录
+
一个随机数
区块链的一个奥妙之处在于尾巴上加的这个随机数(nonce),因为它实在太奥妙,让我等凡夫俗子只能大呼过瘾,所以后面我就把它称为“奥数”,以方便讲解。
中本聪规定:这个新区块的数字指纹(一个256位的二进制数)的前72位必须全部为0。
回忆一下我们前面介绍过的数字指纹的知识。因为SHA算出来的指纹是毫无规律可循的一组数字,所以,想要满足中本聪的这个变态规定,唯一的办法就只能凭运气凑奥数,从0开始不断地去尝试,直到满足要求为止。这是一个纯粹的概率问题。我们来算一下要满足这个要求的概率是多大。
因为二进制数,每一位只有两种可能性,0或者1,所以,凑出一个奥数的可能性是2的72次方分之一,也就是:
1/4722366482869645213696
这个数字已经长到看花眼了吧,它大约就是4.7万亿亿分之一。换句话说,就是平均要进行4.7万亿亿次SHA计算,才可能得到一个奥数,可见每一个奥数的金贵。
最巧妙的是,奥数并不是某一个方程的解,解出一个少一个,因为每一个区块的字符串都不同,所以,每一次寻找奥数都需要从0开始,任何一个数字都有可能成为新的奥数,完全没有规律可循。
一旦成功找到一个奥数,就获得了一次记账权力,可以给账本上新增加一个区块。那么,为什么要花时间找奥数,去给账本记账呢?因为好处实在太大了。

 

(本文原刊《读库1802》,书接上文,未完待续,敬请关注下期)

分享到:

Copyright © 2018-2020 www.fqcycpa.com 北京峰清诚永会计师事务所(普通合伙) 版权所有   京ICP备14007909号

分享按钮