侠义来讲,区块链是一种按照时间顺序将数据区块一顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术利用链式数据结构来验证和存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全性、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。
区块链用到的基础技术全是当前非常成熟的技术:如哈希运算、数字签名、P2P网络、共识算法以及智能合约等。
1、哈希算法:简单讲就是把任意长度的输入,通过计算生成一个固定长度的字符串,输出的该字符串称为该输入的哈希值。
优秀的哈希算法具备正向快速(计算输出速度快)、输入敏感、逆向困难、强抗碰撞等特征。
①通过哈希构建区块链的链式结构,实现防篡改。
②通过哈希构建默克尔树,实现内容改变的快速检测。哈希值并不是直接讲所有交易内容计算得到哈希,而是一个哈希树。首先对每笔交易计算哈希值;然后两两分组,对这两个哈希值再计算得到一个新的哈希值,两个旧的哈希值作为新哈希值的叶子节点,如果哈希值为单数,则对最后一哈希值再次计算哈希值即可;然后重复上述计算,直至最后只剩一个哈希值,作为默克尔树的根。如需验证交易,只需要验证默克尔树即可。
2、数字签名
数字签名作用:实现权限控制,识别交易发起者的合法身份,防止恶意节点身份冒充。
数字签名的原理:通过密码学领域相关算法对签名内容进行处理,获取一段用于表示签名的字符。密码学领域,一套数字签名算法一般包含签名和验签两种运算,数据经过签名后,非常容易验证完整性,并且不可抵赖。
数字签名的流程:
①发送方A对原始数据通过哈希算法计算数字摘要,使用非对称密钥中的私钥对数字摘要进行加密,加密后的数据就是数字签名;
②数字签名与A的原始数据一起发送给验证签名的任何一方。
验证数字签名的流程:
①首先,签名的验证方,一定要持有发送方A的非对称密钥对的公钥;
②接收到数字签名和A的原始数据后,使用公钥对数字签名进行解密,得到原始摘要值;
③对A的原始数据通过同样的哈希算法计算摘要,对比解密得到的摘要值与重新计算得到的摘要值对比,相同则签名验证通过。
3、共识算法
共识算法目的:保证所有节点最终都记录一份相同的正确数据。
共识算法主要归为一下四类:
①工作量证明(Proof of Work, PoW)类的共识算法
该类算法核心思想是所有节点竞争记账权,对于每一批次的记账都赋予一个难题,要求只有能够解出难题的节点挖出的区块才是有效的。PoW算法给参与的节点带来的计算开销,除了延续区块链生长外无其他任何意义,造成了巨大的能源浪费。
②Po* 的凭证类共识算法:
根据每个节点的某些属性,定义每个节点进行出块的难度或优先级,并且取凭证排序最优的节点,或是取凭证最高的小部分节点进行加权随机抽取某一节点,进行下一段时间的记账出块。一定程度上降低了出块的开销,但凭证的引入提高了算法的中心化程度。且大多数该类算法未经过大规模的正确性验证。
③拜占庭容错(Byzantine Fault Tolerence, BFT)类算法
BFT算法则希望所有节点协同工作,通过协商的方式来产生能被所有(诚实)节点认可的区块。
实用拜占庭容错算法(Practical BFT)提高了BFT算法容错率,降低了算法复杂度。BFT类共识算法一般定期选出一个领导者,由领导者来接收并排序区块链系统中的交易,领导者产生区块并递交给其他节点对区块进行验证,进而其他节点”举手“表决时接受或拒绝该领导者的提议。如果大部分节点认为当前领导者存在问题,这些节点可以通过多轮投票协商过程将当前领导者推翻,再以某种预先定好的协议协商产生出新的领导者节点。
BFT类算法一般有完备的安全性证明,但协商轮次较多,协商的通信开销较大。业界普遍认为,BFT算法所能承受的最大节点数目不超过100.
④结合可信执行环境(Trusted Execution Environment, TEE)的共识算法
利用软硬件结合的共识算法。可信执行环境是一类能够保证在该类环境中执行的操作绝对安全可信、无法被外界干预修改的运行环境。利用可信执行环境,可对区块链系统中参与共识的节点进行限制,很大程度上可以消除恶意节点的不规范或恶意操作,从而减少共识算法在设计时异常场景的考虑,一般来说,可以大幅提升共识算法的性能。
4、智能合约
简单来说,只能合约是一种在满足一定条件时,就自动执行的计算机程序。
一个基于区块链的智能合约需要包括事务处理机制、数据存储机制以及完备的状态机,用于接收和处理各种条件。并且事务的触发、处理及数据保存都必须在链上进行。
但是智能合约的安全性需要关注。
5、P2P网络
传统的网络服务架构大部分是客户端/服务端(client/server, C/S)架构,即通过一个中心化的服务端节点。对许多个申请服务的客户端进行应答和服务。 C/S架构也称主从式架构,服务端是整个网络服务的核心,客户端之间通信需要依赖服务端的协助。 C/S架构的优点是能够保持一致的服务形式,方便服务和升级,便于管理。缺点是当服务节点发生故障时,整个服务都会陷入瘫痪。
对等计算机网络(Peer-to-Peer Networking,P2P网络),消除了中心化,将所有的网络参与者视为对等者(Peer),并在他们之间进行任务和工作负载分配。P2P网络具有极强的可靠性,网络容量没有上限,P2P网络节点数目越多,P2P网络提供的服务质量就越高。
3、区块是链式结构的基本数据单元,聚合了所有交易相关的信息,主要包含区块头和区块主体。
区块头:父区块哈希值(Previous Hash)、时间戳(Timestamp)默克尔树根等信息构成。
区块主题:一串交易的列表。