卡尔达诺结算层中 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]
)组成:
- 建立,
- 分配,
- 验证,
- 重建。
建立
每个参与者 Pi
必须生成器私钥 SKi
并注册其公钥 PKi
。
分配
首先,我们准备一个新的托管环境。要做到这一点,我们需要上面提到的阈值和参与者的公钥清单。该操作的结果是 Escrow
,它包括:
额外的生成器基于一个点(椭圆曲线点)。我们使用 prime256v1
椭圆曲线,参见 RFC。
多项式是一组从 smallest degree 开始的一组系数(这些系统是标值)。
挑战是基于加密哈希。
之后,我们必须完成托管创建。参与者的公共密钥列表被用于创建加密股份和承诺。加密的股份包括:
验证
现在可以在参与者之间发布承诺和加密的股份。由于 PVSS 模式的公共性质,任何知道公共密钥的人都可以通过散列匹配来验证加密的股份。
重建
首先,参与者必须使用公钥,私钥密钥对解密加密的股份。为了获得 DLEQ 的值,我们使用 prime256v1
曲线生成器。结果,我们得到 DecryptedShare
,其结构与加密股份相同。
由于解密的股份包含一个证明,所以我们可以确定解密的股份和加密的股份是一样的,并且有验证功能。要做到这一点,我们使用 DLEQ 值和来自解密股份的证明。实际的验证是 DLEQ 点的散列的比较。
现在,如果我们有 t+1
解密股份,我们可以恢复一个密钥。
恢复的密钥也可以被验证。所以我们可以确定恢复的密钥是相同的托管。要做到这一点,我们不仅需要一个证明和一个密钥,还需要承诺(实际上是第一个)。
VSS 证书
正如前面所说的,同时使用 PVSS 方案的挑战之一是相关联的用于与签名的公钥用于 VSS 方案。这是通过引入 VSS 证书来解决的。
VSS 证书包括:
- 用于 VSS 方案的公钥(例如 VSS 密钥)。
- 用于签名的公钥(例如签名密钥)。
- 过期 epoch 的索引(例如,在 epoch 的最后,证书是有效的)。
- 签名对
(A,B)
,其中A
是一个 VSS 键,B
是一个 epoch 索引。
最初,拥有足够股份参与随机生成的所有权益相关者(我们成为富人)拥有自己的证书。当出现一个拥有足够多股权的新利益相关者时,或者现有证书过期时,应该生成一个新的证书并提交给网络。其他节点接受此证书,如果该证书有效并且该节点具有足够的股权。证书存储在区块中。
请注意 VSS 证书在使用前必须是稳定的。如果我们检索证书的 epoch 是第一个(即有索引 0
),稳定的证书是起始证书,否则,稳定的证书是最后一个已知 slot 的未到期证书。