DesignSpark Electrical Logolinkedin
菜单 搜寻
提问问题

22 Oct 2019, 6:49

区块链入门 - 第三部分

在入门系列的第二部分中,我们讨论了公共区块链这类分散点对点系统如果要发挥作用,则必须就区块链历史记录和允许添加的新数据达成共识。当然,说起来容易做起来难,尤其是涉及到成千上万的节点时

这篇原创性论文是由 Leslie Lamport、Robert Shostak 和 Marshall Pease 于 1982 年发表的一个思想实验,它的名称为拜占庭将军问题。这篇学术论文清晰易懂,值得一读。

拜占庭将军问题

作为一种尽管组织内可能存在欺诈或背叛因素,但是其中涉及的多方仍需要就未来行动达成共识的假设情形,本文描述了古代拜占庭帝国的几位将军围绕叛乱城市驻扎的情形。每位将军及其军队都拥有独立的营地,营地之间的交流只能靠信差在开阔(可能属于敌方)地形之间传递。

将军们面临的问题在于他们所包围的这座城市拥有强大的军事力量。它能够轻易地击垮单支军队,也可以抵御来自多支军队的非协同进攻。将军们要取得胜利,就必须统一战线。而另一个可以让他们保存实力、日后再战的决定则是同时撤退。

根据每位将军为达到这一目标而必须送出的信息,论文描绘出每位将军的问题(以最简单的形式),看起来像一位主将和两名中将的组合问题。论文中列出的条件有:

拜占庭将军问题。主将必须传令给 n-1 名中将,以便:

IC1. 所有忠诚的中将都服从相同的指令。
IC2. 如果主将忠诚,那么每一位忠诚的中将都服从他发出的指令。

看起来很简单,但是当将军们使用公开(或口头)信息时,除非有 2/3 以上的中将是忠诚的,否则无法达成目标。换言之,就三位将军而言,只要有一名叛徒,就无法达成目标。这可以通过下面两张图进行说明:

图 1 中,主将命令两名中将进攻。中将 2 是一名叛徒,他向中将 1 发出信息,称收到撤退命令。为满足 IC2 条件,中将 1 将服从进攻命令。

但是在图 2 中,主将是叛徒,他向中将 1 发出进攻命令,而向中将 2 发出撤退命令。中将 1 不知道谁是叛徒,也不知道中将 2 收到的是什么信息,中将 1 收到的信息与图 1 中收到的完全相同。只要叛徒的谎言保持不变,中将 1 就必须进攻。

论文接下来通过数字方法证明,如果要达到目标,3m + 1 位将军中叛徒的人数不得超过 m 人:也就是说,只要叛徒人数少于 1/3 的将军人数,那么就有可能成功。

防止虚假信息

正如图 1 和图 2 所示,叛徒的谎骗能力是拜占庭将军问题如此复杂的原因。如果我们能够限制谎骗的能力,就可以简化解决方案。这可以通过在信息中添加无法伪造的签名来实现。这种情况下所做的假设包括:

A1. 每条信息都正确传递
A2. 信息的接收者知道谁是发送者
A3. 可以发现信息未传递

这些假设对于上文中的“口头信息”示例也是成立的,但我们在此处添加的是:

A4. (a) 忠诚将军的签名无法伪造,一旦经他签名的信息内容被篡改,就会被发现。
       (b) 任何人都可以验证将军签名的真实性。

这种情况下,主将向每名中将发送签名命令。每名中将都在命令上添加自己的签名,再发送给其他中将,依此类推。如果我们将此算法应用于之前的方案,我们将获得:

指挥官在命令上签上“0”。每名中将都在收到的命令上签名,再发送给下一名中将。在这种情况下,中将会知道他们的主将是一名叛徒,因为他的签名出现在两个相反的命令上,而 A4 规定只有他能够生成自己的签名。

论文接着又用数字方法证明,这种算法现在可以应对任何将军人数中有 m 名叛徒的情况,以及在缺乏传信路径等其他情况下如何应对。这可能超出了“入门”文章的范围,而如果您已经阅读了本文前面的部分,我想您会知道这些构想是如何实现(使用加密创建签名),并成为区块链达成共识和抵御攻击的基础的。

孤儿块、叔块和陈腐区块

您是否记得,区块链网络中的每名矿工都在尝试率先解决当前区块的加密谜题?一旦解决,矿工就会将解决方案发送到网络进行验证。假设一切正常,矿工就会开始下一个区块的工作。

然而,如果两名矿工同时解决了同一个区块的问题,会出现什么情况?所有分布型网络都有延迟,因为数据在所有节点之间传输需要时间。这可能是几毫秒到几秒不等,这意味着两个单独的矿工很有可能实现区块验证并给区块链添加大量节点。

现在区块链中有一个分叉,将发展为两条单独的链,因为它们均有效,且采矿在解决问题的过程中无法停止。这是区块链的一个问题,因为只能留下一条链,就像电影《挑战者》中只有一名幸存者一样。

不同的区块链使用不同的方法解决这一问题,因此我们将了解最常见的方案,即比特币和以太坊是如何解决这一难题的。

比特币

让我们考虑以下情况:矿工 X 和矿工 Y 都刚刚解决了 1001 号区块的问题。由于矿工 X 位于全球网络延迟较低的地区,因此已将新区块传输到 60% 的比特币网络。而矿工 Y 则将他的区块传输至剩下的 40% 比特币网络。与此同时,这两个区块都被视为有效,采矿仍在继续。

接受矿工 X 区块的采矿节点将在矿工 X 区块的后面新增一个区块,而接受矿工 Y 区块的节点将在矿工 Y 区域链的后面新增区块。

加入 X 链的矿工增加了一个区块,而加入 Y 链的矿工则增加了两个区块。在区块链中,链长是首要因素,因此尽管有更多的节点在 X 链挖矿,然而却是 Y 的长链摘取胜利的果实,成为正确的区块链。

X 链的 1001 号区块从链中切断,并且仍然没有父块,因此现在被称为孤儿块。X 链的矿工将不会因为找到额外的区块而获得奖励,这些区块现已成为不可用的陈腐区块

在实际操作中,区块链网络不会等待如此长的时间来做出决定。一旦挖出 1002 号区块,网络就会切换到此链,同时使另一条链变为孤儿。

而构成孤儿(和陈腐)区块的事务会发生什么情况呢?它们会自动返回到队列中,准备添加到下一个区块。

以太坊

以太坊以 GHOST(最贪婪的观察子树)协议的形式为这一问题提供了略微不同的解决方案。该协议对发现比特币中被视为孤儿块和陈腐区块的矿工提供奖励。在以太坊中,此类区块称为叔块,虽然它们不会添加到主区块链中,但是矿工会获得奖励,尽管少于添加到链中的标准区块的奖励。

以太坊允许七级叔块(相当于比特币中的一个孤儿块和六个陈腐区块),并按照以下公式进行奖励:

([叔块编号] + 8 - [区块编号]) x ([以太坊奖励]/8)

因此,如果标准块的奖励是 3ETH,则第一个叔块的奖励值为 2.625ETH,下一个为 2.25ETH,接下来为 1.87ETH,依此类推。同样,在实际操作中,矿工节点将在一个(或最多两个)区块后放弃叔链。

不断发展

区块链是一项不断发展的技术,而我预计该技术最重要的用途将在主流宣传逐渐平息后的相当一段时间后才会出现。基础技术方面可能还需要取得一些重要进步,才能发挥出真正的作用。

下面举个例子。Martin Cooper 于 1973 年在摩托罗拉工作期间申请了“无线电话系统”专利。同年,他第一次用移动电话拨打电话,但是直到 20 世纪 90 年代中期数字 GSM 网络推出后(反过来使传输带宽变得更高效,达到了模拟技术无法超越的水平,实现了更低功耗、更便宜的手提电话以及更广泛的小区覆盖),该技术才开始迅速推广,并增加了意想不到的功能。

同样,区块链也有一些需要打破的限制。例如,比特币区块链每秒只能处理 7 个事务,且挖掘一个区块平均需要 10 分钟。这一点限制了它在每日处理数百万笔交易的金融机构中的应用潜力。这还没有考虑到每次在区块中有效添加事务的能耗相当于 1.6 个美国家庭的 24 小时平均能耗。此外,区块链的大小已超过 25GB,并且还在不断增加,因此越来越难以纳入个人设备中。

另一方面,仍有大量资金投入到全球区块链商业委员会 (GBBC) 等这类组织的研究活动以及超级账本项目中,前者旨在积极开发区块链的新用途,后者是为了创建开放标准以实现跨行业互操作性。IBM 与三星开展合作,使用区块链技术开发 ADEPT(自主分散对等遥测),用于保护分散 IoT 生态系统中自主式设备的分布式网络。

目前,区块链技术可以应用于以往保存在帐本中的各种数据,例如金融交易(包括微交易)、当地政府记录(投票、土地和车辆登记等)、医疗数据、跟踪数据等。但是可以预见到,随着基础技术的进步,许多其他类型的安全数据存储应用将变得可行。

Mark completed his Electronic Engineering degree in 1991 and went on to work in real-time digital signal processing applications engineering, later moving into technical marketing.

22 Oct 2019, 6:49