ed25519 不需要 paillier
Ed25519 是一种基于椭圆曲线的数字签名算法,而不是同态加密算法。尽管如此,Ed25519 的一些特性使得它在多方计算(MPC)场景中可以实现门限签名。要理解为什么可以将多个部分签名相加而不需要 Paillier 这样的同态加密机制,我们需要深入了解 Ed25519 和门限签名的基本原理。
Ed25519 签名原理
Ed25519 签名的基本形式是: 其中:
- 是签名的一部分。
- 是随机数的部分。
- 是私钥。
- 是消息的哈希值。
门限签名的基本思想
在门限签名中,私钥 被分成多个部分,每个参与者持有一个私钥的部分。假设我们有两个参与者 和 ,他们分别持有私钥的部分 和 ,满足:
签名的生成过程如下:
- 每个参与者生成一个随机数 和 。
- 计算 。
- 计算哈希值 。
- 每个参与者计算部分签名 和 。
- 最终签名 。
为什么可以直接相加
Ed25519 的签名公式具有线性特性,这使得多个部分签名可以直接相加得到完整签名。具体来说:
, (r1 + r2) 两个随机数的和仍是随机数,验签是与随机数无关,直接替换成
这种线性特性允许我们在不需要同态加密的情况下实现门限签名。
代码实现中的关键步骤
在你提供的代码中,门限签名的实现主要通过以下步骤实现:
-
生成随机数和承诺: 每个参与者生成一个随机数 并计算其承诺 。
-
交换承诺和证明: 每个参与者交换承诺 和零知识证明 ,以证明他们确实拥有 。
-
计算总的 : 所有参与者的 相加得到 。
-
计算哈希值 : 计算 。
-
计算部分签名: 每个参与者计算部分签名 。
-
聚合签名: 最终签名 是所有部分签名 的和。
总结
Ed25519 不是同态加密算法,但它的线性特性使得它在多方计算场景中可以实现门限签名。通过将私钥分成多个部分,每个参与者计算自己的部分签名,然后将这些部分签名相加,可以得到完整的签名。这种方法不需要 Paillier 等同态加密机制,从而简化了实现。