很多人都已经了解,区块链是个基于加密算法的去中心化分布式账本。但是,具体怎么理解这句话呢?主要用到了哪些算法?这些算法起什么作用?什么是去中心化?什么是分布式账本?本文尝试从技术角度对其简要说明。
加密算法
凡是介绍区块链的地方都会介绍区块链的两个典型特点:匿名,不可攥改。在保证匿名性和不可攥改这方面,加密算法发挥了不可替代的作用。
非对称加密 - 匿名的来源
这种加密算法的特殊性在于,它包含两个密钥:一个叫公钥(public key),一个叫私钥(private key)。
公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。有私钥的话,很容易计算出公钥,而公钥几乎不可能用当前计算机的方法计算出私钥。
我们在银行或支付宝登记各种身份信息,无非就是确保在进行转账交易操作的时候能够进行身份确认,保证我只能把我钱包里的钱而不是别人钱包里的钱转移出去。
区块链则利用非对称加密的特型,在钱包里生成公钥和私钥,转账时用私钥对交易内容进行签名(签名就是对数据进行哈希运算后再加密),同时对外公布自己的公钥,这样网络上任何一个节点都可以用公钥对交易内容进行验证而不需要转账人的具体身份信息。
哈希算法 - 不可攥改的基石
哈希算法可以看作有下面几个性质的数学函数:
- 输入可以是任意长度的字符串
- 输出是固定长度的
-
输入的小变化可以引起输出大变化
在区块链中,通过对区块头进行哈希计算得出某个区块的哈希值,用这个哈希值可以唯一确定某一个区块,区块与区块直接通过这个哈希值串联起来,形成区块链的链状结构,像下图所示,更改某个区块的内容会导致改区块哈希值改变,继而断开与后面区块的链接,相当于不可攥改了。
image.png
去中心化
在中心化的系统架构下,需有有个中央服务器,所有的业务操作都需要将请求发送到这个服务器上才能最终完成。
相对的,在去中心化的模式下:
- 没有中央服务器
- 网络上每个节点都是一个独立的服务器
- 所有的业务操作都是在网络中任意两个节点之间完成
这问题就来了: - 网络上这么多节点,以谁的处理结果为准?
- 为什么这些节点愿意勤勤恳恳的处理业务请求?而不是想办法搞个破坏捞一票下线?
这就牵涉到另外两个话题,共识算法和激励机制
共识算法
目前在公链中比较主流的共识算法主要有下面两种:
- PoW(Power of Work)
在这种机制下,每个区块生成时要求节点计算出一个符合要求的区块哈希目标值。这么个区块哈希目标值由若干个前导零构成,零的个数取决于网络的难度值。要得到合理的目标值需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的区块哈希目标值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理哈希目标值是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到该目标值。 - dPoS (Power of Stake/Delegated Proof of Stake)
该机制率先在比特股使用,中文名叫做股份授权证明机制(又称受托人机制),它的原理是让每一个持有比特股的人进行投票,由此产生101位代表 , 我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。
激励机制
在区块链网络中,参与区块数据处理的节点都会得到相应的代币奖励。在比特币系统里每个区块的第一笔coinbase交易就是系统奖励给比特币矿工的。基于上面对共识算法和加密算法的介绍,网络中某个节点如果要想更改某个区块上的交易数据,要付出的算力成本是远大于获得奖励的成本的。考虑到每个节点都有最大化自己利益的倾向,大部分节点都会遵守规则,成为公正的节点了。
分布式账本
所谓账本,可以理解为一条条的交易记录,如果这些记录不只是记录在本地机器上,而是放在一个分布式网络上,就成为了分布式账本。对于分布式账本,网络上任何一个节点挂掉,都不会影响账本的正常记录和读取。
网友评论