虽然区块链是个新兴的概念,但是它所用的基础技术却是当前成熟的技术。区块链技术也不是把旧技术组合炒出的新概念,更准确的说,区块链是一种基于之前技术基础上提出一种新的解决方案,并推动着成熟技术的发展与革新。本文我们来讨论一下区块链的基础技术。
哈希算法
哈希函数也叫散列函数,哈希函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来的一种算法。简单来说,给定任意长度的信息,通过哈希算法的计算,最后生成固定长度的字符串,这个字符串就是输入信息的哈希值。常见的哈希算法有:md5、sha1、sha256、sha512等。
那么一个运用在区块链的哈希算法具备什么优点呢?
- 正向快速:对于给定输入计算输出的过程应该在极短时间内得到hash值。
- 输入敏感:输入信息哪怕是发生微小的变化,计算出的hash值应该有天壤之别。因此可以通过对比两个hash值就可以知道两个数据内容是否相同。
- 逆向困难:同时无法通过推算hash值恢复原有内容。
- 抗碰撞性:如果内容不同,计算出的hash值也应该不同。
区块链中标识每一个区块头的hash值由sha256计算得来,通过在每个区块头中存储上一个区块的hash值,从而形成区块链。区块体中的数据可以通过生成默克尔hash二叉树来存储,因此hash算法在区块链数据的保密性和存储、传输有非常重要的作用。
数字签名
数字签名不是指将签名扫描成数字图像,或者用触摸板获取的签名。
数字签名算法是依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存。
在基于区块链的比特币运用中,每个节点都有一对公钥和私钥。节点A发送交易时,用私钥加密交易摘要信息,加密后的数据就是数字签名,然后数字签名和原始数据一起发送给其他节点。其他节点收到消息后,先用A的公钥解密数字签名,得到原始数据的摘要,如果原始数据的摘要与交易信息的摘要相同,则验证通过,可以继续后面的流程。
共识算法
所谓共识,简单理解就是指大家都达成一致的意思。
而在区块链系统中,每个节点必须要做的事情就是让自己的账本跟其他节点的账本保持一致。如果是在传统的软件结构中,这几乎就不是问题,因为有一个中心服务器存在,也就是所谓的主库,其他的从库向主库看齐就行了。但是区块是个去中心化的分布式系统,在这个结构中没有哪个节点是“老大”,一切都要商量着来。共识算法其实就是一个规则,每个节点都按照这个规则去确认各自的数据。下面我们聊聊常见的共识算法。
- 工作量证明(proof of work) 工作量证明简单来说,证明你做过一定的工作量。通常生活中有毕业证能证明我们上过学,有驾驶证能证明我们会开车。这些证明的共同点是通过对工作结果进行认证来证明完成了相应的工作量,这样的方式对验证工作量是简单高效的。 在 PoW 的工作方式中,区块链参与者(称为「矿工」)要在区块链中添加一块交易,必须解决某种「复杂但是无用」的计算问题。这种做法可确保矿工花费了一些金钱或资源(矿机)完成工作,这表示了它们将不会损害区块链系统,因为对系统的损害大的收益大于成本。
- 权益证明(PoS,Proof of Stake) 这种模式会根据你持有数字货币的量和时间等因素来确定每个节点进行出块的难度和优先级,并且取排序最优的节点进行下一段时间的记账出块。记完账后,给记账节点奖励币,然后再清空该节点的优先级。 权益证明必须采用某种方法定义任意区块链中的下一合法区块,依据账户结余来选择将导致中心化,例如单个首富成员可能会拥有长久的优势。
- DPOS(Delegated Proof of Stake) 想象有这样一家公司:公司员工总数有1000人,每个人都持有数额不等的公司股份。每隔一段时间,员工可以把手里的票投向自己最认可的10个人来领导公司,其中每个员工的票权和他手里持有的股份数成正比。等所有人投完票以后,得票率最高的10个人成为公司的领导。如果有领导能力不胜任或做了不利于公司的事,那员工可以撤销对改领导的投票,让他的得票率无法进入前10名,从而退出管理层。这就是对DPoS(Delegated Proof of Stake)共识机制的一个形象描述。
- 实用拜占庭容错算法(PBFT:Practical Byzantine Fault Tolerance)
拜占庭容错的实质就是要寻找一个方法,使得节点在一个有版徒的非信任环境中建立共识。
PBFT算法的运作步骤为:
(1)取一个副本作为主节点,其他的副本作为备份;
(2)用户端向主节点发送使用服务操作的请求;
(3)主节点通过广播将请求发送给其他副本;
(4)所有副本执行请求并将结果发回用户端;
(5)用户端需要等待F+1个不同副本节点发回相同的结果,作为整个操作的最终结果。
如果大多数的节点都认为主节点有问题,那么副节点也可以通过多轮的投票协商选出新的主节点。
智能合约
简单来说,智能合约是一种在满足一定条件时就自动执行的计算机程序。比如,A和B结婚,其中一方出轨,那么财产就归另一方所有,将资产和出轨处理执行条件写入智能合约,智能合约上链,永久保存并且严格执行。当A出轨时,A的资产就全部转入B账户,并且在这之前,B不能把资产转移。这个合约大大提高了出轨成本,因此智能合约的编写必须严谨。
P2P网络传输
传统的网络架构大部分是C/S(client/server)架构,通过一个中心服务器来响应多个客户端的应答。P2P的网络架构是一种消除了中心服务器的架构。将所有的网络参与者都视为对等节点,既可以做客户端请求数据,也可以做服务器响应请求。P2P网络中节点数越多,P2P网络提供的服务就越可靠。任何单一的节点被破坏,都不会影响整个网络的运转。