本文介绍了比特币使用的多签方式,多钱类型地址 + 交易多个签名。但是如果参与者较多的话,签名数据就会倍增,占用很多存储空间,而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聚合签名,有时也称组签名(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 $。
推导过程:
这里的组公钥(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核心算法解析(中)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!