“去中心化” 这个名词的实际含义确实也经常会出现很多混淆的情况。 例如,参考下面三个经常被用来解析“去中心化”的图形:
我们先讨论一下美国版知乎(Quora)社交平台上关于“分布式和去中心化之间有什么区别”的两个主要答案。 第一个基本上模仿了上图,而第二个则提出了完全不同的主张,“分布式意味着并非所有交易处理都在同一个地方完成”,而“去中心化意味着没有一个单一实体可以控制所有会话”。 同时,“以太坊堆栈”社交论坛上的一个最佳答案也给出了一个与上图非常相似的图表,只是“去中心化”和“分布式”这两个词互换了位置! 显然,这样的解析还是不够的,我们需要进一步澄清一下“去中心化”这个词。
三种类型的去中心化
当人们谈论软件去中心化时,实际上他们可能在谈论三种相互独立的中心化/去中心化轴。 虽然在某些情况下很难让一种去中心化中不包括另一种去中心化,但总的来说,它们彼此还是完全独立的。 以下是对三种去中心化的描叙:
· 架构(去)中心化——一个系统由多少台物理计算机组成? 它可以容忍多少台计算机在同一时刻发生故障?
· 政治(去)中心化——个人或者公司完全控制的计算数量分别是多少台?
· 逻辑(去)中心化——系统对外的接口和数据结构看起来更像是一个单一的整体,还是一个无特定形式的群体呢? 这里给出一个简单的提示以帮助你理解什么是逻辑(去)中心化:如果你将某个系统分成两半,里面都包括服务和用户的情况下,在这两半都各自独立时,他们能否可以在不需要对方的情况下而继续独立完整的运行?或者再举个通俗且很有意思的例子,有一种海洋生物,它的名称是海星,它很有意思。如果你把用刀把海星从中间切成两半,它的每一半是可以立即独立存活下来的,它们都可以再长成一个独立的海星,这就是我们这里讨论的,海星的生物架构在逻辑上是去中心化的。
我们可以尝试把这三种“去中心化”放到三个维度中来解析,见下图:
注意,上图很多说明文字的展示位置虽然非常随意(这个可以调整),但却可以通过当中的任意一个来得出如下结论:
· 传统公司在政治上是中心化的(只有一个 CEO),它的架构上也是中心化的(一个总部,很多情况下各部门也在一个办公区),在逻辑上也是中心化的(把公司分成两半,任何一半将无法正常运营)。
· 民法系依赖于一个中心化的立法机构,而普通法系则建立在许多法官个人的经验之上。但民法系有时也有一些在架构上是去中心化的,即有许多法院仍然有自由裁量权,当然普通法系却拥有比民法系更多的自由裁量权。两种法律体系在逻辑上都是中心化的(即“法律它就是指法律”体系)。
· 英语语言在逻辑上是去中心化的;例如爱丽丝和鲍勃他们俩之间说的英语和查理和大卫之间说的英语他们不需完全一样(例如声音大小等)。某种语言的存在也不需要中心化的基础设施来保障,而且英语语法规则也不是由任何一个人创建或拥有的(世界语最初是由 Ludwig Zamenhof 发明的,尽管现在它的功能更像是一种不断进化的活语言且不需要授权)
· BT下载在逻辑上类似于英语语言,它是去中心化的。内容传递网络也类似,但它却是由一家中心化的公司控制着。
· 区块链在政治上(没有人可以控制它们)和架构上都是去中心化的(也不会有中心化那种单点故障),但它们在逻辑上却是中心化的(因为所有节点最终都会达到一致的状态它才是原来的那条区块链,如果节点不能全部达成一致就会导致区块链分叉,分叉后它将不再是原来的状态了,整个区块链系统的这种行为就像在一台计算机运行一样。)
很多时候,当人们谈论区块链的优点时,他们描述了拥有“一个中央数据库”的便利优势; 这种中央便是逻辑中心化,在许多场景下就可以认为它是一种好的中心化。
架构中心化通常会导致政治中心化,尽管并不全部是这样——在正式的民主场景下,政客们在某个实体会议厅开会并举行投票,结果这个会议厅的拥有者却最终并没有获得任何实质性的决策权。在计算机化系统中,如果有一个在线社区为了方便而使用了中心化的论坛,则可能会发生架构中心化但政治却是去中心化的情况,但是如果存在广泛同意的社会契约,如果论坛所有者恶意行事,那么每个人都会转移到不同的论坛去(在实践中可能展现出这种属性,在这另一个论坛上围绕着他们反对的审查制度而形成另一个社区,)。
逻辑中心化后很难使架构变成去中心化,但并非不可能——去中心化共识型网络被证明是是成功的,但它比维护 BT下载网络要更加困难些。逻辑中心化使政治去中心化更加困难——在逻辑中心化的系统中,通过简单地同意“活下去,让活下去”来解决争论问题也变得更加困难。
去中心化的三个理由
下一个问题是,为什么去中心化首先有用?一般有几个论点:
· 容错——去中心化系统不太可能意外失败,因为它们依赖的许多独立组件不可能同时失效。
· 抗攻击性——想攻击、破坏或者操纵去中心化的系统成本很高,因为它们没有敏感的可以比周围系统的经济规模低得多的成本进行攻击的关键中心点。
· 抗共谋——去中心化系统中的参与者更难串通一气以损害其他参与者的利益而使共谋者受益,然而中心化公司中的主管或者政府的领导则可以很方便的串通起来采取有利于自己却损害其他沟通能力较弱的公民、客户、员工或者公众的利益来使自己受益。
这三个论点都很重要且有效,当你开始在脑海里用这三种独立且不同的观点开始考虑协议决策的时候,这三个观点确会导致一些有趣且不同的结论。接下来让我们尝试着一一展开和讨论一下这些观点。
关于容错的核心论点很简单。 一台计算机和十分之五的计算同时出现故障的概率相比,哪种情况更少? 该结论应该是无可争议且在现实生活的许多场景中都在使用,例如备用发电机在医院、军事基础设施、多样化的金融投资组合、也包括计算机网络等地方都被采用。
然而,虽然这种去中心化的方式仍然效且也非常重要,但事实证明它往往还不如一个幼稚的数学模型能更准确的预测出故障所在。原因是存在共模故障。 当然,四台喷气发动机同时发生故障的可能性会比一台喷气发动机发生的可能性更小,但如果所有四台发动机都是在同一厂家制造的且这四台发动机都由同一个流氓员工植入了相同的缺陷怎么办?
区块链像现在这样是否都已经设法预防了这种共模故障了呢?我看不见得,看看以下的情况:
· 区块链中的所有节点都运行相同的客户端软件,而这个客户端软件有错误。
· 区块链中的所有节点都运行相同的客户端软件,但开发该软件的团队被证明是有社会腐败问题。
· 提议升级协议的科研团队被证明有社会腐败问题。
· 在工作量证明区块链中,70% 的矿工都在同一个国家,这个国家的政府出于国家安全的目的决定抢夺没收所有的矿场。
· 大多数挖矿硬件都是由同一家公司制造的,这家公司被证明被迫贿赂且强制增加后门允许随意关闭该硬件。
· 在权益证明区块链中,70% 的权益代币在一个交易所持有。
为了容错而设计的去中心化应用,整体上会着重于考虑所有这些问题,并且很清楚该如何把他们的影响降到最低程度。 一些自然而然就会得出的结论就很明显了:
· 确保多个方案相互竞争就相当重要。
· 协议升级背后所需要要的技术功底知识必须要大众化,以便更多的人可以无障碍地放心参与研究讨论和批评明显不当的协议修改。
· 核心研发人员应同时为多家公司或组织工作(备选方案也可以是确保他们中的许多人员是志愿参与者)。
· 挖矿算法的设计应尽量避免中心化风险
· 理想情况下,我们使用权益证明来完全摆脱硬件中心化的风险(虽然我们也应该警惕由于采用权益证明算法而可能导致新风险的出现)。
注意最简单的容错设计要求主要是侧重于架构去中心化,但是,一旦您开始考虑管理协议持续发展的社区也需要拥有容错能力时,那么政治去中心化也同时变得非常重要了。
接下来,让我们看看攻击抗性。在一些纯粹的经济模型中,你会得到这样的结果,去中心化压根就不重要。假如你设计了一个协议,当发生 51% 攻击(即确定性反转),区块链验证者100%会损失 5000 万美元,那么这这些区块链验证者是否是由一家公司或 100 家公司控制其实都不重要了——5000 万美元的经济安全保证金它就是 5000 万美元的经济安全保证金。事实上,中心化甚至可以最大限度地提高经济安全的观点也有很深的博弈论的原因(现有区块链的交易选择模型会反映这种内幕,由于存在很深层的博弈考量,这就是为什么中心化可以甚至放大这样的经济安全,其实通过矿工/区块创建者将交易包含在区块中的操作,实际上是一种非常快速轮换的独裁统治)。
然而,一旦你采用更加丰富的经济模型,尤其是承认可能存在强制(或者更温和的事情,例如针对特定节点的 DoS 攻击)的经济模型,去中心化就变得更加重要。如果你用死亡威胁一个人,突然间 5000 万美元对他们来说就不再那么重要了。但是如果把这 5000 万美元分摊给十个人,那么你必须同时威胁十倍的人。一般来说,现代世界在许多情况下的特点是攻击/防御不对称,有利于攻击者——建造成本为 1000 万美元的建筑物可能只需花费不到 10万 美元来摧毁,攻击者的杠杆力度通常是次线性的:如果一座建筑成本是1000万美元,只需10万 美元来摧毁,那么造成本为 100 万美元的建筑物实际上可能只需要花费 3万美元来摧毁。小的值会得出更好的比率。
这种推理会导致什么? 首先会导致更强烈支持权益证明而不是工作量证明的观点,因为计算机硬件易于检测、调节或攻击,而代币更容易隐藏(在其他原因方面权益证明也有很强的抗攻击性)。 其次,有利于拥有广泛分布的,包括地理分布的开发团队。 第三,这意味着在设计共识协议时需要同时考虑经济模型和容错模型。
最后,我们讨论这三个论点中最复杂的论点,即抗共谋。共谋很难定义;也许唯一真正有效的且简单地解析共谋就是“大家并不喜欢的恶意合作”。现实生活中有很多情况,即使每个人之间都有完美的合作也是一种理想的情况,如有团队中一个小组能够合作但其他小组又不能合作也是很危险的。
一个简单的例子是反垄断法——故意设置监管障碍,以使市场一方的参与者更难团结起来,像垄断者一样行事,以牺牲市场另一方的利益为代价获得外部利润市场和一般社会福利。另一个简单的例子是美国反对候选人和超级政治行动委员会之间积极协调的规则,尽管这些规则在实践中被证明难以执行。一个更小的例子是一些国际象棋锦标赛中的一条规则,该规则禁止两名棋手进行多次对战以试图提高一名棋手的分数。无论你在哪里看,在复杂的场景中防止恶意的合作的尝试无处不在。
在区块链协议的情况下,共识安全性背后的数学和经济推理通常主要依赖于不使用的选择模型,或者假设游戏是由许多独立做出决策的个体参与者组成。如果任何一个参与者在工作量证明系统中获得超过 1/3 的算力,他们就可以通过自我挖矿获得巨额利润。然而,当比特币网络拥有 90% 的算力者合作到足以同时出现在同一个会议上时,我们真的可以说选择不合作模型是最理想的吗?
区块链倡导者认为区块链的架构相对来说更加安全,因为他们不能随心所欲地随意更改规则。但是却很难预防这种情况 ,区块链软件和协议的开发人员都是为一家公司工作,属于一个家庭,坐在一个房间里。总而言之就是这些系统不应该垄断且自私的只服务一个对象。在这样的情况下,您就可以说,区块链间各方越不合作就区块链就越安全。
然而,这是一种悖论。包括以太坊在内的许多社区因具有强烈的社区精神,它们因能够在几天内快速实施合作、发布和激活硬分叉以解决协议中的DDOS问题而经常受到称赞。我们怎样才能鼓励和促进这种良好的合作,同时防止类似矿工试图反复合作来达到 51% 攻击目的的这种“恶意合作”来损害其他人的利益?
有三种答案可以回答这个问题:
· 不要刻意费力去阻止恶意合作; 相反应该是想办法构建可以抵制它的协议。
· 尝试找到一种更受欢迎的方式,它允许足够的合作以推动协议向前发展,却不致于会形成攻击条件。
· 尽量区分有益合作和有害合作,让前者更容易,后者更难。
第一种方法是卡斯帕设计哲学的主要组成部分。 然而,依靠它自己是不够的,因为单独依靠经济激励是无法解决其他两种去中心化类型的。 第二种很难从工程角度明确下来,特别是从长远来看更是如此,可是它确实经常在意外情况下发生。 例如,比特币的核心开发人员大部分说英语而矿工却一般说中文这一事实可以被视为是很好的意外,因为它创造了一种“两院制”治理,使两种社区彼此在一起合作更加困难,但是它确实降低了开发者和矿工他们共谋导致比特币失败的风险,主要因为他们由于距离上和沟通方面的困难,英语和中文社区至少会在某些程度上会分开进行分析和推理相关的问题,因此这两种社区就不太可能同时犯同样的错误。
第三种方法的社会挑战性远大于其他一切; 可能有以下的解决办法:
· 施加社会干预试图提高参与者对整个区块链社区的忠诚度,同时替代或阻止市场一方的参与者直接彼此相互忠诚的可能性。
· 在同一背景下促进不同“市场方”之间的交流,以尽可能减少验证者、开发人员或矿工三方共同把他们自己视为一个“阶级”,联合起来捍卫自己的利益免受其他阶级侵害的可能性。
· 设计协议时应该尽量减少验证者/矿工形成一对一的“特殊关系”、中心化形态的中继网络和其他类似超级协议机制。
· 明确协议应该具有哪些基本特性,哪些事情不应该做,或者至少应该只在非常极端的情况下才能做。
因此,这第三种去中心化,即避免恶意合作的去中心化,可能是最难实现的,因此必须要折衷考虑。 也许最可靠的方法是去重度依赖一个100%去中心化的群体:即使用协议的用户。