本体技术视点 | 为什么 BIP - 340 选择引入 Schnorr 签名算法?
引言
备受瞩目的技术升级 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 签名前
用户从一个特定的区间 () 中均匀随机选取 作为自己的签名私钥,然后根据公式 生成对应的验证公钥 。
用户对任意消息 进行签名
首先从特定区间选择一个随机数 ,然后计算 。接着将 和待签名消息 进行串联,并计算其哈希值,即计算 ,最后计算 。计算完成后,用户输出 () 作为对消息 的签名结果。
验证者收到消息 和签名值 () 后
将对该签名进行验证。他首先计算 。在得到 后,接着计算 。验证者验证 是否和 相等,如果相等,则认为该签名有效,反之则认为该签名无效。
正确性与安全性
可以看到 Schnorr 签名算法非常简单高效。Schorr 签名算法是将密码学中著名的 Fiat-Shamir 转换应用到 Schnorr 身份鉴别协议转换而来。算法的正确性显而易见,它的安全性也在相应的安全模型下得到了证明。
同时,就像 BIP - 340 中指出的一样,Schnorr 签名不存在延展性的问题。
我们在前面的技术视点中讲过,ECDSA 具有延展性,即可以从一个 ECDSA 签名中快速推出另外一个对相同消息的有效签名结果。为了防止延展性,一般区块链系统都对 ECDSA 签名结果进行了限定。而采用 Schnorr 签名不存在这样的隐患。
另外,我们前面的技术视点也对 ECDSA 签名时随机数重用的问题进行了分析,得出了同一个签名者使用 ECDSA 签名算法对不同消息进行签名时,重用随机数将泄漏用户私钥。在 Schnorr 签名中,我们可以看到,重用随机数的安全威胁依然存在。假定 () 和 () 是两个采用相同随机数 的签名,那么有:
从该式中很容易推导出用户私钥 。因此,在使用 Schnorr 签名时,也必须避免随机数重用。
结语
Schnorr 签名算法的引进给区块链系统带来了更多优秀的特性,比如 BIP - 340 中提到的更具隐私性的多签方案等。
我们也将在以后的技术视点中对 Schnorr 签名算法在区块链系统中的应用作进一步了解
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的