区块链中的数学 - 比特币使用的多签方式

本文介绍了比特币使用的多签方式,多钱类型地址 + 交易多个签名。但是如果参与者较多的话,签名数据就会倍增,占用很多存储空间,而Schnorr聚合签名则解决了这个问题,无论多少参与者,最后聚合成一个签名,跟普通的签名无样。

写在前面

上一节讲了随机数的对密钥泄露的影响和伪签名的构造,所谓安全第一, 有矛有盾,攻防结合!

本节继续介绍签名的另外一类应用:多签名! 普通区块链交易或者其他签名类如证书等,基本上使用的都是单签名模式,即一个密钥签署一个交易,参与者是单数,多签指的是参与者多于一人,实现多签的方式有多种,我们先来看看比特币多签名的实现方式

比特币多重签名

多重签名机制可以实现多方共同管理资产,也可以用于第三方交易担保,多重签名支持三方共同管理一个地址的资产。 广义来说,任何涉及多方管理和决策的场景都可以使用多签名,类似于投票表决等,来表达对一个事务的观点或意见等。

就BTC而言,其多重签名机制称为m of n模式,三方管理的m of n模式如下: 1<= n <= 3 1<= m <= n

n持有私钥的参与者数量, m解锁多签地址所需私钥数量。这里要说一下,比特币的多重签名地址是$xP_2SH$类型的地址。普通的比特币地址是由公钥做哈希后得到的,而多重签名地址基于脚本哈希,所以能够实现复杂的交易逻辑(类似于一定灵活性的智能合约)。

若n = 2, m = 3,即2 of 3: 三个管理者中,必须有两方共同签署才能处理该地址的资产。 这种多签方案会在交易结构体中包含多个签名,实现起来简单直接,也是最常用的比特币多签方案。

比特币最近引入了基于隐私保护的多签方案,采用Schnorr 和 Taproot方案,详细内容可查看相关BIP(bitcoin improvement plan)。

要明白为何schnorr签名能起到隐私保护作用?就得了解schnorr聚合签名机制。

Schnorr聚合签名

之前文章提到过Schnorr签名基于对数椭圆曲线实现,都属于单签名类别, 这里我们进一步说下Schnorr聚合签名,有时也称组签名(group signature), 过程如下:

有一组参与签名的公钥,假定是N个,签名后会得到N个签名,这个N个签名是可以相加的,最终得到一个签名。这个签名的验证通过,则代表N把公钥的签名全部验证通过,换句话说,就是把多个签名聚合成一个签名。

符号定义: 私钥:$x_1,x_2$ 公钥:$P_1 = x_1 G, P_2=x_2 G$ 随机数:$k_1,k_2$ ,并且 $R_1=k_1 G, R_2=k_2 G$ 组公钥:$P =P_1 +P_2$ 则有: 私钥$x_1$和$x_2$的签名为:$(R_1,s_1 ), (R_2, s_2)$。 两个签名相加得到组签名:(R, s)。其中: $R = R_1+R_2 , s =s_1 +s_2 $。

推导过程:

  1. 令$R = R_1+R_2 , s =s_1 +s_2 $
  2. 已知: $ s_1 =k_1 + H(m || R || P)x_1$, $ s_2 =k_2 + H(m || R || P)x_2$
  3. $s = s_1+s_2 = k_1+ H(m || R || P)x_1 +k_2 + H(m || R || P)x_2= ( k_1+k_2 ) + H(m || R || P)( x_1+x_2 )$
  4. 两边同时乘以G,则有: $sG = ( k_1 +k_2 )G + H(m || R || P)( x_1 +x_2 )G$ $= (k_1G + k_2G) + H(m || R || P)(x_1G + x_2G)$ $= (R_1 +R_2 ) + H(m || R || P)( P_1+P_2 )$ $= R + H(m || R || P)P$

这里的组公钥(Group Key)是N把公钥进行相加后的值,又称聚合公钥(Aggregation Key)。需要指出的是,参与方需要先相互交换公钥和R值,然后再进行各自的签名,最后进行聚合。 如果对推导过程不理解,请先熟悉Schnorr签名及验证过程。

小结

本文介绍了比特币使用的多签方式,多钱类型地址 + 交易多个签名。但是如果参与者较多的话,签名数据就会倍增,占用很多存储空间,而Schnorr聚合签名则解决了这个问题,无论多少参与者,最后聚合成一个签名,跟普通的签名无样。

需要指出的是,如果使用Schnorr聚合签名,所有参与者必须都签名,缺一不可,这是因为组公钥是所有参与者公钥叠加形成的,这样只能应用于m of m 模式中。

有没有既能不需要所有人参与(m of n,m < n)又能实现Schnorr聚合签名(单签名效果)的方法呢?

答案是有!

下一篇将继续介绍!

欢迎关注公众号:blocksight

相关阅读:

区块链中的数学 - 随机数和伪签名 随机数与伪签名构造

区块链中的数学 - EdDSA签名机制 EdDSA的发展及优点

区块链中的数学 - Ed25519签名 Ed25519签名

区块链中的数学-ElGamal算法 ElGamal算法签名及验证&实例演练

区块链中的数学-椭圆曲线进行签名和验证过程 secp256签名和验证过程

区块链中的数学- RSA签名过程 RSA签名和安全分析-计时攻击

区块链中的数学-VRF基于ECC公钥体制的证明验证过程 基于椭圆曲线的VRF证明验证过程

Schorr签名与椭圆曲线 Schorr签名与椭圆曲线

区块链中的数学-Schnorr 离散对数签名及素数阶群构造(Schnorr 群) Schnorr签名及Schnorr群

区块链中的数学-Uniwap自动化做市商核心算法解析 Uniwap核心算法解析(中)

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 2020-11-15 21:42
  • 阅读 ( 592 )
  • 学分 ( 14 )
  • 分类:入门/理论

0 条评论

请先 登录 后评论
blocksight
blocksight

67 篇文章, 1650 学分