去中心化的概念
区块链去中心化是指一种分布式数据库技术,它通过加密算法和共识机制在网络中的多个节点上存储数据,从而实现数据的去中心化管理。在区块链去中心化中,没有中心化的权威机构或服务器来控制或验证数据,而是依赖于网络中的所有参与者共同维护数据的完整性和一致性。
如下图左图是去中心化,右图是中心化模型
在一个中心化系统中,一个中心模块连接了其他所有的模块。对应地,一个去中心化的系统中没有任何一个中心节点可进行节点间的协调与控制
作为区块链诸多特性中的重要的一个特点,其使用分布式储存与算力,使得整个网络节点的权利与义务相同,系统中数据本质为全网节点共同维护,从而区块链不再依靠于中央处理节点,实现数据的分布式存储、记录与更新。而每个区块链都遵循统一规则,该规则基于密码算法而不是信用证书,且数据更新过程都需用户批准,由此奠定区块链不需要中介与信任机构背书。
去中心化的分布式系统虽然有很多好处,但设计并运行这样的系统是很难的,因为和中心化系统相比,它运行在一个不可信任的环境中,要保持系统的一致性、完整性、安全性是非常困难的。往往中心化系统很容易做到的事,在去中心化系统中会非常困难。
去中心化系统的优势
更强大的计算能力
在一个去中心化系统的计算能力表现为系统中所有互联计算机的计算能力之和。
更低的成本
一台超级计算机的搭建、维护与运营成本会远远高于相同计算能力的去中心化系统。
更高的可靠性
在去中心化系统中即使一个节点计算机宕机,整个系统依旧可以照常工作,这个特性为去中心化系统带来了更高的可靠性。
自增长的能力
通过向系统中加入新的计算机,去中心化系统的计算能力能够得到进一步的提升。
去中心化系统的劣势
节点间的协调
去中心化系统没有中心节点来协调其中的所有成员。 去中心化系统中的协作具有不小的难度,并且在协调过程中会产生额外的开销,并占用一定的计算资源。
节点间的冗余通信
节点间的协作需要通过通信交流来完成。 去中心化系统中的成员节点需要和其他的节点频繁进行通信,产生额外的开销,并占用一定的计算资源。
对网络的过度依赖
各类通信网络均存在各自的局限性。 去中心化系统中的成员节点需要不停地互相通信,这个通信过程依靠网络作为媒介,因此对网络的选择和依赖会影响整个去中心化系统的存在。
系统编程的较高复杂度
通过编写程序或软件来解决各类问题。 任何一个运行在去中心化系统上的软件都需要解决额外的问题。
安全问题
任何网络传递数据与信息都存在可靠性的问题,而一个去中心化系统的特征决定了这个系统需要更加注重系统的安全性。系统对成员节点使用网络的权限限制越大,去中心化系统就越安全可靠。
去中心化的点对点网络系统
网络中的每台计算机都作为一个节点,这些节点在系统中扮演着相同的角色,拥有相同的权利。对于整个点对点网络而言,其中的任意一个节点即使系统资源的提供者,也是系统资源的使用者,所以使用相关软件的人越多,这个软件背后的系统就越庞大,资源也就越加丰富。
- 点对点系统由计算机组成,这些计算机将资源直接开放给系统中的其他成员。
- 点对点系统的优势是它们允许成员不通过中间人直接进行交互,能够加快信息的处理速度,降低成本。
- 点对点系统可以是中心化的,也可以是完全去中心化的。
- 区块链能够为完全去中心化点对点系统的实现和维护提供完备性,而完全去中心化的点对点系统有能力改变所有有中间商参与的行业。
具有中心化和去中心化优势的混合系统
混合去中心化架构和去中心化系统作为中心节点的中心化架构图
两种混合架构系统有一个共同点:难以定义它们的本质是中心化的还是去中心化的。
去中心化系统也存在一些挑战,如性能瓶颈、安全性问题和治理机制等。为了解决这些问题,一些系统采用了去中心化和中心化混合的架构。在这种架构中,系统的一部分功能采用中心化的方式来实现,以提高性能和可管理性;而另一部分功能则采用去中心化的方式来实现,以提高系统的安全性。
例如,一种中心化与去中心化结合的可信系统架构将生产者、记录者和验证者分为三层,分别是私有链、类公有链和DHT客户端。这种架构通过将账本数据映射到DHT客户端,并通过等价验证使每个客户端只需要存储和验证部分账本数据,即可等价为验证了整个账本数据,从而验证私有链的账本数据是否正确。这种架构结合了中心化和去中心化的特点,能够在保证系统正确性和不可篡改性的同时,提高系统的性能和可扩展性。
总之,去中心化和中心化的混合系统是一种灵活、可扩展且安全的系统设计方法,能够应对复杂多变的网络环境和数据需求。
点对点系统中的信任与完备性
技术性故障
点对点系统是由网络中互相连接的独立计算机组成的,任何一台计算机的任意一个硬件(或核心软件),或这个系统所依赖的网络都有发生故障的风险。
一个分布式系统必须面对节点故障或系统运行错误所带来的风险。
点对点系统中的威胁
(1)去中心化系统中成千上万个节点都拥有,记账和存储账本数据的权力,节点的加入和退出都是完全自由的,没有人来管控和认证,这样难免就会出现心怀不轨的破坏分子。恶意节点是点对点系统所面临的第二大完备性威胁,这类威胁不是技术问题,但是可能比技术问题更难以处理:有人出于私利而剥削整个系统,或占据这个系统中的主要资源。
(2)比特币系统的节点分布在全球各地,在网络中同时会产生成千上万个交易数据需要记账,各地的网络有快有慢,有时部分网络还有可能断线,要全网所有的节点保持所记录的交易账目都是一模一样的,即保持全网的一致性,也是非常困难的。
双花问题
(3)双花,即双重支付,指的是在数字货币系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况简单来说,同样一笔数字资产被重复支付,即同样一笔钱被花掉两次或多次。
比如,我们微信钱包里有100块钱,我们先去饭店吃了顿饭,结果微信出了bug,这一笔钱并没有被银行同步,还留在钱包里,于是我们又能拿着同样的100块钱去看场电影,这就属于双花问题。
在区块链系统中,双花问题会出现的情况
- 由于共识机制导致区块确认时间长,用一个数字货而去进行一次交易,可以在这笔交易还未被确认完成前,进行第二笔交易
- 控制算力来实现双花,第一次交易被验证通过并被记录入区块后,在该网络中有更高的算力验证出新的更长链条,在该链条中这笔钱被第二次花费,由于第二次花费的区块链条更长使第一次交易区块所在链条为无效链条,这样一来,第一次交易所在的区块链被区块链网络放弃,第一次花费的钱就又回到自己账户了,就导致了双花问题。
- 还有许多情况,比如利用控制矿工费来实现双花,或者一些人为了节省时间而接受0确认,这就很容易被攻击者利用。
如何解决双花问题
- UTXO:首先每笔交易都要先确认对应比特币之前的情况,要检査它是否存在于用户的UTXO中。如果不在,那么该交易会被系统拒绝,
- 时间戳:当交易被矿工们先后记录后,根据时间戳数据来证明,最先被记录的交易才能被成功验证,区块链的时间戳是一种存储在区块链网络中的数据,它用来记录在区块链网络上发生的交易的时间。 它可以帮助查询不同区块的时间,以证明特定交易的时效性,也可以证明区块是否安全以及交易的正确性。 时间戳是指由公共账本中的时间信息所组成的字符串,具有共识性,可以防止恶意操作和数据篡改。
- 六次确认:交易接收者等待6个区块之后就认为基本上没法被篡改(特殊情况:51%攻击)
比特币网络的难度是动态调整的,被设计为平均每10分钟出一个“块”(交易信息)。区块奖励是给第一个确认的人。
连续6个确认是指在这之后又有5个区块被计算出来连接到区块链上,每一个都相当于对前面一个区块进行确认,区块链上每增加一个区块就增大了前面区块被篡改的难度。
比特币区块链采取的是最长链原则,即当前最长的链被认为是主链,是正确的链。
由于新区块的生成速度是由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链
区块链中的占拜庭问题
拜占庭的将军们没有一个中心化的领导机构,所以,如果他们需要攻击某个城市,所有将军需要对任何将军可能提出的攻击时间达成共识。也就是说,只有所有的将军都达成了共识,在同一个攻击时间攻击,就有非常大的胜率。但是,问题来了。这时,可能会有多个将军同时发出不同的攻击计划,而且这些将军中还有叛徒。那么,将军们怎样达成共识呢?莱斯利·兰伯特证明,当叛变者不超过 1/3 时,存在有效的算法。不论叛变者如何折腾,忠诚的将军们总能达成一致的结果。如果叛变者过多,则无法保证一定能达到一致性。拜占庭问题之所以难解,在于任何时候系统中都可能存在多个提案(因为提案成本很低),并且要完成最终的一致性确认过程十分困难,容易受干扰。但一旦确认,即为最终确认。
占拜庭容错技术被设计用来处理显示存在的异常行为,并满足所要解决问题的规范要求。
一群拜占庭将军,人手一台电脑想用字符串模式匹配的方法,暴力破解国王的WiFi密码,当然他们已经事先获取了组成密码的字符串的长度。一旦他们开始模拟网络发送数据包,他们必须在一个限定的时间内完成破解工作,并清除服务器和电脑上的记录,否则他们就会被发现,那就麻烦了。只有当绝大多数将军在同一时间发起攻击和破解,这样才能有足够的CPU(中央处理器)和计算能力在短时间内完成破解工作。
下面是一个简单的故事帮助理解
他们并不特别在乎什么时候开始攻击,只要他们全部同意就好。一开始的时候,大家决定这样搞:任何人觉得时机到了都可以宣布一个攻击时刻。而且,不论是什么时候,只要是第一个被听到的攻击时刻,就将被确定为官方的攻击时刻。这样的话问题又来了,因为网络传达有延迟和干扰,如果有两个将军差不多同一时间公布了两个不同的攻击时刻,那么有的人会最先听到其中一个将军发布的攻击时刻,而又有些人则会最先听到另外一个将军发布的攻击时刻。
他们使用一个“工作量证明链”来解决这个问题。当每个将军接收到任何表达形式的第一个攻击时刻时,他都会设置他的计算机来求解一个极其困难的“工作量证明”问题,对这个问题的解答是一个哈希(Hash)散列,里面也将包含着这次的攻击时刻。由于这个“工作量证明”问题,非常难解,一般而言,就算所有人收到这个问题后同时求解,也至少需要10分钟才能产生解答。一旦一个将军解出了“工作量证明”,他将会把这个算出来的“工作量证明”向整个网络进行传播,每一个接收到的人,将在他们当前正在做的“工作量证明”计算的散列中附加上刚刚被求解出来的那个工作量证明。如果任何人正在计算他收到的其他的一个不同的攻击时刻,他们将会转向新的更新后的“工作量证明”计算当中,因为他现在的“工作量证明链”更长了。
两个小时后,将有一个攻击时刻被散列在一个有12个“工作量证明”的链中。每个将军只要通过验证(这条工作链的)计算难度,就能估算出平均每小时有多少CPU算力耗费在这上面,也就会知道:这一定是在分配的时间段内,绝大多数将军的计算机共同协作才能生成的结果。如果“工作量证明链”中展示出来的算力足够强大,可以破解国王的WiFi密码,那么他们就可以在一致同意的时间内安全地展开攻击。
同步、分布式数据库和一个一致的、全局性的视野的问题如何解决?“工作量证明链”就是答案。
所有权的本质
所有权就是如何证明一件事物是你本人的
证明所有权的三个要素
- 对所有者的证明
- 对事物被拥有的证明
- 提供一个所有者和事物之间的连接
区块链和账本来进行所有权管理之间的联系可以总结以下五点
- 点个账本可以用来记录所有权相关的信息,可以看做一份区块链中存储与所有权有关的证明
- 只有一个账本是有风险的。可以利用一组独立的账本来记录所有权,并使用大多数账本都认可的结果来对所有权进行证明。
- 使用区块链数据结构来创建基于完全去中心化系统的账本。区块链算法负责让各个节点账本内的所有权状态同步到一个一致的版本。
- 所有者和物品之间的关系可以保留在账本中,与法庭中的证人起着相同的作用。