数字签名-原理

article/2025/9/18 18:34:10

数字签名

  • 1. 从消息认证到数字签名
    • 1.1. 消息认证码的局限性
    • 1.2. 通过数字签名解决问题
  • 2. 签名的生成和验证
  • 3. 数字签名的方法
    • 3.1 签名步骤
    • 3.2 过程图解
  • 4. 数字签名无法解决的问题

“数字签名 — 消息到底是谁写的”

    数字签名是一种将相当于现实世界中的盖章、签字的功能在计算机世界中进行实现的技术。使用数字签名可以识别篡改和伪装,还可以防止否认。

1. 从消息认证到数字签名

1.1. 消息认证码的局限性

    通过上篇中介绍的消息认证码,可以识别消息是否被篡改或者发送者身份是否被伪装,也就是可以校验消息的完整性,还可以对消息进行认证。然而,比如在出具借条的场景中却无法使用消息认证码,因为消息认证码无法防止否认。
    消息认证码之所以无法防止否认,是因为消息认证码需要在发送者Alice和接收者Bob两者之间共享同一个密钥。正是因为密钥是共享的,所以能够使用消息认证码计算出正确MAC值的并不只有发送者Alice,接收者Bob也可以计算出正确的MAC值。由于Alice和Bob双方都能够计算出正确的MAC值,因此对于第三方来说,我们无法证明这条消息的确是由Alice生成的。

1.2. 通过数字签名解决问题

    假设Alice使用的密钥是一个只有Alice自己才知道的私钥。当Alice发送消息时,她用私钥生成一个“签名"。相对地,接收者Bob则使用一个和Alice不同的密钥对签名进行验证。使用Bob的密钥无法根据消息生成签名,但是用Bob的密钥却可以对Alice所计算的签名进行验证,也就是说可以知道这个签名是否是通过Alice的密钥计算出来的。如果真有这么一种方法的话,那么不管是识别篡改、伪装还是防止否认就都可以实现了吧 ?
    实际上,这种看似很神奇的技术早就已经问世了,这就是数字签名(digital signat.ure)。

2. 签名的生成和验证

来稍微整理一下。
在数字签名技术中,出现了下面两种行为:

  • 生成消息签名的行为
  • 验证消息签名的行为

    生成消息签名这一行为是由消息的发送者Alice来完成的,也称为“对消息签名”。生成签名就是根据消息内容计算数字签名的值,这个行为意味着 “我认可该消息的内容"。

    验证数字签名这一行为一般是由消息的接收者Bob来完成的,但也可以由需要验证消息的第三方来完成,这里的第三方我们暂且将其命名为验证者Victor。验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可以是成功或者失败,成功就意味着这个签名是属于Alice的,失败则意味着这个签名不是属于Alice的。

    在数字签名中,生成签名和验证签名这两个行为需要使用各自专用的密钥来完成。

    Alice使用“签名密钥"来生成消息的签名,而Bob和Victor则使用“验证密钥"来验证消息的签名。数字签名对签名密钥和验证密钥进行了区分,使用验证密钥是无法生成签名的。这一点非常重要。此外,签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。

    上述的这部分内容,是不是觉得似曾相识呢?

    没错,这就是我们讲过的非对称加密。公钥密码和上面讲的数字签名的结构非常相似。在非对称加密中,密钥分为加密密钥和解密密钥,用加密密钥无法进行解密。此外,解密密钥只能由需要解密的人持有,而加密密钥则是任何需要加密的人都可以持有。你看,数字签名和非对称加密是不是很像呢?

    实际上,数字签名和非对称加密有着非常紧密的联系,简而言之,数字签名就是通过将非对称加密 “反过来用” 而实现的。下面我们来将密钥的使用方式总结成一张表:

私钥公钥
非对称加密接收者解密时使用发送者加密时使用
数字签名签名者生成签名时使用验证者验证签名时使用
谁持有秘钥?个人持有只要需要,任何人都可以持有

3. 数字签名的方法

    如何签名?

  • 直接对消息签名的方法
  • 对消息的散列值签名的方法

    直接对消息签名的方法比较容易理解,但实际上并不会使用;对消息的散列值签名的方法稍微复杂一点,但实际中一般都使用这种方法。
    使用直接对消息签名的方法,需要对整个消息进行加密,非常耗时,这是因为非对称加密算法本来就非常慢。那么,我们能不能生成一条很短的数据来代替消息本身呢?这就是单向散列函数。
    于是我们不必再对整个消息进行加密(即对消息签名),而是只要先用单向散列函数求出消息的散列值,然后再将散列值进行加密(对散列值签名)就可以了。无论消息有多长,散列值永远都是这么短,因此对其进行加密(签名)是非常轻松的。

3.1 签名步骤

  1. Alice用单向散列函数计算消息的散列值。

  2. Alice用自己的私钥对散列值进行加密。
        用私钥加密散列值所得到的密文就是Alice对这条散列值的签名,由于只有Alice才持有自己的私钥因此除了Alice以外,其他人是无法生成相同的签名(密文)的。

  3. Alice将消息和签名发送给Bob。

  4. Bob用Alice的公钥对收到的签名进行解密
        如果收到的签名确实是用Alice的私钥进行加密而得到的密文(签名),那么用Alice的公钥应该能够正确解密,解密的结果应该等于消息的散列值。如果收到的签名不是用Alice的私钥进行加密而得到的密文,那么就无法用Alice的公钥正确解密(解密后得到的数据看起来是随机的)。

  5. Bob将签名解密后得到的散列值与Alice直接发送的消息的散列值进行对比。
        如果两者一致,则签名验证成功;如果两者不一致,则签名验证失败。
    我们将数字签名中生成签名和验证签名的过程整理成一张时间流程图 。

3.2 过程图解

  • Alice对消息的在这里插入图片描述散列值签名, Bob验证签名
    在这里插入图片描述

  • Alice对消息的散列值签名, Bob验证签名(按时间顺序)

在这里插入图片描述

4. 数字签名无法解决的问题

    用数字签名既可以识别出篡改和伪装,还可以防止否认。也就是说,我们同时实现了确认消息的完整性、进行认证以及否认防止。现代社会中的计算机通信从这一技术中获益匪浅。

    然而,要正确使用数字签名,有一个大前提,那是用于验证签名的公钥必须属于真正的发送者。即便数字签名算法再强大,如果你得到的公钥是伪造的,那么数字签名也会完全失效。

    现在我们发现自己陷人了一个死循环一一一数字签名是用来识别消息篡改、伪装以及否认的,但是为此我们又必须从没有被伪装的发送者得到没有被篡改的公钥才行。

    为了能够确认自己得到的公钥是否合法,我们需要使用证书。所谓证书,就是将公钥当作一条消息,由一个可信的第三方对其签名后所得到的公钥。

    当然,这样的方法只是把问题转移了而已。为了对证书上施加的数字签名进行验证,我们必定需要另一个公钥,那么如何才能构筑一个可信的数字签名链条呢?又由谁来颁发可信的证书呢?到这一步,我们就已经踏人了社会学的领域。我们需要让公钥以及数字签名技术成为一种社会性的基础设施,即公钥基础设施(Public Key Intrastructure),简称PKIO关于证书和PKI下篇继续。


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

相关文章

什么是数字签名?

数字签名 数字签名 数字签名一、介绍二、功能三、流程四、数字证书 一、介绍 数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名通…

一文彻底搞懂加密、数字签名和数字证书,看不懂你打我!

前言 这本是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视频。 在一旁玩手机的女朋友突然问”你知道数字证书是来干啥的不,为啥浏览器提示证书不可信?” 你要说这个,那我可来劲了&#xff0c…

cisco 路由器 无线配置

配置环境:Cisco Packet Tracer 6.0 AP设备型号:1841 PC设备:Linksys-WPC300N模块的虚拟pc 第一步:配置接口ip R3(config)#interface Dot11Radio0/1/0 R3(config-if)#ip address 172.16.10.1 255.255.255.0 第二步:配置…

实验一 CISCO路由器的基本配置

要求: 1. 初始化配置; 2. 设置接口IP地址; ( F0/0 S1/0 ) 3. 测试; ( ping 、 telnet ) 4. 设置密码; ( console口、VTY接口和特权 ) 5. 查看。 &…

CISCO路由器基础配置和静态路由配置

学习Cisco的基础网络配置下载可以用Cisco公司开发的模拟器:Cisco packet tracer。本文的配置也都是用此模拟器配置的。 路由器 路由器的功能主要有以下几点: 1.实现网络互连,路由器支持各种局域网和广域网接口,主要用于互连局域…

cisco交换机配置方法

PS: 1.如代码能缩写尽量缩写节省时间 命令唯一才可以使用缩写方式 比如:config terminal 缩写为 conf t 即可 2.查看配置信息,只能在特权模式下查看 3.如果代码只记得前几位,直接按tab键补全,或者?查找一下 4…

一、思科路由器的基本配置

实验项目:路由器的基本配置 实验器材:Router2621XM一台、PC两台、交叉线两根。 实验目的:学习思科路由器的直连路由配置。 实验拓扑: 实验步骤: PC的配置 1.PC0配置IP、网关 IP:192.168.6.2 网关&am…

Cisco路由器配置命令

伟人对我毫无意义,我只欣赏自己理想中的明星。——尼采《善恶的彼岸》 Cisco工作模式 思科的工作模式有四种 用户模式:这一级别权限很低,只能查看路由器的基本状态,无法进行设置。 一般是Router> 特权模式:这一…

Cisco 路由器SSH配置

SSH1又分为1.3和 1.5两个版本。SSH1采用DES、3DES、Blowfish和RC4等对称加密算法保护数据安全传输,而对称加密算法的密钥是通过非对称加密算法(RSA)来完成交换的。SSH1使用循环冗余校验码(CRC)来保证数据的完整性&…

Cisco 路由器配置管理

大多数网络中断的最常见原因是错误的配置更改。对网络设备配置的每一次更改都伴随着造成网络中断、安全问题甚至性能下降的风险。计划外更改使网络容易受到意外中断的影响。 Network Configuration Manager 网络更改和配置管理 (NCCM)解决方案&#xff…

CISCO路由基本配置命令

进入EXEC特权模式:enable 进入全局配置模式:config terminal (confTab键回车回车) 修改设备名称:hostname (设备名) 禁用DNS查找:no ip domain-lookup 特权模式加密密码:enable secret (密码…

CISCO路由器基础配置及配置静态路由

学习Cisco的基础网络配置下载可以用Cisco公司开发的模拟器:Cisco packet tracer。本文的配置也都是用此模拟器配置的。 路由器 路由器的功能主要有以下几点: 1.实现网络互连,路由器支持各种局域网和广域网接口,主要用于互连局域…

Cisco(思科)路由器端口的配置

Cisco(思科)路由器端口的配置 小编都是喜欢借助实验写博客 一、拓扑图 结合图可以知道我们一共有四个网段(四个vlan) 1.vlan 1 ip:192.168.1.0网段 自带的vlan不需要在交换机添加的 2.vlan 2 ip:192.168.…

路由交换实验一——CISCO路由器的基本配置

CISCO路由器的基本配置 实验要求开始实验1.初始化配置:2.搭建网络:3.测试网络:4.配置密码:5.查看信息: 实验要求 初始化相关配置;设置接口IP地址; ( F0/0 S1/0 )测试&…

路由器的基本配置(Cisco Packet Tracer )

路由器的基本配置 1.路由器的基本命令 2.路由器的常用查询命令 3.直连路由和静态路由 ​ 直接连到路由器接口的子网被称为直连网络(Directly-Connected Network)。当接口开始工作并配置了IP地址和子网掩码时,路由器自动地将它们的路由加入路由表,被称为直连路由(Directly-Con…

Cisco Packet Tracer路由器的基本配置

要求:通过计算机访问路由器并对其简单的设置包括,路由器名称、端口IP、特权密码、远程登录设置、路由器的模块添加和使用。 设备和条件: 2811路由器一台、Console配置线一根、网线若干、PC机两台 步骤: 1.构建网络拓扑,并分配IP地…

MATLAB神经网络工具箱的使用——Neural Net Fitting app

一、欢迎界面 二、输入输出数据选择 三、数据集分类 四、神经网络结构设置 五、神经网络训练函数选择及训练 其中,训练算法有LM算法、贝叶斯正则化法、量化共轭梯度法。 六、神经网络调整 七、产生神经网络应用函数与simulink块 八、产生神经网络示例代码及结果保存…

卷积神经网络工具PlotNeuralNet在Windows安装并使用

目录 一、安装Git二、安装MikTex三、复制PlotNeuralNet源代码四、使用PlotNeuralNet1.编写python脚本Unet.py2.执行程序Unet.py3.使用Git Bash 一、安装Git Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torva…

如何利用matlab做BP神经网络分析(利用matlab神经网络工具箱)

最近一段时间在研究如何利用预测其销量个数,在网上搜索了一下,发现了很多模型来预测,比如利用回归模型、时间序列模型,GM(1,1)模型,可是自己在结合实际的工作内容,发现这几种模型预测…

数学建模学习(79):Matlab神经网络工具箱使用,实现多输入多输出预测

最近遇到一个比赛题,要做一个预测,而且还是多输出多输出。开始我选择了一个多输入多输出预测算法进行实现。为了拓展,这里再使用神经网络来实现一下。 文章目录 一、问题描述二、案例实现2.1 读取2.2 训练评估2.3 预测一、问题描述 这个是我们的训练集,文件名为:data3.x…