分享

你想知道的区块链:技术演进史、到底是什么、运作原理、5大关键技术

 CharlseShan 2016-09-17

  一、区块链技术演进史;

  区块链源自比特币,不过在这之前,已有多项跨领域技术,皆是构成区块链的关键技术;而现在的区块链技术与应用,也已经远超过比特币区块链。

  要追溯区块链(Blockchain)是怎么来的,不外乎先想到比特币(Bitcoin),比特币是第一个采用区块链技术打造出的P2P电子货币系统应用,不过比特币区块链并非一项全新的技术,而是将跨领域过去数十年所累积的技术基础结合。

  比特币区块链所实现的基于零信任基础、且真正去中心化的分散式系统,其实解决一个30多年前由Leslie Lamport等人所提出的拜占庭将军问题。

  1982 年Leslie Lamport把军中各地军队彼此取得共识、决定是否出兵的过程,延伸至运算领域,设法建立具容错性的分散式系统,即使部分节点失效仍可确保系统正常运 行,可让多个基于零信任基础的节点达成共识,并确保资讯传递的一致性,而2008年出现的比特币区块链便解决了此问题(更多关于拜占庭将军问题可阅读《区块链:重塑经济与世界》)。

  而比特币区块链中最关键的工作量证明机制,则是采用由Adam Back在1997年所发明Hashcash(杂凑现金),为一种工作量证明演算法(Proof of Work,POW),此演算法仰赖成本函数的不可逆特性,达到容易被验证,但很难被破解的特性,最早被应用于阻挡垃圾邮件。

  在隐私安全方面的技术,可回溯到1982年David Chaum提出注重隐私的密码学网路支付系统,具有不可追踪的特性,成为比特币区块链在隐私安全面上的雏形,之后David Chaum也基于这个理论打造出不可追踪的密码学网路支付系统eCash,不过eCash并非去中心化系统。

  在区块链中每笔交易,采用椭圆曲线数位签章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA),可追溯回1985年Neal Koblitz和Victor Miller分别提出椭圆曲线密码学(Elliptic curve cryptography,ECC),首次将椭圆曲线用于密码学,建立公开金钥加密的演算法。相较于RSA演算法,采用ECC好处在于可以较短的金钥,达 到相同的安全强度。到了1992年,由Scott Vanstone等人提出ECDSA。

  区块链最早源于比特币,但区块链的应用却不仅于此。

  过去几年也陆续出现许多基于区块链技术的电子货币(统称为Altcoins),不过随着比特币持续备受争议,各国政府与金融机构纷纷表态,直到近1、2年,大家才终于意识到区块链的真实价值,远超过于电子货币系统。

  区块链可结合认许制,以满足金融监管需求

  若要将比特币与区块链技术分开来看,最大的不同之处在于,由于比特币为虚拟货币应用,因此面临各国法规的限制,但区块链现在已经可结合认许制或其他方式来管控节点,决定让哪些节点参与交易验证及存取所有的资料,并提供治理架构(Governance Structure)及商业逻辑(Business Logic)两大关键特性。

  目前区块链可分为非实名制和实名制两种,前者如比特币区块链,后者如台大地的GCoin区块链。现在的区块链已经可结合认许制 (Permissioned),来配合金融监管所需的反洗钱 (AML) 与身份验证 (KYC) 规范。

  而银行和金融机构想采用的都是实名制的区块链。

  区块链演进四阶段

  区块链技术随着比特币出现后,经历了几个不同的阶段,常见的分法将比特币视为Blockchain 1.0,为数位货币(Currency)应用,Blockchain 2.0开始出现如智慧资产(Smart Assets)、智慧契约(Smart Contracts)等货币以外的应用,Blockchain3.0则是指更复杂的智慧契约,将区块链用于政府、医疗、科学、文化与艺术等领域。

  区块链新创DTCO执行长李亚鑫基于现有的分法进行补充,他认为,Blockchain 2.0以彩色币(Colored Coin)为代表,在区块链上运行Open Assets Protocal,可传递货币以外的数位资产,如股票、债券等。

  而从Blockchain 2.0之后,可再分出一类属于Blockchain 2.5的应用,包括代币(货币桥)应用、分散式帐本(Distributed Ledgers)、资料层区块链(Data Layers Blockchain)、结合人工智慧(Artificial Intelligent),以及无交易所的国际汇款网路,以Ripple为代表,资料层、分散式储存则以Factom、MaidSafe为代 表,Blockchain3.0则以Ethereum为代表。

  他表示,Blockchain2.5跟Blockchain3.0最大的不同在于,3.0较强调是更复杂的智慧契约,以2.5则强调代币(货币桥)应用,如可用于金融领域联盟制区块链,如运行1:1的美元、日圆、欧元等法币数位化。

  由于区块链协议几乎都是开源的,因此要取得区块链协议的原始码不是问题,重点是要找到好的区块链服务供应商,协助导入现有的系统。而银行或金融机构得对区块链有一定的了解,才能知道该如何选择,并应用于适合的业务情境。

  去年金融科技(Fintech)才刚吹进台湾,没想到才过几个月,一股更强劲的区块链技术也开始在台引爆,全球金融产业可说是展现了前所未有的决心,也让区块链迅速成为各界切入金融科技的关键领域。

  尽管现在就像是区块链的战国时代,不过,以台湾来看,银行或金融机构要从理解并接受区块链,到找出一套大家都认可的区块链,且真正应用于交易上,恐怕还需要一段时间。

  这次台湾只比国外晚了半年,引爆点可从台大释出一套自行开发的开源区块链协议GCoin,并宣布将成立金融科技暨区块链中心说起,短短一周的时间,便引发各界高度关注,接着研讨会不断,不过,由于区块链具有较高的技术门槛,大家都知道它拥有许多特性跟好处,但却迟迟处于观望阶段,就连台湾做区块链的新创业 者,也非常稀少。银行业目前也还卡在门口,除了少数金控开始分享这个议题之外,多数金融业者仍处于试图理解技术面的阶段。

  技术演进:区块链是怎么来的

  》1982年

  拜占庭将军问题

  Leslie Lamport等人提出拜占庭将军问题(Byzantine Generals Problem),把军中各地军队彼此取得共识、决定是否出兵的过程,延伸至运算领域,设法建立具容错性的分散式系统,即使部分节点失效仍可确保系统正常 运行,可让多个基于零信任基础的节点达成共识,并确保资讯传递的一致性,而2008年出现的比特币区块链便解决了此问题。

  David Chaum提出密码学网路支付系统

  David Chaum提出注重隐私安全的密码学网路支付系统,具有不可追踪的特性,成为之后比特币区块链在隐私安全面的雏形。

  》1985年

  椭圆曲线密码学

  Neal Koblitz和Victor Miller分别提出椭圆曲线密码学(Elliptic Curve Cryptography,ECC),首次将椭圆曲线用于密码学,建立公开金钥加密的演算法。相较于RSA演算法,采用ECC好处在于可用较短的金钥,达 到相同的安全强度。

  》1990年

  David Chaum基于先前理论打造出不可追踪的密码学网路支付系统,就是后来的eCash,不过eCash并非去中心化系统。

  Leslie Lamport提出具高容错的一致性演算法Paxos。

  》1991年

  使用时间戳确保数位文件安全

  Stuart Haber与W. Scott Stornetta提出用时间戳确保数位文件安全的协议,此概念之后被比特币区块链系统所采用。

  》1992年

  Scott Vanstone等人提出椭圆曲线数位签章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA)

  》1997年

  Adam Back发明Hashcash技术

  Adam Back发明Hashcash(杂凑现金),为一种工作量证明演算法(Proof of Work,POW),此演算法仰赖成本函数的不可逆特性,达到容易被验证,但很难被破解的特性, 最早被应用于阻挡垃圾邮件。Hashcash之后成为比特币区块链所采用的关键技术之一。

  Adam Back于2002年正式发表Hashcash论文。

  》1998年

  Wei Dai发表匿名的分散式电子现金系统B-money

  Wei Dai发表匿名的分散式电子现金系统B-money,引入工作量证明机制,强调点对点交易和不可窜改特性。不过在B-money中,并未采用Adam Back提出的Hashcash演算法。Wei Dai的许多设计之后被比特币区块链所采用。

  Nick Szabo发表Bit Gold

  Nick Szabo发表去中心化的数位货币系统Bit Gold,参与者可贡献运算能力来解出加密谜题。

  》2005年

  可重复使用的工作量证明机制(RPOW)

  Hal Finney提出可重复使用的工作量证明机制(Reusable Proofs of Work,RPOW),结合B-money与Adam Back提出的Hashcash演算法来创造密码学货币。

  》2008年

  Blockchain 1.0:加密货币

  数位货币与支付系统去中心化

  比特币

  Satoshi Nakamoto(中本聪)发表一篇关于比特币的论文,描述一个点对点电子现金系统,能在不具信任的基础之上,建立一套去中心化的电子交易体系。

  》2012年

  Blockchain2.0:智慧资产、智慧契约

  市场去中心化,可作货币以外的数位资产转移,如股票、债券。如Colored Coin便是基于比特币区块链的开源协议,可在比特币在区块链上发行多项资产

  》2014年

  Blockchain 3.0:更复杂的智慧契约

  更复杂的智慧合约,将区块链用于政府、医疗、科学、文化与艺术等领域

  》2016年

  Blockchain 2.5:金融领域应用、资料层

  Blockchain2.5:强调代币(货币桥)应用、分散式帐本、资料层区块链,及结合人工智慧等金融应用

  Blockchain 3.0:更复杂的智慧契约

  更复杂的智慧合约,将区块链用于政府、医疗、科学、文化与艺术等领域。

  二、区块到底是什么?

  区块链(Blockchain)顾名思义就像是由无数个区块(Block)所组成,这整个区块链就像是一个共享的分散式总帐,这些一个一个的区块到底是什么?如何让这些区块被串在一起,又如何确保它们无法被窜改?

  每个区块的Block Header都会包含一组Previous Block Hash值,这是将前一个区块的Block Header进行Hash Function而得到的值,因此每个区块之间,都会藉由这个无形的链条与先前的区块环环相扣。

  区块链(Blockchain)顾名思义就像是由无数个区块(Block)所组成,以比特币的区块链来说,目前已经产生超过40万个区块,这整个区块链就像 是一个共享的分散式总帐,由多个参与比特币交易的运算节点来共同维护,每个节点也各自拥有一份完整的帐本备份(完整个区块链资料),而其中的每个区块,就 像是帐本中的其中一页,记录好几笔不同的交易资讯,这些纪录都无法经由其中一个节点来窜改。不过,这只是个比喻,实际上,这些一个一个的区块到底是什么? 如何让这些区块被串在一起,又如何确保它们无法被窜改,得先从分析每一个区块所包含的资讯说起。

  在比特币区块链中,每一个区块 (Block)所包含的资讯,包括区块的容量大小(Block Size)、区块头(Block Header)、该区块包含的交易数量(Transaction Counter),以及每一笔被包含在这个区块中的交易资讯(Transactions)。其中,这些交易资讯都是已经Hash过的值,而Block Header则是最重要的一个部分。

  每个区块中的Block Header大小固定为80 Bytes,包含用来追踪区块链协议升级的版本号(Version),以及三组区块中继资料(Block Metadata)。

  第一组资料为固定32 Bytes的Hash值,从前一个区块中的Block Header所计算出来(Previous Block Header Hash),这么做可让每一个区块与前一个区块资料产生无形的连结,并能确保区块序列及历史纪录的正确性,这也是形成区块“链”最关键的连结。

  实际产生的过程,则是当区块链网络中的其中一个节点完成工作量证明时,该节点会将这个新区块广播给其它节点,其他节点会进行验证,确认这个新区块的正确性及有效性,并将这个新区块接上区块链,这个过程就像是让这本大家共同维护的帐本资讯同步,此时,各个节点便会将这个新区块的Block Header进行Hash,得到的Hash值会被放进下一个产生的区块中,进行下一回合的工作量证明。

  这么做可让这些被验证完的交易区块一个串接一个,形成区块链,一旦这个Hash值不正确,便会立刻被其他节点验证出来,也因此,让区块链具有无法轻易窜改的特性。

  第二组是与进行工作量证明相关的中继资料,由Difficulty Target、Timestamp及Nonce值所组成,Difficulty Target是在工作量证明演算法过程中,Nonce则用来表示工作量证明演算法进行的次数。这个困难值每2016个区块会调整一次。最后第三组则是用来 汇整多笔交易纪录的资料结构Merkle Tree Root,这是一个由数笔被放进区块中的交易记录Hash值,经由Merkle Tree演算法所算出来的Hash值(更多区块链问题可阅读《区块链:重塑经济与世界》) 。

  三、区块链5大关键技术;

  比特币区块链的关键核心技术,包括用Hashcash演算法来进行工作量证明,且交易过程采用椭圆曲线数位签章演算法来确保交易安全,并在每笔交易与每个区块中使用多次Hash函数以及Merkle Tree,同时也使用时间戳来确保区块序列

  比特币区块链的关键核心技术,包括采用Hashcash演算法来进行工作量证明,让区块链中的各节点有机会参与验证,达到公正性,且交易过程采用椭圆曲线数 位签章演算法来确保交易安全,并在每笔交易与每个区块中使用多次Hash函数以及Merkle Tree,不只是为了节省储存空间,更重要的是藉由将前一个区块的Hash值加入新区块中,让每个区块环环相扣,也因此做到所谓的可追踪且不可窜改的特 性,同时也使用时间戳来确保区块序列,以下便依序解释这些关键技术。

  关键技术 1

  采用工作量证明达到去中心化及公正性

  首先,最关键的便其工作量证明机制(Proof of Work,POW),这是一个可以让每个参与的节点可共同参与交易验证的方式,来实现一个能多方共同维护的单一系统,并共享同一份记录交易的帐本,以形成一个基于零信任基础,却能实现去中心化的P2P网路系统。

  工作量证明是让任一运算节点,花费时间和运算资源来计算出一组数学公式的结果,且要完成一次有效的工作量证明,需经过一连串地尝试与失败。不过,一旦这个数值被算出来后,其他参与节点也可用相关的数学公式,便能很容易去验证这个值是否有效。

  比特币区块链采用Hashcash演算法(杂凑现金演算法)作为工作量证明,让各节点经由POW计算来产生每一个有效的新区块,再经由其他节点验证并接受。

  进行POW计算的过程也被称作挖矿,很多人用解一道数学题、或是解一个数独来形容,不过,怎样才是真的算出一个有效的新区块,这些节点到底在算什么?

  由于每个区块中Block Header会包含许多固定的值,其中只有Nonce值为一随机值,因此每个节点进行POW计算时要算的就是,藉由不断替换这个Nonce值,来让这个区 块的Block Header Hash值,小于一个被设定好的难度目标值(Difficulty Target),至于为什么要小于这个目标值,则是因为这个难度值意味着每个区块在理论上应该要被产生完成。

  这里提到的难度值 (Difficulty)是指,节点要运算出低于困难度目标值的Hash值,平均需花多久时间,也就是平均要完成一次POW的时间。而比特币区块链目前设 定为,大约每10分钟会有节点成功算出新的区块,不过这10分钟只是基于理论值,实际每个新区块产生的时间,有可能只需要17秒(第407062个区块的 实际产生时间),也有可能需要20分钟以上(第407068个区块的实际产生时间)。

  Difficulty可动态调整,目前每产生2016个区块会调整一次难度,以每10分钟产生一区块估算,大约是每两周会调整一次Difficulty。 由于POW具有一定的难度,因此无法预期哪个运算节点可以最快算出新区块,藉此来确保交易验证的公正性。

  关键技术 2

  每笔交易采椭圆曲线数位签章演算法加密

  比特币区块链便采用椭圆曲线数位签章演算法(ECDSA),与另一种RSA演算法,都属于公开金钥加密演算法(Public Key Cryptography),公开金钥加密技术在1970年代被发明,也称为双金钥密码安全系统,每个使用者会拥有公开金钥(Public Key)与私密金钥(Private Key)这两把钥匙,公开金钥可让其他人知道,而私密金钥则只有本人知道。当A要传送一笔讯息或交易给B时,需使用B的公开金钥来将这份交易加密,而这这 个加密过的讯息或交易,只有使用B的私密金钥才能解开。

  在比特币区块链中,比特币区块链便采用椭圆曲线数位签章演算法,每一个比特币区块 链中的节点使用者,会同时拥有这两把金钥,以及一次性使用的比特币位址(Address),公开金钥可让区块链网络中的其他人知道,而私密金钥则须自行保管,可用来接收货币、进行电子签章或是发送货币,而Address就像电子邮件一样可用来当作存取比特币的地址,使用者可重复取得新的Address,且 可以在离线状态下产生,不过,每个Address只能使用一次。

  在比特币区块链中,每一枚电子货币被视为一串数位签章,使用者要进行比特币交易时,必须将前一笔交易以及收款方的公开金钥经由Hash产生数位签章,加到电子货币那串数位签章的后方。

  RSA 加密演算法是一种非对称的加密演算法,利用两个质数作为加密与解密用的两把钥匙,金钥长度约在40个位元到1024位元。不过比特币所采用的ECDSA能 算出更短的金钥长度,也就是能够使用相对较少的资源,做到与RSA相同的安全性。在ECDSA演算法中,由私密金钥算出公开金钥很容易,但要从公开金钥推 回私密金钥却很困难。

  关键技术 3

  Hashcash演算法及多种Hash函数确保资料不被窜改

  前面提到比特币区 块链采用Hashcash演算法来进行工作量证明,Hashcash可将任意长度的资料经由Hash函数转换为一组固定长度的代码,原理是基于一种密码学 上的单向杂凑函数 (One Way Hash Function),这种函数很容易被验证,但是却很难破解,还回推出原本的值。先前Hashcash演算法也被用来做阻挡垃圾邮件的机制。

  常使用的单向杂凑函数包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等,MD5的Hash值长度为128位元,虽然广为使用,但 因长度不够较容易破解,SHA-1的Hash值长度有160位元,虽比MD5好但仍然不够安全,因此美国国家安全局(NSA)又提出多种更复杂的SHA- 2演算法,包括224、256、384、512位元长度的Hash值算法。

  Hashcash最早在1997年由Adam Back提出,并于2002 正式发表一篇描述杂凑现金系统的论文。比特币区块链采用Hashcash来建立一套几乎无法被窜改的电子现金系统,每个区块的Block Header都会被Hash成一串很难被回推的代码后,放进下一个区块中,来确保区块的正确性。

  关键技术 4

  经由Merkle Tree将大量讯息缩短成一个Hash值

  在 比特币区块链中,每笔交易产生后,都已经被Hash成一段代码才广播给各节点,不过这样做还不够,因为在各节点的区块中,可能包含数百笔到数千笔的交易, 因此,为节省储存空间并减少资源耗费,比特币区块链的设计原理采用Merkle Tree机制,让这些数百到数千笔的交易Hash值,经由两两一组形成一个新Hash值的方式,不断重复进行,直到最后产生一组最终的Hash值,也就是 Merkle Tree Root,这个最终的Hash值便会被记录到Block Header中,只有32 Bytes的大小。Merkle Tree机制可大幅减少资料传输量与运算资源消耗,验证时,只需验证这个Merkle Tree的Root值即可。

  关键技术 5

  用时间戳伺服器(Timestamp Server)确保区块序列

  比特币采用时间戳伺服器机制(Timestamp Server),将每个区块Hash后加上一个时间戳(Timestamp)并发布出去,这个时间戳用来证明资料在特定时间的有效性,每一个时间戳章会与 前一个戳章一起进行Hash,这个Hash值会在与下一个时间戳章进行Hash,因此而形成一个用来确保区块序列的链条。

  四、区块链运作原理大剖析

  为什么区块链被称作信任机器?将多种Hash函数、Merkle Tree,椭圆曲线数位签章、以及时间戳等技术结合Hashcash工作量证明,正是实现区块链的关键。

  区块链(Blockchain)显然已经被许多人神化,好像各行各业都可以用区块链技术,不过某种程度上,它却像个黑盒子,大家都知道区块链具有许多特性跟好处,却不清楚它到底怎么做到。

  区块链并非单一创新技术,而是将许多跨领域技术凑在一起,包括密码学、数学、演算法与经济模型,并结合点对点网路关系,利用数学基础就能建立信任效果,成为 一个不需基于彼此信任基础、也不需仰赖单一中心化机构就能够运作的分散式系统,而比特币便是第一个采用区块链技术而打造出的一套P2P电子现金系统,用来 实现一个可去中心化,并确保交易安全性、可追踪性的数位货币体系。

  不过,区块链究竟是如何运作,其中又包含了哪些关键技术,使其被称作信任机器(Trust Machine),一笔交易到底要如何在一个彼此互不信任的P2P网路中,不经由传统的信任机构(如银行、证券交易所、第三方机构等中心化机构),就能完成交易验证?

  要搞懂区块链运作原理,可先区分出交易(Transaction)与区块(Block)两个部分,这里我们分别从区块链中一笔交易产生到完成验证的流程,以 及图解一个区块,来了解区块链的运作原理,并进一步拆解5大区块链关键技术,看它到底怎么做到大家口中的基于零信任基础、去中心化、可追踪又不可窜改。

  从一笔交易看区块链运作流程

  在比特币区块链中,当一笔交易经由某个节点或钱包产生时,这笔交易需要被传送给其它节点来作验证。做法是将交易资料经由数位签章加密并经由Hash函数得出 一串代表此交易的唯一Hash值后,再将这个Hash值广播(Broadcast)给比特币区块链网络中的其它参与节点进行验证。

  产生一笔新交易

  一笔新交易产生时,会先被广播到区块链网络中的其它参与节点

  各节点将数笔新交易放进区块

  每个节点会将数笔未验证的交易Hash值收集到区块中,每个区块可以包含数百笔或上千笔交易。

  决定由谁来验证这些交易

  各节点进行工作量证明的计算来决定谁可以验证交易,由最快算出结果的节点来验证交易,这就是取得共识的做法。

  取得验证权的节点将区块广播给所有节点

  最快完成POW的节点,会将自己的区块广播给其他节点。

  各节点验证并接上新区块

  其他节点会确认这个区块所包含的交易是否有效,确认没被重复花费且具有效数位签章后,接受该区块,此时区块才正式接上区块链,无法再窜改资料。

  交易验证完成

  所有节点一旦接受该区块后,先前没算完POW工作的区块会失效,各节点会重新建立一个区块,继续下一回POW计算工作。

  来源:集微网

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多