我们看看以太坊 2.0 是怎么解决分片的问题? 它采取分层的结构,在最上面一层有一个叫 Beacon Chain,它是对其它的 Chain 做一个快照,其它的 Chain 只需要知道 Beacon Chain 是经过确认的,然后它就可以验证另外的 Chain。这个实际上还是隐含着一个条件,你要能够验证 Beacon Chain,就要知道 Beacon Chain 所有的历史区块。虽然对不分层的结构而言它有一定的进步,但实际上跟单链来说它也没有特别大的差异。所需要的难度,就是保持历史区块所需要的挑战基本上是一样的。 所以,我们可以看到历史区块实际上是有包袱的。有没有一种办法能够把这个包袱完全抛弃掉,这是今天所要探讨的一个问题。 BLS 门限签名我们考虑一个简单的例子,跟刚才我们提到的 Beacon Chain 目的有点相关,它主要是作为随机数的序列,公众能够验证的公平的随机数。它必须满足几个条件:
所以要满足这三点才能够做一个安全的随机数的序列区块。 有一个算法叫做「门限签名」,它的基本原理如上图所示。 我们可以看到这个例子里面有四个节点,每个节点有各自的私钥,然后每个节点单独对数据进行签名,对同一个数据进行签名。如果我们能够收集到三个签名,将这三个签名合在一起,就能够合成为一个签名,叫做「集体签名」。集体签名有一个有意思的地方,无论是哪三个你收集起来的单独签名,你把它们合成起来合成一个集体,都可以成为一个集体签名。 这个集体签名可以被验证,验证集体签名是通过一个公钥,这个是集体公钥,而不是某一个节点的公钥。集体公钥是最初开始生成的时候就确定的,所以这个集体公钥可以拿来验证集体签名的消息。 我们怎么样能够信任集体签名呢? 首先,我们必须要能够信任最开始的生成过程,假定这个过程是可以信任的,稍后还会重新看内部的具体过程怎么实现。假如说,生成的节点私钥公钥和集体的公钥都是可以被信任的,除了我们这个节点能参加运算,它还需要知道其它的节点,所以我们需要有些公共信息,就是包括节点的 ID,包括它们的公钥。 (责任编辑:admin) |