介绍
FROST(Flexible Round-Optimized Schnorr Threshold Signatures)是一种灵活的循环优化Schnorr阈值签名方案,它减少了签名操作中的网络开销,同时提高了Schnorr阈值因为签名协议的技术水平,它可以在单轮中安全地执行签名操作而不是签名操作的通用性,但又允许真正的签名操作,因此签名操作只需要阈值数量的参与。
FROST既可以优化为具有共享阶段的(非广播)单轮签署协议。FROST在没有参与者行为不当的乐观情况下,实现了效率的提高。因为谈判回合可以与签名回合进行,所以签名操作可以异步进行;一旦回合完成,签名者只要需要接收并最终回复一个消息就可以创建一个签名。
FROST实现行为允许效率改进的部分原因是协议在存在不端的参与者时中止(该参与者队列被识别并被排除在未来的操作之外)–这是实际部署场景的行为的合理模式。在协议过程中,如果行为有不端的参与者提供构造的值,诚实的各方可以识别并修复不端的参与者,并重新运行协议。FROST的灵活设计能够其其持阈值签名的许多实际使用情况。此外,虽然一些阈值方案要求所有参与者在操作签名期间都是活跃的,并将协议的阈值属性称为安全属性,但 FROST 允许任何阈值数量的参与者产生有效签名。因此,FROST 可以支持参与者(或参与设备)的一个子集可以保持离线的例子,这个属性在实践中往往是所需要的。
背景
阈值签名方案
阈值签名方案是一种密码学基本原理,用于促进一组参与者对私钥的共同签名,这样一来,阈值签名方案中的一些实现需要在大规模和重验证下执行签名操作。例如,阈值签名可以被一组签名者用于加密货币中的金融交易,或由一组受信机构产生的网络共识。在这两个例子中,随着签约方或签约操作数量的增加,除了每个签约方所经历的负载增加之外,参与者之间为产生联合签名所需的轮数也成为性能终点。当签名者利用网络有限的设备或不可靠的网络进行传输,或者希望允许签名者参与签名操作的协议时,这个问题会因此进一步恶化。,优化签名操作的网络对签名操作的实际应用非常引人注目。
沙米尔·谢共享
许多阈值方案建立在Shamir秘密共享的基础上,这是一个(t,n)的阈值签名方案,依靠拉格朗日插值来恢复秘密。在Shamir秘密共享中,一个受信任的中央经销商将一个秘密分发给每个参与者,其方式是任何合作的参与者的子集都可以恢复该秘密。为了分配这个秘密,庄家首先随机选择t-1个系数a1,…,at-1,并使用随机选择的值作为系数来定义一个度数为t-1的投票式f(x)=s+SUM(ai) xi,i=1…t-1),其中f(0)=s,参与者每个Pi的秘密贡献是(i,f(i)),庄家被信任为式诚实地分配给每个参与者P1,…,Pn。为了重建秘密,至少有t个参与者进行拉格朗日插值来重建工作,从而找到值s=f(0)。然而,t个参与者的小组不能重建秘密,因为至少需要t个点来重建1度的改造。
Feldman 的可验证密钥共享
Feldman的可验证秘密共享(VSS)方案建立在Shamir秘密共享的基础上,增加了一个验证步骤,以证明参与者的共享与公共承诺的一致性,该承诺被认为对所有参与者是正确可见的。为了验证一个共享的形成,每个参与者用这个承诺来验证他们的共享。如果验证失败,参与者可以对经销商发布申诉,并采取同样向所有其他参与者广播这一签名的行动。FROST也同样使用了这种技术。在Feldman的方案中产生的承诺如下。类似的Shamir秘密分享一样,庄家对t-1个随机值(a1,…,at-1)进行采样,将这些值作为系数来定义数为t-1的节点式fi,使得f(0)=s。然而,在向每个参与者Pi之前进行私人交互(i,f(i))的同时,庄家也制定了公共承诺C = < A0, …, At-1 >,其中A0 = gs,Aj = g^{aj}。 请注意,在分散设置中,每个参与者Pi必须确保与所有其他参与者对C有相同的看法。在实践中,实现者通过使用一些技术来保证各方观点的一致性,例如将承诺发布到一个集中的服务器上,该服务器信任为所有参与者提供单一的观点,或者增加另一个协议共识,参与者比较他们收到的承诺值以确保它们是相同的。
福克斯生成
与Shamir秘密共享等依赖于可信交易商的阈值方案不同,密钥生成(DKG)确保每个参与者对共享秘密的生成做出同等贡献。在协议运行结束时,所有参与者共享一个联合参与者Y,但每个参与者只持有相应秘密的份额,因此没有任何一组小于阈值公钥生成(DKG)通过使每个参与者共享秘密的生成同类做出贡献来支持这种威胁模型。在协议运行结束时,所有参与者共享一个共同参与者Y,但每个参与者只持有相应秘密的一个份额si,这样就没有小于阈值的参与者集合知道。
施诺尔签名
通常,由阈值签名操作产生的签名最好与单个参与者产生的签名无法区分,从而与现有系统保持刚性兼容,并防止个别签名者的隐私泄露。由FROST签名操作产生的签名与Schnorr签名区分不可,因此可使用标准的Schnorr验证操作进行验证。因此,我们现在描述单签名者设置中的Schnorr签名和验证操作[Sch89]。
Schnorr 签名生成:
第一步生成随机数k,然后用k生成随机点R
第二步通过哈希随机点R和全局Y和消息m生成挑战c
第三步用私钥s通过k+s*c计算出z
第四步将R和z组合生成签名
Schnorr 签名验证:
第一步从签名中解析出R和z,然后计算出c
第二步由Z = R + Y*c计算出R’,Z是由z生成的点
第三步判断计算出的R’与解析出的R是否一致
加法秘密共享
与上述的单标类似,FROST要求为每个签名操作生成一个随机数k。然而,在获取值签名中,应该是每个参与者都要参与k的生成,但不知道它的结果。虽然Shamir秘密共享及其派生结构要求在秘密秘密方式f上共享,其中f(0)=s,但加法秘密共享方案允许每个参与者共同一个计算共享秘密,每个参与者Pi贡献一个值si,这样得到的共享秘密是s=SUM(si, i=1…t),即每个参与者的贡献之和。因此,这种t-out-of-t的秘密共享不能进行;每个参与者直接选择自己的si。其中,si是s的加性秘密共享,那么s是si的总和,那么(si)/(Li ) 是相同的 Shamir 秘密共享,其中 Li 是拉格朗日系数。在 FROST 中,参与者在签名操作中使用这种技术非吸引地生成一个一次性的秘密随机数,它是所有签名参与者之间共享的 Shamir 秘密。
霜冻方案
我们现在描述 FROST 协议,这是一种灵活的轮次优化 Schnorr 阈值签名方案,它最大限度地减少了在阈值设置中生成 Schnorr 签名的网络开销,同时允许签名操作的不受限制的参与性和签名参与者的阈值数量。
密钥生成
第一轮:
1. 每个参与者Pi均参与抽取t个随机值(ai0, …, ai(t-1))) <-$-Zq,并使用这些值作为系数来定义Zq上度数为t-1的灌溉式fi(x) = SUM(aij xj, j=0…t-1)。
2. 每个 Pi 通过使用 ai0 作为密钥计算 Schnorr 签名 SIGi = (wi, ci) 来计算对应秘密 ai0 的知识证明,使得 k <-$- Zq, Ri = gk, ci = H(i, CTX, g^{ai0}, Ri), wi = k + ai0* ci,其中 CTX 是防止重放攻击的上下文字符串。
3. 每个参与者Pi计算一个公共承诺Ci = < Ai0, …, Ai(t-1) >,其中Aij = g^{aij}, 0 <= j <= t-1
4.每个Pi向所有其他参与者广播Ci, SIGi。 5.在收到来自参与者1 <= p <= n, p != i的Cp、SIGp后,参与者Pi验证SIGp = (wp, cp),失败时终止,检查:cp =?= H(p, CTX, Ap0, g^{wp} * Ap0^{ cp})
第二轮:
1. 每个Pi向其他参与者Pp安全地贡献一份秘密贡献(p,fi(p)),并为自己保留(i,fi(i))。
2. 每个 Pi 通过计算:g^{fp(i)} =?= PROD(Apk(i^k mod q),k=0…t-1) 来验证他们的贡献,如果检查失败则中止。
3.每个Pi通过计算si = SUM(fp(i), p=1…n)来计算他们长期存在的私人签名份额,并安全地存储si。
4. 可以每个 Pi 计算他们的公共验证贡献 Yi = g^{si},以及该组的公开验证贡献 Y = PROD(Aj0, j=1…n)。任何参与者都通过计算 Yi = PROD( (Ajk)(i^k mod q), j=1…n, k=0…t-1) 来计算任何其他参与者的公开验证贡献。
负担
1.创建一个空列表Li。然后,对于1 <= j <= Q,执行以下操作:
- 单次使用的nonces样本(dij, eij)<-$- Zq* x Zq*
- 得出承诺份额(Dij,Eij)=(g^{dij}^,g^{eij}^)
- 将(Dij, Eij)附加到Li。存储((dij, Dij), (eij, Eij)),以便以后在签名操作中使用
2.将(i, Li)发布到一个预定的位置,该位置由实施者指定。
签名
令SA表示签名集合者(他自己可以是第t个签名参与者之一),S被选中用于该签名操作的参与者的集合,B = < (i, Dij, Eij) for i in S>表示对应于每个参与者Pi的参与者索引的社区列表,Li是在共享阶段公布的Pi的可用承诺值的集合。每个标识符i与Pi公布的第j个承诺(Dij,Eij)相耦合,这些承诺将用于这个特定的签名操作。让H1、H2是哈希函数,其输出在Zq*。
1.SA首先从Li获取S中每个参与者Pi的下一个可用承诺并构造B。
2. 对于 S 中的每个 i,SA 向 Pi 发送元组 (m, B)。
3. 收到 (m, B) 后,每个 Pi 首先验证消息 m,然后检查 G* 中的 Dp j、Ep j 以获取 B 中的每个承诺,如果其中任何一个检查失败则中止。
4.然后,每个Pi计算出绑定值的集合rp = H1(p, m, B), p在S中。然后每个Pi结果组承诺R = PROD(Dpj * (Epj)^{rp}, p在S中),以及挑战c = H2(m, R)。
5. 每个Pi通过计算zi = dij + (eij * ri) + Li * si * c,使用他们的长期秘密共享si计算他们的响应,使用S来确定Li。
6. 每个Pi从他们的本地存储中安全地删除((dij,Dij),(eij,Eij)),然后将zi返回给SA。
7.签名聚合器SA执行以下步骤:
推导出ri = H1(i,m,B),Ri = Dij * (Eij)^{ri},用于S中的i,随后R=PROD(Ri, i in S),c = H2(m,R)
通过检查 g^{zi} =?= Ri * {Yi}^{c * Li} 为每个签名共享 zi, i 在 S 中验证每个响应的有效性。如果不相等,首先识别并报告行为不当参与者,然后中止。否则,继续
计算组的响应 z = SUM(zi, i in S)
将签名SIG = (z, c) 与信息m一起发布
SA最后检查每个参与者报告的zi与他们的贡献贡献(Dij,Eij)和他们的消耗贡献Yi是否一致。如果每个参与者都发出了正确的zi,那么zi值的总和与c一起构成了m上的Schnorr签名。这个签名将被一个不知道FROST被用于签名的验证者正确生成,他使用标准的单方Schnorr验证方程与Y作为签名进行验证(第2.4节)。处理短暂的未决支出。由于在修复算法中描述的修复阶段产生每个随机数和承诺贡献最多只能使用一次,参与者在签名操作中使用这些值后将其删除,如签名算法的步骤5所示。一个意外重用的(dij, eij)会导致参与者的长期秘密si的参与,所以参与者必须安全地删除它们,并像任何Schnorr签名的现实一样防御快照回滚攻击。然而,如果SA在签名协议期间选择重新使用一个承诺集(Dij,Eij),这样做只会导致参与者Pi中终止协议,因此不会增加SA的权力。
总结
总的来说,FROST通过定义一个可以优化具有限制阶段的(非广播)单轮操作的签名协议,改善了Schnorr阈值签名技术的状况。与许多先前的Schnorr阈值方案不同,FROST在不限制签名操作的对称性的情况下,对已知的伪造的攻击仍然安全。