这个集体签名可以被验证,验证集体签名是通过一个公钥,这个是集体公钥,而不是某一个节点的公钥。集体公钥是最初开始生成的时候就确定的,所以这个集体公钥可以拿来验证集体签名的消息。 我们怎么样能够信任集体签名呢? 首先,我们必须要能够信任最开始的生成过程,假定这个过程是可以信任的,稍后还会重新看内部的具体过程怎么实现。假如说,生成的节点私钥公钥和集体的公钥都是可以被信任的,除了我们这个节点能参加运算,它还需要知道其它的节点,所以我们需要有些公共信息,就是包括节点的 ID,包括它们的公钥。 公共信息放在创世区块里面,同时对创世区块进行哈希,来到下一个区块,我们再对下一个区块进行哈希,并且做一轮门限签名,就是阈值签名,我们收集到足够多的签名,把它们合在一起,得到一个集体签名,这样就得到下一个区块。如此反复,我们就可以把区块链进行下去。 但是,造成的结果就是,我们不光有随机数序列的 Chain,还有 Block Chain,这个 Block Chain 记录了 DKG 所需要的一些消息,以及 DKG 运算的一些结果。 我们假如说在一定的区间运行一整套 DKG,然后新加入的节点在这时候可以报名之类的,运行完出来一个结果,这个结果包括了下一个区间所需要的节点列表,它们各自的公钥,还有集体公钥,这个结果我们把它交给 Summary Block。 实际上我们可以看到 Summary Block 会经过一个门限签名,这个签名所需要用的公钥是上一个区间用的公钥。我们这个区间 Summary Block 会有之后区间运行所需要的公钥,意味着运行一次 DKG 加入了新节点,这个公钥可能就发生了改变。私钥显然是发生了改变,因为有新的节点加入,公钥也发生了改变,我们就说下一个区间是用新的公钥来进行验证签名的。 如此反复我们就得到了每一个区间的 DKG,每一个都有 Summary Block。需要验证 Summary Block,我们必然需要知道上一个区间的公钥是正确的,我们就需要验证上一个区间的 Summary Block,这样它们之间形成了一个链条,这个链条也是追溯到最开始的创世区块,所以我们并没有解决我们想要解决的问题,虽然说做了一些强化,但是没有从根本性上解决,我们还是需要保持历史节点,至少是 Summary Block 的历史节点。 (责任编辑:admin) |