田野调查:实现 MuSig2

互联网 阅读 456 2024-04-25 18:22:43

作者:Brandon Black

来源:https://bitcoinops.org/zh/newsletters/2023/08/16/

译者:Primitives Lane

第一篇MuSig 论文出版于 2018 年,而且 MuSig 在比特币上的潜能,正是用来让 taproot 软分叉获得支持的卖点之一。对 MuSig 的开发延续了下来,MuSig-DN 和 MuSig2 的论文在 2020 年出版。到 2021 年, taproot 在比特币主网上临近激活的时候,对 MuSig 签名即将到来的兴奋之情是真实可感的。在 BitGo,我们期待能趁着 taproot 的激活发布一款 MuSig taproot 钱包;但是当时的规范、测试界面和参考实现都是不完整的。于是,BitGo 只能先发布第一款基于 tapscript 的多签名钱包,并在主网上发起了第一笔 tapscript 多签名交易。接近两年以后,MuSig2 在 BIP327 中得到规范,我们就发布了第一款 MuSig taproot 多签名钱包。

为什么要使用 MuSig2?

与脚本式多签名相比

相比于脚本式的多签名构造,MuSig 有两大长处。第一点,也是最明显的一点,其交易体积更小(因此矿工手续费更少)。链上的一个签名是 64 ~ 73 字节,换算过来是 16 ~ 18.25 虚拟字节(vB),而 MuSig 可以将两个(甚至更多)签名合并为一个签名。在 BitGo 的 2-of-3 多签名钱包中,使用 MuSig 密钥路径的一个输入只需 57.5 vB,而一个原生的隔离见证输入需要 104.5 vB、使用深度为 1 的脚本路径的 tapscript 输入需要 107.5 vB。第二个好处是,MuSig 也提升了隐私性。在联合持有的输出上使用 MuSig 密钥路径时,这样的合作式花费无法被第三方区块链观察者辨别出跟单签名 taproot 花费有何区别。

当然,MuSig2 也有一些缺点。两种重要的缺点都围绕着签名使用需要用到的 nonce 值。不像普通的 ECDSA(椭圆曲线数字签名算法)和 schnorr 签名,MuSig2 的签名者无法一贯地使用确定性的 nonce 值。这种缺点,使得保证高质量的 nonce 和避免 nonce 复用变得更加困难。MuSig2 在大部分情况下要求 2 轮通信。有些时候,第一轮可以预先计算出来,但必须谨慎进行。

与其它 MPC 协议相比

因为上面提到的手续费和隐私性上的好处,“MPC(多方计算)” 签名协议越来越受欢迎。MuSig 是一种 简单 的多签名协议(只支持 n-of-n 模式),是因为 schnorr 签名的线性可加特性而成为可能的。MuSig2 可以用一场 30 分钟的演讲解释清楚,而完整的参考实现是 461 行的 Python 代码。门限签名(t-of-n)协议,例如 FROST,会复杂很多;甚至基于 ECDSA 的两方的多签名,也要依赖于 Paillier 加密算法和其它技术。

脚本类型的选择

即使在 taproot 激活以前,为一个多签名(t-of-n)钱包选择一种具体的脚本,也是难事。Taproot 因为有了多种花费路径,让这个问题变得更加复杂;而 MuSig 本身甚至提供了更多选项。在我们开始设计 BitGo 的 taproot MuSig2 钱包时,我们考虑了以下事项:

  • 我们使用固定的公钥顺序,而不对公钥使用字典排序。每一个签名密钥都有跟公钥一起储存的特定角色,所以每次都以相同的顺序使用这些公钥会更简单,而且更容易预测。

  • 我们的 MuSig 密钥路径仅包含最常用的签名人组合,“用户”/“bitgo”。将 “后备” 签名密钥包含在 MuSig 密钥路径中,将极大地减少可以使用密钥路径的概率。

  • 我们不在 Taptree(脚本树)上包含 “用户”/“bitgo” 签名组合。这是我们的第二种 taproot 脚本类型;第一种类型包含了 3 个 tapscript 的设计,需要脚本式签名功能的用户可以使用第一种类型。

  • 在 tapscript 中,我们不会使用 MuSig 密钥。我们的钱包包含了一个 “后备” 密钥,这个密钥被假设是难以访问的、而且会使用我们控制之外的软件来签名,所以预期这个后备密钥能够依照 MuSig 协议来签名是不现实的。

  • 在 tapscript 中,我们选择了 OP_CHECKSIG/OP_CHECKSIGVERIFY 而不是 OP_CHECKSIGADD。在构造交易的时候,我们知道哪一把密钥会签名,而 2-of-2 的、深度为 1 的脚本,会比 2-of-3 的、深度为 0 的脚本稍微便宜一些。

所以,最终的结构是这样的:

BitGo's MuSig taproot structure

Nonce(确定性的和随机的)

椭圆曲线数字签名是在一个一次性秘密值(叫做 “nonce”,意思是只用一次的数字)的帮助下制作出来的。通过在签名中分享 nonce 公开值(nonce 公开值和 nonce 秘密值的关系,就像公钥与私钥的关系),验证者可以确认签名等式成立,而无需签名人揭晓自己长期使用的私钥。为了保护这个长期使用的私钥,同一个私钥(或者有关联的私钥)在签名不同的消息时绝不能使用相同的 nonce 值(nonce 不能复用)。对单签名来说,最常被推荐的避免 nonce 复用的方法就是 RFC6979:确定性的 nonce 生成法。完全随机的数值也是安全的,只要它一经使用就立即被丢弃的话。但这些方法都不能直接为多签名协议所用。

为了在 MuSig 中安全地使用确定性 nonce 值,在 MuSig-DN 这样的技术中,必须证明所有的参与者都正确地生成了确定性 nonce 值。没有这样的证据,恶意的签名人就可以为同一条消息发起两个签名会话,然后提供不一样的 nonce 值。另一个生成确定性 nonce 值的签名人会使用相同的 nonce 值为两条实质上不同的消息生成两个碎片签名,最终导致私钥泄露给恶意签名人。

在 MuSig2 规范的开发期间,Dawid 和我意识到,最后一个 贡献 nonce 值的签名人可以确定性地生成自己的 nonce 值。我跟 Jonas Nick 讨论了这一点,他于是将此形式化、成为规范。在 BitGo 的 MuSig2 实现中,这种确定性的签名模式用在了我们 HSM(硬件签名模块)中,以使这些硬件可以无状态地(statelessly)执行 MuSig2 签名。

在多轮签名协议中使用随机 nonce 值时,签名人必须考虑这些 nonce 秘密值在轮次之间如何存储。在单签名中,nonce 秘密值在创建它的同一个执行步骤中就可以删除。如果一个攻击者可以在 nonce 值创建之后、来自其它签名器的 nonce 值到来之前立即克隆一个签名器的状态,这个签名器就可以被诱骗为实质上不同的多条消息使用同一个 nonce 值生成多个签名。因此,我们建议签名人仔细考虑自己的初始状态是否可被访问、nonce 秘密值具体在什么时候会被删除。在 BitGo 用户使用 BitGo SDK 运行 MuSig2 流程时,nonce 秘密值是使用 MuSig-JS 库来保存的,并且,一旦为了签名而访问它们,就会导致它们被删除。

形成规范的流程

我们在 BitGo 实现 MuSig2 的经验表明,在比特币生态里工作的公司和个人应该花时间来审核自己意图实现(甚至只是期待会出现)的东西的规范,并为这样的规范的开发作出贡献。在我们第一次审核 MuSig2 规范的草稿、并开始学习如何最好地将它整合进我们的签名系统时,为了将带状态的签名引入我们的 HSM,我们考虑过许多困难的方法。

幸运的是,在我向 Dawid 介绍了其中的挑战之后,他很确信有一种办法可以使用确定性的 nonce 值,而且我们最终得出了其中一个签名人可以使用确定性 nonce 值的粗糙想法。后来,我又向 Jonas 提起了这个想法,并解释了我们尝试启用的具体应用场景,他意识到了其中的价值,将它融合进了规范。

现在,其它的 MuSig2 实现也可以利用这样的灵活性:其中一位签名人无需管理状态。在开发过程中,通过审核(以及实现)MuSig2 规范的草稿,我们成功为规范作出了贡献,并且在这份规范作为 BIP327 正式发布之后,很快我们的 MuSig2 签名就整装待发了。

MuSig 与 PSBT

PSBT(部分签名的比特币交易) 格式意在携带让各方(比如:签名人和协调人)可以签名一笔交易所需的所有信息。签名所需的信息越多,这种格式的价值就越大。我们试验了 使用额外的字段扩展我们现有的 API 格式以协助 MuSig2 签名 vs. 转化成 PSBT 的成本和好处。最终我们将需要交换的交易数据转化成 PSBT 格式,而且获得了巨大的成功。尚不为许多人所知的是,BitGo 钱包现在可以跟支持 PSBT 的硬件签名设备集成(除了使用 MuSig2 的 BitGo 钱包,详见下一段)。

但现在还没有公开为 MuSig2 签名而设的 PSBT 字段。在我们的实现中,我们基于 Sanket 分享给我们的一份草案,用上了专门的字段。这是一个很少被提起的 PSBT 格式的好处 —— 你可以在同一种二进制格式中额外加入定制化的交易构造或者签名协议所需的 无论什么 数据;因为全局的、每个输入、每个输出的部分已经得到定义。PSBT 规范将未签名的交易,与脚本、签名以及其它最终形成一笔完整的交易所需的数据分离开来。这种分离可以在签名流程中提升通信的效率。举个例子,我们的 HSM 可以拿仅包含自己的 nonce 值和签名的最小 PSBT 作为响应,而这个 PSBT 可以很容易地组合成预签名的 PSBT。


免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:MuSig2签名会话中的状态最小化 下一篇:Taproot 及 MuSig2 回顾

相关资讯

  • CZ获刑四个月,币安涅槃重生时
    CZ获刑四个月,币安涅槃重生时

    币安创始人CZ因违反反洗钱法被判监禁4个月,但币安顺利过渡,证明其用户资金安全和品牌稳固。CZ已辞去首席执行官职务并缴纳罚款,但被禁止返回阿联酋。法官最终判处CZ4个月监禁,称其收到了161封信件,了解其人品。信件描绘了CZ是一位冒着风险为币安成功的人,也是一位致力于家庭和慈善事业的领导者。币安仍然稳居全球第一大加密货币交易所,保持着用户的信心和资产安全。币安勇于面对监管挑战,积极与监管机构合作,巩固了其在全球加密市场的领导地位。.....

    每日资讯 2024-05-01 06:32 798
  • RootData:2024年Q1Web3行业投资研究报告
    RootData:2024年Q1Web3行业投资研究报告

    2024年Q1,Web3行业融资总额达25.45亿美元,同比增长4.7%,DeFi赛道融资额环比增长超过150%。比特币现货ETF资金流入超过121亿美元,推高比特币价格至历史新高。Q1早期融资项目数量同比增长10.5%,但仍有较多未被验证的技术与解决方案。AI、RWA、LSD、DePIN等板块轮动,用户对于寻找热门投资标的需求更高。Web3投资者注意力主要受知名机构投资、项目TGE事件、空投等因素影响。随着Web3行业吸引更多主流投资者,基于热门人物的交易线索将更受关注。RootData热搜榜单成为加密

    每日资讯 2024-04-30 19:35 1249
  • Vitalik:Binius——对二进制字段的高效证明
    Vitalik:Binius——对二进制字段的高效证明

    本文介绍了2019年时代密码学中的SNARK和STARK技术,特别感谢Justin Drake, Jim Posen, Benjamin Diamond和Radi Cojbasic的反馈。STARK和SNARK是一种证明计算机程序正确性的方法,通过将程序转换成包含多项式的数学方程来实现。STARK使用更大的数字,但不需要可信的设置,并且抗量子。SNARK使用更小的数字,但有限制。Binius是一种新的多项式承诺方案,它使用超立方体来表示计算轨迹,并通过Reed-Solomon编码来防止作弊。Binius是

    每日资讯 2024-04-30 19:34 823
  • EigenLayer官宣空投!但Pendle用户惨遭背刺……
    EigenLayer官宣空投!但Pendle用户惨遭背刺……

    EigenLayer发放空投,总供应量16.7亿枚,分配给社区45%,投资者29.5%,早期贡献者25.5%。但社区不满分配方案,认为项目方占比过高,代币不可转让。空投受IP限制和VPN封锁影响,与积分关联不大,部分用户反映数量少。空投后,EIGEN可能会跟其他项目一样下跌,市场流动性不足。.....

    每日资讯 2024-04-30 19:34 448
  • 市场静候“强心针”:香港虚拟资产现货ETF
    市场静候“强心针”:香港虚拟资产现货ETF

    加密货币市场周末表现疲软,投资者期待香港虚拟资产ETF带来流动性提振,但分析师警告缺乏积极催化剂可能导致币价继续下跌。比特币交易价格持续低于63,000美元,山寨币也遭受重创。本周关注企业财报、就业数据和美联储会议,分析师预计比特币目标为67,500美元以上,但利率不确定性给市场带来压力。比特币ETF流出资金达8360万美元,加密货币市场整体疲软。分析师认为,未来利率不确定性是波动的主要来源,ETF流量逆转也给比特币带来压力。经济学家表示,比特币当前的疲软可能是最后一次震荡,需要反弹至67,500美元以上

    每日资讯 2024-04-30 19:34 493
  • 香港金融史重大时刻:比特币ETF正式登陆港交所
    香港金融史重大时刻:比特币ETF正式登陆港交所

    香港将于4月30日推出比特币和以太坊现货ETF,华夏基金等三家子公司已获批准。此举为零售和机构投资者提供了安全、高效的数字资产配置工具。投资者可通过胜利证券和华赢证券进行实物申购,预计将吸引更多券商参与。ETF市场规模庞大,吸引美国投资者和海外家族办公室。目前只允许合格投资人、机构投资人、零售投资人和符合规定的国际投资人投资。香港证监会已明确将监管加密货币,目前只有比特币和以太坊符合推出ETF的条件。华夏基金香港提供高灵活性的交易选项,支持多种货币交易,费率低于同类型产品。加密货币ETF的推出可能会利好加

    每日资讯 2024-04-30 19:34 1119
  • 跨输入签名聚合如何集成到比特币?
    跨输入签名聚合如何集成到比特币?

    跨输入的签名聚合(cross-input signature aggregation,CISA)是一种可以减少交易体积的技术,有望成为比特币的软分叉。本代码库的目标是为了收集关于签名聚合的思想和主题,以及构想它们集成到比特币中的方式。

    比特币知识 2024-04-30 17:44 732
  • 盲化的两方ECDSA签名
    盲化的两方ECDSA签名

    两方的 ECDSA(椭圆曲线签名算法)协议让两个互不信任的参与者可以安全地生成一个共有的公私钥对,而且既无需知晓另一方的私钥信息,也无需知晓整个私钥,就可以对一条双方一致认可的信息生成一个有效的 ECDSA 签名。我们提出了一种基于 Lindell [1] 协议的方法,让其中一方可以完全盲化地参与签名生成,这样 TA 就既不知道被签名的消息的内容,也不知道最终的签名是什么样。

    比特币知识 2024-04-30 17:21 647