什么是 Schnorr 签名?

news/2024/7/24 15:13:20/

在密码学中,Schnorr 签名是由 Schnorr 签名算法生成的数字签名。

与大多数区块链不同,BTC自其早期以来基本保持不变,大多数升级都是有限的,并旨在增强网络的效率而不是功能。BTC协议的更新是非常罕见的,并且通常用于技术增强,以确保网络的稳定性和安全性。

BTC有一个重要的升级是 Taproot,它引入了几个增强功能,其中包括 Schnorr 签名。相比于前一个用于密钥生成和验证的机制(ECDSA),Schnorr 签名提供了几个优势。

在本文中,我们将解释 Schnorr 签名是什么,以及它如何使 BTC 上的数字签名更快速和高效。

数字签名

数字签名是用于验证数字信息的真实性和完整性的数学方案。它们提供了一种证明消息是由特定发送者发送的(真实性)并且在传输过程中没有被更改(完整性)的方式。换句话说,数字签名与物理签名并没有太大的不同,发送者通过其独特的签名方式验证自己的身份和特定意图。

数字签名通常在软件分发、金融交易、合同管理软件以及许多其他需要检测伪造或篡改的情况下使用。

BTC中的数字签名的重要性在BTC白皮书中由中本聪(Satoshi Nakamoto)描述如下:

“我们将电子 coin 定义为一个数字签名链。每个所有者通过对前一笔交易的哈希和下一个所有者的公钥进行数字签名,并将其添加到 coin 的末尾来将 coin 转移给下一个所有者。收款人可以验证签名以验证一条链上的所有权。”

在 BTC 的情况下,数字签名用于验证与地址关联的私钥的所有者,而无需将私钥透露给网络。当一个交易被提交以被纳入一个区块时,BTC 网络上的节点会检查签名是否与消息匹配,并在匹配时接受该交易。

什么是Schnorr签名?

Schnorr 签名是一种数字签名方案,可以高效且安全地对交易和消息进行签名。它最早由克劳斯·施诺尔(Claus Schnorr)在 1991 年的一篇论文中描述。

作为一种利用椭圆曲线密码学的算法,Schnorr 被提议作为 BTC 技术路线图的一部分,用来替代椭圆曲线数字签名算法(ECDSA)。Schnorr 因其简单性、可证明的安全性和线性性而受到赞誉。由于 Schnorr 需要的计算量较少于 ECDSA,它被认为适用于 cryptocurrency 交易。

Schnorr 签名的优势

Schnorr 签名具有多种优势,包括高效性、增强的隐私性,同时保留了 ECDSA 的所有功能和安全假设。Schnorr 签名可以实现较小的签名大小、更快的验证时间,并且对某些类型的攻击具有改进的抵抗能力。

Schnorr 签名最显著的优势是密钥聚合(key aggregation)- 将多个签名聚合为一个签名,该签名对其密钥的总和有效。换句话说,Schnorr 使得多个合作方能够生成一个对他们的公钥总和有效的签名。

Schnorr-Sig-1.png
签名聚合使得多个签名者的签名可以合并为一个单一的签名。

密钥聚合能够降低交易费用并提高底层可扩展性,因为来自多签名设置的电子签名在区块中占用的空间与来自单方交易的签名相同。Schnorr 的这个特性可以用于减小多重签名支付和其他与多重签名相关的交易的大小,例如闪电网络通道交易。

Schnorr 签名的另一个重要特性是不可篡改性。在数字签名的背景下,篡改性是指攻击者能够修改有效签名,使得修改后的签名仍然有效,并认证不同于原始签名的消息。这可能对 cryptocurrency 应用造成严重问题,恶意攻击者可以修改交易签名以增加转移资金的金额或更改资金的接收者。

Schnorr 还提供了很多隐私优势。它可以让多重签名方案与传统的单一公钥无法从外部区分,Schnorr 使得观察者在链上活动中更难区分多重签名的支出和单一签名的支出。此外,在 n-of-m 多重签名设置中,Schnorr 使得外部观察者更难通过查看链上信息来确定哪些参与者在交易中签名,哪些没有签名。

Schnorr 在BTC中的应用

Schnorr 签名被实现在 BIP-340 中,作为 Taproot 软分叉升级的一部分,并于 2021 年 11 月 14 日在区块高度 709,632 上激活。与其他BTC升级提案一样,Taproot 被BTC矿工投票通过。Taproot 是一系列协议改进的集合,引入了几个新功能,改变了区块链上交易的处理方式,并开启了新的脚本能力。Taproot 被认为是自2017年采用隔离见证(Segregated Witness)以来BTC最重要的更新之一。

Schnorr 使BTC的数字签名更快、更安全、更易处理。值得注意的是,Schnorr 签名与BTC的密码学算法向后兼容,这样就可以通过软分叉升级引入它们。

Schnorr 签名与 ECDSA 的比较

正如前文所述,Schnorr 签名相对于 ECDSA 具有几个优势,包括更小的签名大小、更快的验证时间以及对某些类型攻击的改进抵抗能力。Schnorr 签名还允许进行签名聚合,这可以降低交易费用并提高可扩展性。

值得注意的是,虽然Schnorr 签名可能被认为更适合BTC,但 ECDSA 仍被广泛使用,并被认为是一种安全的签名方案。在选择 Schnorr 签名和 ECDSA 之间,可能会取决于具体的用例和安全要求。

欢迎关注 Chainlink 预言机并且私信加入开发者社区,有大量关于智能合约的学习资料以及关于区块链的话题!


http://www.ppmy.cn/news/75277.html

相关文章

SpringBoot 一个注解,优雅的实现重试机制retry

1&#xff1a;POM配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.…

Godot4节点树右键菜单添加自定义选项

前言 查看godot的源码推荐使用在线版vscode直接从github上看。&#xff08;直接把网址的com改成dev即可&#xff09; 重点查看以下源码 scene_tree_dock.h scene_tree_dock.cpp 开始 tool extends EditorPluginvar window var scene_menustatic func find_child_by_class(no…

C语言中链表经典面试题目——设计循环队列

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;数据结构 &#x1f525;座右铭&#xff1a;“不要等到什么都没…

【Unity】UGUI基础控件的使用介绍

UGUI基础控件的使用 一、基本介绍二、UI控件介绍1. Text(文本)2. Image(图片)3. Button(按钮)4. Input Field(输入框)5. Toggle(开关)6. Slider(滑动条)7. ScrollBar(滚动条)8. DropDown(下拉列表)9. Panel(面板)10. ScrollRect(滚动视图)一、基本介绍 Un…

Chatbot UI老外在用的gpt网页版 搭建方法分享!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Chatbot UI 高仿ChatGPT官网&#xff0c;中文还支持贼好&#xff0c;界面美观度间距还需要打磨。是老外做的吗&#xff1f; ​ 环境部署 更新环境 apt update -y && apt upg…

SpringCloud学习-实用篇04

以下内容的代码可见&#xff1a;SpringCloud_learn/day04 1.初始MQ 同步通讯和异步通讯 微服务间通讯有同步和异步两种方式&#xff0c;同步通讯就像打电话需要实时响应&#xff0c;异步通讯就像发邮件不需要马上回复。两种方式各有优劣&#xff0c;比如打电话能立即得到响应&a…

Kali-linux分析密码

在实现密码破解之前&#xff0c;介绍一下如何分析密码。分析密码的目的是&#xff0c;通过从目标系统、组织中收集信息来获得一个较小的密码字典。本节将介绍使用Ettercap工具或MSFCONSOLE来分析密码。 8.2.1 Ettercap工具 Ettercap是Linux下一个强大的欺骗工具&#xff0c;也…

08 集合框架1

什么是数据结构? 存储数据,组织数据的方法,就是对数据做增删改查的操作 常见的数据结构有哪些?各自的优缺点是什么? 数组:擅长修改 查找操作,不擅长增加 删除操作 链表:有单项链表和双向链表,擅长增加和删除操作,不擅长修改和查找的操作 队列:擅长操作头和尾,先进先出,…

LeetCode94. 二叉树的中序遍历(递归与非递归)

写在前面&#xff1a; 题目链接&#xff1a;添加链接描述 编程语言&#xff1a;c 题目难度&#xff1a;简单 一、题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a;…

使用Amazon EC2实例部署三个项目

在部署这三个项目时&#xff0c;以下是一种可能的思路&#xff1a; 1. **配置服务器环境&#xff1a;**确保你的服务器已经安装了适当的操作系统&#xff08;例如Linux&#xff09;和所需的软件&#xff08;如Python、Node.js等&#xff09;。 2. **设置域名和端口&#xff1a;…

【图论】想越狱的小衫

题目描述 这次小杉来到了经典美剧《越狱》的场景里……他被抓起来了&#xff08;-.-干嘛幻想这么郁闷的场景……&#xff09;。 小杉身为新一代的Scofield&#xff0c;在挖了半个月之后终于挖通牢房里的地道。 在地道里&#xff0c;无数的管道路线困惑了他。 小杉看了看自己…

游戏洞察丨自来水还是井水,后流量时代的私域挑战

流量生意本质上是买卖用户浏览时间的生意&#xff0c;如果用户增长到顶&#xff0c;那就意味着供给到顶。对比 2021 年&#xff0c;2022 年的游戏出海在谷歌和 Facebook 上投入的广告成本几乎翻了一倍。新晋“渠道王者”TikTok 逐渐走进大家的视野。该现象背后的原因在于&#…

MySQL数据库最常见的6种故障的排除方法

MySQL数据库最常见的6中故障的排除方法 1.MySQL无法启动 2.MySQL连接不上 3.MySQL打开文件失败 4.MySQL挂起&#xff08;hung&#xff09; 5.MySQL崩溃&#xff08;crash&#xff09; 6.忘记用户密码 1.MySQL无法启动 1.无法访问系统资源 2.参数设置错误 无法访问系统…

ffmpeg命令行工具源码之结构体分析1-命令行参数(未完结,持续更新)

前言 ffmpeg作为多媒体文件转换工具&#xff0c;至少需要有一个要转换的输入文件信息&#xff08;不仅仅是普通文件&#xff0c;还可以是摄像头设备&#xff0c;网络流等&#xff09;&#xff0c;和通常至少需要一个输出格式的文件&#xff08;输出文件不仅仅指普通的文件&…

【SQL】MySQL的数据类型

MySQL的数据类型 MySQL是一种广泛使用的关系型数据库管理系统&#xff0c;它支持各种数据类型&#xff0c;包括数字、字符串、日期和时间等。在MySQL中&#xff0c;数据类型是用来定义表中列的类型&#xff0c;它决定了表中的数据如何被存储和操作。 数字类型 MySQL支持多种…

完犊子!原单位的离职证明丢了,下周要入职了,用AI做一个行不行?

弄丢了离职证明怎么办&#xff1f; 一位网友哀叹&#xff1a; 完犊子&#xff01;原单位的离职证明丢了&#xff0c;下周要入职了&#xff0c;现在怎么办&#xff1f;用AI做一个行不行&#xff1f; 有相同经历的网友安慰他&#xff0c;离职证明没了没事&#xff0c;新公司会要求…

格式化数据写入sprintf的用法

sprintf 是一个常见的 C 语言函数&#xff0c;用于将格式化的数据写入字符串缓冲区中。它的原型如下&#xff1a; int sprintf(char *str, const char *format, …); sprintf 函数将按照指定的格式 format 将数据写入字符串 str 中&#xff0c;并返回写入的字符数&#xff08;不…

linux动态库版本控制

文章目录 1. 动态库相关概念2. ldd 查看依赖项3. 动态链接器 ld.so的加载路径4. 动态版本库版本控制5. ldconfig自动更新soname到linkname6. 可执行程序的执行过程 linux 动态库版本控制 1. 动态库相关概念 Soname、linkname和realname都是在Linux系统下与共享库&#xff08;s…

firewalld防火墙

文章目录 firewalld概述firewalld 与 iptables 的区别firewalld 区域的概念firewalld防火墙预定义了9个区域 firewalld数据处理流程firewalld检查数据包的源地址的规则 firewalld防火墙的配置方法常用的firewall-cmd 命令选项区域管理服务管理端口管理设置地址转换 firewalld概…

大学4年做出来这个算不算丢人

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…