主页 > imtoken官网唯一地址 > 比特币算法进化到Schnorr签名算法是一种改进吗?

比特币算法进化到Schnorr签名算法是一种改进吗?

imtoken官网唯一地址 2023-09-15 05:09:25

Mdex去中心化交易所挖矿教程

历史的车轮滚滚向前,科技的进步从未停止。 具有里程碑意义的比特币协议开始了技术升级。 其协议中的技术升级Schnorr Signature(施诺尔签名)和Taproot(树的主根)已经集成到Bitcoin Core 0.21.0版本中。

比特币的未来似乎比以往任何时候都更加光明,现在它有机会不仅在容量上而且在功能上超越所有其他区块链。

在使用比特币ECDSA椭圆曲线签名算法时,多重签名交易验证过程极其繁琐。 现在可以将交易中的所有签名和公钥组合成一个签名和公钥。 如果它无法追踪并且简单快速,会发生什么?

其实在此之前,中本聪在设计比特币协议时,需要考虑签名算法的签名长度、是否开源、是否拥有专利、是否通过了足够长的安全等各种条件。验证和性能。 当时能够满足上述条件的数字签名算法不仅仅是ECDSA,还有Schnorr Signature这种各方面都不亚于ECDSA的数字签名算法。 不过由于在2008年之前就处于专利保护状态,这可能是中本聪在设计比特币协议时没有使用签名算法,最终选择了椭圆曲线数字签名算法(ECDSA)的原因。 根据其他专家的建议,选择了特殊的椭圆曲线 secp256k1。

10年后,2018年7月,比特币开发者Pieter Wuille编写了bip-schnorr,提出将比特币的签名算法改为schnorr。 虽然Schnorr和ECDSA都是使用secp236k1曲线的椭圆曲线加密算法,但是由于Schnorr Signature在密码学特性上的优势,在几乎统一安全的基础上构建多重签名交易更加方便。

当 Schnorr 用于比特币时,它比 ECDSA 有一些显着的优势:

更安全:在随机预言机模型中很容易证明Schnorr签名的安全性,而ECDSA则没有这样的证明。 无延展性问题:ECDSA签名具有延展性,第三方可以在不知道私钥的情况下直接修改已有的签名,仍然能够保留签名对本次交易有用。 比特币一直存在可塑性攻击,直到激活 SegWit 后才得到修复,前提是使用 segwit 交易而不是传统交易。 BIP62和BIP66对此有详细的描述。 线性:Schnorr 签名算法是线性的! 基于此特性,可以构建更高效、更私密的区块链系统。 使用 Schnorr 签名的各方可以为其各自的密钥生成签名聚合。 比如用N个公钥来签名,如果用ECDSA,就会有N个签名,也需要做N次验证。 如果使用Schnorr,由于线性特征,可以进行签名叠加,只保留最终的叠加签名。 比如同一笔交易不管输入多少,都可以叠加成一个签名,一次验证就够了。

Schnorr 签名算法几乎在性能、安全性、体积、可扩展性等各个方面都优于比特币现有的签名算法 ECDSA,而且 Schnorr Sig 可以使用与 ECDSA 相同的椭圆曲线:secp256k1 曲线,升级变化异常小。

当然,除了比特币协议中的签名算法,Taproot 脚本语言也被设计用来定义如何使用比特币。 比特币多重签名地址不需要暴露自己的“多重签名”身份,也可以支持大量的多重签名场景(链上交易只需要一个聚合公钥和一个签名),减少了transaction bytes ,特别是对于需要高频操作的地址,降低链上的交易成本可以节省很多成本。

以下是一些常见问题和解答:

问答

比特币原理与挖矿算法_比特币合并算法_比特币算法原理

Q: Schnorr 签名可以用于 m of n 多重签名吗?

答:当然可以。 多重签名只是 n 个签名中 m 个的模式。 与签名算法无关。

问:Schnorr 的群签名功能可以做或模拟 m of n 签名吗?

A:做不到。 如果群中有N个公钥,则对应的必然有N个签名,缺一不可。 大家生成签名时,将群体公钥P代入到哈希函数中。

Q:如何权衡签名机制的安全性?

A:主要看两个:1.签名算法本身 2.椭圆曲线。 现在,Schnorr 和 ECDSA 都使用曲线 secp256k1,这是同一级别。 至于签名算法本身的安全性,Schnorr目前有安全证书比特币合并算法,比ECDSA要好。

在生物安全信息交换所

Schnorr 签名算法

早在2019年5月16日,BCH就已经进行了硬分叉升级。 升级的主要内容是Schnorr签名算法和Segregated Witness reply,这是Schnorr签名升级中最值得期待的功能,而Segregated Witness reply是一项恢复性技术,用于找回被错误发送到Segregated Witness地址的BCH。

开发人员 Mark Lundeberg 用户无需生成新地址即可开始使用 Schnorr 签名。 升级到BCH带来的优势如下:

Schnorr 可以避免这种垃圾邮件攻击。 如果每笔交易只有一个签名,那么一个区块可以容纳更多的交易,而垃圾邮件发送者要想发起攻击就必须发送更多的交易并与更多的人竞争,所以攻击的成本会相对更高。 签名占用的空间通常是交易中最大的部分,因此攻击者没有优势。

比特币原理与挖矿算法_比特币合并算法_比特币算法原理

当然,我们不能只看到好的一面,万事俱备,走极端就会倒过来。 特别是量子计算机的发展对区块链的安全性构成了威胁。 为了应对量子计算机对某些算法的攻击,2017年,NIST启动了后量子密码学的标准化进程。 将要推广的反量子签名方案,后量子加密基金会支持的反量子算法之一,签名长度最短的反量子签名方案——Rainbow签名是最有前途的。

2017年8月,刘金与数学家丁金泰教授筹建ABCMint,注册于瑞士苏黎世附近的加密谷。 其数字货币ABC的底层签名为彩虹签名Rainbow。 他们的愿景是支持全球抗量子计算机破解算法的研究和应用。 主流的数字加密货币都使用了合适的算法。

比特币算法进化为Schnorr署名算法是提高吗?

他们认为,比特币提出从ECDSA改为Schnorr签名的BIP340,采用Schnorr签名,是比特币的一次重大倒退。 我们并不看好计算机安全专家提出的算法选择和改进。 我们更关注数学家提出的算法选择和改进。 Schnorr签名是个大问题,应该用在莱特币之类的长期试运行。

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

从密码学的角度看:采用Schnorr签名是一种“大胆轻率”的做法,背离了“长期安全”的第一要义。

从密码学的角度来看,Schnorr 签名主要是针对多重签名,适合多重签名的场景应该是:中心化和极其重要的场景,类似于核弹发射的几十个可验证程序。 或者像夏安山核武器基地这样的大门。 应该不是去中心化的场景,或者像发送比特币这样的场景。

健健说:去中心化、自我和多重签名是相反的。

下面简单普及一下几种算法:

椭圆曲线数

签名算法 (ECDSA)

比特币原理与挖矿算法_比特币合并算法_比特币算法原理

椭圆曲线数字签名算法(ECDSA,Elliptic Curve Digital Signature Algorithm)是使用椭圆曲线密码术(ECC)的数字签名算法(DSA)的模拟(椭圆曲线密码术(ECC)由Neal Koblitz和Victor Miller于1985年发现), ECDSA 最早由 Scott 和 Vanstone 于 1992 年响应 NIST 对数字签名尺度 (DSS) 的要求提出。

比特币目前使用的是 ECDSA 椭圆曲线数字签名算法。 要对新闻 m 进行签名,我们需要对其进行哈希处理并将此哈希视为一个数字:z = hash(m)。 我们还需要一个随机或随机查找数 k。 我们不喜欢信任随机数生成器(有太多错误,很多漏洞都与错误的 RGN 有关),所以我们通常使用 RFC6979 并根据我们的秘密和我们要签名的信息计算确定性 K 值。

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

比特币算法进化为Schnorr署名算法是提高吗?

签名验证包括取反(1/s)和两点乘法,这些运算的计算量非常大。 在比特币中,每个节点都必须验证所有交易。 这意味着当你广播交易时,成千上万的计算机将不得不验证你的签名。 并且简化验证过程将是非常有益的,即使签署过程会更加困难。

其次,每个节点必须验证分区的每个签名。 如果是m-of-n多重签名交易节点,可能需要对同一个签名进行多次验证。 例如,具有 7-of-11 多重签名输入的交易将包含 7 个签名,并且需要对网络中的每个节点进行 7-11 次签名验证。 此外,此类交易会占用大量空间,您必须为此付出很多代价。

施诺尔签名

Schnorr 签名算法由德国数学家、密码学家 Claus Schnorr 提出。 并于1990年申请了专利,美国专利4,995,082,2008年2月到期。该算法现已免费提供。

Schnorr 签名的性质略有不同,我们使用点 R 和标量 s 而不是两个标量 (r, s)。 与 ECDSA 类似,R 是椭圆曲线上的一个随机点 (R=K×G)。 签名计算的第二部分略有不同:

s = k + hash(P,R,m) ⋅ pk。 这里 pk 是你的私钥,而 P = pk×G 是你的公钥,m 是新闻。 然后可以通过检查 s×G = R + hash(P,R,m)×P 来验证此签名。

比特币算法进化为Schnorr署名算法是提高吗?

比特币算法原理_比特币原理与挖矿算法_比特币合并算法

这个等式是线性的,所以这些等式可以相互加减并且仍然有效,这为我们提供了 Schnorr 签名的几个好处。

批量验证 Schnorr 签名

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

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

并且通过使用 Schnorr 签名,我们可以将所有的签名验证方程相加,节省一些计算能力。 对于一个有 1000 个签名的区块比特币合并算法,我们需要验证:

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

这里我们有一堆加法(几乎不需要计算能力)和 1001 点乘法。 我们需要为每个签名计算大约一次繁重的计算。

比特币算法进化为Schnorr署名算法是提高吗?

Schnorr 签名的密钥聚合

我们想要保证我们的比特币安全,所以我们可能想要使用至少 2 个不同的私钥来控制我们的比特币。 假设一个在笔记本电脑或手机上,另一个在硬件钱包/冷钱包上。 因此,当其中之一遭到破坏时,我们仍然可以控制我们的比特币。

目前,它是通过 2-of-2 多重签名脚本实现的,这需要两个单独的签名才能包含在交易中。 有了schnorr签名,我们就可以使用一对私钥(pk1,pk2),生成共享公钥对应的共享签名P=P1+P2=pk1×G+pk2×G。 要生成这个签名,我们需要在每个设备上选择一个随机数 (k1, k2) ,生成一个随机点 Ri=ki×G ,将它们相加计算出一个公共哈希 (P,R1+R2,m) ,并且然后从每个设备中得到 s1 和 s2 (si = ki + hash(P,R,m) ⋅ pki)。 然后我们可以将这些签名相加并使用 (R, s) = (R1+R2, s1+s2) 对作为我们在共享公钥 p 上的签名。 其他人都分不清是不是聚合署名,看起来跟口语化的 schnorr 署名一模一样。

比特币合并算法_比特币算法原理_比特币原理与挖矿算法

这个结构有3个问题,第一,从用户界面的角度来说,要进行交易,我们需要进行几轮的沟通,计算出public R,然后-sign。 有了两把私钥,只需一次访问冷钱包就可以完成:我们在在线钱包上准备一个未签名的交易,选择k1,并记录R1=K1×G和未签名的交易。 然后我们将这些数据传输到冷钱包并签名。 由于我们已经有了 R1,我们可以一次性在冷钱包上签署交易。 从冷钱包中,我们得到 R2 和 s2 并将它们转回在线钱包。 在线钱包用先前选择的(k1,R1)签署交易,关联签名并广播签名交易。 这与我们现在的情况非常相似,但是一旦添加第三个私钥,一切都会变得双倍庞大。 比如你有一笔财富,由10把私钥控制,这些私钥存放在世界各地不同的安全位置,然后你需要进行一笔交易。 现在,你只需要遍历所有这些位置一次,但如果你使用密钥聚合,你需要做两次,组装所有 RI,然后签名。 在这种情况下,最好保留个人签名而不聚合,那么我们需要进行3轮通信:

选一个随机数ki,响应Ri=ki×G,然后只告诉大家它的hash ti=hash(Ri),这样大家就可以确定你不会在学习了其他随机数后改变主意; 把所有的数相加,计算出对应的R; 签名;

第二个问题是已知的恶意密钥攻击。 无论是论文还是这篇文章,都描述的很好,我就不赘述了。 这个想法是,如果你的一个设备被黑客攻击(比如你的在线钱包)并且假装它的公钥是(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')/(散列(P,R1+R2,m)-散列(P,R1'+R2,m))。 我发现这是密钥聚合最不方便的特性:我们到处都需要一个好的随机数生成器来使用密钥聚合。

彩虹签名

比特币算法进化为Schnorr署名算法是提高吗?

Rainbow 是一种多变量签名方案,其层次结构基于非平衡油醋栗 (UOV) 签名方案。 Rainbow 层强加的额外结构使方案暴露于更多的密码分析技术,但提高了方案的效率。 Rainbow 提供快速签名和验证以及非常短的签名,但具有非常大的公钥。

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

比特币算法进化为Schnorr署名算法是提高吗?

参考:

本站仅对数字经济及相关趋势进行汇总,科普相关行业知识,不推荐或指导持有任何与境内实体无关的数字货币。