引言
备受瞩目的技术升级 Taproot 软分叉将于最近激活,激活高度为 709632,距今已不足 500 个区块。此次升级包括三个改进提案,分别是 BIP - 340、BIP - 341 和 BIP - 342。其中,BIP - 340 引入了 Schnorr 签名,BIP - 342 结合先前的技术,制定了隔离见证 V1 版的花费规则,而 BIP - 342 则对前面脚本更新后的验证方式做了指导。今天,我们就一起来了解下 BIP - 340 中提到的 Schnorr 签名。
Schnorr 签名
Schnorr 签名是由德国著名密码学家 Claus Schnorr 在上世纪八十年代发明的一种数字签名算法。该算法一直受专利保护,直到 2008 年才到期。和其它数字签名算法一样,Schnorr 算法也包括三个步骤:
-
密钥生成。该步骤的输入是一个安全参数,比如签名长度。它的输出是一个公私钥对,其中私钥用来签名,公钥用来验证签名;
-
签名。该步骤的输入是消息和私钥,输出是用该私钥对该消息的签名结果;
-
验签。该步骤的输入是消息和公钥,输出是一个比特,用来指示该签名是否通过验证。
*在上面的步骤描述中,我们省略了公开参数的描述。
Schnorr 签名算法也是定义在群上:
假定我们拥有一个素数阶 的群 ,它的生成元是 ,并且该群上离散对数问题是困难的。另外,假定存在一个密码学哈希函数 ,任意比特串经过该哈希函数作用后,输出的哈希摘要在 中。
这里需要指出的是,在 BIP - 340 的实现中,Schnorr 算法的使用方式要比我们下面描述的复杂,但核心就是基于下面这些步骤:
正确性与安全性
可以看到 Schnorr 签名算法非常简单高效。Schorr 签名算法是将密码学中著名的 Fiat-Shamir 转换应用到 Schnorr 身份鉴别协议转换而来。算法的正确性显而易见,它的安全性也在相应的安全模型下得到了证明。
同时,就像 BIP - 340 中指出的一样,Schnorr 签名不存在延展性的问题。
我们在前面的技术视点中讲过,ECDSA 具有延展性,即可以从一个 ECDSA 签名中快速推出另外一个对相同消息的有效签名结果。为了防止延展性,一般区块链系统都对 ECDSA 签名结果进行了限定。而采用 Schnorr 签名不存在这样的隐患。
另外,我们前面的技术视点也对 ECDSA 签名时随机数重用的问题进行了分析,得出了同一个签名者使用 ECDSA 签名算法对不同消息进行签名时,重用随机数将泄漏用户私钥。在 Schnorr 签名中,我们可以看到,重用随机数的安全威胁依然存在。假定 () 和 () 是两个采用相同随机数 的签名,那么有:
从该式中很容易推导出用户私钥 。因此,在使用 Schnorr 签名时,也必须避免随机数重用。
结语
Schnorr 签名算法的引进给区块链系统带来了更多优秀的特性,比如 BIP - 340 中提到的更具隐私性的多签方案等。
我们也将在以后的技术视点中对 Schnorr 签名算法在区块链系统中的应用作进一步了解。
了解最新资讯,参与精彩活动,欢迎加入本体中文电报群!扫描下方二维码或复制链接即可加入:
https://t.me/OntologyNetworkCN