织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

比特币算法进化为Schnorr签名算法是进步吗?(4)

时间:2021-01-19 15:29来源:未知 作者:admin 点击:
签名验证包括反转(1/s)和两点乘法,这些操作的计算量非常大。在比特币中,每个节点都必须验证所有交易。这意味着当你广播一笔交易时,数千台计算

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

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

Schnorr 签名

Schnorr签名算法是由德国数学家、密码学家Claus Schnorr提出。并于1990年申请了专利,U.S. Patent 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 签名的批量验证

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

对于 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 次点乘法。我们需要为每个签名计算大约一次繁重的计算。

Schnorr 签名的密钥聚合

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

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

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容