共识机制
常用的共识机制主要有PoW、PoS、DPoS、Paxos、PBFT等。
- PoW:依赖机器进行数学运算来获取记账权,资源消耗相比其他 共识机制高、可监管性弱,同时每次达成共识需要全网共同参与运算,性 能效率比较低,容错性方面允许全网50%节点出错。
- PoS:主要思想是节点记账权的获得难度与节点持有的权益成反比,相对于PoW,一定程度减少了数学运算带来的资源消耗,性能也得到了相应的提升,但依然是基于哈希运算竞争获取记账权的方式,可监管性 弱。该共识机制容错性和PoW相同。
- DPoS:与PoS的主要区别在于节点选举若干代理人,由代理人验 证和记账。其合规监管、性能、资源消耗和容错性与PoS相似。
- Paxos:是一种基于选举领导者的共识机制,领导者节点拥有绝 对权限,并允许强监管节点参与,性能高,资源消耗低。所有节点一般有 线下准入机制,但选举过程中不允许有作恶节点,不具备容错性。
- PBFT:与Paxos类似,也是一种采用许可投票、少数服从多数来 选举领导者进行记账的共识机制,但该共识机制允许拜占庭容错。该共识 机制允许强监管节点参与,具备权限分级能力,性能更高,耗能更低,该 算法每轮记账都会由全网节点共同选举领导者,允许33%的节点作恶,容 错性为33%。
数据存储
数据结构
在区块链技术中,数据以区块的方式永久储存。区块按时间顺序逐个 先后生成并连接成链,每一个区块记录了创建期间发生的所有交易信息。 区块的数据结构一般分为区块头(header)和区块体(body),如图所示。其中,区块头用于链接到前一个区块并且通过时间戳特性保证历史 数据的完整性;区块体则包含了经过验证的、区块创建过程中产生的所有 交易信息。
区块链数据结构数据库
按照数据库的数据结构组织形式来看,一般分为Key-Value型和关系 型两种。
- Key-Value型数据库的数据结构组织形式比较简单,读写 性能很高,能支持海量并发读写请求,而且可扩展性强,操作接口简单, 支持一些基本的读、写、修改、删除等功能,但不支持复杂的SQL功能和事务性。
- 关系型数据库采用关系模型来组织数据,支持各种SQL功能,功能性强,支持事务性,读写性能一般,可扩展性弱。
按照数据库的部署形式来看,一般分为单机型和分布式两种。
- 单机型数据库保证强一致性和较好的可用性。
- 分布式数据库在物理部署上 遵循了分布式架构,能提供高并发的读写性能和容错,有很强的可用性和 分区容错性,但由于需要进行数据同步,分布式架构的数据一致性较弱, 只能保证最终一致性。
网络协议
区块链网络协议一般采用P2P协议,确保同一网络中的每台计算机彼此对等,各个节点共同提供网络服务,不存在任何“特殊”节点。不同的区块链系统会根据需要制定独自的P2P网络协议,比如比特币有比特币网络协议,以太坊也有自己的网络协议。
加密算法
散列(哈希)算法
散列算法也叫数据摘要或者哈希算法,其原理是将一段信息转换成一个固定长度并具备以下特点的字符串:
- (1)如果某两段信息是相同的,那么字符也是相同的。
- (2)即使两段信息十分相似,但只要是不同的,那么字符串将会十分杂乱随机并且两个字符串之间完全没有关联。
本质上,散列算法的目的不是为了“加密”而是为了抽取“数据特征”,也可以把给定数据的散列值理解为该数据的“指纹信息”。典型的 散列算法有MD5、SHA1/SHA2和SM3,下表对比了这些算法的特点。
典型散列算法的特点总体上看,SHA256和SM3这两种算法效率和安全性大致相当,目前区块链主要使用SHA256,国内某些特定业务场景使用国密SM3,亦是比 较符合国家安全和监管的选择。但由于不同业务场景的安全性标准有别, 未来不排除还需要探索更优算法的可能性。
非对称加密算法
非对称加密算法由对应的一对唯一性密钥(即公开密钥和私有密钥) 组成的加密方法。任何获悉用户公钥的人都可用用户的公钥对信息进行加 密与用户实现安全信息交互。由于公钥与私钥之间存在的依存关系,只有 用户本身才能解密该信息,任何未受授权用户甚至信息的发送者都无法将此信息解密。
在近代公钥密码系统的研究中, 其安全性都是基于难解的可计算问题 的,常用的非对称加密算法特点及其比较如表所示。
有非对称加密算法,自然就存在对称加密算法,两者区别见:对称加密算法 VS 非对称加密算法
隐私保护
目前区块链上传输和存储的数据都是公开可见的,仅通过“伪匿名” 的方式对交易双方进行一定的隐私保护。对于某些涉及大量的商业机密和 利益的业务场景来说,数据的暴露不符合业务规则和监管要求。目前,业 界普遍认为零知识证明、环签名和同态加密等技术比较有希望解决区块链 的隐私问题。
智能合约
智能合约可视作一段部署在区块链上可自动运行的程序,其涵盖的范 围包括编程语言、编译器、虚拟机、事件、状态机、容错机制等。
虚拟机是区块链中智能合约的运行环境。虚拟机不仅被沙箱封装起来, 事实上它被完全隔离。也就是说运行在虚拟机内部的代码不能接触到网络、 文件系统或者其他进程。甚至智能合约之间也只能进行有限的调用。
智能合约本质上是一段程序,存在出错的可能性,甚至会引发严重问 题或连锁反应。需要做好充分的容错机制,通过系统化的手段,结合运行 环境隔离,确保合约在有限时间内按预期执行。
网友评论