主页 > token.im钱包下载 > Schnorr签名和比特币多重签名详细介绍

Schnorr签名和比特币多重签名详细介绍

token.im钱包下载 2023-07-07 05:07:50

DAEX Lab 将继续为所有区块链技术爱好者和开发者带来相关基础知识和热门讨论,深度解析区块链底层算法、经济模型、系统架构和应用开发的硬核干货。技术细节。

比特币网络可能会在 2020 年推出 Schnorr 签名,以取代目前使用的基于 Secp256k1 曲线的 ECDSA 签名算法进行多重签名。那么什么是Schnorr签名,它和现在的签名算法有什么不同,和现在的算法相比有什么优势,应用端钱包又会发生怎样的变化呢?本文将一一为您介绍。

一、ECDSA 签名审核

数字签名是签名的数字模拟。最早的数字签名算法是Rivest、Shamir和Adleman在1978年提出的RSA签名算法,其安全性基于大整数分解的难解性,广泛应用于数字认证和CA等领域。但由于 RSA 算法的密钥大小较大,存储效率不如后来的基于椭圆曲线的签名算法。因此,加密货币中广泛使用的签名几乎都是ECDSA算法,只是底层的椭圆曲线不同。 ECDSA的安全性基于椭圆曲线离散对数难解性。

二、比特币签名算法--基于SECP256k1曲线的ECDSA

比特币目前使用的签名算法是基于SECP256k1曲线的ECDSA算法。交易的详细信息m作为消息摘要,即z=SHA256(m),摘要z使用核心签名算法。

密码学意义上的安全数字签名需要添加随机数来实现签名的随机性。但根据RFC6979标准,签名算法中的随机数是从消息摘要z中提取的,并不是密码学意义上的随机数。该方案存在于众多密码学代码库中,并在大多数区块链项目中使用。

另一方面,在 ECDSA 签名方案中,签名没有可扩展性。换句话说,如果有两个签名,则必须使用各自的公钥来验证各自签名的有效性。无法同时验证两个签名是否正确。更准确地说,例如,Alice 拥有私钥 sk,她对消息摘要 z 所做的签名 σ 只能通过私钥 sk 对应的公钥 pk 来验证。如果 Bob 有私钥 sk',并且对应于 sk' 的公钥是 pk',那么他对同一消息摘要 z 的签名是 σ',除非独立验证 σ 在 pk 有效且 σ' 有效在 pk' 处,没有一种算法方法可以得到 Alice 和 Bob 的共同签名 σs,并且这个签名可以验证它是 Alice 和 Bob 共同参与和生成的,这在比特币的多重签名环境中有很强的需求。这种方法可以大大减少多重签名的存储资源和计算资源。

三、Schnorr 签名的平凡方案

Schnorr 签名可以解决上面提出的多重签名的资源消耗问题。 Schnorr是Claus-Peter Schnorr在1989年美国秘密会议上提出并申请专利保护的数字签名算法。就签名算法本身而言,与ECDSA算法相比,它具有可证明的安全性和可扩展性的特点。

主要算法实现如下:

初始化:

G:椭圆曲线基点,椭圆曲线算术群

密钥生成:

用户私钥:x

公钥:X=xG

签名:

2.1 选择随机数r

2.2 计算R=rG

2.3 计算s=r+H(X,R,m)x

2.4 输出签名(R,s)

签名验证:

验证 sG==R+H(X,R,m)X

可以看出,Schnorr签名也是基于椭圆曲线算法的。目前,广泛部署在各大代码库和芯片指令中的底层算法模块仍然可以有效使用,但需要从底层接口重新封装指令来实现Schnorr算法。这对于软件钱包升级更方便。但是对于硬件钱包来说,升级成本可能会更高。

四、Schnorr 签名方案的线性度

假设 Alice 和 Bob 分别签署消息 m。具体来说,假设 Alice 的公私钥对为 (x1, X1=x1G),Bob 的公私钥对为 (x2, X2=x2G)比特币密钥多长

Schnorr签名与比特币多签详细介绍

上面的Alice和Bob通过各自的私钥计算同一消息摘要h的签名,得到σ1和σ2并发布。得到这两个签名后,其他验证者结合 Alice 和 Bob 各自的公钥 X1 和 X2 ,令 X=X1+X2, σ=(R1+R2, s1+s2),那么“公钥和”X可以用来验证“签名”和“σ”的合法性。这里发现签名的结构是线性的。并且无法区分σ是求和还是原始签名。这个性质可以作为一个数字资产的多重签名方案,替代目前基于脚本的多重签名协议。

上述方案只是为了演示Schnorr签名的线性,不能直接用于实际应用,因为这种方案可能会导致Rouge key Attack。

五、基于Schnorr Signature多重签名方案

5.1-签名方案

以n-of-m多重签名方案为例。

1、假设有 m 个参与者,其中每个参与者 Ui 都有一个公私钥对(xi, Xi=xiG)。

2、对于所有 m 个参与者,让

2、p>

3、n个参与多重签名的签名者,可以将前n个设置为签名者。对于每个签名者 Uj,Rj=rjG ,rj 是 Uj 选择的随机数,Uj 与其他签名者共享 Rj。然后让

4、每个签名者 Uj 计算,其中 m 是交易数据。

5、重新排序

(R, s) 是一个 n-of-m 多重签名签名。可以在公钥中使用

(注意n个签名者的“公钥”密钥总和”)可以验证通过。

5.2 钱包服务架构

钱包分为服务器端(S端)和客户端(C端),C端会有多个逻辑点,对应多个用户。

C端:

1、m 个参与者分别创建公钥和私钥对

2、m 个参与者将他们的公钥发送给 S 端

3、n个签名者选择随机数rj,计算Rj=rjG,发送Rj给S端

4、n个签名者计算sj=rj+H(X,R,m)H(L,Xj)xj并发送给服务器

S侧:

1、收集 m 个参与者,并计算

并向 m 个参与者广播 L 和 X。 X为“公钥之和”,可作为多重签名地址;

2、收集n个签名者的Rj,并计算

p>

向 n 个签名者发送 R 广播;

3、收集n个签名者的sj,并计算

在原始交易数据中编码 (R, s) 并广播到主网。

这里的S端和C端只是逻辑上的,可能在一个物理设备上同时存在S端和C端,也可能在多个物理设备上。

六、结论

由于 Schnorr 的线性和签名累积特性,它在比特币中进行多重签名交易的执行,不需要过多的用户签名数据,只需要“签名和”和“公钥和”来验证交易的合法性。这将大大减少比特币的多重签名交易的大小,从而大大增加一个区块可以容纳的多重签名交易的数量。以2-3多签为例,目前比特币多签锁定脚本需要3个公钥地址,会被压缩成脚本比特币密钥多长,所以升级后大小不会改变,但解锁脚本需要2个公钥密钥和 2 签名,升级到 Schnorr 后,只需要一个“公钥和”和“签名和”。对于更通用的n-m多重签名,目前的比特币多重签名解锁脚本需要n个公钥和n个签名,而Schnorr签名仍然只需要一个“公钥和”和一个“签名和”。也就是说,签名者越多,Schnorr签名的空间利用率就越高。

数字资产的存储是 DAEX 生态系统的重要组成部分。为了及时应对比特币这一重要的底层升级,DAEX正在积极开发和升级自有的软硬件钱包,将在比特币主网上推出Schnorr Signature,首次支持Schnorr多重签名。如果 Schnorr 签名对比特币的创新成功,我们可以想象会有更多的数字资产支持 Schnorr 多重签名,我们会积极支持用户使用 Schnorr 多重签名来保护自己的数字资产。