当前位置:首页区块链DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链

传统的切片技术有一个负担,即双方都需要了解对方的历史区块。Dfinity可以通过使用BLS文件签名算法来解决这个问题。

2021年9月4日,在beWater DevCon 2021全球开发者大会上,dfinity的核心工程师Paul Liu(曾经是英特尔实验室的研究科学家)为x86体系结构构建了Haskell编译器。他分享了密码学如何改变共识的话题。

传统的切片技术有一个负担,即双方都需要了解对方的历史区块。Dfinity采用BLS文件签名,对dkg算法进行了改进,增加了证明,解决了最长链验证问题。子网之间的交换不需要历史负担。区块链已经成为一台“互联网计算机”,甚至可以在上面运行网站。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链

各位好。我是保罗,D工厂的工程师。非常感谢你的邀请。我可以有机会在这里与您分享我的技术经验。我今天的主题主要是关于如何使用一些加密技术来改进协商一致协议,这可以消除协商一致协议的一些历史负担。

比特币诞生以来,它就提出了一个口号:“不要信任,验证”,也就是说,“不要相信,要验证。”。但如何验证呢?还有很多细节。

历史区块包袱

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链1

让我们来看一个例子。下面的块需要散列前一个块,包括块本身的内容,例如用户事务。

如果给您一个块来验证它的正确性,您应该怎么做?一般来说,比特币的实践需要知道该区块属于最长链。经过多轮封锁,我们基本上可以确定这个封锁无法改变,所以它是安全的。

要知道此块属于最长链及其依赖项,我们实际上知道此块的先前节点是正确的,需要返回到genesis块。我们假设genesis区块是正确的,因此我们可以计算最长的链。最长的一段实际上是对困难的总结,所以我将不详细介绍。

这个区块链只能通过计算最长的链来验证,这将不可避免地让你了解所有历史区块。这种负担基本上是用户无法接受的。对于节点,这可能是第一次同步。当新节点加入以进行同步时,它可能需要知道所有历史记录以验证后续块的正确性。

如何解决这个问题,因为这是一个容量扩张的挑战。保存所有历史街区的记录总是必要的。

传统分片技术

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链2

在容量扩张方面,我们通常的解决方案是将整个区块链分成几个部分,然后每个部分实际上都通过自己的区块链运行。如果交易需要跨越区块链,并且一条区块链发起的交易是从另一条区块链接收的,则发起方和接收方必须验证另一条区块链上的区块。每个片段都需要知道所有其他片段的过去历史块,这比单个链的负担更大。可能有一些删除优化算法,但这些优化算法实际上提高了一些效率,并没有实现质的飞跃。

让我们看看以太坊2.0如何解决碎片化问题?

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链3

它采用层次结构。在顶层,有一个信标链,它对其他链进行快照。其他链只需要知道信标链已经确认,然后它就可以验证其他链。这实际上意味着一个条件。如果您希望能够验证信标链,则需要了解信标链的所有历史块。虽然它在非层级结构方面取得了一些进展,但实际上与单链没有太大区别。所需的困难在于,维护历史街区所需的挑战基本相同。

因此,我们可以看到,历史街区实际上是有负担的。是否有办法彻底摆脱这一负担是今天要讨论的问题。

BLS 门限签名

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链4

我们考虑一个简单的例子,这与刚才提到的信标链的目的有些关系。它主要是一个随机数序列,公众可以验证它是一个公平的随机数。它必须满足几个条件:

  • 无法预测:如果可以预测,实际上就没有安全性。
  • 公平性:公平性意味着参与计算的节点不会影响下一个随机数值的公平性。如果可以,它实际上会带来安全问题。
  • 公开可验证性:即前两点应能被公众验证。

因此,为了满足这三点,我们可以制作一个随机数的安全序列块。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链5

有一种称为门限签名的算法。其基本原理如上图所示。

我们可以看到,在这个例子中有四个节点。每个节点都有自己的私钥。然后每个节点分别对数据进行签名,并对相同的数据进行签名。如果我们可以收集三个签名并将它们组合在一起,我们就可以将它们合成一个签名,称为“集体签名”。集体签名有一个有趣的地方。无论您收集哪三个个人签名,您都可以将它们合成为一个集体签名并成为一个集体签名。

集体签名可以验证。集体签名通过公钥进行验证。这是集合公钥,而不是节点的公钥。集体公钥是在生成之初确定的,因此该集体公钥可用于验证集体签名的消息。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链6

我们怎么样能够信任集体签名呢?

首先,我们必须能够信任初始生成过程。假设这个过程是可信的,我们将在以后重新讨论内部特定过程是如何实现的。如果说生成的节点私钥、公钥和集合公钥都可以信任,那么除了我们的节点可以参与操作外,还需要知道其他节点,所以我们需要一些公共信息,包括节点ID和它们的公钥。

公共信息放置在创建块中,同时对创建块进行哈希处理。当我们到达下一个块时,我们散列下一个块并进行一轮阈值签名,即阈值签名。我们收集足够多的签名并将它们组合起来,以获得一个集体签名,从而获得下一个区块。通过重复这一点,我们可以继续区块链。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链7
DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链8

然而,结果是,我们不仅有随机数序列链,而且还有块链,它记录了dkg所需的一些消息和dkg操作的一些结果。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链9

假设我们在一定的时间区间内运行一组DKG,然后新添加的节点可以在此时注册。运行之后,我们将生成一个结果,其中包括下一个区间所需的节点列表、它们各自的公钥和集合公钥。我们将把它交给摘要块。

事实上,我们可以看到摘要块将通过一个阈值签名。此签名所需的公钥是上一个区间中使用的公钥。我们的interval summary块将具有后续interval操作所需的公钥,这意味着在运行dkg并添加新节点后,公钥可能会更改。显然,私钥已更改,因为新节点已加入,而公钥已更改。假设下一个区间使用新的公钥来验证签名。

这样,我们可以得到每个区间的dkg,每个区间都有一个摘要块。要验证摘要块,必须知道前一个区间的公钥是正确的,因此需要验证前一个区间的摘要块,以便在它们之间形成一个链。这个链也可以追溯到最初的创建块,因此我们没有解决我们想要解决的问题,尽管我们做了一些增强,但是,没有根本的解决方案。我们仍然需要维护history节点,至少是summary块的history节点。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链10

这个怎么样?通过研究,我们发现一种新的算法可以在不改变其集体公钥的情况下运行dkg。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链11

该算法的一般含义是:如果我们这边的一个节点出现故障并丢失,我们将添加一个新节点。现有的三个节点仍然保留它们自己的密钥并拥有它们自己的秘密。这些秘密可以用零知识来证明,而不会泄露秘密。您可以进行一些重新共享,这些共享可以分为四个部分,可以组合在一起。三个节点将各自的秘密划分为四个部分,对四个部分进行重组,得到四个节点的私钥和公钥。它们可以使用节点的私钥作为签名。

就像两个豌豆一样,需要集体密钥来验证集体签名。和以前完全一样。尽管我们再次运行dkg并添加新节点,但我们确保了公钥的不变性。这解决了刚才提到的问题,即摘要块需要维护其历史块。也就是说,您只需要一个公钥,所以不需要保存历史记录。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链12

在实施过程中还存在一些新问题。从节点的角度来看,如果一个新节点想要生成下一个块,它需要知道上一个块的散列,因此需要与其他节点交互以获得上一个块,例如203的块高。我们发现,在未来的计算中,我们不需要高度200之前的数据,而只需要高度200之后的数据,假设可以实现中间数据的依赖性,也就是说,我们可以在200之前完全丢失它。此时,在200的高度,我们可以在200的高度为这些块和状态制作一个包,并为包签名。获得集体签名后,该包可用于新添加的节点。

它只需要验证包是否可信,然后与其他节点同步。我们将包中最新的块重新同步到新节点,新节点可以添加到下一次计算中。

这样,我们可以通过添加零知识证明和再共享方法来改进dkg算法,并且可以丢弃历史负担。

让我们来看看这种技术在Internet计算机BoScLink体系结构中的具体应用。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链13

首先,让我们谈谈公钥。我们只需要48字节的公钥来验证所有事务。与以太坊不同,以太坊开放以太坊客户端需要下载400 GB的数据才能开始计算。这根本不是一个维度。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链14

Internet计算机的节点也采用分段的方法。在这里,为了区分它,我们称它为子网,也就是说,我们没有父网络。每个子网可以相互交换信息,但不需要知道另一个子网的历史数据块。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链15

有一个子网有点特殊。我们称之为NNs。它的主要功能是创建一个新的子网。它可以为另一个子网运行dkg。它通过运行dkg生成新子网所需的公钥。绿色子网需要绿色公钥。其原始创建块是在NNs子网上计算的,因此NNs可以创建其他子网所需的公钥。在此基础上,制作了证明子网公钥正确性的证书。

当我们与用户交互时,返回的信息,然后用户需要验证。它只需要知道NNs公钥,添加子网证书和子网签名。一套完整的验证可以验证信息的安全性和正确性。这种验证非常简单。我们可以通过浏览器中的JavaScript来实现。因此,仅通过浏览器,用户端没有新的要求。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链16

就节点而言,每个子网节点都参与操作。有时它会失败。有新的节点,或者我们知道一些节点已断开。我们需要换一台新机器。这些过程由子网本身完成。NNs只完成子网的创建块,子网本身运行自己的dkg。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链17

我们刚才提到了它的作用。一方面,它是为了替换节点。例如,即使子网严重损坏,大多数节点也会丢失。

这个时候我们该怎么办?通常,无法修复区块链,但我们可以通过NNs再次运行dkg,然后添加新节点,然后通过追赶包从先前停止的状态继续。虽然运行dkg的NNs获得的子网公钥此时发生变化,但这并不影响与用户的交互,因为子网的签名最终通过其证书得到正确的保证。只要证书被传输给用户,用户就可以通过NNs的公钥进行验证。我们还可以对其协议进行一些升级,例如管理、自动化管理应用程序流程。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链18

因此,抛开历史的包袱,我们发现这是一个新的世界。很多我们以前做不到的事情现在都很简单了。我们只需要公钥来验证交易,因此我们可以直接在区块链上运行网站。该网站直接将网页从区块链发送到用户端,因为只需要公钥来验证数据的正确性。

这样我们就可以轻松地扩展容量。我们只需要添加一个子网来处理新事务、处理更多用户和保存更多状态,因为子网和子网之间没有保存历史记录的负担。我们可以修复子网并升级协议。这些事情变得非常简单。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链19

今天的分享到此为止。如果你想知道更多的技术细节,欢迎来到这个网站,因为它提供了我们团队的视频,解释了一些技术细节,这仍然是非常有用的。

温馨提示:

文章标题:DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链

文章链接:https://www.btchangqing.cn/322029.html

更新时间:2021年09月19日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

DFINITY 采用 BLS 文件签名算法或可构建没有历史区块的包袱的区块链20
区块链

9.18晚间行情回顾:大饼强势上涨 但多单谨慎参与

2021-9-19 7:27:30

区块链

借贷赛道:新公链阵营与以太坊阵营借贷项目的发展和博弈趋势

2021-9-19 7:43:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索