卡尔达诺结算层中 PVSS 的实现

卡尔达诺结算层使用公开验证密钥共享模式,它基于『SCRAPE:可扩展的随机性公共实体证明』这篇由 Ignacio Cascudo 和 Bernardo David 写的论文。接下来我们将引用论文中的页,比如 [6] 表示第6页。

本指南介绍了卡尔达诺结算层pvss-haskell 的实现细节。

什么是 PVSS

VSS 模式的核心思想是参与者验证自己的份额,成功构建密钥(之前由参与者中的经销商分发(TODO))的能力。而 PVSS 模式的核心思想是,参与者不仅可以验证其股权,而且任何人都可以验证参与者是否收到了正确的股权。因此(参考我们的重建协议),参与者不仅要发行他们的股权,还要为每个发行的股票提供一个正确地证明([9])。(TODO)

我们使用 t-out-of-n 重建方案([8]),其中 n 是参与者的数量,t 是一个阈值。所以任何 t+1 份额的子集可以用来成功恢复密钥。

所以,协议有四个基本阶段([8])组成:

  1. 建立,
  2. 分配,
  3. 验证,
  4. 重建。

建立

每个参与者 Pi 必须生成器私钥 SKi 并注册其公钥 PKi

分配

首先,我们准备一个新的托管环境。要做到这一点,我们需要上面提到的阈值和参与者的公钥清单。该操作的结果是 Escrow,它包括:

  1. 额外的生成器
  2. 多项式
  3. 密钥
  4. 证明

额外的生成器基于一个椭圆曲线点)。我们使用 prime256v1 椭圆曲线,参见 RFC

多项式是一组从 smallest degree 开始的一组系数(这些系统是值)。

密钥也基于一个,实际上它是上面提到的多项式的第一个元素

证明从挑战原始密钥DEEQ-参数生成生成

挑战是基于加密哈希

之后,我们必须完成托管创建。参与者的公共密钥列表被用于创建加密股份承诺。加密的股份包括:

  1. 分享 ID
  2. 通过参与者公钥加密的 Value
  3. 证明这个股份是有效的 ([8])。

验证

现在可以在参与者之间发布承诺和加密的股份。由于 PVSS 模式的公共性质,任何知道公共密钥的人都可以通过散列匹配来验证加密的股份

重建

首先,参与者必须使用公钥私钥密钥对解密加密的股份。为了获得 DLEQ 的值,我们使用 prime256v1 曲线生成器。结果,我们得到 DecryptedShare,其结构与加密股份相同。

由于解密的股份包含一个证明,所以我们可以确定解密的股份和加密的股份是一样的,并且有验证功能。要做到这一点,我们使用 DLEQ 值和来自解密股份的证明。实际的验证是 DLEQ 点的散列比较

现在,如果我们有 t+1 解密股份,我们可以恢复一个密钥

恢复的密钥也可以被验证。所以我们可以确定恢复的密钥是相同的托管。要做到这一点,我们不仅需要一个证明和一个密钥,还需要承诺(实际上是第一个)。

VSS 证书

正如前面所说的,同时使用 PVSS 方案的挑战之一是相关联的用于与签名的公钥用于 VSS 方案。这是通过引入 VSS 证书来解决的。

VSS 证书包括:

  1. 用于 VSS 方案的公钥(例如 VSS 密钥)。
  2. 用于签名的公钥(例如签名密钥)。
  3. 过期 epoch 的索引(例如,在 epoch 的最后,证书是有效的)。
  4. 签名对 (A,B),其中 A 是一个 VSS 键,B 是一个 epoch 索引。

最初,拥有足够股份参与随机生成的所有权益相关者(我们成为富人拥有自己的证书。当出现一个拥有足够多股权的新利益相关者时,或者现有证书过期时,应该生成一个新的证书并提交给网络。其他节点接受此证书,如果该证书有效并且该节点具有足够的股权。证书存储在区块中。

请注意 VSS 证书在使用前必须是稳定的。如果我们检索证书的 epoch 是第一个(即有索引 0),稳定的证书是起始证书,否则,稳定的证书是最后一个已知 slot 的未到期证书