type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 28, 2023 10:44 AM
Parent item
领域
多重签名即 n 个签名者中,收集到至少 m 个(n≥m≥1)签名,即认为合法。其中,n 是提供的公钥个数,m 是需要匹配公钥的最少的签名个数。多重签名可以有效地应用在多人投票共同决策的场景中。例如双方进行协商,第三方作为审核方,三方中任何两方达成一致即可完成协商。比特币交易中就支持多重签名,可以实现多个人共同管理某个账户的比特币交易。
定义几个变量:
- :椭圆曲线的基点
- :待签名的数据,通常是一个32字节的哈希值
- :私钥。对应的公钥为:
- :哈希函数。
原始多重签名和验签(不安全)
原始多重签名流程和验签和上文介绍的Schnorr聚合签名一样,但是存在流氓密钥攻击问题。考虑以下的场景:
Alice 和 Bob 想一起产生一个多重签名。 Alice 有一对密钥,Bob 有 。然而,如果Alice先把公钥同步给了Bob,而 Bob 声称他的公钥是 。如果他这样做,其他人计算 ,当做是 Alice 和 Bob 需要合作才能签名的聚合密钥。实际上他俩相加等于 ,Bob 显然可以自己签字就能转账了。这称为流氓密钥攻击,避免它的一种方法是要求 Alice 和 Bob 首先证明他们确实拥有与他们声称的公钥相对应的私钥。
Bellare-Neven签名和验签(不安全)
流程如下:
- 定义为。
- 定义为的和
- 每个签名者选择一个随机数,然后和其他签名者分享
- 定义为的和
- 每个签名者计算
- 最终的签名值为为的求和
- 验签过程就是,验证
上述过程和聚合签名类似,唯一区别是公钥求和时,先计算了一个Hash作为系数,但是的系数各不相同,已失去了秘钥聚合的属性:验签者需要收集整个公钥列表才能验证。
签名者在请过程中需要交互
3
次:- 分享
- 分享和
- 分享
MuSig签名和验签
这里直接看多重签名的流程:
- 定义为
- 定义为的和
- 每个签名者选择一个随机数,然后和其他签名者分享
- 定义为的和
- 每个签名者计算
- 最终的签名值为为的求和
- 验签过程就是,验证
MuSig恢复了秘钥聚合的属性,但不失安全性:定义为不是各个公钥的简单和,而是定义成为这些公钥的倍数之和,其中乘数取决于所有参与密钥的哈希。
签名者在请过程中需要交互
2
次:- 分享和
- 分享