Schnorr 签名
这个基于离散对数的签名历史比较悠久了,结构也很简单,现在很多的签名都是这个签名的变体:
这里需要注意的一个点是公共参数c的生成,这几技术被叫做“key-prefixed”这个协议将公钥R和m 共同进行哈希,有论文表示这种做法对于多方的签名有更好的帮助。后来,有文献指出这种协议在Schnorr 中的作用是不必要的。
一种原生的设计多签名的方法如下:
通过简单的修改,就可以得到一个非常简单的多方签名方案,这就是一个传统的秘钥前缀希诺签名协议。并且明显的,这签名协议,不需要秘钥协商的过程,各方直接公布自己的公钥,然后各方就可以直接计算。这的确不需要任何的秘钥生成阶段假设,明显的,生成签名之后,在验证的时候,直接可以将所有的公钥联和在一起验证计算,这个属性称之为秘钥聚合属性。然而这有一个明显的缺点如下:
此时第一参与方就可以自己生成签名,然后发送给其他非签名者验证。
对这种行为的改进,是通过使用交互式秘钥生成协议。但是这个秘钥生成协议可能比较复杂,这其实是比较麻烦的。
随后BN提出了解决方案,可以避免使用复杂的秘钥生成方案。他们的主要思想是,对公开参数C进行拆分。
这是非常容易理解的,因为之前是因为C中只有聚合公钥,而此时聚合的公钥已经被修改了,所以无法鉴别,所以可以通过使用将各签名者的签名渗透到C的生成中,在验证的时候需要遍历C。但是最为重要的是,这个方案不在允许秘钥聚合。
所以就有了新的方案。