比特币算法进化为Schnorr签名算法是进步吗?_DSA:ECD

历史的车轮滚滚向前,技术的进步从未停歇,一次具有里程碑意义特币协议的开始了它的技术升级。其协议中的技术升级SchnorrSignature和Taproot已集成到BitcoinCore0.21.0?版本中。

比特币的未来似乎面临从未有过的光明,现在它有机会不仅通过其容量而且通过其功能超越所有其他区块链。

当比特币ECDSA椭圆曲线签名算法时,多重签名交易验证过程非常繁琐,现在可以把一笔交易中的所有签名和公钥通通合并成单个签名和公钥,无法追溯并且简单快速会是怎样?

其实在此之前,中本聪在设计比特币协议时,需要考虑到签名算法的签名长度、是否开源、是否有专利、是否经过足够长时间的安全验证、性能等多种条件。当时能满足上述这些条件的数字签名算法不止有ECDSA,还有SchnorrSignature这个从各个方面都不亚于ECDSA的数字签名算法。但是由于在2008年之前处于专利保护的状态,所以可能是这个原因使得中本聪在设计比特币协议时并未使用该签名算法,最终选择了椭圆曲线数字签名算法,还在其他专家的建议下选择了一条特殊的椭圆曲线secp256k1。

时隔10年,2018年7月,比特币开发者PieterWuille撰写了bip-schnorr提出了将bitcoin的签名算法更改为schnorr方案。Schnorr与ECDSA虽然同为使用secp236k1曲线的椭圆曲线加密算法,但由于SchnorrSignature在密码学特性上的优势,可以在几乎同等安全的基础上,更方便的构建多签名交易。

Schnorr?使用在比特币上,相比ECDSA会有一些额外的显著优势:

更安全:在随机预言模型中很容易证明Schnorr签名的安全性,而ECDSA不存在这样的证明。

无延展性困扰:ECDSA签名是可延展性的,第三方无需知道私钥,可以直接修改既有签名,依然能够保持该签名对于此交易是有效的。比特币一直存在延展性攻击,直到SegWit激活后才修复,前提是使用segwit交易,而不是传统交易。BIP62和BIP66对此有详细描述。

金色午报 | 6月19日午间重要动态一览:7:00-12:00关键词:Filecoin、Telegram、Compound、广州

1. 清华大学国家金融研究院院长:人民币将会在虚拟货币领域做出重大突破。

2. Filecoin二阶段测试网开启重置,浏览器显示“半小时内无区块产出”。

3. 法官裁定将永久封存Telegram诉讼案中ICO参与方的相关物证。

4. 中国联通:公司区块链专利申请数量位居国内前列。

5. Compound借款总量超越Maker,达到1.4亿美元。

6. 数据:DeFi代币总市值超42亿美元。

7. 广州有39家41个案例入选区块链信息服务备案名单。

8. Compound新提案产生,计划将USDT抵押价值升至20%。[2020/6/19]

线性:Schnorr签名算法是线性的!以这一特性作为基础,可以构建更高效和隐私性更强的区块链系统。使用Schnorr签名的各方可以生成对其各自密钥的签名聚合。例如,N个公钥进行签名,采用ECDSA的话,则有N个签名,验证同样需要做N次。若使用Schnorr,由于线性特性,则可以进行签名叠加,仅保留最终的叠加签名。例如同一个交易无论输入数量多少,其均可叠加为一个签名,一次验证即可。

Schnorr签名算法几乎在各个层面均优于比特币现有的签名算法ECDSA:性能,安全,体积,扩展性等方面等,并且SchnorrSig可以与ECDSA使用同一个椭圆曲线:secp256k1curve,升级起来的改动非常小。

当然在比特币协议中除了签名算法之外,还设计了Taproot脚本语言定义如何使用比特币。比特币多签类地址可以不用暴露出自己的「多签」身份,也可以支持数量众多的多签场景,降低很多的交易字节数,特别是对于需要高频操作的地址而言,降低链上的交易费用,可以节省不少的成本。

下面是一些比较常见的问答:

Q&A

Q:Schnorr签名是否可以用在mofn多重签名上?A:当然可以。多重签名只是mofn的签名数量的模式。与签名算法无关。

BTC减半倒计时|金色财经挖矿收益播报:金色财经报道,据OKEx矿池数据显示,下一次BTC减半日期预计为2020年5月13日,今天距此还有28天。BTC当前块高625865,下一次减半块高630000。

今日全网算力约115.67EH/s,全网难度约14.72T,预测下次难度15.82T(7.49%),距离调整还剩还有7天,今日BTC收益:0.00001709BTC/T/天。[2020/4/14]

Q:Schnorr的组签名特性是否可以做或模拟出mofn式的签名?A:无法做到。组内有N把公钥,则必须对应有N个签名,缺一不可。每个人在生成签名的时候,在哈希函数里都代入的都是组公钥P。

Q:签名机制的安全性如何衡量?A:主要取决于两个:1.签名算法本身2.椭圆曲线。目前,Schnorr与ECDSA都用的是曲线secp256k1,这个层面一样。至于签名算法本身安全性,Schnorr目前有安全证明,安全优于ECDSA。

BCH上的

Schnorr签名算法

早在2019年5月16日BCH已经开始进行硬分叉升级。升级的主要内容是Schnorr签名算法和隔离见证复原,Schnorr签名升级中最受期待的功能,而隔离见证复原则是一项修复性技术,用来找回被错发到隔离见证地址的BCH。

开发人员MarkLundeberg用户不必生成新地址就可以开始使用Schnorr签名。升级带给BCH的优势如下:

提高签名数据的有效性:

由于签名是64字节的数据,与通常的70字节相比,交易可以减少4%的字节,该功能基本上提高了每笔比特币现金交易所需的签名数据的有效性。并且升级后,Schnorr签名给BCH带来隐藏普通支付渠道的能力。

隐私性的提升:

在升级之前很多用户就会故意使用多个签名来发送交易来提高隐私,而Schnorr签名会使所有用户的签名看起来和任何其他签名一样,这种结构导致了交易隐私性的大幅提升。Schnorr提供的属性以及BCH开发人员和基础设施提供商添加的一些延展程序将进一步增强隐私和可扩展性。

BKEX Global将于7月13日上线BZRX:据BKEX Global公告,BKEX Global将在bZx代币BZRX发放后,第一时间支持上线BZRX,预计将于2020年7月13日22:00(UTC+8)上线交易对BZRX/USDT。

bZx协议是建立在以太坊区块链上的智能合约集合,专注于加密货币的贷款和保证金交易,BZRX代币作为治理代币作用于bZx平台。[2020/7/12]

对抗垃圾交易攻击:

在过去曾出现一种垃圾交易攻击,攻击者希望通过尽可能多的交易空间来使比特币拥堵,他们的手段之一就是通过频繁地从多个来源发送交易使这个交易中包括数十个签名,这些签名占据了很多的空间,这是ECDSA签名留下的隐患。

Schnorr可以规避这类的垃圾交易攻击。如果每一笔交易只有一个签名,那么区块就能容纳更多交易,垃圾交易制造者要想制造攻击就必须发送更多交易,与更多人进行竞争,因此攻击成本就会相对更高。签名所占空间通常是一笔交易最大的一部分,所以攻击者不具优势。

当然我们不能只看到好的一面,全则必缺,极则必反。尤其是量子计算机的发展对区块链安全造成威胁,为了应对量子计算机对一些算法的攻击,在2017年,NIST就开始了后量子密码学标准化进程,其中由瑞士ABCMint数学算法基金会推动的抗量子签名方案,后量子加密基金会支持的抗量子算法之一,最短签名长度的签名抗量子签名方案——彩虹签名Rainbow最被看好。

2017年8月,JinLiu和数学家Prof.JintaiDing筹建ABCMint,并注册在瑞士苏黎世附近的加密谷。其数字货币ABC底层签名便是彩虹签名Rainbow,他们愿景是在全球支持抗量子计算机破解算法的研究和应用,研究包括在全球支持数学家在算法方面的发现、破解、完善等,应用包括将合适的算法应用在主流数字加密货币方面。

他们认为比特币从ECDSA改为Schnorr签名的提案BIP340,采用Schnorr签名,是比特币的重大退步。不看好由计算机安全专家提出的算法选择和改进,我们更偏重由数学家提出的算法选择和改进,Schnorr签名的问题很大,应该用在Litecoin之类先长时间试车。

BTC应等BCH,或其他链再用几年Schnorr签名再看看。Schnorr签名最主要的优点是“多签时签名长度最短”,但缺点是“多签时,最后一个人容易”。

在密码学看来:采用Schnorr签名是一个"胆大不审慎”的做法,背离了”长期安全“的第一要义。

从密码学角度看待Schnorr签名主要是为了多签名,而多签名适合的场景应该是:既中心化又极其重要的场景,其极其重要的场景类似于核弹发射的十几道Verifiableprocedure。或夏延山核武基地之类的大门。而不应该是去中心化场景,或比特币的发送这类场景。

简单说:去中心化的,本身和多签名是背离的。

下面来简单科普一下几种算法:

椭圆曲线数字

签名算法

椭圆曲线数字签名算法是使用椭圆曲线密码对数字签名算法的模拟由NealKoblitz和VictorMiller于1985年发明),ECDSA首先由Scott和Vanstone在1992年为了响应NIST对数字签名标准的要求而提出。

比特币目前使用的是ECDSA椭圆曲线数字签名算法,要对消息m进行签名,我们需对其进行哈希操作,并将此哈希视为一个数字:z=hash(m)。我们还需要一个随机或随机查找的数字k。我们不喜欢信任随机数生成器,因此,我们通常会使用RFC6979,并根据我们的秘密和我们要签名的消息,计算确定性K值。

使用私钥pk,我们可以为包含两个数字的消息m生成签名:r和s=(zr?pk)/k。然后,使用我们的公钥P=pk×G,任何人都可通过检查点(z/s)×G(r/s)×P的x坐标等于r,来验证我们的签名。

签名验证包括反转和两点乘法,这些操作的计算量非常大。在比特币中,每个节点都必须验证所有交易。这意味着当你广播一笔交易时,数千台计算机将不得不验证你的签名。而简化验证过程将是非常有益的,即使签名过程会更加困难。

第二,每个节点必须分别验证每个签名。如果是m-of-n多重签名交易节点,则可能需多次验证相同的签名。例如,具有7-of-11多重签名输入的交易将包含7个签名,并且需要对网络中的每个节点进行7-11次的签名验证。同样,这样的交易会占用大量的空间,你必须为此支付大量的费用。

Schnorr签名

Schnorr签名算法是由德国数学家、密码学家ClausSchnorr提出。并于1990年申请了专利,U.S.Patent4,995,082,该专利与2008年2月失效。目前该算法可以自由使用。

Schnorr签名的生成则略有不同,我们使用了一个点R和一个标量s来代替两个标量。与ECDSA相似的是,R是椭圆曲线上的一个随机点。签名的第二部分计算略有不同:

s=khash(P,R,m)?pk.这里的pk是你的私钥,而P=pk×G则是你的公钥,m是消息。然后可通过检查s×G=Rhash(P,R,m)×P来验证这个签名。

这个方程是线性的,所以方程可互相加减,并且仍然有效,这就给我们带来了几大关于Schnorr签名的好处。

Schnorr签名的批量验证

要验证比特币区块链中的区块,我们需确保区块中的所有签名都有效。

对于ECDSA签名算法,每个签名都必须单独验证。也就是说,如果区块中有1000个签名,我们就需要计算1000次倒置和2000次点乘运算,总共约3000次繁重的计算任务。

而通过使用Schnorr签名,我们可以将所有签名验证方程相加,从而节省一些计算能力。对于有1000个签名的区块而言,我们需验证:

(s1s2…s1000)×G=(R1…R1000)(hash(P1,R1,m1)×P1hash(P2,R2,m2)×P2…hash(P1000,R1000,m1000)×P1000)

这里我们有一堆加法以及1001次点乘法。我们需要为每个签名计算大约一次繁重的计算。

Schnorr签名的密钥聚合

我们希望让自己的比特币保持安全,所以我们可能希望使用至少2个不同的私钥来控制我们的比特币。比如说一个放在笔记本电脑或手机,另一个则放在硬件钱包/冷钱包。因此,当其中一个受到威胁时,我们仍然可以控制我们的比特币。

目前,它是通过2-of-2多重签名脚本来实现的,这需要在交易中包含两个单独的签名。而使用schnorr签名,我们可以使用一对私钥(pk1,pk2),并生成一个与共享公钥P=P1P2=pk1×Gpk2×G对应的共享签名。要生成这个签名,我们需要在每个设备上选择一个随机数,生成一个随机点Ri=ki×G,将它们相加以计算一个公共哈希(P,R1R2,m),然后从每个设备(si=kihash(P,R,m)?pki)中获取s1和s2。然后我们可以将这些签名相加,并使用一对(R,s)=(R1R2,s1s2)作为我们对共享公钥p的签名。其他所有人都无法说出它是否是聚合签名,它看起来与普通schnorr签名完全相同。

这种构造有3个问题,第一,从用户界面的角度来看,要进行交易,我们需要进行几轮通信,计算公共R,然后-签名。有了两个私钥,只需一次访问冷钱包就可以完成:我们在在线钱包上准备一个未签名的交易,选择k1,将R1=K1×G与未签名的交易一起记下。然后我们将这些数据传送到冷钱包并签名。因为我们已经有了R1,所以我们可以一次性在冷钱包上签署交易。从冷钱包中,我们得到了R2和s2,并将其传输回在线钱包。在线钱包使用之前选择的(k1,R1)签署交易,结合签名并广播签名交易。这与我们现在的情况非常相似,但一旦添加第三个私钥,一切就会变得更加复杂。比方说,你有一笔财富,它是由10个私钥控制的,它们存储在世界各地不同的安全位置,然后,你需要进行一笔交易。目前,你只需要浏览所有这些位置一次,但如果你使用的是密钥聚合,则需要执行两次,以组装所有RI,然后签名。在这种情况下,最好在不进行聚合的情况下保留单独的签名,然后我们就需要3轮通信:

选择一个随机数ki和相应的Ri=ki×G,然后只告诉每个人其哈希ti=hash(Ri),这样每个人都可以确定在学习了其他随机数之后你不会改变主意;

把所有的数字汇总起来,计算出共同的R;

签名;

第二个问题是已知的恶意密钥攻击。无论是在论文还是这篇文章中,都有很好的描述,所以我不想详细讨论。其想法是,如果你的某个设备被黑客攻击,并假装其公钥是,那么它可以用它的私钥pk1控制共享资金。一个简单的解决方案是,在设置设备时,需要使用相应的私钥对公钥进行签名。

还有第三个重要问题。不能使用确定性k进行签名。有一种简单的攻击方式,如果你使用确定性K,它允许黑客获得我们的私钥。攻击看起来会是这样的:有人入侵了我们的笔记本电脑,并完全控制了两个私钥中的一个。我们可能觉得是安全的,因为我们的比特币需要来自pk1和pk2的聚合签名。因此,我们尝试像往常一样进行交易,准备一个未签名的交易和R1值,将它们转移到我们的硬件钱包并在那里签名。然后返回和……我们的在线钱包发生了一些事情,它无法签名和广播。我们再次尝试,但我们被黑的电脑这次使用了另一个随机值R1'。我们再次与我们的硬件钱包签署相同的交易,并将值带回我们被黑的电脑。然后,糟糕的事就发生了,我们的比特币就丢失了。

在这个攻击中,黑客为同一笔交易获得一对有效的签名:(R1,s1,R2,s2)和(R1',s1',R2,s2'),这里R2是相同的,但R=R1R2和R'=R1'R2是不同的,这意味着黑客可以计算我们的第二个私钥:s2-s2'=(hash(P,R1R2,m)-hash(P,R1'R2,m))?pk2andpk2=(s2-s2')/(hash(P,R1R2,m)-hash(P,R1'R2,m))。我发现这是密钥聚合最不方便的特性:我们需要在任何地方使用好的随机数生成器来使用密钥聚合。

彩虹签名

Rainbow是一种多变量签名方案,它的分层结构以不平衡石油-醋栗签名方案为基础。Rainbow层所施加的额外结构使该方案面临更多的密码分析技术,但提高了该方案的效率。Rainbow提供了快速的签名和验证以及非常短的签名,但具有非常大的公钥。

选择Rainbow增加了入围签名方案的多样性;但是,由于密钥尺寸非常大,Rainbow不适合作为通用签名算法来替代目前出现在FIPS186-4中的算法。特别是,大公钥使得证书链非常大。然而,有些应用并不需要经常发送密钥。对于这样的应用,Rainbow提供了小而快的签名。

参考文献:

https://panzhibiao.com/2019/02/28/schnorr-sigature/

https://mp.weixin.qq.com/s/wy1jtKzNVdmiccd4e9N3Ew

https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716https://medium.com/cryptoadvance/how-schnorr-signatures-may-improve-bitcoin-91655bcb4744

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金宝趣谈

BNBHuobi VIP新春好礼地址收集_ECD:OBI

尊敬的HuobiVIP:春节将至,谢谢您一直以来对Huobi的支持,提前祝您牛年大吉、万事胜意!我们每天忙碌于平凡昼夜,却总是疏于和家人的心心问候.

[0:46ms0-4:483ms