密码学——Schnorr签名算法

article/2025/10/4 5:35:47

一、基本知识

1.1 概述

Schnorr签名算法最初是由德国密码学家ClausSchnorr于2008年提出的,在密码学中,它是一种数字签名方案,以其简单高效著称,其安全性基于某些离散对数问题的难处理性。

1.2 椭圆曲线上的计算

密码学中,常用以下形式的椭圆曲线: E : y 2 = x 3 + a x + b ( m o d p ) E: y^2= x^3+ax+b(mod\ p) E:y2=x3+ax+b(mod p) 同时要求 4 a 3 + 27 b 2 ≠ 0 4a^3+27b^2 ≠0 4a3+27b2=0。其中p为一个大素数,a、b、x和y均在有限域 G F ( p ) GF(p) GF(p)中,即从 { 0 , 1 , ⋅ ⋅ ⋅ , p − 1 } \{0,1,···,p-1\} {0,1,⋅⋅⋅,p1}中取值。该曲线常用 E p ( a , b ) E_{p}(a,b) Ep(a,b)表示。若该曲线上只有有限个离散点,设为N个,则椭圆曲线的阶为N。N越大,椭圆曲线安全性越高。椭圆曲线的阶可通过schoof算法计算求得。
椭圆曲线 E : y 2 = x 3 − x + 1 E: y^2= x^3-x +1 E:y2=x3x+1图形如下:
 y^2= x^3-x +1


加法规则

椭圆曲线 E p ( a , b ) E_{p}(a,b) Ep(a,b)在如下定义的加法规则构成Abel群(交换群)。

  • O + O = O Ο + Ο = Ο O+O=O
  • ∀ P = ( x , y ) ∈ E p ( a , b ) ∀P=(x,y)∈E_{p}(a,b) P=(x,y)Ep(a,b),有 P + O = O + P = P P +Ο =Ο + P = P P+O=O+P=P
  • ∀ P = ( x , y ) ∈ E p ( a , b ) ∀P=(x,y)∈E_{p}(a,b) P=(x,y)Ep(a,b),有 P + ( − P ) = O P + (-P) =Ο P+(P)=O P P P的逆为 − P = ( x , − y ) -P = (x,-y) P=(x,y)
  • ∀ P = ( x 1 , y 1 ) , Q = ( x 2 , y 2 ) ∈ E p ( a , b ) ∀P=(x_{1},y_{1}),Q=(x_{2},y_{2})∈E_{p}(a,b) P=(x1,y1),Q=(x2,y2)Ep(a,b),则 P + Q = R = ( x 3 , y 3 ) ∈ E p ( a , b ) P + Q = R = (x_{3},y_{3})∈E_{p}(a,b) P+Q=R=(x3,y3)Ep(a,b),其中 x 3 = λ 2 − x 1 − x 2 , y 3 = λ ( x 1 − x 3 ) − y 1 x_3=λ^2-x_1-x_2 ,y_3=λ(x_1-x_3 )-y_1 x3=λ2x1x2,y3=λ(x1x3)y1

  • 相同点相加计算R点在这里插入图片描述
    • 不同点相加计算R点
      在这里插入图片描述
乘法规则
  • ∀ k ∈ Z , ∀ P ∈ E p ( a , b ) ∀k∈Z,∀P∈E_p (a,b) kZ,PEp(a,b),有 k P = P + ⋅ ⋅ ⋅ + P ( k 个 P 相加 ) kP=P+···+P(k个P相加) kP=P+⋅⋅⋅+P(kP相加)
  • ∀ s , t ∈ Z , ∀ P ∈ E p ( a , b ) ∀s,t∈Z, ∀P∈E_p (a,b) s,tZ,PEp(a,b),有 ( s + t ) P = s P + t P , s ( t P ) = ( s t ) P (s+t)P=sP+tP,s(tP)=(st)P (s+t)P=sP+tP,s(tP)=(st)P

除了无限远的点 O Ο O外,椭圆曲线 E E E任何可以生成所有点的点都可视为 E E E的生成元,但并非 E E E上所有点都可为生成元。
如何选取生成元

  • 首先分解椭圆曲线阶 n = r × p n = r × p n=r×p,p需要足够大。
  • k = n / p k= n/p k=n/p,随机选取 X ∈ E p ( a , b ) X∈E_p (a,b) XEp(a,b),计算 G = k ⋅ X G = k ·X G=kX
  • G ≠ O G ≠ Ο G=O,则 G G G可为生成元否则重新选择 X X X再次计算。

二、算法细节

2.1 公私钥产生算法( K e y G e n KeyGen KeyGen):

  • 选择一条椭圆曲线 E p ( a , b ) E_{p}(a,b) Ep(a,b) 和基点 G G G
  • 选择私钥 d A d_{A} dA d A < n d_{A}<n dA<n n n n为该 G G G的阶),利用基点 G G G计算公钥 Q A = d A ⋅ G Q_{A}=d_{A} · G QA=dAG

2.2 签名生成算法( S i g n Sign Sign

  • 选择一个随机整数 k ( k < n ) k(k<n) k(k<n);
  • 计算点 R = k ⋅ G = ( x 1 , y 1 ) R=k·G=(x_{1},y_{1}) R=kG=(x1,y1)
  • 计算 σ = k + h a s h ( m ∣ ∣ R ) ⋅ d A ( m o d n ) \sigma=k + hash(m|| R)·d_{A} (mod \ n) σ=k+hash(m∣∣R)dA(mod n)
  • 得到签名 s = ( R , σ ) s=(R,\sigma) s=(R,σ);

2.3 签名验证算法(Verify):

  • 验证等式: σ ⋅ G ≡ h a s h ( m ∣ ∣ R ) ⋅ Q A + R \sigma · G ≡{hash(m|| R)}·Q_{A} + R σGhash(m∣∣R)QA+R
  • 如果等式成立输出1,否则输出0。

Schnorr签名除了上面一种形式外,还有另外一种形式。

2.4 签名生成算法( S i g n Sign Sign

  • 选择一个随机整数 k ( k < n ) k(k<n) k(k<n);
  • 计算点 R = k ⋅ G = ( x 1 , y 1 ) R=k·G=(x_{1},y_{1}) R=kG=(x1,y1)
  • 计算 α = h a s h ( m ∣ ∣ R ) \alpha=hash(m|| R) α=hash(m∣∣R)
  • 计算 σ = k + h a s h ( m ∣ ∣ R ) ⋅ d A ( m o d n ) \sigma=k + hash(m|| R)·d_{A} (mod \ n) σ=k+hash(m∣∣R)dA(mod n)
  • 得到签名 s = ( α , σ ) s=(\alpha,\sigma) s=(α,σ);

2.5 签名验证算法(Verify):

  • 计算 R ′ = σ ⋅ G − α ⋅ Q A R^{'}=\sigma·G-\alpha·Q_{A} R=σGαQA
  • 验证等式: h a s h ( m ∣ ∣ R ′ ) ≡ α hash(m|| R^{'}) ≡\alpha hash(m∣∣R)α
  • 如果等式成立输出1,否则输出0。

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

相关文章

什么是 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…

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…