假设在一个n
门限签名方案中有(t,n)
成员。任何一方都不知道全局密钥sk
,因为这些密钥是分布式生成的。各方都能够构建自己的全球公钥pk
。因此,每个成员i
都可以用他们的秘密共享sk_{i}
签署一条消息m
,这将产生sig_i
。可以将所有签名共享组合起来创建sig
,这在pk
下是可验证的。
是否有任何密钥派生函数f
,使每个成员都可以生成派生密钥sk_i^1
、sk_i^2
、sk_i^3
、.sk_i^n
,从而能够满足阈值方案?例如,每个成员都用sk_i^1
签名D16
,而组合签名sig^1
在由共享pk_i^1
构造的pk^1
下是可验证的。
发布于 2020-01-30 12:38:09
有两种主流的方法可以做到这一点。使用Schnorr或BLS签名。Schnorr公式更复杂,但如果您愿意使用双线性对,则BLS解可以直接理解。
假设存在一组Shamir的秘密共享\{(x_i, y_i) \in \mathbb{F}^2_p: i \in [1, n] \cap \mathbb{Z}\}
,其中拉格朗日插值L(x) = \sum_{i=1}^{t+1} y_{i} \cdot l_{i}(x)
和L(0) = y
是秘密。通常,x_i
是公共参数,并简化为x_i = i
。
将双线性配对定义为e: \mathbb{G}_1 \times \mathbb{G}_2 \mapsto \mathbb{F}^{*}_{p^{k}}
,设置为-3类型,并定义散列到曲线的H: \{0,1\}^* \mapsto \mathbb{G}_2
.
y \times G \mapsto Y
也是相应的公钥,带有G,Y \in \mathbb{G}_1
。
BLS签名被定义为:
具有输出Sign(y, m) \mapsto \mathbb{G}_2
的y \times H(m) \mapsto S
并经下列机构核实:
Verif(Y, m) \mapsto \{0,1\}
,结果为1如果是e(Y, H(m)) = e(G, S)
要将其转换为阈值方案,只需直接应用拉格朗日插值:
S = y \times H(m) = \sum_{i=1}^{t+1} y_{i} \cdot l_{i}(x) \times H(m)
您可以从客户端收集t+1
部分签名y_{i} \times H(m)
并进行内插以构造S
。核查未变。
然而,这个简单的过程不能防止各方发送错误的结果y^{'}_i \times H(m^{'})
。它可能会导致一个有效的签名,为一条未加密的消息。虽然对于大多数实际目的来说,这并不是什么大问题,但您应该注意到这一点。
https://crypto.stackexchange.com/questions/77300
复制相似问题