科普 | 一文了解比特币新签名方案MuSig2

随着比特币的Taproot更新越来越近,社区成员对MuSig多重签名方案产生了相当大的兴趣,MuSig允许一个团体共同管理一些比特币,并创建一个签名来授权支付。由于MuSig创新的密钥聚合特性,这种签名是一种常规的Schnorr签名,一旦Taproot被激活,比特币网络就可以对这种签名进行处理。当用于创建多重签名钱包时,与使用CHECKMULTISIG操作码进行n-of-n多重签名的传统方式相比,MuSig降低了交易费用并增加了隐私性,而传统方法则在区块链上需要n个公钥以及n个ECDSA签名。

在2018年,Blockstream公司发布了MuSig方案的第一个版本,我们将其称为MuSig1,正如我们将在下面讨论的,由于签名者之间需要多轮通信,在实践中部署MuSig1可能很困难。为了改进MuSig1,使得签名过程变得更加容易,Blockstream的研究者联合法国国家网络安全局(ANSSI)的密码学家Yannick Seurin共同设计了名为MuSig2的新方案,而这种方案只需要两轮通信,目前,这篇论文正在接受同行评审。

本文会简单介绍MuSig2和之前版本的MuSig1之间的差异,原文作者是Jonas Nick和 Tim Ruffing。

p1

 

MuSig1的交互性问题

 

与基于CHECKMULTISIG的钱包相比,MuSig1最大的缺点在于,它需要签名者之间的交互,更准确地说,创建签名需要三轮通信,而每一轮通信都由来回传递的消息组成。下图显示了两个签名者的交互过程。你可以想象一个签名者使用的是一个桌面钱包,而另一个签名者使用的是Blockstream Green cosigner,或者签名者共享一个他们试图关闭的闪电网络通道。

p2

相比之下,使用CHECKMULTISIG的钱包只需要一轮通信:它们接收一笔交易并返回一个签名。例如,如果使用MuSig1在闪电网络中转发支付,隐私将得到改善,但支付所需的时间明显更长了。随着通信延迟的增加,这个问题就变得更加严重了。而存储在安全保险箱中的MuSig1签名设备,需要其所有者访问两次才能创建签名。

 

MuSig2允许非交互式签名

 

而最新提出的MuSig2多重签名方案,旨在成为MuSig1的继承者,它提供了与MuSig1相同的功能和安全性,但可以消除签名者之间几乎所有的交互。使用MuSig2,签名者只需要进行两轮通信就可以创建签名,而且关键的是,在签名者知道他们想要签名的消息之前,可以对其中一轮进行预处理。一旦有消息需要签名,例如一笔比特币交易,那么其过程与今天基于CHECKMULTISIG的钱包相同:将交易转移给签名者,然后接收一个签名。总的来说,MuSig2保留了MuSig1的简单性和效率,只增加了少量的额外计算。

 

MuSig家族

 

几周之前,研究者们讨论了MuSig-DN,它是一个使用了零知识证明的两轮通信协议,相比MuSig2而言,它要复杂得多。而MuSig-DN的优点在于它支持确定性nonce,从而避免了在签名会话和轮次之间保持状态的需要(即无状态)。

p3

这就提出了在给定应用中使用哪个方案的问题。上表说明,我们没有理由选择MuSig1,而是应该选择MuSig2。实际上,我们希望大多数应用选择MuSig2而不是MuSig-DN,因为简单性是采用的主要因素。在创建可互操作的实现时,尤其如此,因为所有签名者都必须同意使用相同的协议。此外,对非交互式签名的支持显著提高了可用性。

另一方面,如果签名会话需要存储在持久介质上,那么MuSig-DN方案的无状态属性是有益的。为了演示这种情况下MuSig2的风险,假设我们执行以下一系列事件:

  1. 开启一个MuSig2签名会话;
  2. 将会话保存到一个硬盘驱动器;
  3. 执行硬盘驱动器备份;
  4. 完成签名会话;
  5. 恢复备份;
  6. 再次完成会话;
结果是,我们创建了两个具有相同nonce的签名,其可用来窃取我们的密钥。因此,MuSig2的实现者必须要小心,以确保不会发生上述情况。相比之下,MuSig-DN方案就可以防止这种攻击。

 

构造两轮多重签名的挑战

 

构造一个简单的只需要两轮通信的Schnorr多重签名方案,并且在并发会话(即,如果某个签名者同时参与多个签名会话)下仍然是安全的,这是一个尚未解决的研究问题。所有以前的尝试(包括早期版本的MuSig1论文)都会受到Drijvers等人发现的一种巧妙的攻击。在这种情况下,攻击者与受害者签名者打开许多会话,并能够获得受害者不打算签名消息的签名。

让我们快速看看,是什么让MuSig2在并发会话下变得安全。其中,在MuSig1中,每个签名者i创建一个nonce,而在MuSig2中,每个签名者创建两个nonce R_i,1R_i,2,在第一轮通信时将它们发送给其他签名者,并有效地使用这些nonce的随机线性组合R_i = R_i,1 + b*R_i,2,代替之前单独的nonce R_i。而系数b是应用于所有签名者nonce、聚合公钥和消息的哈希函数的输出。在MuSig1中,聚合的nonce是R = R_1 + … + R_n。如果任何签名者更改了他们的任何nonce,则其他每个签名者都将使用他们两个nonce的不同的随机线性组合。这可以防止已被发现的针对其他两轮多签名方案的攻击。所有细节你可以在MuSig2论文中找到。

 

关于下一步

 

目前blockstream希望用MuSig2取代secp256k1zkp库中的MuSig1实现,它将更为简单,更重要的是,它更易于使用。根据开发者的说法,使用工具箱中的MuSig2,一些协议将从中受益,例如“无脚本脚本闪电网络”以及门限签名。如果比特币社区选择采用Taproot软分叉,则MuSig2会适用于Blockstream的一系列产品,比如Blockstream Green和c-lightning,它也适用于Liquid 锚定机制。

写评论,请先登录