手机版
扫描查看手机站
首页 > 文章 > 加密世界 > 正文

区块链知识:Schnorr 签名如何提升比特币

时间:2024-03-19 阅读:
特战英豪官网版

特战英豪官网版

  • 类型:射击空战
  • 大小:61.82MB
  • 语言:中文版
  • 版本:v1.0.0

在阅读 Blockstream 撰写的 MuSig 论文时,我一直在想象,这对于我一个比特币用户来说,到底意味着什么。我发现 Schnorr 签名的一些特性实在是非常棒而且便利,但某一些特性则非常烦人。在这篇文章里,我希望能跟各位分享我的想法。不过,我们先快速回顾一下。

椭圆曲线签名算法

当前比特币的所有权体系用的是 ECDSA(椭圆曲线签名算法)。在签名一条消息 $m$ 时,我们先哈希这条消息,得出一个哈希值,即 $z = hash(m)$ 。我们也需要一个随机数(或者至少看似随机的数)$k$ 。在这里,我们不希望信任随机数生成器(有太多的错误和漏洞都与不合格的随机数生成器有关),所以我们通常使用 RFC6979,基于我们所知的一个秘密值和我们要签名的消息,计算出一个确定性的 k。

使用私钥 $pk$ ,我们可以为消息 $m$ 生成一个签名,签名由两个数组成:$r$(随机点 $R = k * G$ 的 x 坐标)和 $s = (z + r*pk)/k$。

然后,使用我们的公钥 $P = pk * G$ ,任何人都可以验证我们的签名,也就是检查 $(z/s)×G+(r/s)×P$ 的 x 坐标确为 $r$。

区块链知识:Schnorr 签名如何提升比特币

- ECDSA 算法图解。为便于说明,椭圆曲线作在实数域上 -

这种算法是很常见的,也非常好用。但还有提升空间。首先,签名的验证包含除法($1/s$)和两次点乘法,而这些操作的计算量都非常大。在比特币网络中,每个节点都要验证每一笔交易,所以当你在网络中发出一笔交易时,全网几千个节点都要验证你的签名。因此,即使签名的过程开销变得更大,让验证签名变得更简单也还是非常有好处的。

其次,节点在验证签名时,每个签名都要单独验证。在一个 m-n 的多签交易中,节点必须多次验证同一个签名。比如一笔 7-11 的多签名交易,里面包含了 7 个签名,网络中的每个节点都要分别验证 7 个签名。另外,这种交易的体积也非常大,用户必须为此付出多得多的手续费。

Schnorr 签名

Schnorr 签名的生成方式有些许不同。它不是两个标量 $(r, s)$,而是一个点 $R$ 和一个标量 $s$ 。类似于 ECDSA 签名,R 是一个椭圆曲线上的随机点 $R = k * G$。而签名的第二部分 s 的计算过程也有一些不同: $s = k + hash(P,R,m) ⋅ pk$ 。这里 pk 就是你的私钥,而 $P = pk * G$ 是你的公钥,m 就是那条消息。验证过程是检查 $s * G = R + hash(P,R,m) * P$。

区块链知识:Schnorr 签名如何提升比特币

- 图解 Schnorr 签名和验证 -

这个等式是线性的,所以多个等式可以相加相减而等号仍然成立。这给我们带来了 Schnorr 签名的多种良好特性。

1. 批量验证

在验证区块链上的一个区块时,我们需要验证区块中所有交易的签名都是有效的。如果其中一个是无效的,无论是哪一个 —— 我们都必须拒绝掉整个区块。

ECDSA 的每一个签名都必须专门验证,意味着如果一个区块中包含 1000 条签名,那我们就需要计算 1000 次除法和 2000 次点乘法,总计约 3000 次繁重的运算。

但有了 Schnorr 签名,我们可以把所有的签名验证等式加起来并节省一些计算量。在一个包含 1000 笔交易的区块中,我们可以验证:

$(s1+s2+…+s1000) × G=(R1+…+R1000)+(hash(P1,R1,m1)×P1+ hash(P2,R2,m2)×P2+…+hash(P1000,R1000,m1000)×P1000)$

这里就是一连串的点加法(从计算机运算的角度看,简直是免费的)和 1001 次点乘法。已经是几乎 3 倍的性能提升了 —— 验证时只需为每个签名付出一次重运算。

区块链知识:Schnorr 签名如何提升比特币

- 两个签名的批量验证。因为验证等式是线性可加的,所以只要所有的签名都是有效的,这几个等式的和等式也必成立。我们节约了一些运算量,因为标量和点加法比点乘法容易计算得多。 -

2. 密钥生成

我们想要安全地保管自己的比特币,所以我们可能会希望使用至少两把不同的私钥来控制比特币。一个在笔记本电脑或者手机(在线钱包,热钱包)上使用,而另一个放在 硬件钱包/冷钱包 里面。即使其中一个泄露了,我们还是掌控着自己的比特币。

当前,实现这种钱包的所发是通过 2-2 的多签名脚本。也就是一笔交易需要包含两个独立的签名。

有了 Schnorr 签名,我们可以使用一对密钥 (pk1,pk2),并使用一个共享公钥 $P = P1 + P2 = pk1 * G + pk2 * G $ 生成一个共同签名。在生成签名时,我们需要在两个设备上分别生成一个随机数 (k1, k2),并以此生成两个随机点 $Ri = ki * G$,再分别加上 $hash(P, R1 + R2, m)$,就可以获得 s1 和 s2 了(因为 $si = ki + hash(P, R, m)* pki $ )。最后,把它们都加起来即可获得签名 $ (R, s) = (R1+R2, s1+s2) $,这就是我们的共享签名,可用共享公钥来验证。其他人根本无法看出这是不是一个聚合签名,它跟一个普通的 Schnorr 签名看起来没有两样。

不过,这种做法有三个问题。

第一个问题是 UI 上的。要发起一笔交易,我们需要在两个设备上发起多轮交互 —— 为了计算共同的 R,为了签名。在两把私钥的情况下,只需访问一次冷钱包:我们可以在热钱包里准备好待签名的交易,选好 k1 并生成 $R1 = k1 * G$,然后把待签名的交易和这些数据一同传入冷钱包并签名。因为已经有了 R1,签名交易在冷钱包中只需一轮就可以完成。从冷钱包中我们得到 R2 和 s2,传回给热钱包。热钱包使用前述的 (k1,R1) 签名交易,把两个签名加总起来即可向外广播交易了。

这在体验上跟我们现在能做到的没有什么区别,而且每当你加多一把私钥,问题就会变得更加复杂。假设你有一笔财富是用 10 把私钥共同控制的,而 10 把私钥分别存放在世界各地,这时候你要发送交易,该有多麻烦!在当前的 ECDSA 算法中,每个设备你都只需要访问一次,但如果你用上 Schnorr 的密钥聚合,则需要两次,以获得所有的 Ri 并签名。在这种情况下,可能不使用聚合,而使用各私钥单独签名的方式会好一些 —— 这样就只需要一轮交互。

文章完成后,我得到了 Manu Drijvers 的反馈:在一个可证明安全性的多签名方案中,你需要 3 轮交互:

选择一个随机数 ki 以及相应的随机点 Ri = ki * G,然后告诉每一个设备 Ri 的哈希值 ti=hash(Ri),然后每个设备都能确保你没有在知道其他人的随机数之后改变主意收集所有的数字 Ri 并计算公共的 R签名

第二个问题是已知的 Rogue 密钥攻击。这篇论文讲解得非常好,所以我就不赘述了。大概意思是如果你的其中一个设备被黑(比如你的热钱包被劫持),并假装自己的公钥是 $(P1 - P2)$,那就可以仅凭私钥 pk1 便控制两个私钥共享的资金。一个简单的解决方案是,在设置设备时,要求使用私钥给相应的公钥签名。

还有第三个重大问题。你没法使用确定性的 k 来签名。如果你使用了确定性的 k,则只需一种简单的攻击,黑客即可获得你的私钥。攻击如下:某个黑客黑入你的笔记本电脑,完全控制了其中一把私钥(比如 pk1)。我们感觉资金仍是安全的,因为使用我们的比特币需要 pk1 和 pk2 的聚合签名。所以我们像往常一样发起交易,准备好一笔待签名的交易和 R1,发送给我们的硬件钱包,硬件钱包签名后将 (R2, s2)发回给热钱包 …… 然后,热钱包出错了,没法完成签名和广播。于是我们再试一次,但这一次被黑的电脑用了另一个随机数 —— R1' 。我们在硬件钱包里签名了同一笔交易,又将 (R2, s2')发回给了被黑的电脑。这一次,没有下文了 —— 我们所有的比特币都不翼而飞了。

在这次攻击中,黑客获得了同一笔交易的两个有效的签名:(R1, s1, R2, s2) 和 (R1', s1',R2,s2')。这个 R2 是一样的,但是 $ R = R1 + R2 $ 和 $ R' = R1' + R2 $ 是不同的。这就意味着黑客可以计算出我们的第二个私钥:$s2-s2'=(hash(P,R1+R2,m)-hash(P,R1'+R2,m))⋅pk2$ 或者说 $pk2=(s2-s2')/(hash(P,R1+R2,m)-hash(P,R1'+R2,m))$。我发现这就是密钥聚合最不方便的地方 —— 我们每次都要使用一个好的随机数生成器,这样才能安全地聚合。

3. Musig

MuSig 解决了其中一个问题 —— rogue key 攻击将不能再奏效。这里的目标是把 多方/多个设置的签名和公钥聚合在一起,但又无需你证明自己具有与这些公钥相对应的私钥。

聚合签名对应着聚合公钥。但在 MuSig 中,我们不是把所有联合签名者的公钥直接相加,而是都乘以一些参数,使得聚合公钥 $ P = hash(L,P1)×P1 + … + hash(L,Pn)×Pn$ 。在这里,$ L = hash(P1,…,Pn) $ —— 这个公共数基于所有的公钥。L 的非线性特性阻止了攻击者构造特殊的公钥来发动攻击。即使攻击者知道他的 $ hash(L,Patk)×Patk $ 应该是什么,他也无法从中推导出 Patk 来 —— 这就跟你想从公钥中推导出私钥是一样的。

签名构造的其它过程跟上面介绍的很像。在生成签名时,每个联合签名者都选择一个随机数 ki 并与他人分享 $Ri = ki * G$。然后他们把所有的随机点加起来获得 $ R=R1+…+Rn$ ,然后生成签名 $si = ki + hash(P,R,m) ⋅ hash(L,Pi) ⋅ pki$ 。因此,聚合签名是 $(R, s)=(R1+…+Rn, s1+…+sn)$ ,而验证签名的方法与以前一样:$ s×G = R + hash(P,R,m)×P$ 。

4. 默克尔树多签名

你可能也注意到了,MuSig 和密钥聚合需要 所有签名者签名一个交易。但如果你想做的是 2-3 的多签名脚本呢?这时候我们能够使用签名聚合吗,还是不得不使用通常的 OP_CHECKMULTISIG 和分别签名?(译者注:OP_CHECKMULTISIG 是比特币验证椭圆曲线多签名脚本的操作码)

先说答案,是可以的,但是协议上将有些许的不同。我们可以开发一个类似于 OP_CHECKMULTISIG 的操作码,只不过是检查聚合签名是否对应于公钥默克尔树上的一个元素。

举个例子,如果我们想用公钥 P1、P2 和 P3 组成一个 2-3 的多签名脚本,我们需要用这几把公钥的所有两两组合 (P1, P2)、(P2, P3)、(P1, P3) 来构建一棵默克尔树,并把默克尔树根公布在锁定脚本中。

在花费比特币时,我们需要提交一个签名和一个证据,证明这个签名所对应的公钥位于由这个树根标记的默克尔树上。对于 2-3 多签名合约来说,树上只有 3 个元素,证据只需 2 条哈希值 —— 那个我们想用的公钥组合的哈希值,还有一个邻居的。对于 7-11 多签名脚本来说,公钥组合有 11!/7!/4!=330 种,证据需要 8 条哈希值。通常来说,证据所包含的元素数量与多签名的密钥数量大体成正比 ,为 $log2(n!/m!/(n-m))$ 。

但有了默克尔公钥树,我们就不必局限于 m-n 多签名脚本了。我们可以做一棵使用任意公钥组合的树。举个例子,如果我们有一个笔记本电脑,一个手机,一个硬件钱包和一个助记词,我们可以构建一棵默克尔树,允许我们使用 笔记本电脑 + 硬件钱包、手机 + 硬件钱包 或者单独的助记词来使用比特币。这是当前的 OP_CHECKMULTISIG 做不到的 —— 除非你使用 “IF - Else” 式的流程控制来构造更复杂的脚本。

区块链知识:Schnorr 签名如何提升比特币

- 聚合公钥的默克尔树。不仅仅是多签名 -

结论

Schnorr 签名很棒,它解决了区块验证中的一些计算开销问题,也给了我们密钥聚合的能力。后者在使用时有些不便利,但我们不是在强迫大家使用它 —— 无论如何,我们都可以仍旧使用普通的多签名方案,使用单独的、不聚合的签名。

我迫不及待想使用 Schnorr 签名,希望比特币协议能尽快纳入这种签名方案。

另外,我也真心喜欢 MuSig,它是个优雅的方案,论文也浅显易懂。我强烈建议各位有闲之时通读全文。

以上就是区块链知识:Schnorr 签名如何提升比特币的详细内容,更多关于Schnorr 签名如何提升比特币的资料请关其它相关文章!


三箭资本介绍 一文盘点三箭资本钱包地址 诛仙手游坐骑隐藏任务怎么做(新诛仙手游坐骑隐藏任务) 冰原守卫者新手怎么玩(冰原守卫者攻略) 比特币钱包app有哪些?2022年比特币交易软件app排行榜 王者荣耀炮车第几波加入战斗(王者炮车几分钟加入战斗) 三国志幻想大陆阵容怎么搭配(三国志幻想大陆阵容搭配最强输出阵容推荐) 创造与魔法为什么打人名字变紫了(创造与魔法为什么名字后面有数字) 魔兽世界米米尔隆的头部怎么获得(米米尔隆在哪) HEGIC是什么币种?HEGIC币前景怎么样? 泰拉瑞亚钻石长袍怎么做(泰拉瑞亚钻石合成表) 和平精英网络环境异常封号是怎么回事(和平精英网络环境存在异常是什么意思原因) Coinbase Pro是什么交易所?Coinbase Pro交易所怎么样? 区块链web3.0是什么意思?web3.0有哪些好处? 和平精英怎么赠送皮肤(和平精英怎么赠送皮肤枪) 苹果手机小圆点怎么弄出来?苹果手机小圆点打不开怎么办 mysql安装图解设置详细教程(mysql安装教程详解) 比特币储备金是什么意思?科普比特币储备金及现状分析 让硬盘价格暴涨、甚至断货的Chia是什么? ff14风脉怎么开(ff14 3.0风脉任务攻略) 比特币是什么东西,怎么产生的? 梦幻西游手游狐美人能加入什么门派(梦幻西游手游狐美人时装搭配) 梦幻西游手游满级是115级吗(梦幻手游练到115级) 欧易狗狗币怎么买入和交易?OKEX买狗狗币教程 比特币指数是什么意思?比特币指数交易投资靠谱吗? 王者荣耀全国大赛奖励怎么领取(王者全国大赛有啥用) 比特币怎么获得?一文读懂比特币获得方法 鬼泣巅峰之战找不到以前玩的区了怎么办(鬼泣巅峰之战不显示服务器) 欧易合约手续费怎么算的?欧易交易所合约手续费明细 王者荣耀桑启熟练度怎么刷(王者荣耀桑配什么阵容) 王者荣耀镜头偏移功能怎么开启(王者荣耀镜头偏移功能在哪设置) 梦幻西游手游69和115怎么选(梦幻西游手游69 115) Coinbase Wallet推出钱包的浏览器扩展程序 改善DeFi桌面操作体验 和平精英cdk怎么获得(和平精英cdk怎么获得最快) 完美csgo和steam能一起玩吗(csgosteam和完美有啥区别) 交易所怎么买卖币?交易所买卖币新手图文教程 消逝的光芒2按Q没反应怎么办(消逝的光芒2pc) BitMEX提现多久到账?BitMEX提现时间介绍 魔兽世界怀旧服真银矿石在哪里(魔兽世界真银矿石哪里最多) 和平精英表情包怎么发(和平精英表情包怎么发给好友) dnf卡片升级放几张卡片好(dnf卡片升级是不是要两张一样的卡片) 方舟生存进化狮鹫困水不能超过多少秒(方舟狮鹫怎么做困兽笼) 冰原守卫者博克村怎么双人通关(冰原守卫者游戏视频) cf音效卡有什么用(cf音效卡在哪买便宜) 我的世界哪里钻石最多(我的世界哪里钻石最多2.3.15) chia奇亚挖矿教程:Chia(奇亚)挖矿显示未同步怎么办? 宝可梦阿尔宙斯金属膜在哪(阿尔宙斯z纯晶) 梦幻新诛仙悟道丹怎么获得(梦幻新诛仙吾道丹) 消逝的光芒2豪华版武器领不了怎么办(消逝的光芒2购买哪一种) 猪猪币pig市值怎么样?pig币值得投资吗 和平精英无人机怎么召唤(和平精英无人机怎么召唤队友) 冰原守卫者经验本怎么更好完成(冰原守卫者攻略建设) 宝可梦传说阿尔宙斯初始精灵选哪个(阿尔宙斯初登场) defi挖矿教程:使用比特派钱包bitpie参与寿司SUSHI挖矿(以太系) steam社区登录不上去/进不去/登录报错解决办法 UMA币是什么币?UMA币发行总量及流通量介绍 有哪些新出的大型网游游戏好玩(大型网络新游戏) 有无限元宝无敌版游戏吗(有无限元宝的手游吗) 比特币和以太坊哪个前景好一点?比特币和以太坊的区别 金铲铲之战蛮王主C阵容怎么玩 蛮王主C阵容攻略 王者荣耀最佳拍档称号怎么获得(王者里的最佳搭档) 冰原守卫者75级副本怎么打(冰原守卫者武器大全) 羊了个羊在哪玩(羊了个羊在哪玩儿) 2023年最赚钱的5个行业(2023年什么最赚钱) Uswap Tube是什么交易所?USwap交易所全面介绍 有没有不费流量的手机网游推荐(有没有不费流量的游戏) jex数字货币交易平台怎么样?jex交易所全面介绍 地下城堡3魂之诗20年后推图顺序是什么(地下城堡3魂之诗任务攻略) cf免费角色哪个最好(cf免费角色最好的) Shib柴犬币值得投资吗?分析柴犬币前景如何 我的世界图书管理员怎么生成(我的世界图书管理员生成条件) 我的世界34种敌对生物有哪些(我的世界34种敌对生物是什么) ERC20协议是什么意思?一文读懂ERC20协议 梦幻西游手游69花果山怎么样(梦幻西游手游69平民花果山怎么配装备) gate.io交易平台怎么提现?gate的提币地址在哪里 创造与魔法里的猴子吃什么(创造与魔法猿猴) 王者荣耀皮肤销量数据哪里看(王者皮肤累计销量排行榜) WaykiChain是什么钱包?WaykiChain钱包怎么样? ff14陆行鸟怎么获得(ff14 陆行鸟怎么获得) 区块链扫盲:比特币期权交割是什么意思? 有没有组队好玩的网游推荐(有什么好玩的组队游戏求推荐) Algorand官方钱包使用指南,Algorand钱包常见问题及解决方法 火币网怎么挖矿?火币网怎么挖矿赚钱哪种币 方舟生存进化快捷栏隐藏了怎么显示(方舟生存进化怎么显示快捷工具栏) 三国志幻想大陆貂蝉战魂推荐(三国志幻想大陆貂蝉潜能加点战魂搭配) 哪些数字货币可以挖矿?支持挖矿币种推荐 消逝的光芒塔希尔的武器怎么获得(消逝的光芒塔里奇) 抹茶交易所怎么买猪猪币PIG币?MXC抹茶交易所买猪猪币教程 泰拉瑞亚十字章护身符怎么制作(泰拉瑞亚十字章护身符有什么用) 比特币新手开户教程,比特币交易所前五汇总 花有再开的那天王者荣耀谁的台词(花有再开的那天人有重逢的时候吗) Mysql数据库的几种安装方法(mysql数据库的几种安装方法是什么) 什么是区块链?区块链金融是什么意思? Jaxx Wallet是什么钱包?Jaxx(钱包)Wallet安全吗? 比特币为什么值钱?原理是什么? 宝可梦传说阿尔宙斯魔尼尼怎么进化(阿尔宙斯和谱尼) 区块链技术分为哪几方面?区块链技术的优缺点分析 不花钱适合长期玩的手游有哪些(不花钱适合长期玩的小游戏) AAVE是什么币种?AAVE币前景和价值分析 10款飒爽美丽女性主角的游戏(好玩的女性主角游戏) 创造与魔法河豚怎么得(创造与魔法里面的河豚怎么得到)

热门文章

推荐专题

更多>>

游戏推荐

更多>>