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

news2024/10/7 12:21:57

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.coloradmin.cn/o/1873685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

统信系统实战(2):安装redis

在系统中未发现redis,需要安装。 网上资料上说需要去redis官网下载,但是发现不管是github账号还是自己注册的sso账号,都各种提示有问题。 继续找资料,发现可以直接通过下载链接下载,指令如下: wget http://download.redis.io/releases/redis-6.0.6.tar.gz 成功下载,…

Charles网络抓包工具安装和web抓包(一)

目录 概述 抓包工具对比 安装 下载 web抓包配置 按键说明 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#…

国外问卷调查,让你远离酷暑的赚钱新方式

大家好&#xff0c;我是汇舟问卷&#xff0c;一家专注于国外问卷调查领域的互联网企业。随着夏季的到来&#xff0c;高温酷暑无疑给许多人的日常工作带来了极大的不便与挑战。 在这样的季节里&#xff0c;我们都在寻求一种既能实现经济收益又能避免高温炙烤的工作模式。 在此…

GPU设置

GPU降温测试 前提 同一个训练程序&#xff0c;使用8块GPU&#xff0c;GPU使用率基本全程>90%&#xff0c;GPU为1080 Ti 限制最高功率效果 不限制最高功率(默认最高功率250W)&#xff1a;最高温度85&#xff0c;大多时间在75-85之间 将最高功率限制为150W&#xff1a;最高…

优维“统一开放平台”:开放、开发、集成、客制化

基于丰富完善的产品体系&#xff0c;优维重磅推出了统一开放平台。这款由优维自主设计与研发&#xff0c;集数据开发、能力开放、能力集成、客制化为一体的统一开放平台&#xff0c;具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块&#xff0c;可为…

后端加前端Echarts画图示例全流程(折线图,饼图,柱状图)

本文将带领读者通过一个完整的Echarts画图示例项目&#xff0c;演示如何结合后端技术&#xff08;使用Spring Boot框架&#xff09;和前端技术&#xff08;使用Vue.js或React框架&#xff09;来实现数据可视化。我们将实现折线图、饼图和柱状图三种常见的数据展示方式&#xff…

昇思25天学习打卡营第10天|FCN图像语义分割

一、简介&#xff1a; 本篇博客是昇思大模型打卡营应用实践部分的第一次分享&#xff0c;主题是计算机视觉&#xff08;CV&#xff09;领域的FCN图像语义分割&#xff0c;接下来几天还会陆续分享其他CV领域的知识&#xff08;doge&#xff09;。 全卷积网络&#xff08;Fully…

css做旋转星球可举一反三

<!DOCTYPE html> <html lang"en"><head> <meta charset"UTF-8" /> <title>旋转的星球</title> <style type"text/css">.box {/*position: relative;*/position: absolute;width: 139px;height: 139p…

Total Uninstall安装及卸载软件

Total Uninstall 的独特之处在于通过其安装的软件可以完整监控到新增或更改的注册表、文件、服务&#xff0c;可一键卸载。但常规的“360软件管家”无法做到以上内容。 借助该机制可用来无限刷新软件试用许可。 1.Total Uninstall 安装第三方软件 点击图中的“安装”&#xf…

vue2中vuedraggable设置部分元素不可拖拽,不可移动

文章目录 前言1、版本2、vuedraggable页面的具体使用3.核心(1) move官网说明(2) 注意点&#xff1a;(3) onDraggableMove方法 总结 前言 需求&#xff1a;左边是复选框&#xff0c;右边是选中的数据&#xff0c;编辑传入的数据不可拖拽&#xff0c;不可移动&#xff08;其实还…

【算法】数组-基础知识与应用

一.基础理论 数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标对应的数据。 数组下标都是从0开始的。数组内存空间的地址是连续的 因为数组在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添元素的时候&#xff0c…

jieba--《红楼梦》章节分卷并计算TF-IDF值(超详细)

目录 大致步骤&#xff1a; 任务1&#xff1a; 将红楼梦 根据卷名 分隔成 卷文件 红楼梦txt&#xff1a; 红楼梦卷头&#xff1a; 红楼梦章节分卷&#xff1a; 任务2&#xff1a;对每个卷进行分词&#xff0c;并删除包含停用词的内容 1.遍历所有卷的内容&#xff0c;并添…

没有思考过 Embedding,不足以谈 AI

在当今的人工智能&#xff08;AI&#xff09;领域&#xff0c;Embedding 是一个不可或缺的概念。如果你没有深入理解过 Embedding&#xff0c;那么就无法真正掌握 AI 的精髓。接下来&#xff0c;我们将深入探讨 Embedding 的基本概念。 1. Embedding的基本概念 1.1 什么是 Emb…

ffmpeg使用mjpeg把yuvj420p编码为jpg图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 1. 通过*.jpg推测时&#xff0c;out_fmt为image2&#xff0c;打开*.jpg文件时&#xff0c;in_fmt为image2 但是out_fmt为image2时&#xff…

冶金工业5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

冶金工业5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。传统生产方式难以满足现代冶金工业的发展需求&#xff0c;数字化转型成为必然趋势。通过引入5G、工业物联网和数字孪生等先进技术&#xff0c;冶金工业可以实现生产过程智能化、高效化和绿色化&#…

【Echarts】散点图 制作 气泡 类型图表

目录 需求主要代码效果展示注 需求 需参照设计图画出对应图表 主要代码 /**** 数据 ****/ this.dataList [...Array(8).keys()].map((item) > {return {ywlxmc: 业务类型 (item 1),sl: item > 4 ? 50 : 70} })/**** 气泡样式 ****/ const styleList [{offset: [56…

谷粒商城实战(045集群学习-elasticsearch(ES)集群)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第368p-第p369的内容 文章目录 简介集群健康分片新增节点水平扩容问题和解决集群结构测试集群信息 简介 不管用户发给哪个节点&#xff0c;都可以…

如何断点调试opencv源码

分几个步骤&#xff1a; 1、下载opencv-4.10.0-windows.exe https://opencv.org/releases/ 2、想要调试opencv的源码&#xff0c;只需要将这两个文件拷贝到我们自己项目的可执行文件的同级目录内即可。 完成拷贝后&#xff0c;直接在vs工程中打断点F11进行单步调试&#xff…

智能交通(1)——杭州交通数据集

赛题简介 在本地赛题中&#xff0c;参赛团队需要在平台提供的仿真交通场景下&#xff0c;通过算法模型驱动交通信号灯&#xff0c;以在各种交通状况&#xff08;高峰期、雨天等&#xff09;下都能最大程度地服务车辆&#xff0c;使其在模拟环境中获得综合最大得分。 数据集 …

基于 SpringBoot + Vue 的图书购物商城项目

本项目是一个基于 SpringBoot 和 Vue 的图书购物商城系统。系统主要实现了用户注册、登录&#xff0c;图书浏览、查询、加购&#xff0c;购物车管理&#xff0c;订单结算&#xff0c;会员折扣&#xff0c;下单&#xff0c;个人订单管理&#xff0c;书籍及分类管理&#xff0c;用…