信息安全——数字签名

news2025/2/22 12:45:17

一、数字签名背景

        假定A发送一条包含认证码的消息给B,他们之间仍然可能存在争议,例如A可以否认发过该消息,B无法证明A确实发了该消息。另外B也可以伪造一个不同的消息,但声称是从A收到的。也就是说,虽然保证了信息的完整性,但无法保证信息的抗否认性。

        在现实生活中,这种情况同样存在,所以在人们的工作和生活中,许多事物的处理需要当事者签名。例如,商业合同、政府部门的文件、财务的凭证等都需要当事人的签名。签名起到确认、核准、生效和负责等多种作用。

        实际上,签名是证明当事者身份和数据真实性的一种信息,具有保证信息的真实性和完整性的功能。在传统的以书面文件为基础的事务处理中,采用书面签名的方式,如手印、签字、印章等。书面签名得到司法部门的支持和承认,具有一定的法律效力。

        在以计算机文件为基础的现代事务处理中,应采用电子形式的签名,即数字签名(digitalsignature),它是一种防止源点或终点抵赖的鉴别技术,用于防范通信双方的欺骗。

        数字签名利用公钥密码体制进行,其安全性取决于密码体制的安全程度。

        在中国,数字签名是具法律效力的,正在被普遍使用。2000 年,中华人民共和国的新《合同法》首次确认了电子合同、电子签名的法律效力。2005 年4月1日起,中国首部《电子签名法》正式实施。

二、数字签名原理

2.1、数字签名须满足的要求

        在传统文件中,手写签名长期以来被用做用户身份的证明,或表明签名者同意文件的内容。实际上,签名体现了以下几个方面的保证:

  • (1)签名是可信的。签名使文件的接收者相信签名者是慎重地在文件上签名的。
  • (2)签名是不可伪造的。签名证明是签字者而不是其他的人在文件上签字。
  • (3)签名不可重用。签名是文件的一部分,不可能将签名移动到不同的文件上。
  • (4)签名后的文件是不可变的。在文件签名以后,文件就不能改变。
  • (5)签名是不可抵赖的。签名和文件是不可分离的,签名者事后不能声称他没有签过这个文件。

        手印、签名、印章等传统的书面签名基本上满足以上条件,所以得到司法部门的支持。因为一个人不能彻底伪装自己的笔迹,同时也不能逼真地模仿其他人的笔迹,而且公安部门有专业的机构进行笔迹鉴别。公章的刻制和使用都受到法律的保护和限制,刻制完全相同的两枚印章是做不到的,因为雕刻属于金石艺术,每个雕刻师都有自己的艺术风格,和笔迹一样,要彻底伪装自己的风格和逼真模仿别人的风格是不可能的。人的指纹具有非常稳定的特性,终身不变,据专家计算,大约50亿人才会有一例相同的。

        而在计算机上进行数字签名并使这些保证能够继续有效则还存在一些问题。有人可能会考虑到将自己手写的签名扫描到计算机中,在需要签名的地方将其粘贴上去。这种方法实际是存在问题的。

        首先,计算机文件易于复制,即使某人的签名难以伪造,但是将有效的签名从一个文件剪辑和粘贴到另一个文件是很容易的。这就使这种签名失去了意义。

        其次,文件在签名后也易于修改,并且不会留下任何修改的痕迹。

        所以,简单扫描手写签名是不能满足要求的。目前,人们对数字签名的要求是:要保证能够验证作者及其签名的日期时间;必须能够认证签名时刻的内容;签名必须能够由第三方验证,以解决争议。

根据这些特征,为了方便使用,更进一步的要求如下:

  • (1)依赖性:签名的产生必须依赖于被签名的信息。
  • (2)唯一性:签名必须使用某些对发送者来说是唯一的信息,以防止双方的伪造与否认。
  • (3)可验性:必须相对容易识别和验证该数字签名。
  • (4)抗伪造:伪造该数字签名在计算上是不可行的,根据一个已有的数字签名构造消息是不可行的;对一个给定消息伪造数字签名是不可行的。
  • (5)可用性:在存储器中保存-一个数字签名副本是现实可行的。

        人们利用公钥密码体制产生数字签名。用户用自己的私钥对原始数据的散列值进行加密,所得的数据即为数字签名。信息接收者使用信息发送者的公钥对附在原始信息后的数字签名进行解密后获得散列值,并通过与自已收到的原始数据产生的散列值对照,便可确认原始信息是否被篡改。这样就保证了消息来源的真实性和数据传输的完整性。

        有几种公钥算法都能用做数字签名,这些公钥算法的特点是不仅用公钥加密的消息可以用私钥解密,而且反过来用私钥加密的消息也可以用公钥解密。

2.2、签名方法

        从协议上区分,数字签名可以分为直接数字签名方法和仲裁数字签名方法。

2.2.1、直接数字签名

        先来看直接数字签名方法,其基本协议非常简单:

  • (1) A用它的私钥对文件加密,从而对文件签名。
  • (2) A将签名后的文件传给B。
  • (3)B用A的公钥解密文件,如果能够顺利地解出明文,则表示签名验证成功。

        一方面,保证了文件在签名后不会被修改;另一方面,A不可否认自己对这份文件的义务和责任。

        在实际过程中,这种做法的效率太低了。假设A传送的文件非常庞大,那么对整份文

        件进行加密就太浪费时间和资源了。并且有时候文件内容并不需要保密,例如政府的公告等。所以,数字签名协议常常与散列函数一起使用。A并不对整个文件签名,而是只对文件的散列值签名。数字签名协议原理如图所示。

        在下面的协议中,散列函数和数字签名算法是事先协商好的:

  • (1)A产生文件的散列值。
  • (2)A用她的私钥对散列值加密,以此表示对文件的签名。
  • (3)A将文件和签名送给B。
  • (4)B用A发送的文件产生文件的散列值,同时用A的公钥对签名的散列值解密。如果签名的散列值与自己产生的散列值匹配,则签名是有效的。

        采用这种方式,既保证了信息的完整性,又保证了信息的抗否认性,如果还需要保证信息的保密性,则可以加入对称或者非对称的加密方式。

        由于两个不同的文件具有相同的160位散列值的概率为1/2^160 ,所以在这个协议中使用散列函数的签名与使用文件的签名是一样安全的。

        以上的协议属于直接数字签名,这种签名方法只牵涉通信方。它假定接收方知道发送方的公钥。签名通过使用发送方的私钥加密来产生。但这种体制有个共同的弱点:方案的有效性依赖于发送方私钥的安全性

        如果发送方随后想否认发送过某个签名消息,他可以声称用来签名的私钥丢失或被盗用,并有人伪造了他的签名。通常需要采用与私钥安全性相关的行政管理控制手段制止这种情况,但威胁依然存在。

        改进的方式:如可以要求被签名的信息包含一个时间戳(日期与时间)。但同样存在问题: A的私钥确实在时间T被窃取,敌手可以伪造A的签名及早于或等于时间T的时间戳

为了解决直接数字签名中存在的问题,引入了仲裁者。

2.2.2、仲裁数字签名(对称密钥签名)

        从发送方A到接收方B的签名消息首先送到仲裁者S,S对消息及其签名进行一系列测试,以检查其来源和内容,然后将消息加上日期并与已被仲裁者验证通过的指示一起发给B。

        仲裁者在这一类签名模式中扮演敏感和关键的角色。所有的参与者必须极大地相信这一仲裁机制工作正常。

        首先,在协议执行以前,各方都不必有共享的信息,从而可防止共谋;其次,只要仲裁者的私钥不被泄露,任何人包括发送方都不能发送重放的消息;最后,对任何第三方(包括A)来说,X发往Y的消息都是保密的。当然,功能越齐全,付出的通信成本也越高。

三、数字签名算法

        数字签名的算法很多,应用最为广泛的三种是RSA签名、DSS签名和基于ECC密码体制的ECDSA数字签名。

3.1、几种算法简介

  1. RSA(Rivest-Shamir-Adleman): RSA算法是一种非对称加密算法,既可以用于加密数据也可以用于生成数字签名。它基于大数分解的难题,具有较高的安全性,但计算量较大。
  2. DSA(Digital Signature Algorithm): DSA是一种基于离散对数问题的数字签名算法。它较RSA算法计算量更小,适用于资源受限的环境,但在密钥生成过程中需要更长的时间。
  3. ECDSA(Elliptic Curve Digital Signature Algorithm): ECDSA是一种基于椭圆曲线密码学的数字签名算法。与RSA和DSA相比,ECDSA在相同的安全性水平下使用更短的密钥长度,计算速度更快,适用于资源有限的环境。
  4. EdDSA(Edwards-curve Digital Signature Algorithm): EdDSA是一种基于扭曲爱德华曲线密码学的数字签名算法。它继承了ECDSA的优点,并在安全性、效率和实现简洁性上有所改进。

3.2、RSA数字签名

假定RSA的公钥密码系统已经建立,若用户A要对某报文(或其他文件或数据分组)实现数字签名,并发送给B(B可能是用户,也可能是仲裁中心),则数字签名算法如下:

3.2.1、签名的实现

用户A使用自己的私钥SK对报文进行解密运算形成了签名,然后将报文和签名一起发送出去。

不过一般使用的方式是对明文的散列值进行加密。

实际上是用私钥对明文或者散列值进行解密运算的过程。注意,这里说的“解密运算”,并不是指将密文转换为明文的过程,而应该理解为一种广义的转换运算。

3.2.2、签名的验证

接收方B将接收到的签名用发送方A的公钥进行加密运算得到。同样,这里的“加密运算”也应该理解为一种广义的转换运算。如果是对散列值进行加密,用相同的散列函数处理接收到的报文得到新的散列码,若这个散列码和解密的签名相匹配,则认为签名是有效的,否则认为报文被篡改或受到攻击者欺骗。这是因为只有发送方知道自己的私钥,因此只有发送方才能产生有效的签名。

3.3、其他数字签名

另外还有一些其他特殊的签名:

3.3.1、不可否认签名

        对于不可否认签名,在得不到签名者配合的情况下其他人不能正确地对签名进行验证,从而可以防止非法复制和扩散签名者所签署的文件。这对保护软件等电子出版物的知识产权有积极意义。只有授权用户才能验证签名并得到软件开发者的服务,而非法复制者不能验证签名,从而无法获取服务。

3.3.2、盲签名

        需某个人对某数据签名,而又不能让他知道数据的内容。在无记名投票选举和数字化货币系统中往往需要这种盲签名,因此盲签名在电子商务和电子政务系统中有着广泛的应用前景。它和普通签名相比有两个特点,一个是签名者不知道所签署的数据内容,另一个是在签名被接收者泄露后,签名者不能追踪签名。

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

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

相关文章

WordPress(3)会员插件安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、服务器中上传插件二、使用步骤1.启动插件前言 提示:会员插件的安装不能在网站后台插件中心中直接安装原因我还没有排查 原因:会导致网站停止运行 一、服务器中上传插件 二、使用步骤 …

java遇到java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver该如何解决

普通的Java项目,利用servlet实现登录页面跳转出现下列问题。该如何解决??? 首先你要先加载驱动,idea通过项目结构添加的依赖包是无法正常加载驱动的。我们要在 WEB-INF目录下建立lib目录在lib目录下添加MySQL驱动。

如何利用人工智能实现软件测试的左移

在本文中,我们(作者)探讨了如何利用人工智能的力量,在软件测试领域实现左移。 用AI驱动的创新变革测试领域 测试在确保应用程序质量和可靠性方面发挥着至关重要的作用。然而,随着测试要求变得越来越复杂,人…

Linux 环境中通过 Docker 部署 Nacos 2.2.3 服务发现与配置中心

目录 环境准备Nacos 数据库创建Docker 部署 Nacos1. 创建挂载目录2. 下载镜像3. 创建和启动容器4. 访问控制台 导入 Nacos 配置SpringBoot 整合 Nacospom 依赖application.yml 配置 参考官方链接微服务商城源码 环境准备 名称版本IP端口Nacos2.2.3192.168.10.218848、9848MySQ…

大中型WMS仓储管理系统选型推荐,实现货品出入库精细化管理-亿发

智能制造是基于信息技术,通过将生产设备、工作流程、供应链等各个环节进行智能化互联,实现生产过程的优化和智能化管理的模式。它涵盖了数字化、网络化、智能化等多方面的科技,旨在增强生产效率、灵活度和质量。 WMS,即仓储管理系…

基于JAVA SpringBoot互联网就医门诊挂号管理系统

摘要 随着时代的发展,无线互联网技术的应用和普及给人们的生活带来了极大的改变,现在信息技术不仅可以提高我们的工作效率,还能有效的规避一些错误风险,节约人力成本。我国国民一方面对健康的要求越来越重视了,另一方面现代人的健康问题日益严重,所以医院…

【MySQL】4、MySQL备份与恢复

备份的主要目的是灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审计等 MySQL日志管理 MySQL 的日志默认保存位置为 /usr/local/mysql/data #配置文件 vim /etc/my.cnf 日志的分类 常见日志有: 错误日志,一般查询日志&…

Git 中的 HEAD

1、Git HEAD 存放位置 HEAD 指的就是 .git/HEAD 文件,它存储着当前分支的名字,我们可以打这个文件看一看: ref: refs/heads/master由此,我们可以得知当前所处于 master 分支。 如果我们继续往下走:打开 refs/heads/…

1. Spatial Intelligence of a Self-driving Car and Rule-Based Decision Making

主要内容 本文主要介绍了一些基于规则的方法,以实现自动驾驶规划技术在复杂车流中取得人类驾驶效果。因此此类场景更适合城市NOA。 当然本文在城市道路,封闭区域道路以及城际高速都适宜。主要技术点 (1)本文把自车周围车辆的决策…

Metrics Server部署

Metrics Server简介 Metrics Server 是 Kubernetes 集群核心监控数据的聚合器(定时从Kubelet的Summary API 采集指标信息),可以通过 Metrics API 的形式获取 Metrics 数据,不过仅仅是获取指标的最新值,数据不做存储&a…

让快更快,火山引擎ByteHouse为ClickHouse提速

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,火山引擎数智平台VeDI与DataFun联合举办以“OLAP计算引擎”为主题的直播活动,来自火山引擎数智平台VeDI的产品专家从技术选型、能力分析…

WhatsApp 新功能|拆解WhatsApp隐藏功能

图片来源:SaleSmartly官网 随着 WhatsApp Business 出现,不少企业更透过群发讯息(Broadcast List)主动联络顾客,可见无论是私人事务,还是生意来往,日常生活都离不开 WhatsApp。 WhatsApp 社群功…

电子书分享教程分享

之前一篇文章中有教程分享,但是百度网盘普遍不太好使,所以新开一篇,分享使用阿里网盘。 阿里云盘分享https://www.aliyundrive.com/s/vd4Lh1rZ6rt 阿里云盘分享https://www.aliyundrive.com/s/vMkcpJDVxCV 阿里云盘分享https://www.aliyundri…

从零构建深度学习推理框架-11 Resnet

op和layer结构 在runtime_ir.cpp中,我们上一节只构建了input和output,对于中间layer的具体实现一直没有完成: for (const auto& kOperator : this->operators_) {if (kOperator->type "pnnx.Input") {this->input_o…

Django-跨域

一、基础概念 cors 跨域资源共享 二、跨域请求-简单请求 满足以下全部条件的请求为 简单请求 1.请求方法如下: GET or HEAR or POS 2.请求头仅包含如下: Accept、Accept-Language、Content-Language、Content-Type 3.ConTent-Type 仅支持如下三种&…

数据结构1 -- leetcode练习

三. 练习 3.1 时间复杂度 用函数 f ( n ) f(n) f(n) 表示算法效率与数据规模的关系,假设每次解决问题需要 1 微秒( 1 0 − 6 10^{-6} 10−6 秒),进行估算: 如果 f ( n ) n 2 f(n) n^2 f(n)n2 那么 1 秒能解决多…

基于Echarts的大数据可视化模板:大数据医疗服务平台

目录 引言大数据在医疗领域的应用ECharts在医疗服务中的作用医疗大数据的应用方向临床决策支持药物研发与安全性监测健康管理与预防流行病监测与公共卫生基因组学与个性化医疗医疗保险与费用管理Echarts与大数据可视化Echarts库以及其在大数据可视化领域的应用优势开发过程和所…

jwt安全问题

文章目录 jwt安全问题jwt简介jwt组成headerpayloadsignature 潜在漏洞空加密算法web346 密钥爆破web348 敏感信息泄露web349 **修改算法RS256为HS256**web350 jwt安全问题 jwt简介 JWT的全称是Json Web Token,遵循JSON格式,跨域认证解决方案&#xff0…

C语言练习题解析:挑战与突破,开启编程新篇章!(2)

💓博客主页:江池俊的博客⏩收录专栏:C语言刷题专栏👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…

42、springboot 的 路径匹配 和 内容协商

springboot 的 路径匹配 和 内容协商 对于路径匹配,自己的总结就是: 以前路径匹配时默认不检查后缀,http://localhost:8080/aaa.json 可以直接访问到 RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。 内容协商的理解总结&…