Schnorr 最大的特性是可以进行公钥和签名聚合(aggregate)。可以把多个签名聚合成一个签名,因此大大节省了多重签名的字节空间。这种聚合不但是同一个input,不同singer之间的签名聚合,还可以是不同input之间的签名聚合。
而在一些文章中对 Schnorr 多签的解释中出现如下的解释就是错误的:
实际上,提到 Schnorr 多签基本上是指:n-n 多签,而不是 m-n 多签。也就是举例 3-3 多签交易是可以的,而举例 2-3 多签则不行。
为什么呢?
我们先看下《Simple Schnorr Multi-Signatures with Applications to Bitcoin》原文的一些解释:
An obvious improvement is to replace the need for implementingn-of-nmultisignatures in an ad-hoc fashion with a constant-size multi-signature primitive like Bellare-Neven.
再如:
In the cryptographic literature, multi-signatures really only refers ton-of-npolicies.
Schnorr 多签在比特币中的应用原文也指出,这里讲的多签是指 n-n 的多签。而 Schnorr 应用到更广泛的 m-n 多签则需要 key trees, MAST 或者传统门限模式。
也就是说对于 m-n 的多签,并不能直接应用 Schnorr 签名聚合功能,从而享受 Schnorr 所带来的体积小的直接优势。相反,对于 m-n 而言,若要使用 Schnorr 则要穷举所有可能聚合的公钥,对于像 5-7 这样的模式,则有 2*7 = 14 种聚合方式,显得相当麻烦、可操作性极低。
广义多签 vs 狭义多签
我们经常会提到多签(MultiSig),但很多时候场景不一样,它所代表的含义也不一样。例如:使用多签可以提升资产的安全性吗?回答:可以或不可以,都有道理。这就要看你在说哪一种多签。
广义多签:广义上的多签,是我们经常说的 m-n 多签,它是多人共同管理资产的一种方式。这种多签体现的是一种权力的分配(资产处置权),它的目的是为了分配权力,而不是提升安全。
所以在这种场景下,多签只是权力的体现,不是安全的提升。例如,你把你的个人资产做成了 2-2 的多签(每方都是你自己)。那么,你的资产安全是否会提升?
答案是否定的。这里先不做过多解释,也许有人会反对这个答案,我们先看下面关于狭义多签的定义。
狭义多签:接着上面的例子,如果你把 2-2 的多签部署在两台不同服务器上,由它们各自掌握一方私钥,花费资产同时需要两台服务器签名。因为黑客破解其中一台服务器,并不能盗取资产,因此你的资产安全级别提升了。这就是狭义的多签。因为两台服务器均为你所有,它所体现的不是一种权力的分配,而是安全性的提升。(真实的环境中,我们会做成 3-5、4-7 等形式的多签以提升灾难恢复能力)。
从上面的定义可以看出,对于多签,我们常有两个目的:一个是权力的分配,另一个是安全的提升。而这两个目的通常不会同时存在。因此,理清你在说哪一种多签目的非常重要,而不是混为一谈。
对于 Schnorr 多签而言,一般是指 n-n 形式的狭义多签。
比起 ECDSA,Schnorr 签名所独有的聚合优势,的确会有让其有很大的应用前景。但是对于广义多签而言,所起的作用并不会太大。
注:关于广义和狭义多签的定义只是个人为了便于理解多签目的而起的名词,因此它并不是特有术语。
文中所提 Schnorr 相关资料链接:
https://eprint.iacr.org/2018/068.pdf
https://blockstream.com/2018/01/23/en-musig-key-aggregation-schnorr-signatures/