零知识证明基础:数字签名

1、绪论

数字签名(Digital Signature),也称电子签名,是指附加在某一电子文档中的一组特定的符号或代码。它利用密码技术对该电子文档进行关信息提取并进行认证形成,用于标识签发者的身份以及签发者对电子文档的认可,并能被接收者用来验证该电子文档在传输过程中是否被篡改或伪造。

数字签名是非对称密钥加密技术与数字摘要技术的应用。

数字签名技术一般分为带仲裁和不带仲裁的两类。如果使用对称密钥进行数字签名,则必须使用仲裁者,非对称可以不带仲裁。

2、数字签名特点

为了满足身份认证、数据完整性和不可否认性等需求,数字签名具有以下特点:

  • 可信性;
  • 不可重用性;
  • 不可改变性;
  • 不可伪造性;
  • 不可否认性。

3、数字签名流程

数字签名流程简要介绍如下:

  • 发送方用一个哈希函数 H a s h ( ) Hash() Hash()将要发送的消息生摘要(一串数字),然后用发送方的私钥对这个摘要进行加密,这个加密后的摘要将作为消息的数字签名和消息一起发送给接收方;
  • 接收方首先用与发送方一样的哈希函数从接收到的原始消息中计算出消息摘要,接着用公钥对消息附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该消息是发送方的。
    在这里插入图片描述

使用数字签名的好处在于:

  • 确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。
  • 确定消息的完整性:因为数字签名使用了哈希函数,消息如果发生稍微改变,摘要的值将发生变化。

一次数字签名涉及到一个哈希函数 H a s h ( ) Hash() Hash()、接收方的公钥、发送方的私钥。

4、基于RSA的签名方案

RSA的签名方案流程如下:

  • 1)生成公私密钥对
    ①选取两个大素数 p p p p p p,计算 n = p q n=pq n=pq n n n的欧拉函数 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n) = (p-1)(q-1) φ(n)=(p1)(q1);
    ②随机选取整数 e ( 1 < e < φ ( n ) ) e(1<e<\varphi(n)) e(1<e<φ(n))作为公钥,满足 gcd ⁡ ( e , φ ( n ) ) = 1 \gcd(e,\varphi(n))=1 gcd(e,φ(n))=1,即 e e e φ ( n ) \varphi(n) φ(n)互素;
    ③使用Euclid扩展算法计算私钥: d ≡ e − 1 m o d φ ( n ) d \equiv e^{-1} \mod \varphi(n) de1modφ(n),即 e e e 的逆元(先选择 e e e再确定 d d d的原因是:加密的重要性大于解密的重要性)。

  • 2)签名过程
    设待签名的消息为 m m m,签名者利用安全的 H a s h Hash Hash函数产生消息摘要 h = H a s h ( m ) h=Hash(m) h=Hash(m),然后计算签名: s ≡ h d m o d n s \equiv h^d\mod n shdmodn

  • 3)验证过程
    签名接收者收到消息 m m m和签名 s s s,计算消息摘要 h = H a s h ( m ) h=Hash(m) h=Hash(m),然后,检验等式 h m o d n ≡ s e m o d n h \mod n \equiv s^e \mod n hmodnsemodn。若成立,则签名有效;否则签名无效。


签名时使用 H a s h Hash Hash函数可以防止利用同态的伪造攻击,有很好的抗攻击性。
RSA签名方案存在签名可重用的问题,同一消息在不同时刻签名不应是相同的。

RSA签名方案还存在签名可重用的问题,同一消息在不同时刻签名不应是相同的。这个问题可以通过在签名中引人随机数来解决。


5、基于椭圆曲线的签名方案

基于椭圆曲线(Elliptic Curve)的签名是基于椭圆曲线的非对称密码体制在数字签名中的一个实现方案,即在椭圆曲线有限域上实现签名算法,其安全性依赖于椭圆曲线的有限域上的离散对数难题。

与RSA数字签名相比,在相同的安全强度条件下,基于椭圆曲线的签名方案签名长度短、存储空间小、计算速度快,特别适用于计算能力和存储空间有限、带宽受限、要求高速实现的场合。

基于椭圆曲线的签名方案流程如下:

  • 1)生成公私密钥对
    选择椭圆曲线 E E E一点 G ∈ E G\in E GE G G G的阶为满足安全要求的素数 n n n,即 n G = O nG=O nG=O
    选取一个随机数 d ∈ [ 1 , n − 1 ] d∈[1,n-1] d[1,n1],计算 P B P_B PB使得 P B = d G P_B=dG PB=dG,那么公钥为 ( E , n , G , P B ) (E,n,G,P_B) (E,n,G,PB),私钥为 d d d

  • 2)签名过程
    用户随机选取整数 k ∈ [ 1 , n − 1 ] k∈[1,n-1] k[1,n1],计算 k G = ( x , y ) kG=(x,y) kG=(x,y), r ≡ x m o d n r≡x\mod n rxmodn
    待签名的消息为 m m m,计算 e = H a s h ( m ) e=Hash(m) eHash(m)
    计算 s ≡ ( e + r d ) k − 1 m o d n s≡(e+rd)k^{-1} \mod n s(e+rd)k1modn,如果 r = 0 r=0 r=0 s = 0 s=0 s=0,则另选随机数 k k k,重新执行上面的过程,消息 m m m的签名为 ( r , s ) (r,s) (r,s)

  • 3)验证过程
    签名接收者收到消息 m m m和签名 ( r , s ) (r,s) (r,s);
    计算 e = H a s h ( m ) e=Hash(m) e=Hash(m)
    计算 u ≡ s − 1 e m o d n u≡s^{-1}e\mod n us1emodn, v ≡ s − 1 r m o d n v≡s^{-1}r\mod n vs1rmodn ( x 1 , y 1 ) = u G + v Q , r 1 ≡ x 1 m o d n (x_1,y_1)=uG+vQ,r_1≡x_1\mod n (x1,y1)=uG+vQ,r1x1modn
    判断 r r r r 1 r_1 r1的关系,相等则签名有效,否则无效。

6、数字签名与区块链

数字签名在区块链技术中起到了核心的作用,特别是在确保交易的完整性和不可否认性方面。在区块链中每一个区块都保存了上一个区块的哈希值。

基本原理:

  • 当在区块链上发送一个交易时,首先创建一个交易的描述,包括发送者的地址、接收者的地址、金额等信息。
  • 发送者使用他们的私钥对这个交易描述进行签名,生成数字签名。
  • 交易(包括交易描述和数字签名)被发送到网络,并由网络中的其他参与者(例如比特币中的矿工)验证。

交易的验证:

  • 网络中的验证者使用发送者的公钥来验证数字签名。如果签名验证通过,这意味着交易确实来自声称的发送者并且没有被篡改。
  • 另外,验证者还会检查发送者是否拥有足够的资金来完成交易。

区块的创建:

  • 一旦交易被验证,它会被放入待打包的交易池。
  • 矿工或验证者将这些交易打包成一个新的区块。
  • 新区块包含了这些交易的信息以及前一个区块的哈希值。这种链接方式确保了所有区块的连续性和不可更改性。

区块的添加:

  • 新创建的区块会被添加到区块链上,成为链的一部分。
  • 一旦区块被添加到链上,其中的交易就被认为是已确认的,并且难以更改。因为要更改一个区块中的信息,你不仅需要更改那个区块,还需要更改它之后的所有区块,这在计算上是非常困难的。

数字签名确保了区块链上的每个交易的真实性和完整性。同时,通过将每个新区块链接到前一个区块的哈希值,确保了区块链的不可更改性和安全性。

总之,数字签名和哈希函数都是区块链安全性的基石。数字签名确保交易的真实性,而哈希函数通过连续链接每个区块来确保整个链的不可更改性。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/363345.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【shell脚本速成】python安装脚本

文章目录 案例需求应用场景解决问题脚本思路案例代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xff0c;都沐…

双路视频同屏显示(拼接)-基于野火Zynq7020开发板

前情提要 米联客FDMA驱动OV5640摄像头—基于野火Zynq7020开发板 本文在此基础上&#xff0c;实现了双路视频拼接。将ov5640输出的1024600的图像数据缩放为512600&#xff0c;分两路写入ddr3&#xff0c;并且显示在1024*600的RGB屏幕中。 纯FPGA也可以按此方法实现。 总体BLOC…

毕业答辩制作PPT【攻略】

毕业答辩制作PPT【攻略】 前言版权毕业答辩制作PPT【攻略】一、WPS AI 15天免费会员二、AI文档生成PPT三、修改完善PPT 最后 前言 2024-06-14 23:43:05 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN…

设计模式——状态模式

状态模式 状态模式是一种行为设计模式&#xff0c;让你能在一个对象的内部状态变化时改变其行为&#xff0c;使其看上去就像是改变了自身所属的类一样 其主要思想是程序在任意时刻仅可处于几种有限的状态中。 在任何一个特定状态中&#xff0c; 程序的行为都不相同&#xff0…

arco disign vue 日期组件的样式穿透

问题描述: 对日期组件进行样式穿透. 原因分析: 如图,日期组件被展开时它默认将dom元素挂载到body下, 我们的页面在idroot的div 里层, 里层想要穿透外层是万万行不通的. 解决问题: 其实官网提供了参数,但是并没有提供例子, 只能自己摸索着过河. 对于日期组件穿透样式,我们能…

ai智能语音机器人在电销里发挥怎样的作用

得益于语音识别技术的的进步&#xff0c;人工智能发展越来越成熟。相信作为企业的管理者&#xff0c;都遇到过这样的事&#xff1a;一个电销新人刚刚入行&#xff0c;需求经过一两个月的学习培训才能成为一名合格的销售人员。在这段学习的期间&#xff0c;企业投入的成本是没有…

WebSocket走私实践(附赠LiveGBS监控系统未授权管理员密码重置)

WebSocket走私实践&#xff08;附赠LiveGBS监控系统未授权管理员密码重置&#xff09; 对此&#xff0c;我特别感谢TryHackMe和HackTheBox academy&#xff0c;永远相信和追随英国TryHackMe所教导的网络安全知识,并保持学习 WebSocket走私相关的知识在这里 前段时间学习过htt…

数字信号处理实验二(模拟信号采样与重构及频谱分析FFT)

模拟信号采样与重构及频谱分析FFT&#xff08;2学时&#xff09; 要求&#xff1a; 对一模拟信号进行采样&#xff1b;对该采样信号进行重构&#xff1b;分析它们的频谱特征。目的&#xff1a; 熟悉MATLAB命令和编辑、运行、调试环境&#xff1b;掌握采样定理及对信号的频谱分析…

vue3中获取Excel和csv文件中的内容

1.效果 2.安装 npm install xlsxyarn add xlsx 3.引入使用 <el-upload ref"uploadRef" :on-change"changeFile" :show-file-list"false" class"mr10" accept".csv, .xlsx, .xls"action"#" :auto-upload&quo…

[保姆级教程]uniapp自定义标签页切换组件

文章目录 导文样式改成动态列表切换点击效果加上点击自动滑动scroll-view加上切换组件效果 导文 unaipp自带的标签页和ui设计相差太大&#xff0c;直接修改组件比手写一个还麻烦&#xff0c;下面手写一个。 样式 先用scroll-view做一个滑动&#xff0c;不然多的话滑动不了。 &l…

Vue3 国际化i18n

国际化i18n方案 1. 什么是i18n2. i18n安装、配置及使用2.1 安装2.2 配置2.3 挂载到实例2.4 组件中使用2.5 语言切换 1. 什么是i18n i18n 是“国际化”的简称。在资讯领域&#xff0c;国际化(i18n)指让产品&#xff08;出版物&#xff0c;软件&#xff0c;硬件等&#xff09;无…

数据库调优厂商 OtterTune 宣布停止运营

昨天刷到消息&#xff0c;得知数据库优化厂商 OtterTune 停止了运营。OtterTune 的成员主要来自 CMU Andy Pavlo 教授领导的数据库实验室。公司正式成立于 2021 年 5 月&#xff0c;融资了 1450 万美金。 按照 Andy 教授的说法&#xff0c;公司是被一个收购 offer 搞砸了。同时…

NAND闪存原厂铠侠加速推上市,预计10月完成IPO

NAND闪存原厂铠侠Kioxia拟趁着半导体市场回暖及企业财务状况显著提升的契机&#xff0c;加速推进其上市进程。 据报道&#xff0c;公司计划最快于8月底提交IPO申请&#xff0c;目标是在2024年10月末于东京证券交易所完成首次公开募股。此番上市动作不仅反映出市场复苏迹象&…

python爬虫之scrapy框架基本使用

python爬虫之scrapy框架基本使用 1、环境安装&#xff1a;pip install scrapy 2、创建一个工程&#xff1a;scrapy startproject xxxPro 3、cd xxxPro 4、在spiders子目录中创建一个爬虫文件&#xff1a;scrapy genspider spiderName www.xxx.com 5、执行工程&#xff1a;scra…

同步模式之保护性暂停模式

1. Guarded Suspension&#xff1a;一个线程需要等待另一个线程的执行结果 2. 理解 一个线程需要将结果传递给另一个线程&#xff0c;将这两个线程关联到到同一个 GuardedObject 如果需要源源不断地传递结果&#xff0c;需要使用消息队列&#xff08;生产者-消费者模型&…

k8s流控平台apiserver详解

一、简单理解认识apiserver 1.主要功能 认证 鉴权 准入 mutating validating admission 限流 2.概念 apiserver保护etcd&#xff0c;缓存机制&#xff0c;有缓存直接返回&#xff0c;没缓存再去查看etcd,apiserver是担任和其他平台同信并认证 3.访问控制概览…

如何借助ai(文心一言)获取tushare的数据

1. 准备工作 确保已安装python &#xff0c;安装Tushare库 和文心一言的地址&#xff08;文心一言&#xff09;&#xff1a; 注册Tushare账号并获取Token&#xff1a;在Tushare官方网站注册账号&#xff0c;并获取个人Token。如下 tushare地址&#xff1a;&#xff08;点击即…

JVM原理(一):JVM运行时数据区域的分析

1. 程序计数器 程序计数器是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。 作用 在Java虛拟机的概念模型里&#xff0c;字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令&#xff0c;它是程序控制流的指示…

服务器安装JDK,Maven等常用环境

生产环境部署服务器需要安装一些常用工具&#xff0c;下面我就把常用的jdk&#xff0c;maven&#xff0c;node&#xff0c;git的安装方法和步骤演示 一、安装JDK环境 执行如下命令&#xff0c;安装JDK,所有命令都是 复制&#xff0c;粘贴&#xff0c;回车 yum install -y jav…

CentOS停更无忧,中国操作系统闯入后CentOS时代

国际开源服务器操作系统CentOS停更&#xff0c;引发了中国操作系统火线进化——开源龙蜥操作系统社区涌现出大量的技术创新&#xff0c;相关创新技术迅速转化为商业化产品。2024年6月&#xff0c;浪潮信息与龙蜥社区联合发布服务器操作系统云峦KeyarchOS V5.8 新版本&#xff0…