...
shawn | 普通炒幣者
【介紹】【区块链】一文看懂区块链:一步一步发明比特币(1) HOT
shawn | 普通炒幣者 0 77 2019-04-24 16:37:49
0 77
2019-04-24 16:37:49

加密货币

在一步一步发明发明比特币之前,解释几个直观的认知:

我们常说的比特币,是加密货币(Cryptocurrency)的一种,而加密货币实现去中心化的最关键的技术是区块链

有些地方可能把加密货币又称为数字货币(或称电子货币),但实际上,加密货币是数字货币的子集,同为子集的还有虚拟货币(如Q币),加密货币的称谓要更加专业

加密货币一定具有下列三个特点

  • 去中心的清算
  • 分布式的记账
  • 离散化的支付

为了实现这些特点,需要使用到区块链技术。这里的区块链技术是一个很广义的范畴,它包含了密码学,算法等很多不同的内容,其中最精彩的点子,可算是工作量证明 = 共识

还有另一个层次更高的角度:从解决拜占庭将军问题的角度入手来分析和科普【区块链技术】的(可参看我的另一篇博客【区块链】如何解决拜占庭将军问题),我觉得这个角度更加接近于区块链哲学的本质,毕竟,比特币具有价值属性和交易属性,和金融有紧密的联系,但是区块链是一种分布式存储系统,若仅仅从比特币(代币)的角度来解释,非常片面。毕竟,比特币,就是分布式去中心化共识记录系统中的一个字段

一步一步发明比特币

第一个用户需求 - 账本和电子签名的由来

第一个用户需求描述了中心化清算系统几个关键内容的由来,只对区块链感兴趣的读者可以跳过

经济体的蓬勃发展离不开交易。在交易过程中,人们早已发现使用一般等价物(如金银)十分麻烦,发明了纸币(最早的来自中国,北宋时代四川地区的纸币交子的清算体系,是生产力发展的必然产物,最终的目标是提高生产效率),现如今,人们发现,携带现金也很麻烦

这是第一个基本用户需求:摆脱现金进行交易带来的不便

【解决办法】几个用户使用公共账本记录转账记录,月底结算账本公开,每个人都可以修改,也就是说可以在上面添加新行(一笔交易),如小明转账给小红10块钱

产生的问题1:身份问题

在这个账本条目上我们无法确认交易双方小明小红是否是本人,可能出现伪造(逍遥法外电影中的伪造支票)

【解决办法】使用电子签名,即公钥 - 私钥对

记住,电子签名被发明的核心目的是希望在电子文档也能有一个类似与现实中个人笔迹的签名,目的一定是:确认写这个签名的人是本人,即身份确认(验证)

私钥顾名思义,也叫做密钥,是你本人需要需要妥善保管和保存的
Sign(信息,私钥)=电子签名Sign(信息,私钥)=电子签名
Sign在这里是一个函数,可以理解为一连串计算(变换),这一连串计算有一个特点,就是输入值只要改变一点点,输出就会完全改变。信息和私钥一起,可以得到一个电子签名。并且这个电子签名不能被轻易的复制到其他信息里,原因是因为每一个电子签名都和这一段信息有关联。
Verify(信息,电子签名,公钥)=真/假Verify(信息,电子签名,公钥)=真/假
在进行验证的时候,Verify也是一个函数,输入值是信息,电子签名,公钥,输出是一个True or False,来判断这个电子签名是真的还是假的。

这个时候可能有人就要问了,这个电子签名我难道不能试出来吗?很不幸,这是一个有256bit的1/0字符串,可能性是2的256次方,2的10次方是1024,我只能告诉你这么多了。

解释完电子签名,我们来看看实例。小明使用自己的私钥加上小明转给小红10块钱这段话通过Sign函数生成一个签名(256位),把签名放在这条转账信息的后面,通过之前的讲解,这个签名就能保证小明已经过目了,并且说:“这真的是我小明,不用怀疑了!肯定是我”

直观结果是,我们可以利用密码学的手段,只要有对应人的数字签名,我们保证小明小红身份能被100%确认真实

但是这个解决方案有一个小漏洞:可以复制同一行信息来伪造交易记录,解决的办法是添加一个这笔交易独有的信息(比如时间戳)


詳細介紹見:

       ⇝【知識】比特幣的數字簽名是什麼?

       ⇝【知識】比特幣錢包、地址、公鑰、私鑰相互關係

                     

产生的问题2:欠债跑路问题

如果小明在此时账户上已经没有足够的余额进行支付,就会出现超支问题

【解决办法】添加余额记录,此时就不可避免的需要一个中间担保人(国家?信誉机构?银行?)小明进行余额担保

一个大家都遵守的协议

此时,现代金融体系的框架基本建立完毕,协议内容是

  • 任何人都可以在账本上添加新行
  • 固定时间间隔时用真金白银进行清算
  • 只有有签名的交易是有效的
  • 中间担保的人保证不可超支

此时发现一个很有趣的发现,这个比较严谨的协议有一个特点:如果所有人都按照这个协议来办事,我们可以用任何形式的东西来代替人民币了,换句话说,就是我根本不关心你在账本上添加的新行的交易内容是什么,可以是任何东西

利用这个提出需求再解决问题的过程,强化一个认知货币 = 交易记录(账本),即货币的本质是交易记录,在这背后,有一个前提是,货币的另一个本质是一种共识,我们都信任它有价值的共识

第二个用户需求:账本放在哪里?

传统的(现在的)解决方案当时是,使用中心代理-银行,来存放账本

既然是第二个用户需求,那肯定就是因为现在的解决方案大家都不满意

核心需求:去中心化

中心化的痛点大致可以说几点

  • 银行效率低下,一笔跨国转账的等待时间较长
  • 胖银行金融体系因部分准备金制度等等方便的规则,能抬升杠杆,产生金融泡沫,进一步诱发金融危机
  • 私有财产神圣不可侵犯是精英与平民,剥削与被剥削者几个世纪以来博弈的风暴中心

当然还有很多没有提到(比如好处,控制经济发展速度,调控供需平衡等),总之,是一种一直饱受诟病的清算方式,此时,中本聪在2009年横空出世,他提出了一种全新的清算方法,并且真正解决了陌生人间信用的问题!接下来就是真正的一步一步的发明比特币了

如何实现分布记账(去中心化)

为了去中心化,我们可以反其道而行之:每个用户保存账本,分布记账。用户产生一笔交易就将这笔交易广播到到网络上所有的节点上,这样不就完美的去中心化了?

广播示意图

只要是明眼人都能发现,太天真的,这个方法行不通。若行不通,那就把行不通的原因总结出来

遇到问题,总结不可行的原因,寻找解决方案。这是整个人类不断前进的核心最小单位

问题核心

如何让所有人都同意这个新账本?如何保持这些账本同步?有一笔交易发生时,如何让其他人都听到并相信这一笔交易呢?

这些问题才是真正的核心:是否能在协议(办法,规则)中添加几行,找到办法,来决定是否接受交易,并确定交易顺序,使你可以放心的相信,世界上遵守同一协议的所有人手上的账本都和你的一模一样呢?(问题描述值得品读,只有抽象出问题才能更好的去寻找解决方案)

☆解决方案

解决的思路是:哪个账本的计算工作量大,就信任哪个账本。换个角度来说是【让交易欺诈和账本不一的情形的计算力成本高到不能接受甚至完全不可行】。那问题就来了,到底什么是【计算工作量】,账本怎么可能有计算工作量呢?这里思维跳跃会大一些,需要一些耐心,慢慢来

1、密码学:哈希函数

哈希函数,输入可以是任意信息或者文件,输出是固定长度的比特串。例如256bit的1/0串,这个输出叫做这个信息的“哈希值”或者“摘要”(digest)。SHA256就是一个哈希函数

密码哈希函数有几个特点

  • 特点是输入值稍微变化后,结果就会有很大的不同,完全无法预测不同输入间的规律
  • 逆向计算不可行,只能使用试错法(穷举法),解空间 22562256

在每一个账本后添加一个特殊数字,对账本的所有字符使用SHA256函数处理,我们要求这个特殊数字(账本结尾的一串数字)可以使得SAH256函数输出值的开头有30个零(关于如何确定0的个数问题,在后面部分有详细的说明)

根据之前说过SHA256的性质:输入变化输出不可预测,找到这个特殊数字唯一的办法就是穷举。换言之,你很容易就证明了他们进行了海量的计算。而这个寻找特殊数字的过程就是工作量证明(proof of work)

这就意味着,所有的工作量证明就对应了交易列表(账本 Ledger),如果你修改了一个交易,哪怕只是其中一个字符,就会完全改变哈希值,就得重做工作量证明,直观动图如下

修改后的重新计算修改后的重新计算

詳細介紹見:

       ⇝【知識】Hash到底是什麼?5分鐘帶你了解區塊鏈Hash相關的各種知識!



2、区块链 - 信任与共识的基石

每一个小账本被称为区块每一个不同的区块链协议(产生不同的加密货币)都会规定每一个区块的大小(最初比特币为1M)

账本组成区块,区块构成链表,区块的头包含前一块的哈希值,这就是区块链

区块链的诞生区块链的诞生

如此一来,任何人就不能随意修改其中的内容,或者交换顺序。如果你这么做,意味着你需要重新计算所有的特殊数字

修改任何部分都以为着重新计算修改任何部分都以为着重新计算

规定,允许世界上的每一个人建造区块。每一个新建区块的人(找到了这个特殊数字 - SHA256值有30个零)都能获得奖励,对于新建区块的这部分人(矿工)来说

  • 没有发送者信息,不需要签名
  • 每一个新区块都会给整个币种增加新的虚拟(加密)货币
  • 新建区块的过程又被称为“挖矿”:需要大量工作量并且可以向整个经济体注入新的货币
  • 挖矿的工作是:接受交易信息,建造区块,把区块广播出去,然后得到新的钱作为奖励
  • 对每个矿工来说,每个区块就像一个小彩票,所有人都在拼命快速猜数字,直到有一个幸运儿找到了一个特殊数字使得整个区块的哈希值开头有许多个零,就能得到奖励。我记得有一个知乎答主给了一个形象的比喻,区块链就像一个拥有貌美如花女儿(区块)的国王,有很多的青年翘首以盼,而国王的方法是出了一道很难得题目让所有的青年计算(学习改变人生),谁算的快(在计算哈希值过程也可能是运气好)就能抱得美人归
  • 对于想用这个系统来收付款的用户来说,他们不需要收听所有的交易,而只要收听矿工们广播出来的区块,然后更新到自己保存的区块链中就可以了

詳細介紹見:

       ⇝【知識】區塊鏈 Blockchain – 共識機制之工作量證明 Proof-Of-Work(1)



3、51%算力-共识攻击

这里有一个小漏洞,因为网络的延迟或者有人在篡改区块链等因素,你作为一个收听网络广播的用户,如果同时接受到两条不同的区块链怎么办?其中的交易信息发生了冲突

注:区块链本身就是最终的大账本,发生交易的唯一方法就是把你的交易加入到大账本上。具体来说,就是让矿工把你的交易记录加入它新挖到的区块中,并把这个区块链接到区块链上。链表的纽带,当然就是工作量证明

对于上面的问题,用户的解决方案也比较简单:即,只保留最长的且难度系数最高的,也就是包含的工作量最大的那一条

用户保留最长的区块链用户保留最长的区块链

这里有一个Trick,即所谓信任工作量最大不仅仅是出【一道难题】,还通过等待多个区块的产生引入世界上所有矿工之间的博弈(吃瓜群众,坐看大戏,谁厉害我选谁,你们尽管斗)

个人观点:区块链的Idea最核心的创新就是从技术上把信任和贪婪画了等号。因为贪婪(希望去竞争建立区块的建立和交易费)所以信任(全网算力越大,用户越放心),这句话甚至带上了些许哲学和传奇的色彩

对于用户来说,是这样一种情景

如何更新本地区块链如何更新本地区块链

其中的原因是,你可以假设Alice希望篡改一个交易信息,那么就意味着Alice需要不断的通过计算维护这个区块链了。也就是说每一次有新的区块链产生,Alice都需要不断的抢到这个彩票,理论上来说,他至少必须拥有全网51%以上的算力才能做到这一点,更多的,随着用户等待区块的增加,这个难度,幂次上升,在7-8个区块链产生后,概率上来讲,就是绝对信任

无穷大的篡改成本无穷大的篡改成本

此时

  • 我们用数字签名保证了不能伪造交易记录
  • 区块链及工作量证明保证了不能篡改其中的信息

这两点,就完成了:证明区块链的每一条交易记录都是可信的这一终极目标


詳細介紹見:

       ⇝【知識】壞礦工的雙重支付攻擊,51%攻擊




总结 - 系统可行性分析

只需给出一个命题来思考:我们如何才能在这个系统下骗人呢

  • 如果你想篡改一笔不存在的交易记录,那么你必须比所有人都算的快,赢得这个彩票
  • 所有用户会继续收听其他矿工的广播
  • 所以为了让所有用户继续相信这个伪造的区块
  • 你必须投入自己所有的工作量,不断给篡改后的区块链分叉增添新的区块
  • 记住:根据协议,所有用户会一直信任他所知道的最长的链
  • 是的,你持续的竞争过世界上所有的矿工的概率或者说代价,实在太大了,得不偿失(其实法律也是一样的道理,它强制给违法的人给予惩罚,让违法者付出他们不能承受的代价了保证公平和社会稳定运行)
  • 注意,作为一个用户,你不能立马相信你所听到的最新区块,而是应该等待多几个区块被创建过后,再确认这的确是世界所有人都在使用的区块链(比特币的原则中,等待6个区块,才确认)

发明过程中的关键点

  • 电子签名 Digital Signatures
  • 公共账本就是货币 The Ledger is the currency
  • 去中心化 Decentralize
  • 工作量证明 Proof of work
  • 区块链 Block Chain

延伸閱讀:

       ⇝連猴子都懂的區塊鏈介紹

       ⇝【知識】區塊鏈如何運作?(1)




               

上一篇


下一篇:【介紹】【区块链】一文看懂区块链:一步一步发明比特币(2)


文章來源:https://charlesliuyx.github.io/2017/09/24/%E4%B8%80%E6%96%87%E5%BC%84%E6%87%82%E5%8C%BA%E5%9D%97%E9%93%BE-%E4%BB%A5%E6%AF%94%E7%89%B9%E5%B8%81%E4%B8%BA%E4%BE%8B/#%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%88%86%E5%B8%83%E8%AE%B0%E8%B4%A6%EF%BC%88%E5%8E%BB%E4%B8%AD%E5%BF%83%E5%8C%96%EF%BC%89








分享: 

 0則回覆

您需要登入後才可以發文和回覆
登入 | 立即註冊
還沒有人回覆,趕快來搶沙發

您需要登入後才可以發文和回覆
登入 | 立即註冊