Schnorr身份识别方案

article/2025/10/4 5:32:39

Schnorr身份识别协议是又一个零知识证明协议,相比Fiamt协议有两点不同,一是其安全性依赖于离散对数的困难性,二是该方案使用乘法群,从而可以提前计算了一些参数,减小了证明者实时计算开销,特别适合计算能力有限的环境下运行,例如嵌入式设备,介绍Schnorr之前,先对Schnorr所依据的乘法群和离散对数的背景进行介绍。

1.首先理解一下群(goup)的概念

现在我们的微信和qq上有各种群,如同事群、校友群、摄影群或者其他临时发起的群,群的一个特点是成员具有某种程度上的相似性,例如同事群是所有成员在一个公司工作,摄影群成员则是成员有共同的爱好,但群不仅是成员的简单集合,还可以描述群成员之间的关系,例如同事群中有些成员是其他成员的领导从而可以指挥其他成员,这种对象之间的互相作用我们称之为操作或者运算。

再来看数学上的群概念,其实和生活中的微信群有那么一点点相似之处,既包括元素的集合,也包括了元素的运算或者相互之间的操作,举一个乘法群作为例子,其定义如下:

设G为某种元素组成的一个非空集合,若在G内定义一个称为乘法的运算“·”,满足以下条件:
(1)(封闭性)\forall a,b\in G,有a.b\in G
(2)(结合性)\forall a,b,c\in G,有a·(b·c)=(a·b)·c;
(3)在G中有一个元素e,对G中任意元素g,有e·g=g·e=g,元素e称为单位元;

  (4)对G中任一元素g都存在G中的一个元素g',使得g·g'=g'·g=e,g称为可逆元,g'称为g的逆元,记作g^{-1}

则称G关于“·”形成一个群(Group),记作(G,·)。

这个定义看起来就很数学,很让人头晕。逐条来看一下,首先是G,G表示元素的集合,这比较容易理解,这里用全体非零实数R*集合作为例子,再来看四个条件,第一个是封闭性,意思是说集合里的元素相乘后还是在群里,例如2.2=4,而4还是属于非零实数集合,用通俗的话理解封闭性就是肥水不流外人田,群成员按照规则相互(这里的规则是相乘)仍在群里;第二个是结合性,例如(2.3).4=2.(3.4),比较容易理解;第三个是存在单位元,这个单位元跟谁作用都得到这个成员本身,非零实数乘法群的单位元就是1,因为其他数和1相乘仍得到它本身,什么都没变,如果是加法群,那么单位元就是0,因为任何数和0相加等于没加;最后一个条件是逆元,元素和元素的逆元相乘后得到单位元,例如a.a^{-1}=1a\neq 0

因为四个条件都满足,因此全体非零实数R*对于的乘法形成一个群。数学家定义了群的概念后,就可以围绕着群做更多深入研究(玩出花了),这里再补充两个概念:

1.有限群和无限群。群G中元素的个数称为G的,记作|G|,如果个数无限,则称群G为无限群,例如全体非零实数R*集合乘法群是一个无限群,反过来如果个数有限,则称群G为有限群,有限群得到的研究更多,“吾生也有涯,而知也无涯。以有涯随无涯,殆已”,先把有限的研究明白再说无限吧

2.循环群。说到研究明白,循环群是目前已被完全解决了的—类群,循环群的定义是当一个群G由一个元素a生成时,称为循环群(Cyclic Group),记为G=<a>,a被称为生成元(generator)。先举一个不太严谨的例子,按照老子的宇宙论理论,假设万物是一个群的话,那么这个万物群是一个循环群,而这个循环群的生成元就是老子指的道,因为“道生一,一生二,二生三,三生万物”

再举一个严谨的例子,模5乘法群Z_{*}^{5}=<2>=<4>,即为4阶循环群,2和4均为其生成元。事实上,由群中乘法定义知:

2^{1}=2 mod 5=2                  4^{1}=4 mod 5=4

2^{2}=4 mod 5=4                  4^{2}=16 mod 5=1

2^{3}=8 mod 5=3                  4^{3}=64 mod 5= 3

2^{4}=16 mod 5=1                 4^{4}=256 mod 5=2

可以看出,由2可以生成群,由4也可以生成群,因此2和4均是群的生成元。

群还有同构...等一下,本文不是介绍Schnorr身份识别方案吗,怎么在群论上狂奔了?另外群论和本文主题有啥关系?正如前文提了一下,Schnorr身份识别方案基于整数模p的阶为q的乘法循环群,因为群是元素和运算的集合,也就是说其中的元素和运算规则都确定了,因此给定了一个群,证明者和验证者都以此为基础,减少了双方需要沟通交流确定协议参数的时间,从而改进了效率。

2.离散对数的困难性

离散对数也使用了循环群的概念:给定一个素数p,有限乘法群Z_{p}^{*}上的一个生成元g和群里的一个元素\beta,找到整数x,其中0\leqslant x\leqslant p-2,满足g^{x}\equiv \beta(mod p),x就是要求的值,因为可以写作x=log_{g}(\beta ),因此被称为离散对数,注意这里的对数运算符和普通对数运算符不一样,因为这里是同余计算,不是通常所理解的等号。

另外“\equiv”符号这里表示同余,意思是g^{x}对p求余和\beta对p求余相等,例如p=11,生成元g=2,β=9,有2^{6}\equiv 9(mod 11)。

那么离散对数困难性又是什么难题?其指的是当已知大素数p和它的一个生成元g,g^{x}\equiv \beta(mod p),对于给定的β,计算x被认为是很困难的,而给定x计算β却相对容易,目前普遍认为离散对数难题被认为比大数分解还难一点,和大数分解一样,这类难题被称为陷阱函数:正向计算容易,反向计算困难,和生活中的各种陷阱一样,例如一些培训机构交钱容易退钱困难,正是陷阱函数的困难性保证了运用陷阱函数的各类加密算法的安全性。

3.Schnorr 身份识别协议

介绍了群的概念和离散对数困难性的背景知识后,可以来了解Schnorr身份协议了。为了方便理解 Schnorr 身份识别协议,再次请出Alice和Bob,同样的Alice作为一个拥有众多秘密的女子,她拥有一个私钥,并想向Bob证明这一点,但是又不能透露自己的私钥给Bob,他们再次运用零知识证明协议完成这个过程,这里的零知识证明协议是Schnorr算法。

在开始之前,他们要先确定一些公共参数

  • p = 任何的素数;
  • q = p-1 的因数,即q整除p-1;
  • 生成元g;
  • 公钥v=g^{-s}(mod p),其中s是Alice拥有的私钥, 0<s<q;

{p,q,g,v}四个参数是全局变量,Alice和Bob都知道,s是Alice的秘密,只有Alice知道。

a.首先Alice使用她的私钥s加密一条消息 "M",并发送给Bob,过程如下:

Alice选择一个随机数 r,其中0<r<q,计算得到X值: X = g^{r}(mod p) ,接着 Alice 将 X 值与她要发送的消息"M"连接起来,得到 (M||X),然后对 (M||X) 进行哈希运算,得到相应哈希值 e = Hash(M||X) ,其中Hash()是哈希函数,但工作还没结束,Alice还要计算一个值y= r + s*e,最后Alice将下列信息发送给Bob:

  • 消息M
  • 数字签名 e 和 y

b.Bob对接收到消息进行验证,过程如下:

Bob从 Alice 那儿拿到了消息M 和数字签名(e 和 y),除此之外,Bob 同样知道公共参数,分别是:

  • 公钥 "v";
  • 素数 "p";
  • 素数"q";
  • 生成元"g"。

现在 Bob 计算 X'= g^{y}v^{e}(mod p) ,如果X'=X,则Bob确认Alice说的为真,否则为假; 

验证过程如下:

因为v=g^{-s}(mod p),代入X'的等式的互换:X'=g^{y}g^{-se}(mod p)=g^{y-se}(mod p)

又因为y=r+s*e,得r=y-s*e,代入该值得到X'=g^{r}(mod p),因此X=X'。

得到了X'后,Bob可以进一步计算消息e' = H ( M||X')并和Alice发送过来的e是否相等。

如果Alice没有私钥,她很难构造私钥以便通过Bob的验证,因为离散对数的困难性,而Bob也很难反推出Alice的私钥,因为Alice并没有发送随机数r给Bob,同样因为离散对数的困难性,Bob不能从X = g^{r}(mod p) 反推出r从而想通过y=r+s*e反推出Alice的私钥s。

 


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

相关文章

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…

RRT算法及其部分改进算法介绍

基于采样的运动规划算法-RRT&#xff08;Rapidly-exploring Random Trees&#xff09; RRT&#xff1a;一种通过随机构建Space Filling Tree实现对非凸高维空间快速搜索的算法。该算法可以很容易的处理包含障碍物和差分运动约束的场景&#xff0c;被广泛的应用在各种机器人的运…

RRT*算法

简介 RRT* 和RRTconnect一样&#xff0c;是对RRT算法的优化。RRT算法的一个问题在于&#xff0c;它只是找到了可行的路径&#xff0c;不能保证路径是相对优化的。RRT*算法在每次迭代后&#xff0c;都会在局部更新搜索树&#xff0c;以优化路径。 多了两个过程&#xff0c;为&…

RRT算法介绍

RRT算法介绍 RRT算法原理介绍&#xff1a;RRT搜索树与树的生长相类似&#xff0c;即不断生长的同时又向四周扩散。算法以路径起点Xstart作为随机树T的根节点&#xff0c;树中节点xj用集合V存储&#xff0c;节点间的连接用连接边集E存储&#xff0c;所有节点xj满足属于集合Xfree…

【规划】RRT*算法图解

尽管RRT算法是一个相对高效率&#xff0c;同时可以较好的处理带有非完整约束的路径规划问题的算法&#xff0c;并且在很多方面有很大的优势&#xff0c;但是RRT算法并不能保证所得出的可行路径是相对优化的。因此许多关于RRT算法的改进也致力于解决路径优化的问题&#xff0c;R…

RRT算法简介

声明&#xff1a;本文为转载内容非原创&#xff0c;来源会在文末声明&#xff0c;绝无冒犯之意&#xff0c;只为一时复习之方便&#xff0c;侵权必删&#xff01; 感谢原作者写出如此优秀的博文&#xff0c;让我对RRT算法有个大致的理解。 对RRT算法感兴趣&#xff0c;是因为…

RRT 算法原理以及过程演示

RRT 适用于涉及非完整约束场合下的路径规划问题。 RRT 算法为一种递增式的构造方法&#xff0c;在构造过程中&#xff0c;算法不断在搜索空间中随机生成状态点&#xff0c;如果该点位于无碰撞位置&#xff0c;则寻找搜索树中离该节点最近的结点为基准结点&#xff0c;由基准结点…

【机器人学:运动规划】快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示

快速搜索随机树&#xff08;RRT -Rapidly-ExploringRandom Trees&#xff09;&#xff0c;是一种常见的用于机器人路径&#xff08;运动&#xff09;规划的方法&#xff0c;它本质上是一种随机生成的数据结构—树&#xff0c;这种思想自从LaValle在[1]中提出以后已经得到了极大…