区块链运作原理大剖析:5大关键技术

比特币区块链的关键核心技术,包括采用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,因此而形成一个用来确保区块序列的链条。