火星链 火星链
Ctrl+D收藏火星链

HASH:干货 | Schnorr 签名如何提升比特币

作者:

时间:1900/1/1 0:00:00

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

椭圆曲线签名算法

当前比特币的所有权体系用的是?ECDSA。在签名一条消息?m?时,我们先哈希这条消息,得出一个哈希值,即?z=hash(m)?。我们也需要一个随机数k?。在这里,我们不希望信任随机数生成器,所以我们通常使用?RFC6979,基于我们所知的一个秘密值和我们要签名的消息,计算出一个确定性的k。

使用私钥?pk?,我们可以为消息?m?生成一个签名,签名由两个数组成:r和?s=(z+r*pk)/k。

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

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

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

彭博社:美国银行将更加审慎考量为加密客户提供服务:金色财经报道,美国银行在一系列区域性银行倒闭和监管机构加强审查之后更加谨慎地对加密行业提供服务,据行业参与者、投资者和银行高管称,虽然没有全面禁止为加密客户提供服务,但金融公司正在实施冗长的申请程序,拒绝小型公司和一些零售平台,在某些情况下甚至完全关闭加密业务的大门。[2023/3/30 13:36:03]

其次,节点在验证签名时,每个签名都要单独验证。在一个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签名和验证-

比特币开发人员正在开发保险库功能,可阻止恶意黑客:金色财经报道,比特币开发人员James O'Beirne正在开发一项比特币保险库功能,当黑客试图窃取他们的比特币时提醒用户,然后通过将资金转移到更安全的钱包来阻止盗窃。该功能类似于一种比特币智能合约或“契约”,对比特币的使用方式施加限制,保险库用户必须在花费比特币(BTC)之前在两个不同的区块中传输两个单独的交易,在第一次交易(有时间延迟)后发出警报,允许用户批准交易或将代币扫到另一个钱包。O'Beirne在他的提案草案中写道:“托管比特币的风险是众所周知的,该提案引入了一种机制,可以显著减轻密钥泄露的最坏情况结果:代币丢失。”[2023/3/1 12:35:24]

这个等式是线性的,所以多个等式可以相加相减而等号仍然成立。这给我们带来了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)

美联储再次拒绝托管银行Avanti的监管申请:金色财经报道,Caitlin Long的托管银行Custodia Bank收到了美联储的第二次拒绝。美国联邦储备委员会2月23日宣布,拒绝了托管银行向政府机构寻求监管的请求。

美联储在1月27日为最初的拒绝辩护,称Custodia没有联邦存款保险,并强调了其各种以加密货币为重点的活动的风险。政府机构表示,Custodia最初提交的申请“不符合法律规定的要素”。

Custodia Bank原名Avanti。公司首席执行官兼创始人Caitlin Long曾是华尔街高管,曾在瑞士信贷和摩根士丹利任职。[2023/2/26 12:30:04]

这里就是一连串的点加法和1001次点乘法。已经是几乎3倍的性能提升了——验证时只需为每个签名付出一次重运算。

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

2.密钥生成

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

数据:11月份全球Web3领域融资总额为10.34亿美元,环比增长21.65%:金色财经报道,据财联社创投通统计,11月份全球Web3.0领域融资总数量为71笔,融资总额为10.34亿美元,环比增长21.65%。

从细分赛道来看,13个区块链基础设施项目获得4.56亿美元,成为融资总额最多的领域。德国3个项目获得2.11亿美元融资;中国10个项目获得2.04亿美元融资,成为融资额增长最多的地区,环比增长超过4倍。从轮次来看,11月份的融资主要集中在种子轮和战略轮,占比分别43.67%和12.68%。

根据此前财联社的统计,10月全球Web3市场共融资8.5亿美元。[2022/12/8 21:31:10]

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

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

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

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

25%至40%的加密对冲基金对FTX或FTT有一定程度的直接敞口:11月15日消息,Crypto Fund Research首席执行官Josh Gnaizda在发给机构投资者的电子邮件中表示,25%至40%的以加密货币为重点的对冲基金对FTX或FTT有一定程度的直接敞口。对冲基金对上周启动破产程序的陷入困境的交易所的敞口平均占管理资产的7%至12%。

Gnaizda预计直接受到FTX崩溃影响的加密对冲基金和加密风险基金的损失将超过10亿美元,甚至可能高达50亿美元。”(Blockworks)[2022/11/15 13:05:33]

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

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

选择一个随机数ki以及相应的随机点Ri=ki\?G,然后告诉每一个设备Ri的哈希值ti=hash(Ri),然后每个设备都能确保你没有在知道其他人的随机数之后改变主意*收集所有的数字Ri并计算公共的R签名第二个问题是已知的Rogue密钥攻击。这篇论文讲解得非常好,所以我就不赘述了。大概意思是如果你的其中一个设备被黑,并假装自己的公钥是?,那就可以仅凭私钥pk1便控制两个私钥共享的资金。一个简单的解决方案是,在设置设备时,要求使用私钥对相应的公钥签名。

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

在这次攻击中,黑客获得了同一笔交易的两个有效的签名:和。这个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?解决了其中一个问题——roguekey攻击将不能再奏效。这里的目标是把多方/多个设置的签名和公钥聚合在一起,但又无需你证明自己具有与这些公钥相对应的私钥。

聚合签名对应着聚合公钥。但在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的操作码,只不过是检查聚合签名是否对应于公钥默克尔树上的一个元素。

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

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

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

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

结论

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

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

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

原文链接:

https://medium.com/cryptoadvance/how-schnorr-signatures-may-improve-bitcoin-91655bcb4744

作者:Stepan

翻译:?阿剑

标签:比特币ASHHASHSCH小比特币最新价格dash币会归零吗Filcoin Standard Full Hashrate Tokenetschain

莱特币价格热门资讯
PUNK:观察 | 从生成艺术的角度简单理解NFT

今天的NFT类似于2012年的比特币这里不是说NFT的价格跟2012年的比特币类似,因为两者完全不是一种东西,无法在价格或价值层面进行比较.

1900/1/1 0:00:00
VES:STM月刊 | 7月数字资产市场之房地产业发展报告

欢迎阅览本期数字资产市场之房地产业发展报告。我们对报告内容进行了一定的调整。新报告将着重突出市场中表现抢眼的优质项目,敬请关注!月交易情况概览数字化房地产总市值:$31,225,794.18月度.

1900/1/1 0:00:00
数字资产:现在的数字资产:资本管理公司新的“竞技场”

近年来随着数字资产的名声大噪,以及市场基础设施和监管框架的不断发展,加密货币、证券代币和加密证券等数字资产逐渐出现在投资者的视野之中.

1900/1/1 0:00:00
MAN:俄罗斯Hermitage博物馆:Rammstein乐队主唱在该馆拍摄制作的NFT未经授权

据Cryptonews8月18日消息,德国金属乐队Rammstein的主唱TillLindemann正在出售NFT代币.

1900/1/1 0:00:00
区块链:资产管理公司KB Asset推出韩国首只区块链共同投资资金

据KoreaTimes消息,韩国资产管理公司KBAssetManagement周一推出了该国首只专注于区块链的共同投资基金:KB全球数字链经济基金.

1900/1/1 0:00:00
二次方资助V2协议: 抗女巫攻击、公平和规模化的链上二次方投票

经过几个月的研究和工程实现,我们准备在今天发布二次方资助V2协议。*注:原文的发布日期为2021年6月27日HackerLink是第一个实现链上二次方投票和资助并使其具有可扩展性的产品.

1900/1/1 0:00:00