密码学学习笔记(十六 ):Schnorr签名算法

article/2025/10/4 5:08:53

交互式零知识证明

零知识证明(ZKP)就是不会将证据泄露给验证者的知识证明。Schnorr身份认证识别协议是一个交互式ZKP,它满足了完备性、可靠性、零知识性。所谓的交互式ZKP方案通常包含3个步骤(承诺、挑战和证明),在文献中通常被称为sigma协议。交互式协议增加了一些不可忽略的开销,因为它需要双方通过网络发送多条消息,并在双方不同时在线时会增加无法限制的延迟。因此,应用密码学领域几乎不使用交互式ZKP。

Fiat-Shamir转换可以将交互式ZKP转换为非交互式ZKP。数字签名是一种非交互式ZKP。将Fiat-Shamir转换应用于Schnorr身份识别协议,我们就可以得到Schnorr签名方案。总而言之,Schnorr签名本质上是两个值R和s,其中R是对某个秘密随机值的承诺(一般被称为nonce,因为它需要对每个签名都是唯一的),s是通过承诺R、私钥(见证x)和消息计算的值。

Schnorr识别协议

识别方案是证明人P和验证人V这两方之间的交互协议。如果协议成功,那么在协议结束时,验证者确信他正在与证明人交互,或者更准确地说,与知道与证明人公钥对应的密钥的人交互。

一个简单的例子是密码身份验证的标准协议。证明者的密钥是她的密码pw,公钥是H(pw),其中H是一个“单向”散列函数。该协议由证明方发送H(pw)组成,验证者检查这是否与存储的值匹配。虽然这对“直接”攻击是安全的,但对“窃听”攻击是不安全的,即对手可以观察到P和V之间的一些交互,然后尝试模仿P——一旦对手从一次交互中看到H(pw),他就可以在所有进一步的交互中模仿P。

在使用椭圆曲线的Schnorr识别协议中,证明者的秘密是一对(P,Q=[a]P)的离散对数a,其中P和Q是椭圆曲线E(Fq)上的点。(该系统适用于离散对数很难的任何有限阿贝尔群)为了防止窃听攻击,该协议有三轮:

公钥pk由一条椭圆曲线E(Fq)和两个r阶点P,Q∈E(Fq)组成。密钥sk是[1,r]中的一个整数,使得Q=[a]P

  • \rho选择一个随机k\overset{R}{\leftarrow}\left [ 1,r \right ] 并且将R=[k]P发送到V。
  • V随机选择一个“挑战”e\overset{R}{\leftarrow}\left [1,r \right ]并将e发送到\rho
  • \rho计算s=k+ae(mod r)并将s发送到V。

如果[s]\rho=R+[e]Q,则V接受。

初始随机值k的作用是“屏蔽”秘密a,以便在协议的后续执行中重复使用。

Schnorr签名

假设代数群G和素数阶r的元素g∈G对所有用户都是已知的。这些值(G,g,r)被称为系统参数。设h=g^{a}为用户的公钥。关于公钥h的消息m上的数字签名可以由知道私钥A的用户生成。在不知道私钥的情况下,很难计算给定公钥的签名。

非正式地说,公钥识别方案是验证方和验证方之间的协议,其中验证方有公钥pk和私钥sk,验证方有pk的副本。该协议有三个通信阶段:首先,证明者发送一个承诺s0;则验证者发送质询s1;则证明者发送响应s2。验证人接受或拒绝该证明。该协议旨在说服验证者,他们正在与知道与证明者公钥对应的私钥的用户进行通信。换言之,验证者应该确信他们正在与证明者沟通。

对于Schnorr格式[522,523],证明者具有公钥h=g^{a},其中g是素数阶r的代数群的元素,并且1≤a<r是一致随机选择的。证明者选择一个随机整数0≤k<r,计算s0=g^{k}并将s0发送给验证者。验证人向证明者发送“挑战”1≤s1<r。校准仪返回s2=k+as1(mod r)。

然后验证人检查是否满足:

如果是这种情况,则接受该证明。换言之,如果验证人接受证明,则证明人已经成功地向验证人识别了自己。 


http://chatgpt.dhexx.cn/article/AUpvLv5S.shtml

相关文章

ECDSA VS Schnorr signature VS BLS signature

1. ECDSA ECDSA&#xff0c;全称为Elliptic curve Digital Signature Algorithm&#xff0c;采用Elliptic curve cryptography来实现的数字签名算法。 公私钥对 ( p k , P ) (pk,P) (pk,P)&#xff0c;其中公钥 P p k G Ppk\times G PpkG&#xff0c; G G G为所选椭圆曲线的…

BSV 上的 Schnorr 签名

我们已经在 BSV 上实现了 Schnorr 签名。这是第一个也是唯一一个已知的实现&#xff0c;没有对原始协议进行任何更改。 一笔交易一个签名 Schnorr 是一种可以用于替代比特币签名当前使用的 ECDSA 算法的替代算法。一个关键优势是&#xff0c;同一交易的一个输入或多个输入中的多…

深入浅出零知识证明(一):Schnorr协议

最近在学习零知识证明&#xff0c;因为内容很多并且难度也大&#xff0c;想根据自己的学习路线做一系列总结&#xff0c;这是第一篇文章&#xff0c;主要介绍零知识证明的一些重要概念和思想&#xff0c;可以对零知识证明有直观的理解&#xff0c;然后讲解一个经典简洁的零知识…

密码学——Schnorr签名算法

一、基本知识 1.1 概述 Schnorr签名算法最初是由德国密码学家ClausSchnorr于2008年提出的&#xff0c;在密码学中&#xff0c;它是一种数字签名方案&#xff0c;以其简单高效著称&#xff0c;其安全性基于某些离散对数问题的难处理性。 1.2 椭圆曲线上的计算 密码学中&…

什么是 Schnorr 签名?

在密码学中&#xff0c;Schnorr 签名是由 Schnorr 签名算法生成的数字签名。 与大多数区块链不同&#xff0c;BTC自其早期以来基本保持不变&#xff0c;大多数升级都是有限的&#xff0c;并旨在增强网络的效率而不是功能。BTC协议的更新是非常罕见的&#xff0c;并且通常用于技…

史上最全的Schnorr签名方案和BLS签名方案的全面对比

前言 Schnorr 签名算法最初是由德国密码学家 Claus Schnorr 于 2008 年提出的&#xff0c;而来自区块链协议公司 Blockstream 的密码学家 Gregory Maxwell、Pieter Wuille 等人&#xff0c;则在 2018 年提出了一种名为 MuSig 的 Schnorr 签名方案&#xff0c;这也是我们即将探索…

Schnorr身份识别方案

Schnorr身份识别协议是又一个零知识证明协议&#xff0c;相比Fiamt协议有两点不同&#xff0c;一是其安全性依赖于离散对数的困难性&#xff0c;二是该方案使用乘法群&#xff0c;从而可以提前计算了一些参数&#xff0c;减小了证明者实时计算开销&#xff0c;特别适合计算能力…

Schnorr协议:非交互零知识身份证明和数字签名

本文首发公众号区块链之美&#xff01;致力于区块链技术研究&#xff0c;传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。 摘要&#xff1a;本篇文章介绍Schnorr的两大应用场景&#xff1a;从交互式零知识身份证明到非交互零知识身份证明、数字签名实现基本原理…

matlab实现rrt算法

这一部分算法强烈推荐两篇博客&#xff0c;尤其是第一篇博客介绍算法的原理非常简单易懂&#xff1a; https://blog.csdn.net/weixin_43465857/article/details/96451631 https://www.cnblogs.com/long5683/p/11795987.html https://blog.csdn.net/aoyousihaiqiuqihuang/articl…

RRT*算法的原理简介以及Python实现代码

![RRT算法原理图](https://img-blog.csdnimg.cn/20210420101155956.png?x-oss-p RRT大致流程 1.初始化随机树tree&#xff0c;以空的随机树开始添加节点&#xff0c;最开始只有Qinit。 2.执行sample函数&#xff0c;在地图中获得一个随机点Qrand。 3.遍历tree中所有节点&#…

RRT 算法研究(附 Python / C++ 实现)

RRT 算法研究 参考 机器人路径规划、轨迹优化课程-第五讲-RRT算法原理和代码讲解 机器人路径规划之RRT算法(附C源码) RRT算法(快速拓展随机树)的Python实现 《基于改进RRT算法的路径规划研究》 《面向室内复杂场景的移动机器人快速路径规划算法研究》 理论基础 RRT&#xff0…

RRT* 算法研究(附 MATLAB 和 Python 实现)

RRT* 算法研究 参考 机器人路径规划、轨迹优化课程-第六讲-RRT*算法原理和代码讲解 路径规划 | 随机采样算法&#xff1a;PRM、RRT、RRT-Connect、RRT* 基于采样的运动规划算法-RRT(Rapidly-exploring Random Trees) 《改进RRT算法在移动机器人路径规划中的应用研究》 理论基础…

算法实现1——一步一步实现RRT(算法原理及matlab代码)

首先我们得明白算法的原理&#xff0c;然后写出步骤。根据步骤可以写出主函数包括每一步的输入输出&#xff0c;怎么表示&#xff08;基本的伪代码表示&#xff0c;当然如果可以也可以写成汉字形式的&#xff09;&#xff0c;最后一步一步写出代码&#xff0c;调试工作是必须的…

RRT、RRT-connect、RRT*等算法、A*等等路径规划算法

1 原始RRT算法运行结果&#xff1a;python&#xff0c;这里以2D_rrt及其衍生相关算法为例&#xff08;边做边更新&#xff09; CV搬运工们&#xff0c;先上github连接&#xff1a;&#xff08;点个赞呗&#xff09;&#xff08;不想要拿github包的后面有现成代码&#xff09;…

RRT路径规划算法

RRT路径规划算法 地图RRT算法原理路径平滑处理总结 RRT&#xff08;Rapidly-Exploring Random Tree&#xff09;算法是一种基于采样的路径规划算法&#xff0c;常用于移动机器人路径规划&#xff0c;适合解决高维空间和复杂约束下的路径规划问题。基本思想是以产生随机点的方式…

自动驾驶路径规划——基于概率采样的路径规划算法(RRT、RRT*)

目录 1. RRT算法背景1.1 RRT算法核心思想1.2 RRT算法优缺点 2. 经典RRT算法2.1 RRT算法流程2.2 RRT伪代码 3. 基于目标概率采样4. RRT*算法4.1 RRT与RRT*的区别4.2 RRT*算法详解4.2.1 RRT*算法总体伪代码4.2.2 重新选择父节点4.2.3 重新布线4.2.4 RRT*算法Choose Parent过程详解…

基于Python的RRT算法实现

基于Python的RRT算法实现 一、RRT算法原理及实现效果二、RRT算法python代码实现 本文为博主原创内容&#xff0c;未经博主允许不得转载。尊重他人知识成果&#xff0c;共同建立良好学习分享氛围&#xff0c;谢谢&#xff01; 一、RRT算法原理及实现效果 关于RRT算法的原理&…

基于采样的路径规划算法RRT的优化:RRT*,Kinodynamic-RRT*,Anytime-RRT *,Informed RRT *

基于采样的路径规划算法RRT的优化 RRT * 算法Kinodynamic-RRT*Anytime-RRT *Informed RRT *关于搜索树按搜索方向生长的计算方法 基本的基于采样的路径规划算法RRT&#xff0c;在地图中进行采样取点&#xff0c;直到新的节点取到终点的一定阈值范围内&#xff0c;视为查找到路径…

RRT*算法图解

原文链接&#xff1a; https://blog.csdn.net/yuxuan20062007/article/details/88843690 【运动规划RRT*算法图解】 https://blog.csdn.net/weixin_43795921/article/details/88557317 尽管RRT算法是一个相对高效率&#xff0c;同时可以较好的处理带有非完整约束的路径规划问题…

快速扩展随机树(RRT)算法

RRT是Steven M. LaValle和James J. Kuffner Jr.提出的一种通过随机构建Space Filling Tree实现对非凸高维空间快速搜索的算法。该算法可以很容易的处理包含障碍物和差分运动约束的场景&#xff0c;因而广泛的被应用在各种机器人的运动规划场景中。 1. Basic RRT算法 原始的RR…