其实 keygen 之后,可以不执行 refresh 的,作者写出 refresh 是为了方案的完备性的。
refresh 本应该在后台周期性执行,但是由于 refresh 中生成的 Paillier 和 ring-Pedersen 参数会被 presign 用到,所以 keygen 后必须执行 refresh 才能签名成功。
为了避免在签名前必须执行 refresh,可在 keygen 中生成 presign 用到的 Paillier 和 ring-Pedersen 参数:
round_1
- 输入:
- 生成私钥分片
和公钥分片: ,其中 是私钥分片 - zk-schnorr 承诺:
,其中 是 proof, 是随机数 - 生成随机数
生成 Paillier & ring-Pedersen
- 生成 Paillier 公钥
和私钥 ,其中 - 生成 ring-Pedersen 公钥
和私钥 ,其中 mod
- 生成 Paillier 公钥
- 生成承诺
- 广播
- 输入:
round_2
- 收到
的 后,广播
- 收到
round_3
- 收到
的 后,验证 - 将
设为所有其它 的 的 xor: zk-schnorr 证明:
,证明知道私钥分片其中,
用来生成挑战 ,生成 Paillier & ring-Pedersen 的 proof
生成
是 Paillier-Blum Modulus 的 zk-proof- 计算
- 计算
- 计算
生成
是 ring-Pedersen param 的 zk-proof,即 属于 生成的群中的元素,群的阶为- 计算
- 计算
- 向
发送
- 收到
final
- 收到
的 - zk-schnorr 验证:
验证 Paillier & ring-Pedersen 的 proof
- 验证
- 验证
- 验证
- 验证
- 计算公钥:
- 收到
没有评论