区块链真的能构造“公平公正”的理想王国吗?

出品 | 智识神工官方博客

贪污腐败、走私和非法贸易、偷税漏税、网络诈骗、生产销售假冒伪劣产品等行为是人类社会与经济系统的顽疾,这些问题造成了许多负面影响。每一起社会资源的暗箱交易都损害着公众的信任,不可追溯的不法金钱流动让受害者苦不堪言,人们期待着一个更加公平、透明、安全、高效的社会与经济系统。

在这个期盼之下,人们强化法律和执法、尽力提高透明度和公开度、完善举报制度、加强宣传教育。纵使如此,不法资金流动仍无法杜绝,社会根据被发现的问题不断地总结经验教训,不断改进和完善措施,没被发现的问题则只能期待后人的智慧。

由人组成的系统难免有疏漏,因此区块链想把分配的方法交给代码与机器,把交易记录和验证方法公开给所有参与者。在这种理念下,第一条区块链比特币发布了,作为一种“去中心化的分布式账本”被人们熟知。

公链——去中心化

比特币是一种用于记录交易的账本,去中心化是它显著的特征,即没有第三方公信机构来记录交易,每个参与者都可以获取这个账本,都有机会成为一笔新账的发布者。比特币属于区块链中的公链,即任何个体都可以随意地加入或退出。实现这样一个分布式账本有以下几个问题:

  1. 如何确定发布新账的人
  2. 如何保证新账是正确的
  3. 如何保证账本不被篡改
  4. 如何保证所有人的账本是一样的

弄明白这几个问题,就明白了比特币的原理。这几个问题涉及到共识算法、哈希函数、数字签名等方法,下文将分别介绍。

  • 如何确定发布新账的人(也被称为“挖矿”)

谁来当发布新账(创建新区块)的人,显然需要取得群体共识。取得共识可以粗略地分为两种方式:先询问所有人,大多数人同意之后再发布;带着某种凭证直接发布,该凭证能被所有人确认。

比特币选择了第二种方式(公链都属于第二种),使用的是被称为PoW(Proof of Work,工作量证明)的共识算法。而PoW的核心在于哈希函数,这里简要介绍一下哈希函数的特性。

哈希函数是一种映射,能把任意长度的输入转换为固定长度的输出,通常记为H(x) 。一个良好的哈希函数要求:对于任意的输入 x ,计算H(x)都相对容易;从H(x)推导出 x 在计算上不可行;当x_{1}\neq x_{2}时,H(x_{1})\neq H(x_{2})的概率可以忽略不计。

挖矿其实就是在不断计算哈希函数,算出符合要求的哈希值:

H(B_{n})\leq targetHash

B_{n}=\left [ H(B_{n-1}),t_{n},Merkle_{n},nounce_{n} \right ]

其中, B_{n} 代表第 n 个区块的关键参数, t_{n} 代表第 n 个区块产生的时间, Merkle_{n} 代表一个哈希树的根,可以看作第 n 个区块记录的所有交易的聚合哈希值, nounce_{n} 代表一个随机数。矿工的任务就是猜出 nounce_{n} 使得 H(B_{n})\leq targetHash ,算力越大猜的越快,越有可能成功创建新区块。

targetHash=\frac{targetMax}{Difficulty}

newDifficulty=oldDifficulty\times \frac{2016\times 10min}{Time_{2016}}

targetMax 是一个固定值, Time_{2016} 指创建前2016个区块实际花费的时间。

  • 如何保证新账是正确的

​这里用到了数字签名的技术,只有交易的发起者具备签名的能力(私钥)。每一笔交易都有“输入”、“输出”两个部分。“输出”中包含了接收者的地址与接收金额,而“输入”必须与其它交易的“输出”对应。

打个比方,一个交易就像一个合同,合同上写着张三转给李四5块钱,合同上必须要有张三的签名。王五帮忙把这个合同和其它合同一起打包存起来,但王五没法篡改合同,因为他没法伪造张三的签名。那么,怎么确定张三有5块钱呢,必须在之前的区块链中找到另一个合同,比如赵六转给张三5块钱的合同,且这5块钱还未被其它合同使用。如此便可保证新区块中的交易是正确的。

  • 如何保证账本不被篡改

假设最新的区块已经是第8888块了,而一个攻击者想要篡改第8000块区块,由于哈希函数的不可逆性,它无法创建一个能被第8001块区块认可的父区块替换掉原本的第8000块区块,它只能将第8000块之后的所有区块全部篡改掉。

而由于创建区块的Difficulty限制,在全网算力下,平均每10分钟才能创建一个区块,攻击者的算力必须超过全网其它算力之和(即控制51%以上的算力),才有可能篡改出一条更长的链,因此篡改已确认的区块十分困难。

  • 如何保证所有人的账本是一样的

当一个新区块被创建之后,如何把这个区块发送给其他人呢?

比特币选择的是gossip方法,每个节点都会维持几个与其它节点的连接,当节点A收到一个区块block并对其进行验证(它找到的随机数nounce的确可以使得哈希函数小于目标哈希)之后,会将该区块的相关信息包装成一个inv消息广播给其连接的节点,若节点B收到inv消息并且发现自己之前没有接收过这个区块,则向A节点请求这个区块的具体信息。B节点收到该区块后会继续验证并广播其inv消息。经过数轮传播之后,新区块便可以发送到全网。

一个新区块发送给全网半数节点需要时间,那就可能存在冲突,如果在某一时刻,节点A和节点B同时发现了新区块X和Y,那么部分节点会认证X,部分节点会认证Y,这就出现了区块链的“分叉”,哪一条才是主链呢?

为了解决冲突问题,比特币提出了最长链原则,如果认证过X矿工先发现了区块Z,X+Z的链长度大于Y,认证过Y的节点收到Z之后发现Z的链更长,就会抛弃Y,加入X+Z这条链,而区块Y就变成了“孤块”,Y上记录的奖励和交易都不会被认证。

当然,也可能出现更长的分叉,就是在X、Y之后恰好又同时分别生成了U、V,分叉的两条链的长度仍然相同。此时,两条链的速度竞争会一直持续下去,直到出现更长的链。一般来说,比特币交易被确认6个区块后,便被认为是非常安全的,极少出现分叉的情况,随着区块的增加,分叉的可能性逐渐减小,交易也变得越来越不可逆转。

综上所述,比特币具备去中心化、公开透明、不可篡改等优点,在公平、透明、安全、高效的愿景中它做到了三点,十分了不起。但由于这种全网记账与全网广播的架构与PoW的共识算法,它无法做到高效,只能记录少量重要的信息(比特币货币交易),且交易确认时间较长(几分钟到几十分钟),无法做到承载所有交易,杜绝不法资金流动,相反,它甚至几乎沦为金融投资品,滋生了许多恶性事件——用比特币进行黑市交易(比特币虽然交易透明,但是身份匿名,被不法分子所利用)、区块链交易所失窃(网络环境的不安全导致私钥存在被盗窃的风险,大量私钥的集中管理更容易遭到黑客针对)。

各种公链项目推出PoS(Proof of Stake)、DPoS(Delegated Proof of Stake)、PoA(Proof of Authority)等共识算法缓解了PoW的能源消耗问题,智能合约技术扩展了区块链的应用,使其不再局限于加密货币交易,逐步延伸到物联网、医疗、国际贸易等领域。但全网记账带来的高数据量(比特币全链:几百GB,以太坊全链:几TB)与私钥的安全威胁仍然亟待解决。

私链——分布式一致性

大企业内部由于对商业数据的隐私要求以及对效率的高要求,不适合使用公链,于是出现了用“公平”换取“高效”的私链。

私链十分依赖强调分布式一致性的共识算法(Paxos、Raft、ZAB),保障私链节点之间的数据同步。而这些分布式一致性算法并不依赖区块链,它们在区块链出现之前就在为互联网大企业服务了。互联网大企业用户数量多,单台服务器无法处理所有访问与数据更改请求,必须同时使用多台服务器处理业务,分布式一致性算法正是让多台服务器上的数据保持一致的手段,还能有效消除部分服务器宕机的影响。私链的加持为分布式一致性带来了不可篡改的安全,颇受同时注重效率与安全的金融行业青睐。

私链的所有节点都属于一个企业,不可篡改性只是针对入侵了几个节点的黑客,而掌握了所有节点的企业可以任意修改数据,因此私链的分布式系统被认为具有很高的中心化程度。

联盟链——拜占庭容错

出于对私链过度中心化的担忧,企业机构往往联合起来采用联盟链(超级账本Hyperledger企业以太坊联盟 EEA),区块链节点归属于多家企业,增大了篡改数据的难度。与只需考虑宕机节点的私链不同,联盟链中还需要提防恶意节点,这便构成了拜占庭将军问题。

该问题假设一个场景:一个将军向他的下属军官们下达命令,以决定是进攻还是撤退,共同进攻才能获得胜利,共同撤退也能保存实力,都属于达成共识,获得成功。但如果一部分进攻,一部分撤退,整个军团将全军覆没。在统一共识的目标下,命令的传递过程充满曲折,比如,命令不能到达,命令乱序,更可怕的是,下属军官们中存在叛徒,他们不仅会篡改命令,甚至还会阴奉阳违,声行不一,最最可怕的是,也许将军本人就是那个叛徒,它向不同的军官下发不同的命令,故意使军团覆灭。即,战场上任意一个做决策的人,都可能是叛徒,会任意篡改命令。在这样的外部条件下,是否存在一种算法,使得整个军团可以达成一致的共识,获得成功呢?

1982年Lamport等人证明了该问题有解的条件:当叛徒人数为 f 时,总人数 n 必须满足 n\geq 3f+1 。可以通俗地解释为:一个军官必须收到 2f+1 个投票(投票上有签名认证身份)才能做出决定,以保证发出投票的忠臣多于叛徒,而如果 n-f< 2f+1 ,叛徒则可以全体不发送投票,导致没有人能收齐 2f+1 个投票,即使收到 f+1 个相同投票也是没有用的,因为不能确定这 f+1 个人中是否有叛军投票给A行动却执行B行动。所以 n 必须大于等于 3f+1 。

目前解决拜占庭问题的共识算法有PBFT、dBFT、HoneyBadger、HotStuff等。下面介绍几个使用了联盟链的项目。

  1. NEO是一个开源的智能合约区块链平台,旨在为数字资产的数字化、智能合约的执行和分布式应用的开发提供基础设施。dBFT是NEO区块链平台所采用的共识算法之一,用于确保网络上所有节点对区块的顺序和内容达成一致,以避免双重支付等问题。在dBFT中,网络中的节点被划分为记账人(也称为验证人或委员会成员)和普通节点。记账人负责确认交易并打包区块,而普通节点则参与投票选择记账人。每个记账人都有确定的轮次来产生区块,其他记账人会对其提出的区块进行投票,如果超过三分之二的记账人都同意该区块,则认为达成共识,并将其添加到区块链上。NEO之所以选择dBFT作为其共识算法,是因为dBFT具有较高的性能和扩展性,能够在快速确认交易的同时确保网络的安全性。与其他共识算法相比,如比特币的PoW(工作量证明)和以太坊当前采用的PoS(权益证明),dBFT能够提供更快的交易确认时间和更低的能源消耗,从而适用于更广泛的商业应用场景。
  2. Facebook的Diem(前名Libra)是一个全球数字货币项目,旨在为全球用户提供一种稳定、安全且低成本的数字货币解决方案。Diem项目在设计共识机制时选择了HotStuff的改进算法作为其核心算法,用来确保网络上的节点之间达成共识,并确认有效的交易和区块。HotStuff的高性能、高吞吐量和快速确认特性使得它非常适合应用于数字货币项目,可以支持大规模的交易处理。通过HotStuff共识算法,可以实现快速确认交易和高度的容错性,即使在存在恶意节点或网络故障的情况下,共识机制仍然能够保持网络的安全和稳定,这对于数字货币项目非常重要。

公平、透明、安全、高效

公链、私链、联盟链在去中心化、安全、效率上不断权衡。公链去中心化程度最高、篡改数据的难度也最高,私链生成区块的效率最高,联盟链则比较均衡。目前公链公平、透明、安全的性质最受青睐,得到了最多的关注,不断涌现的新设计都在试图改进公链的效率,同时催生了一批区块链应用(Defi、NFT、Dapp),但区块链应用的代码开源,导致它们更容易遭受黑客的攻击,此外,各种区块链技术都面临着私钥失窃的威胁,网络安全环境与安全意识亟待提高。

为了克服这类脆弱性,智识神工给出了“数据+通信+网络”三位一体的信息安全技术全方案,其中主研SPU安全处理器)提供了底层硬件安全环境,包括安全存储私钥、缓解开源组件安全漏洞的威胁等功能,加强了整体安全性。

区块链与共识算法的技术发展还有很长的路要走,我们期盼用技术实现一个更公平、更透明、更安全、更高效的系统,让权利分配恰如其分,让系统的运行规则公开透明,让数据与隐私都得到保护,让各种服务流畅运行。愿各位同行一起在这条路上砥砺前行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智识神工官方博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值